diff --git a/.gitignore b/.gitignore index 7051eaa..e19627e 100644 --- a/.gitignore +++ b/.gitignore @@ -55,7 +55,6 @@ SourceArt/**/*.tga # Binary Files Binaries -Plugins/**/Binaries/* # Builds Build/** diff --git a/Config/DefaultEditor.ini b/Config/DefaultEditor.ini index 8768dd0..2079f7b 100644 --- a/Config/DefaultEditor.ini +++ b/Config/DefaultEditor.ini @@ -38,5 +38,5 @@ Version=1 +EngineTargetsSettings=(Name="Keywords",Guid=AE89AECB47475F420D0D69A5547515DC,TargetDependencies=(33482D004789784C9DA695A682ACCA1B,AC8BFD2A41A2FB2893BB8EA0AF903E6D),AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini")),ShouldGatherFromEditorOnlyData=False),GatherFromPackages=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),Collections=,ExcludeClasses=,ShouldExcludeDerivedClasses=False,ShouldGatherFromEditorOnlyData=True,SkipGatherCache=False),GatherFromMetaData=(IsEnabled=True,IncludePathWildcards=((Pattern="Source/Editor/*"),(Pattern="Source/Runtime/*"),(Pattern="Source/Developer/*")),ExcludePathWildcards=((Pattern="Source/Developer/NoRedist/CommunityPortalServices/*")),KeySpecifications=((MetaDataKey=(Name="Keywords"),TextNamespace="UObjectKeywords",TextKeyPattern=(Pattern="{FieldPath}"))),ShouldGatherFromEditorOnlyData=True),ExportSettings=(CollapseMode=IdenticalTextIdAndSource,ShouldPersistCommentsOnExport=False,ShouldAddSourceLocationsAsComments=True),CompileSettings=(SkipSourceCheck=False,ValidateFormatPatterns=True,ValidateSafeWhitespace=False),ImportDialogueSettings=(RawAudioPath=(Path=""),ImportedDialogueFolder="ImportedDialogue",bImportNativeAsSource=False),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) +EngineTargetsSettings=(Name="Category",Guid=14B8DEE642A6A7AFEB5A28B959EC373A,TargetDependencies=,AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini")),ShouldGatherFromEditorOnlyData=False),GatherFromPackages=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),Collections=,ExcludeClasses=,ShouldExcludeDerivedClasses=False,ShouldGatherFromEditorOnlyData=False,SkipGatherCache=False),GatherFromMetaData=(IsEnabled=True,IncludePathWildcards=((Pattern="Source/Editor/*"),(Pattern="Source/Runtime/*"),(Pattern="Source/Developer/*")),ExcludePathWildcards=((Pattern="Source/Developer/NoRedist/CommunityPortalServices/*")),KeySpecifications=((MetaDataKey=(Name="Category"),TextNamespace="UObjectCategory",TextKeyPattern=(Pattern="{FieldPath}"))),ShouldGatherFromEditorOnlyData=True),ExportSettings=(CollapseMode=IdenticalTextIdAndSource,ShouldPersistCommentsOnExport=False,ShouldAddSourceLocationsAsComments=True),CompileSettings=(SkipSourceCheck=False,ValidateFormatPatterns=True,ValidateSafeWhitespace=False),ImportDialogueSettings=(RawAudioPath=(Path=""),ImportedDialogueFolder="ImportedDialogue",bImportNativeAsSource=False),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="es"),(CultureName="ja"),(CultureName="ko"),(CultureName="pt-BR"),(CultureName="zh-CN"))) -GameTargetsSettings=(Name="Game",Guid=AE0EA34A45461A25BA65A391026F19F8,TargetDependencies=(33482D004789784C9DA695A682ACCA1B,AC8BFD2A41A2FB2893BB8EA0AF903E6D),AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini"))),GatherFromPackages=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),ShouldGatherFromEditorOnlyData=False),GatherFromMetaData=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,KeySpecifications=,ShouldGatherFromEditorOnlyData=False),NativeCultureIndex=-1,SupportedCulturesStatistics=((CultureName="en"))) -+GameTargetsSettings=(Name="Game",Guid=AE0EA34A45461A25BA65A391026F19F8,TargetDependencies=(33482D004789784C9DA695A682ACCA1B,AC8BFD2A41A2FB2893BB8EA0AF903E6D),AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini")),ShouldGatherFromEditorOnlyData=False),GatherFromPackages=(IsEnabled=True,IncludePathWildcards=((PathRoot=Project,Pattern="*")),ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),Collections=,ExcludeClasses=,ShouldExcludeDerivedClasses=False,ShouldGatherFromEditorOnlyData=False,SkipGatherCache=False),GatherFromMetaData=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,KeySpecifications=,ShouldGatherFromEditorOnlyData=False),ExportSettings=(CollapseMode=IdenticalTextIdAndSource,ShouldPersistCommentsOnExport=False,ShouldAddSourceLocationsAsComments=True),CompileSettings=(SkipSourceCheck=False,ValidateFormatPatterns=True,ValidateSafeWhitespace=False),ImportDialogueSettings=(RawAudioPath=(Path=""),ImportedDialogueFolder="ImportedDialogue",bImportNativeAsSource=False),NativeCultureIndex=1,SupportedCulturesStatistics=((CultureName="en"),(CultureName="ar"))) ++GameTargetsSettings=(Name="Game",Guid=AE0EA34A45461A25BA65A391026F19F8,TargetDependencies=(33482D004789784C9DA695A682ACCA1B,AC8BFD2A41A2FB2893BB8EA0AF903E6D),AdditionalManifestDependencies=,RequiredModuleNames=,GatherFromTextFiles=(IsEnabled=False,SearchDirectories=,ExcludePathWildcards=,FileExtensions=((Pattern="h"),(Pattern="cpp"),(Pattern="ini")),ShouldGatherFromEditorOnlyData=False),GatherFromPackages=(IsEnabled=True,IncludePathWildcards=((PathRoot=Project,Pattern="Content/*")),ExcludePathWildcards=,FileExtensions=((Pattern="umap"),(Pattern="uasset")),Collections=,ExcludeClasses=,ShouldExcludeDerivedClasses=False,ShouldGatherFromEditorOnlyData=False,SkipGatherCache=False),GatherFromMetaData=(IsEnabled=False,IncludePathWildcards=,ExcludePathWildcards=,KeySpecifications=,ShouldGatherFromEditorOnlyData=False),ExportSettings=(CollapseMode=IdenticalTextIdAndSource,ShouldPersistCommentsOnExport=False,ShouldAddSourceLocationsAsComments=True),CompileSettings=(SkipSourceCheck=False,ValidateFormatPatterns=True,ValidateSafeWhitespace=False),ImportDialogueSettings=(RawAudioPath=(Path=""),ImportedDialogueFolder="ImportedDialogue",bImportNativeAsSource=False),NativeCultureIndex=0,SupportedCulturesStatistics=((CultureName="en"),(CultureName="ar"))) diff --git a/Config/Localization/Game_Compile.ini b/Config/Localization/Game_Compile.ini index 6ea7edf..b32425e 100644 --- a/Config/Localization/Game_Compile.ini +++ b/Config/Localization/Game_Compile.ini @@ -7,7 +7,7 @@ ResourceName=Game.locres bSkipSourceCheck=false bValidateFormatPatterns=true bValidateSafeWhitespace=false -NativeCulture=ar +NativeCulture=en CulturesToGenerate=en CulturesToGenerate=ar diff --git a/Config/Localization/Game_Export.ini b/Config/Localization/Game_Export.ini index a7eb03a..e55a717 100644 --- a/Config/Localization/Game_Export.ini +++ b/Config/Localization/Game_Export.ini @@ -1,7 +1,7 @@ [CommonSettings] SourcePath=Content/Localization/Game DestinationPath=Content/Localization/Game -NativeCulture=ar +NativeCulture=en CulturesToGenerate=en CulturesToGenerate=ar ManifestName=Game.manifest diff --git a/Config/Localization/Game_ExportDialogueScript.ini b/Config/Localization/Game_ExportDialogueScript.ini index 08f865a..d8ba8af 100644 --- a/Config/Localization/Game_ExportDialogueScript.ini +++ b/Config/Localization/Game_ExportDialogueScript.ini @@ -1,7 +1,7 @@ [CommonSettings] SourcePath=Content/Localization/Game DestinationPath=Content/Localization/Game -NativeCulture=ar +NativeCulture=en CulturesToGenerate=en CulturesToGenerate=ar ManifestName=Game.manifest diff --git a/Config/Localization/Game_Gather.ini b/Config/Localization/Game_Gather.ini index a2d8807..05aa74c 100644 --- a/Config/Localization/Game_Gather.ini +++ b/Config/Localization/Game_Gather.ini @@ -1,17 +1,17 @@ [CommonSettings] -ManifestDependencies=../../UE4/UE_4.25/Engine/Content/Localization/Engine/Engine.manifest -ManifestDependencies=../../UE4/UE_4.25/Engine/Content/Localization/Editor/Editor.manifest +ManifestDependencies=../../Engines/UE_4.25/Engine/Content/Localization/Engine/Engine.manifest +ManifestDependencies=../../Engines/UE_4.25/Engine/Content/Localization/Editor/Editor.manifest SourcePath=Content/Localization/Game DestinationPath=Content/Localization/Game ManifestName=Game.manifest ArchiveName=Game.archive -NativeCulture=ar +NativeCulture=en CulturesToGenerate=en CulturesToGenerate=ar [GatherTextStep0] CommandletClass=GatherTextFromAssets -IncludePathFilters=%LOCPROJECTROOT%* +IncludePathFilters=%LOCPROJECTROOT%Content/* ExcludePathFilters=Content/Localization/* PackageFileNameFilters=*.umap PackageFileNameFilters=*.uasset diff --git a/Config/Localization/Game_Import.ini b/Config/Localization/Game_Import.ini index 8545eb1..452f257 100644 --- a/Config/Localization/Game_Import.ini +++ b/Config/Localization/Game_Import.ini @@ -1,7 +1,7 @@ [CommonSettings] SourcePath=Content/Localization/Game DestinationPath=Content/Localization/Game -NativeCulture=ar +NativeCulture=en CulturesToGenerate=en CulturesToGenerate=ar ManifestName=Game.manifest diff --git a/Config/Localization/Game_ImportDialogue.ini b/Config/Localization/Game_ImportDialogue.ini index c625382..5cdf07e 100644 --- a/Config/Localization/Game_ImportDialogue.ini +++ b/Config/Localization/Game_ImportDialogue.ini @@ -2,7 +2,7 @@ SourcePath=Content/Localization/Game ManifestName=Game.manifest ArchiveName=Game.archive -NativeCulture=ar +NativeCulture=en CulturesToGenerate=en CulturesToGenerate=ar diff --git a/Config/Localization/Game_ImportDialogueScript.ini b/Config/Localization/Game_ImportDialogueScript.ini index 290ecd4..788f99b 100644 --- a/Config/Localization/Game_ImportDialogueScript.ini +++ b/Config/Localization/Game_ImportDialogueScript.ini @@ -1,7 +1,7 @@ [CommonSettings] SourcePath=Content/Localization/Game DestinationPath=Content/Localization/Game -NativeCulture=ar +NativeCulture=en CulturesToGenerate=en CulturesToGenerate=ar ManifestName=Game.manifest diff --git a/Content/Floors/GroundF/GroundFloorCap.uasset b/Content/Floors/GroundF/GroundFloorCap.uasset index 7c0710f..4656d19 100644 Binary files a/Content/Floors/GroundF/GroundFloorCap.uasset and b/Content/Floors/GroundF/GroundFloorCap.uasset differ diff --git a/Content/JSONS/cats.json b/Content/JSONS/cats.json index 08cf83c..721667a 100644 --- a/Content/JSONS/cats.json +++ b/Content/JSONS/cats.json @@ -1 +1 @@ -[{"id":1002,"name":"Reception","editable":false,"quickSearch":true},{"id":1003,"name":"Pharmacy","editable":false,"quickSearch":true},{"id":1004,"name":"Common area","editable":false,"quickSearch":true},{"id":1005,"name":"Prayer Room","editable":false,"quickSearch":true},{"id":1006,"name":"Catering","editable":false,"quickSearch":true},{"id":1007,"name":"Shops","editable":false,"quickSearch":true},{"id":1008,"name":"Toilets","editable":false,"quickSearch":true},{"id":1009,"name":"Patient rooms","editable":false,"quickSearch":true},{"id":1010,"name":"Medical rooms","editable":false,"quickSearch":true},{"id":1011,"name":"Staff rooms","editable":false,"quickSearch":true},{"id":1012,"name":"Tech rooms","editable":false,"quickSearch":true},{"id":1013,"name":"Utility rooms","editable":false,"quickSearch":true},{"id":1014,"name":"VIP rooms","editable":false,"quickSearch":true},{"id":1025,"name":"External buildings","editable":false,"quickSearch":true},{"id":100000,"name":"Elev. lobby","editable":false,"quickSearch":true},{"id":100001,"name":"Doctor on call","editable":false,"quickSearch":false},{"id":100002,"name":"Nurse station","editable":false,"quickSearch":false},{"id":100003,"name":"Lab","editable":false,"quickSearch":false},{"id":100004,"name":"Corridor","editable":false,"quickSearch":false},{"id":100005,"name":"Pantry","editable":false,"quickSearch":false},{"id":100006,"name":"Waiting area","editable":false,"quickSearch":true},{"id":100007,"name":"Store","editable":false,"quickSearch":false},{"id":100008,"name":"Anaesthetic room","editable":false,"quickSearch":false},{"id":100009,"name":"Dialysis room","editable":false,"quickSearch":false},{"id":100010,"name":"Treatment room","editable":false,"quickSearch":false},{"id":100011,"name":"Isolation room","editable":false,"quickSearch":false},{"id":100012,"name":"Vip suite","editable":false,"quickSearch":false},{"id":100013,"name":"Lobby","editable":false,"quickSearch":false},{"id":100014,"name":"Dinning area","editable":false,"quickSearch":true},{"id":100015,"name":"MRI room","editable":false,"quickSearch":false},{"id":100016,"name":"Chest pain unit","editable":false,"quickSearch":false},{"id":100017,"name":"Exam room","editable":false,"quickSearch":false},{"id":100018,"name":"Records room","editable":false,"quickSearch":false},{"id":100019,"name":"CT scan room","editable":false,"quickSearch":false},{"id":100020,"name":"Xray room","editable":false,"quickSearch":false},{"id":100021,"name":"Billing office","editable":false,"quickSearch":true},{"id":100022,"name":"Seminar room","editable":false,"quickSearch":false},{"id":100023,"name":"Auditorioum room","editable":false,"quickSearch":true},{"id":100024,"name":"Lecture room","editable":false,"quickSearch":false},{"id":100025,"name":"Warehouse","editable":false,"quickSearch":false},{"id":100026,"name":"Electrical room","editable":false,"quickSearch":false},{"id":100027,"name":"Wheel chair storage room","editable":false,"quickSearch":true},{"id":100028,"name":"Rehab room","editable":false,"quickSearch":false},{"id":100029,"name":"CCTV room","editable":false,"quickSearch":false},{"id":100030,"name":"Bakery","editable":false,"quickSearch":false}] \ No newline at end of file +[{"id":1002,"name":"Reception","editable":false,"quickSearch":true},{"id":1003,"name":"Pharmacy","editable":false,"quickSearch":true},{"id":1004,"name":"Common area","editable":false,"quickSearch":true},{"id":1005,"name":"Prayer Room","editable":false,"quickSearch":true},{"id":1006,"name":"Catering","editable":false,"quickSearch":true},{"id":1007,"name":"Shops","editable":false,"quickSearch":true},{"id":1008,"name":"Toilets","editable":false,"quickSearch":true},{"id":1009,"name":"Patient rooms","editable":false,"quickSearch":true},{"id":1010,"name":"Medical rooms","editable":false,"quickSearch":true},{"id":1011,"name":"Staff rooms","editable":false,"quickSearch":true},{"id":1012,"name":"Tech rooms","editable":false,"quickSearch":true},{"id":1013,"name":"Utility rooms","editable":false,"quickSearch":true},{"id":1014,"name":"VIP rooms","editable":false,"quickSearch":true},{"id":1025,"name":"External buildings","editable":false,"quickSearch":true},{"id":1035,"name":"1234","editable":true,"quickSearch":false},{"id":100000,"name":"Elev. lobby","editable":false,"quickSearch":true},{"id":100001,"name":"Doctor on call","editable":false,"quickSearch":false},{"id":100002,"name":"Nurse station","editable":false,"quickSearch":false},{"id":100003,"name":"Lab","editable":false,"quickSearch":false},{"id":100004,"name":"Corridor","editable":false,"quickSearch":false},{"id":100005,"name":"Pantry","editable":false,"quickSearch":false},{"id":100006,"name":"Waiting area","editable":false,"quickSearch":true},{"id":100007,"name":"Store","editable":false,"quickSearch":false},{"id":100008,"name":"Anaesthetic room","editable":false,"quickSearch":false},{"id":100009,"name":"Dialysis room","editable":false,"quickSearch":false},{"id":100010,"name":"Treatment room","editable":false,"quickSearch":false},{"id":100011,"name":"Isolation room","editable":false,"quickSearch":false},{"id":100012,"name":"Vip suite","editable":false,"quickSearch":false},{"id":100013,"name":"Lobby","editable":false,"quickSearch":false},{"id":100014,"name":"Dinning area","editable":false,"quickSearch":true},{"id":100015,"name":"MRI room","editable":false,"quickSearch":false},{"id":100016,"name":"Chest pain unit","editable":false,"quickSearch":false},{"id":100017,"name":"Exam room","editable":false,"quickSearch":false},{"id":100018,"name":"Records room","editable":false,"quickSearch":false},{"id":100019,"name":"CT scan room","editable":false,"quickSearch":false},{"id":100020,"name":"Xray room","editable":false,"quickSearch":false},{"id":100021,"name":"Billing office","editable":false,"quickSearch":true},{"id":100022,"name":"Seminar room","editable":false,"quickSearch":false},{"id":100023,"name":"Auditorioum room","editable":false,"quickSearch":true},{"id":100024,"name":"Lecture room","editable":false,"quickSearch":false},{"id":100025,"name":"Warehouse","editable":false,"quickSearch":false},{"id":100026,"name":"Electrical room","editable":false,"quickSearch":false},{"id":100027,"name":"Wheel chair storage room","editable":false,"quickSearch":true},{"id":100028,"name":"Rehab room","editable":false,"quickSearch":false},{"id":100029,"name":"CCTV room","editable":false,"quickSearch":false},{"id":100030,"name":"Bakery","editable":false,"quickSearch":false}] \ No newline at end of file diff --git a/Content/JSONS/deps.json b/Content/JSONS/deps.json index f561454..0dc586f 100644 --- a/Content/JSONS/deps.json +++ b/Content/JSONS/deps.json @@ -1 +1 @@ -[{"id":1,"name":"GM1","reception":"G-1C37F","idHIS":"11111","idQMS":"qqqqq","qmsSOW":"http://localhost:1234"},{"id":2,"name":"deparment 2","reception":"G-1C10","idHIS":"22222","idQMS":"qqqqq","qmsSOW":"http://localhost:1234"},{"id":4,"name":"deparment 4","reception":"000003","idHIS":"44444","idQMS":"qqqqq","qmsSOW":"http://localhost:1234"},{"id":5,"name":"deparment 5","reception":"G-1C40","idHIS":"55555","idQMS":"qqqqq","qmsSOW":"http://localhost:1234"},{"id":1002,"name":"DIT","reception":"G-3A06","idHIS":"","idQMS":"","qmsSOW":""},{"id":1003,"name":"General Medicine","reception":"G-1C40","idHIS":"77777","idQMS":"1111","qmsSOW":""}] \ No newline at end of file +[{"id":1,"name":"GM1","reception":"G-1C37F","idHIS":"11111","idQMS":"qqqqq","qmsSOW":"http://localhost:1234"},{"id":2,"name":"deparment 2","reception":"G-1C10","idHIS":"22222","idQMS":"qqqqq","qmsSOW":"http://localhost:1234"},{"id":4,"name":"deparment 4","reception":"000003","idHIS":"44444","idQMS":"qqqqq","qmsSOW":"http://localhost:1234"},{"id":5,"name":"deparment 5","reception":"G-1C40","idHIS":"55555","idQMS":"qqqqq","qmsSOW":"http://localhost:1234"},{"id":1002,"name":"DIT","reception":"G-3A06","idHIS":"","idQMS":"","qmsSOW":""},{"id":1003,"name":"General Medicine","reception":"G-1C40","idHIS":"77777","idQMS":"1111","qmsSOW":""},{"id":1006,"name":"HR","reception":"000002","idHIS":"","idQMS":"","qmsSOW":""}] \ No newline at end of file diff --git a/Content/JSONS/ext.json b/Content/JSONS/ext.json index 85c0522..b2653b9 100644 Binary files a/Content/JSONS/ext.json and b/Content/JSONS/ext.json differ diff --git a/Content/JSONS/locations.json b/Content/JSONS/locations.json index 5d4ab58..3c1ee90 100644 Binary files a/Content/JSONS/locations.json and b/Content/JSONS/locations.json differ diff --git a/Content/Localization/Game/Game.csv b/Content/Localization/Game/Game.csv index 06fee41..bdf0d8e 100644 --- a/Content/Localization/Game/Game.csv +++ b/Content/Localization/Game/Game.csv @@ -1,2 +1,2 @@ Date/Time,Word Count,ar,en -2021.10.25-16.13.48,440,440,0 +2022.10.14-12.47.44,599,0,599 diff --git a/Content/Localization/Game/Game.manifest b/Content/Localization/Game/Game.manifest index ff340fc..3e6bc5c 100644 Binary files a/Content/Localization/Game/Game.manifest and b/Content/Localization/Game/Game.manifest differ diff --git a/Content/Localization/Game/ar/Game.archive b/Content/Localization/Game/ar/Game.archive index 0945462..4f58f29 100644 Binary files a/Content/Localization/Game/ar/Game.archive and b/Content/Localization/Game/ar/Game.archive differ diff --git a/Content/Localization/Game/en/Game.archive b/Content/Localization/Game/en/Game.archive index 15fcefc..f450ca3 100644 Binary files a/Content/Localization/Game/en/Game.archive and b/Content/Localization/Game/en/Game.archive differ diff --git a/Content/Maps/main.umap b/Content/Maps/main.umap index f601286..ab7fb5a 100644 Binary files a/Content/Maps/main.umap and b/Content/Maps/main.umap differ diff --git a/Content/VLCurl.txt b/Content/VLCurl.txt new file mode 100644 index 0000000..0e709e3 --- /dev/null +++ b/Content/VLCurl.txt @@ -0,0 +1 @@ +rtsp://127.0.0.1:8554/ \ No newline at end of file diff --git a/Content/Widgets/MainMenu.uasset b/Content/Widgets/MainMenu.uasset index 9f8cb12..5871c87 100644 Binary files a/Content/Widgets/MainMenu.uasset and b/Content/Widgets/MainMenu.uasset differ diff --git a/Content/Widgets/bottomPanel.uasset b/Content/Widgets/bottomPanel.uasset index 843416d..70dbb05 100644 Binary files a/Content/Widgets/bottomPanel.uasset and b/Content/Widgets/bottomPanel.uasset differ diff --git a/Content/Widgets/filter/Search.uasset b/Content/Widgets/filter/Search.uasset index 9a4f640..c0a92b6 100644 Binary files a/Content/Widgets/filter/Search.uasset and b/Content/Widgets/filter/Search.uasset differ diff --git a/Content/Widgets/floorSelectPanel.uasset b/Content/Widgets/floorSelectPanel.uasset index ede2ae5..a33d685 100644 Binary files a/Content/Widgets/floorSelectPanel.uasset and b/Content/Widgets/floorSelectPanel.uasset differ diff --git a/Content/blueprints/IPtv/http/http_StreamMediaSource.uasset b/Content/blueprints/IPtv/http/http_StreamMediaSource.uasset index c559b43..6c52b6b 100644 Binary files a/Content/blueprints/IPtv/http/http_StreamMediaSource.uasset and b/Content/blueprints/IPtv/http/http_StreamMediaSource.uasset differ diff --git a/Content/blueprints/NavBlocker.uasset b/Content/blueprints/NavBlocker.uasset index 435e88e..d6669ef 100644 Binary files a/Content/blueprints/NavBlocker.uasset and b/Content/blueprints/NavBlocker.uasset differ diff --git a/Content/blueprints/playerController/MKCCPlayerController.uasset b/Content/blueprints/playerController/MKCCPlayerController.uasset index 48a68c9..112ba1f 100644 Binary files a/Content/blueprints/playerController/MKCCPlayerController.uasset and b/Content/blueprints/playerController/MKCCPlayerController.uasset differ diff --git a/Content/blueprints/targets/Target.uasset b/Content/blueprints/targets/Target.uasset index f3e4dc3..f9b63fb 100644 Binary files a/Content/blueprints/targets/Target.uasset and b/Content/blueprints/targets/Target.uasset differ diff --git a/Plugins/QRCode-master/Binaries/Win64/UE4Editor-QRcode.dll b/Plugins/QRCode-master/Binaries/Win64/UE4Editor-QRcode.dll index 4c9302f..fda4b36 100644 Binary files a/Plugins/QRCode-master/Binaries/Win64/UE4Editor-QRcode.dll and b/Plugins/QRCode-master/Binaries/Win64/UE4Editor-QRcode.dll differ diff --git a/Plugins/QRCode-master/Binaries/Win64/UE4Editor-QRcode.pdb b/Plugins/QRCode-master/Binaries/Win64/UE4Editor-QRcode.pdb index 9f972a7..579b124 100644 Binary files a/Plugins/QRCode-master/Binaries/Win64/UE4Editor-QRcode.pdb and b/Plugins/QRCode-master/Binaries/Win64/UE4Editor-QRcode.pdb differ diff --git a/Plugins/VlcMedia-master/.gitignore b/Plugins/VlcMedia-master/.gitignore new file mode 100644 index 0000000..2889214 --- /dev/null +++ b/Plugins/VlcMedia-master/.gitignore @@ -0,0 +1,3 @@ +Binaries/ +Intermediate/ +plugins.dat \ No newline at end of file diff --git a/Plugins/VlcMedia-master/Build/Vlc4LinuxCloneMakeInstall.sh b/Plugins/VlcMedia-master/Build/Vlc4LinuxCloneMakeInstall.sh new file mode 100644 index 0000000..607e96e --- /dev/null +++ b/Plugins/VlcMedia-master/Build/Vlc4LinuxCloneMakeInstall.sh @@ -0,0 +1,72 @@ +#!/bin/bash +set -x + +# Control if ./Plugins/VlcMedia/ folder exists. +if [ ! -d "./Plugins/VlcMedia/" ]; then + printf "./Plugins/VlcMedia/ folder doesn't exist.\nRun bash script from Project (GAME) folder\n" + exit 1 +fi + +# clean-up and configure the VlcMedia plugin +installDir=$PWD +installDir+="/Plugins/VlcMedia/ThirdParty/vlc/Linux/x86_64-unknown-linux-gnu/" +rm -rf $installDir +mkdir -p $installDir +rm -rf ./protobuf/ +rm -rf ./vlc/ + +# update Ubuntu and remove vlc +sudo apt purge vlc +sudo snap remove vlc +sudo add-apt-repository --remove ppa:videolan/master-daily +sudo apt update +sudo apt upgrade +sudo apt autoremove + +# To build vlc from source, the following tools are needed +sudo apt install autoconf automake libtool curl make g++ unzip +sudo apt install git build-essential pkg-config libtool autopoint gettext +sudo apt install subversion yasm cvs cmake ragel +sudo apt install gperf default-jdk ant flex flex-old bison +sudo apt install libcaca-dev libncursesw5-dev libasound2-dev lua5.2-dev libxcb-keysyms1-dev +sudo apt install lua5.2 openjdk-8-jdk ant nasm libxcb-composite0 libxcb-composite0-dev +sudo apt install libxcb-xv0 libxcb-xv0-dev wayland-protocols + +# Protocol Buffers - Google's data interchange format +git clone git://github.com/google/protobuf.git +cd protobuf +./autogen.sh +./configure +make +make check +sudo make install +make clean +sudo ldconfig # refresh shared library cache +cd .. + +# install vlc and make it available to the VlcMedia plugin +git clone git://git.videolan.org/vlc.git +cd vlc +git checkout tags/4.0.0-dev -b 4.0.0-dev +./bootstrap +# VLC contribs system, included in the VLC source +cd contrib +mkdir native +cd native +../bootstrap + +make # Create VLC contribs system code to Hotfix it +# Hotfix for `ERROR: libmp3lame >= 3.98.3 not found` problem. +# CREDIT # https://stackoverflow.com/a/46756012/4510033 +sed -i -e 's/\(3.98.3..lame.lame.h.lame.set.VBR.quality..lmp3lame\)/\1 -lm/' ./ffmpeg/configure + +make +cd .. +cd .. + +./configure --disable-srt --disable-dca --disable-libass --disable-css --disable-upnp --disable-chromaprint --disable-freetype --prefix=$installDir +make +make install +make clean +cd .. + diff --git a/Plugins/VlcMedia-master/Build/Vlc4LinuxMakeInstall.sh b/Plugins/VlcMedia-master/Build/Vlc4LinuxMakeInstall.sh new file mode 100644 index 0000000..fc5646f --- /dev/null +++ b/Plugins/VlcMedia-master/Build/Vlc4LinuxMakeInstall.sh @@ -0,0 +1,74 @@ +#!/bin/bash +set -x + +# Control if ./Plugins/VlcMedia/ folder exists. +if [ ! -d "./Plugins/VlcMedia/" ]; then + printf "./Plugins/VlcMedia/ folder doesn't exist.\nRun bash script from Project (GAME) folder\n" + exit 1 +fi + +# clean-up and configure the VlcMedia plugin +installDir=$PWD +installDir+="/Plugins/VlcMedia/ThirdParty/vlc/Linux/x86_64-unknown-linux-gnu/" +rm -rf $installDir +mkdir -p $installDir +#rm -rf ./protobuf/ +#rm -rf ./vlc/ + +# update Ubuntu and remove vlc +sudo apt purge vlc +sudo snap remove vlc +sudo add-apt-repository --remove ppa:videolan/master-daily +sudo apt update +sudo apt upgrade +sudo apt autoremove + +# To build vlc from source, the following tools are needed +sudo apt install autoconf automake libtool curl make g++ unzip +sudo apt install git build-essential pkg-config libtool autopoint gettext +sudo apt install subversion yasm cvs cmake ragel +sudo apt install gperf default-jdk ant flex flex-old bison +sudo apt install libcaca-dev libncursesw5-dev libasound2-dev lua5.2-dev libxcb-keysyms1-dev +sudo apt install lua5.2 openjdk-8-jdk ant nasm libxcb-composite0 libxcb-composite0-dev +sudo apt install libxcb-xv0 libxcb-xv0-dev wayland-protocols + +# Protocol Buffers - Google's data interchange format +#git clone git://github.com/google/protobuf.git +cd protobuf +./autogen.sh +./configure +make clean +make +make check +sudo make install +make clean +sudo ldconfig # refresh shared library cache +cd .. + +# install vlc and make it available to the VlcMedia plugin +#git clone git://git.videolan.org/vlc.git +cd vlc +#git checkout tags/4.0.0-dev -b 4.0.0-dev +./bootstrap +# VLC contribs system, included in the VLC source +cd contrib +mkdir native +cd native +../bootstrap + +make # Create VLC contribs system code to Hotfix it +# Hotfix for `ERROR: libmp3lame >= 3.98.3 not found` problem. +# CREDIT # https://stackoverflow.com/a/46756012/4510033 +sed -i -e 's/\(3.98.3..lame.lame.h.lame.set.VBR.quality..lmp3lame\)/\1 -lm/' ./ffmpeg/configure + +make +cd .. +cd .. + +./configure --disable-srt --disable-dca --disable-libass --disable-css --disable-upnp --disable-chromaprint --disable-freetype --prefix=$installDir +make clean +make +make install +make clean +cd .. + diff --git a/Plugins/VlcMedia-master/LICENSE b/Plugins/VlcMedia-master/LICENSE new file mode 100644 index 0000000..b591d88 --- /dev/null +++ b/Plugins/VlcMedia-master/LICENSE @@ -0,0 +1,11 @@ +Copyright 2015 Epic Games, Inc. + +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 copyright holder 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 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. \ No newline at end of file diff --git a/Plugins/VlcMedia-master/README.md b/Plugins/VlcMedia-master/README.md new file mode 100644 index 0000000..669ac94 --- /dev/null +++ b/Plugins/VlcMedia-master/README.md @@ -0,0 +1,101 @@ +# VlcMedia + +Unreal Engine 4 Media Framework plug-in using the Video LAN Codec (libvlc). + + +## About + +This plug-in is still under development and likely has a lot of remaining issues +to be fixed. Use in production is not yet recommended. + +Make sure to pull the *Tag* that matches your Unreal Engine version. If you sync +to *Master* the code may not compile, because it may depend on Engine changes +that are not yet available in the UE4 Master branch. + + +## Supported Platforms + +This plug-in was last built against **Unreal Engine 4.19** and tested +against the following platforms: + +- Linux (Ubuntu 16.04) +- ~~Mac~~ +- Windows + +**IMPORTANT**: Please note that this repository contains pre-compiled binaries +for libvlc and its plug-ins, which are licensed under LGPL. This means that you +cannot create monolithic builds of your game without violating LGPL, the UE4 +EULA or both. The libvlc libraries must remain dynamic libraries that are bound +at run-time - static linking is not allowed - and the licensing related files in +*/ThirdParty/vlc* must be retained. + +This also means that this plug-in cannot work on platforms that do not support +dynamically linked libraries (i.e. iOS, HTML5) or do not currently implement +support for it (i.e. Android, XboxOne). + +Epic is in the process of adding plug-in support to monolithic builds, but there +is no ETA yet. Once this is supported, you will be able to distribute monolithic +game and server builds with VlcMedia, provided that the libvlc libraries and +plug-ins remain as separate DLLs. + + +## Prerequisites + +A relatively recent version of libvlc is required. The latest stable release +(currently 2.2.1) is not sufficient. + +For Mac and Windows, the following nightly builds are currently included: +* macOS: vlc-4.0.0-20180319-0303-dev +* Win32: vlc-4.0.0-20180319-0303-dev-win32 +* Win64: vlc-4.0.0-20180319-1331-dev-win64 + +Nightly builds can be downloaded from the VideoLAN web site (see below). + +For debugging on Win32 and Win64, you can download debug builds and replace the +corresponding files and folders in the *VlcMedia/ThirdParty/vlc/* directory. + +### Linux (Ubuntu 16.04) + +A suitable version of **libvlc** must be installed or compiled from source. If +you ship your game on Linux, you will likely want to include libvlc with it, so +that users don't have to install it themselves. We will eventually include those +binaries in this repository, although it is not clear what distros should be +supported and where the builds are coming from. A better workflow needs to be +established for this (https://github.com/ue4plugins/VlcMedia/issues/17). + +To clean up, clone, make and install VLC (including libvlc) into your project, +run the *VlcMedia/Build/Vlc4LinuxCloneMakeInstall.sh* script from within your +project's root folder. If you later need to make and re-install VLC from the +existing VLC code, run the *Vlc4LinuxMakeInstall.sh* script instead. + +### Mac, Windows + +All required libraries and plug-ins are included in the *ThirdParty* directory +and work out of the box. + + +## Dependencies + +This plug-in requires Visual Studio and either a C++ code project or the full +Unreal Engine 4 source code from GitHub. If you are new to programming in UE4, +please see the official [Programming Guide](https://docs.unrealengine.com/latest/INT/Programming/index.html)! + + +## Usage + +You can use this plug-in as a project plug-in, or an Engine plug-in. + +If you use it as a project plug-in, clone this repository into your project's +*/Plugins* directory and compile your game in Visual Studio. A C++ code project +is required for this to work. + +If you use it as an Engine plug-in, clone this repository into the +*/Engine/Plugins/Media* directory and compile your game. Full Unreal Engine 4 +source code from GitHub is required for this. + + +## References + +* [VideoLAN Homepage](http://videolan.org) +* [VideoLAN Nightly Builds](http://nightlies.videolan.org/) +* [Introduction to UE4 Plugins](https://wiki.unrealengine.com/An_Introduction_to_UE4_Plugins) diff --git a/Plugins/VlcMedia-master/Resources/Icon128.png b/Plugins/VlcMedia-master/Resources/Icon128.png new file mode 100644 index 0000000..c0e4804 Binary files /dev/null and b/Plugins/VlcMedia-master/Resources/Icon128.png differ diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaAudioSample.h b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaAudioSample.h new file mode 100644 index 0000000..b6fa4eb --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaAudioSample.h @@ -0,0 +1,169 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreTypes.h" +#include "IMediaAudioSample.h" +#include "MediaObjectPool.h" +#include "Misc/Timespan.h" +#include "Templates/SharedPointer.h" + + +/** + * Audio sample generated by VLC player. + */ +class FVlcMediaAudioSample + : public IMediaAudioSample + , public IMediaPoolable +{ +public: + + /** Default constructor. */ + FVlcMediaAudioSample() + : Buffer(nullptr) + , BufferSize(0) + , Channels(0) + , Duration(FTimespan::Zero()) + , Frames(0) + , SampleFormat(EMediaAudioSampleFormat::Undefined) + , SampleRate(0) + , Time(FTimespan::Zero()) + { } + + /** Virtual destructor. */ + virtual ~FVlcMediaAudioSample() + { + FreeBuffer(); + } + +public: + + /** + * Initialize the sample. + * + * @param InBuffer The raw audio sample buffer. + * @param InBufferSize The size of the buffer (in bytes). + * @param InFrames Number of frames in the buffer. + * @param InChannels Number of audio channels. + * @param InSampleFormat The sample format. + * @param InSampleRate The sample rate. + * @param InTime The sample time (in the player's local clock). + * @param InDuration The duration for which the sample is valid. + * @return true on success, false otherwise. + */ + bool Initialize( + void* InBuffer, + uint32 InBufferSize, + uint32 InFrames, + uint32 InChannels, + EMediaAudioSampleFormat InSampleFormat, + uint32 InSampleRate, + FTimespan InTime, + FTimespan InDuration) + { + if ((InBuffer == nullptr) || (InBufferSize == 0) || (InSampleFormat == EMediaAudioSampleFormat::Undefined)) + { + return false; + } + + if (InBufferSize > BufferSize) + { + Buffer = FMemory::Realloc(Buffer, InBufferSize); + BufferSize = InBufferSize; + } + + FMemory::Memcpy(Buffer, InBuffer, InBufferSize); + + Channels = InChannels; + Duration = InDuration; + Frames = InFrames; + SampleFormat = InSampleFormat; + SampleRate = InSampleRate; + Time = InTime; + + return true; + } + +public: + + //~ IMediaAudioSample interface + + virtual const void* GetBuffer() override + { + return Buffer; + } + + virtual uint32 GetChannels() const override + { + return Channels; + } + + virtual uint32 GetFrames() const override + { + return Frames; + } + + virtual FTimespan GetDuration() const override + { + return Duration; + } + + virtual EMediaAudioSampleFormat GetFormat() const override + { + return SampleFormat; + } + + virtual uint32 GetSampleRate() const override + { + return SampleRate; + } + + virtual FTimespan GetTime() const override + { + return Time; + } + +protected: + + /** Free the sample buffer. */ + void FreeBuffer() + { + if (Buffer != nullptr) + { + FMemory::Free(Buffer); + + Buffer = nullptr; + BufferSize = 0; + } + } + +private: + + /** The sample's frame buffer. */ + void* Buffer; + + /** Allocated size of the buffer (in bytes). */ + SIZE_T BufferSize; + + /** Number of audio channels. */ + uint32 Channels; + + /** Duration for which the sample is valid. */ + FTimespan Duration; + + /** Number of frames in the buffer. */ + uint32 Frames; + + /** The sample format. */ + EMediaAudioSampleFormat SampleFormat; + + /** Audio sample rate (in samples per second). */ + uint32 SampleRate; + + /** Play time for which the sample was generated. */ + FTimespan Time; +}; + + +/** Implements a pool for VLC audio sample objects. */ +class FVlcMediaAudioSamplePool : public TMediaObjectPool { }; diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaCallbacks.cpp b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaCallbacks.cpp new file mode 100644 index 0000000..444dab6 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaCallbacks.cpp @@ -0,0 +1,462 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#include "VlcMediaCallbacks.h" +#include "VlcMediaPrivate.h" + +#include "IMediaAudioSample.h" +#include "IMediaOptions.h" +#include "IMediaTextureSample.h" +#include "MediaSamples.h" + +#include "Vlc.h" +#include "VlcMediaAudioSample.h" +#include "VlcMediaTextureSample.h" + + +/* FVlcMediaOutput structors + *****************************************************************************/ + +FVlcMediaCallbacks::FVlcMediaCallbacks() + : AudioChannels(0) + , AudioSampleFormat(EMediaAudioSampleFormat::Int16) + , AudioSamplePool(new FVlcMediaAudioSamplePool) + , AudioSampleRate(0) + , AudioSampleSize(0) + , CurrentTime(FTimespan::Zero()) + , Player(nullptr) + , Samples(new FMediaSamples) + , VideoBufferDim(FIntPoint::ZeroValue) + , VideoBufferStride(0) + , VideoFrameDuration(FTimespan::Zero()) + , VideoOutputDim(FIntPoint::ZeroValue) + , VideoPreviousTime(FTimespan::MinValue()) + , VideoSampleFormat(EMediaTextureSampleFormat::CharAYUV) + , VideoSamplePool(new FVlcMediaTextureSamplePool) +{ } + + +FVlcMediaCallbacks::~FVlcMediaCallbacks() +{ + Shutdown(); + + delete AudioSamplePool; + AudioSamplePool = nullptr; + + delete Samples; + Samples = nullptr; + + delete VideoSamplePool; + VideoSamplePool = nullptr; +} + + +/* FVlcMediaOutput interface + *****************************************************************************/ + +IMediaSamples& FVlcMediaCallbacks::GetSamples() +{ + return *Samples; +} + + +void FVlcMediaCallbacks::Initialize(FLibvlcMediaPlayer& InPlayer) +{ + Shutdown(); + + Player = &InPlayer; + + // register callbacks + FVlc::AudioSetFormatCallbacks( + Player, + &FVlcMediaCallbacks::StaticAudioSetupCallback, + &FVlcMediaCallbacks::StaticAudioCleanupCallback + ); + + FVlc::AudioSetCallbacks( + Player, + &FVlcMediaCallbacks::StaticAudioPlayCallback, + &FVlcMediaCallbacks::StaticAudioPauseCallback, + &FVlcMediaCallbacks::StaticAudioResumeCallback, + &FVlcMediaCallbacks::StaticAudioFlushCallback, + &FVlcMediaCallbacks::StaticAudioDrainCallback, + this + ); + + FVlc::VideoSetFormatCallbacks( + Player, + &FVlcMediaCallbacks::StaticVideoSetupCallback, + &FVlcMediaCallbacks::StaticVideoCleanupCallback + ); + + FVlc::VideoSetCallbacks( + Player, + &FVlcMediaCallbacks::StaticVideoLockCallback, + &FVlcMediaCallbacks::StaticVideoUnlockCallback, + &FVlcMediaCallbacks::StaticVideoDisplayCallback, + this + ); +} + + +void FVlcMediaCallbacks::Shutdown() +{ + if (Player == nullptr) + { + return; + } + + // unregister callbacks + FVlc::AudioSetCallbacks(Player, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr); + FVlc::AudioSetFormatCallbacks(Player, nullptr, nullptr); + + FVlc::VideoSetCallbacks(Player, nullptr, nullptr, nullptr, nullptr); + FVlc::VideoSetFormatCallbacks(Player, nullptr, nullptr); + + AudioSamplePool->Reset(); + VideoSamplePool->Reset(); + + CurrentTime = FTimespan::Zero(); + Player = nullptr; +} + + +/* FVlcMediaOutput static functions +*****************************************************************************/ + +void FVlcMediaCallbacks::StaticAudioCleanupCallback(void* Opaque) +{ + UE_LOG(LogVlcMedia, VeryVerbose, TEXT("Callbacks %llx: StaticAudioCleanupCallback"), Opaque); +} + + +void FVlcMediaCallbacks::StaticAudioDrainCallback(void* Opaque) +{ + UE_LOG(LogVlcMedia, VeryVerbose, TEXT("Callbacks %llx: StaticAudioDrainCallback"), Opaque); +} + + +void FVlcMediaCallbacks::StaticAudioFlushCallback(void* Opaque, int64 Timestamp) +{ + UE_LOG(LogVlcMedia, VeryVerbose, TEXT("Callbacks %llx: StaticAudioFlushCallback"), Opaque); +} + + +void FVlcMediaCallbacks::StaticAudioPauseCallback(void* Opaque, int64 Timestamp) +{ + UE_LOG(LogVlcMedia, VeryVerbose, TEXT("Callbacks %llx: StaticAudioPauseCallback (Timestamp = %i)"), Opaque, Timestamp); + + // do nothing; pausing is handled in Update +} + + +void FVlcMediaCallbacks::StaticAudioPlayCallback(void* Opaque, void* Samples, uint32 Count, int64 Timestamp) +{ + auto Callbacks = (FVlcMediaCallbacks*)Opaque; + + if (Callbacks == nullptr) + { + return; + } + + UE_LOG(LogVlcMedia, VeryVerbose, TEXT("Callbacks %llx: StaticAudioPlayCallback (Count = %i, Timestamp = %i, Queue = %i)"), + Opaque, + Count, + Timestamp, + Callbacks->Samples->NumAudio() + ); + + // create & add sample to queue + auto AudioSample = Callbacks->AudioSamplePool->AcquireShared(); + + const FTimespan Delay = FTimespan::FromMicroseconds(FVlc::Delay(Timestamp)); + const FTimespan Duration = FTimespan::FromMicroseconds((Count * 1000000) / Callbacks->AudioSampleRate); + const SIZE_T SamplesSize = Count * Callbacks->AudioSampleSize * Callbacks->AudioChannels; + + if (AudioSample->Initialize( + Samples, + SamplesSize, + Count, + Callbacks->AudioChannels, + Callbacks->AudioSampleFormat, + Callbacks->AudioSampleRate, + Callbacks->CurrentTime + Delay, + Duration)) + { + Callbacks->Samples->AddAudio(AudioSample); + } +} + + +void FVlcMediaCallbacks::StaticAudioResumeCallback(void* Opaque, int64 Timestamp) +{ + UE_LOG(LogVlcMedia, VeryVerbose, TEXT("Callbacks %llx: StaticAudioResumeCallback (Timestamp = %i)"), Opaque, Timestamp); + + // do nothing; resuming is handled in Update +} + + +int FVlcMediaCallbacks::StaticAudioSetupCallback(void** Opaque, ANSICHAR* Format, uint32* Rate, uint32* Channels) +{ + auto Callbacks = *(FVlcMediaCallbacks**)Opaque; + + if (Callbacks == nullptr) + { + return -1; + } + + UE_LOG(LogVlcMedia, VeryVerbose, TEXT("Callbacks %llx: StaticAudioSetupCallback (Format = %s, Rate = %i, Channels = %i)"), + Opaque, + ANSI_TO_TCHAR(Format), + *Rate, + *Channels + ); + + // setup audio format + if (*Channels > 8) + { + *Channels = 8; + } + + if (FMemory::Memcmp(Format, "S8 ", 4) == 0) + { + Callbacks->AudioSampleFormat = EMediaAudioSampleFormat::Int8; + Callbacks->AudioSampleSize = 1; + } + else if (FMemory::Memcmp(Format, "S16N", 4) == 0) + { + Callbacks->AudioSampleFormat = EMediaAudioSampleFormat::Int16; + Callbacks->AudioSampleSize = 2; + } + else if (FMemory::Memcmp(Format, "S32N", 4) == 0) + { + Callbacks->AudioSampleFormat = EMediaAudioSampleFormat::Int32; + Callbacks->AudioSampleSize = 4; + } + else if (FMemory::Memcmp(Format, "FL32", 4) == 0) + { + Callbacks->AudioSampleFormat = EMediaAudioSampleFormat::Float; + Callbacks->AudioSampleSize = 4; + } + else if (FMemory::Memcmp(Format, "FL64", 4) == 0) + { + Callbacks->AudioSampleFormat = EMediaAudioSampleFormat::Double; + Callbacks->AudioSampleSize = 8; + } + else if (FMemory::Memcmp(Format, "U8 ", 4) == 0) + { + // unsigned integer fall back + FMemory::Memcpy(Format, "S8 ", 4); + Callbacks->AudioSampleFormat = EMediaAudioSampleFormat::Int8; + Callbacks->AudioSampleSize = 1; + } + else + { + // unsupported format fall back + FMemory::Memcpy(Format, "S16N", 4); + Callbacks->AudioSampleFormat = EMediaAudioSampleFormat::Int16; + Callbacks->AudioSampleSize = 2; + } + + Callbacks->AudioChannels = *Channels; + Callbacks->AudioSampleRate = *Rate; + + return 0; +} + + +void FVlcMediaCallbacks::StaticVideoCleanupCallback(void *Opaque) +{ + // do nothing +} + + +void FVlcMediaCallbacks::StaticVideoDisplayCallback(void* Opaque, void* Picture) +{ + auto Callbacks = (FVlcMediaCallbacks*)Opaque; + auto VideoSample = (FVlcMediaTextureSample*)Picture; + + if ((Callbacks == nullptr) || (VideoSample == nullptr)) + { + return; + } + + UE_LOG(LogVlcMedia, VeryVerbose, TEXT("Callbacks %llx: StaticVideoDisplayCallback (CurrentTime = %s, Queue = %i)"), + Opaque, *Callbacks->CurrentTime.ToString(), + Callbacks->Samples->NumVideoSamples() + ); + + VideoSample->SetTime(Callbacks->CurrentTime); + + // add sample to queue + Callbacks->Samples->AddVideo(Callbacks->VideoSamplePool->ToShared(VideoSample)); +} + + +void* FVlcMediaCallbacks::StaticVideoLockCallback(void* Opaque, void** Planes) +{ + auto Callbacks = (FVlcMediaCallbacks*)Opaque; + check(Callbacks != nullptr); + + FMemory::Memzero(Planes, FVlc::MaxPlanes * sizeof(void*)); + + // skip if already processed + if (Callbacks->VideoPreviousTime == Callbacks->CurrentTime) + { + // VLC currently requires a valid buffer or it will crash + Planes[0] = FMemory::Malloc(Callbacks->VideoBufferStride * Callbacks->VideoBufferDim.Y, 32); + return nullptr; + } + + UE_LOG(LogVlcMedia, VeryVerbose, TEXT("Callbacks %llx: StaticVideoLockCallback (CurrentTime = %s)"), + Opaque, + *Callbacks->CurrentTime.ToString() + ); + + // create & initialize video sample + auto VideoSample = Callbacks->VideoSamplePool->Acquire(); + + if (VideoSample == nullptr) + { + // VLC currently requires a valid buffer or it will crash + Planes[0] = FMemory::Malloc(Callbacks->VideoBufferStride * Callbacks->VideoBufferDim.Y, 32); + return nullptr; + } + + if (!VideoSample->Initialize( + Callbacks->VideoBufferDim, + Callbacks->VideoOutputDim, + Callbacks->VideoSampleFormat, + Callbacks->VideoBufferStride, + Callbacks->VideoFrameDuration)) + { + // VLC currently requires a valid buffer or it will crash + Planes[0] = FMemory::Malloc(Callbacks->VideoBufferStride * Callbacks->VideoBufferDim.Y, 32); + return nullptr; + } + + Callbacks->VideoPreviousTime = Callbacks->CurrentTime; + Planes[0] = VideoSample->GetMutableBuffer(); + + return VideoSample; // passed as Picture into unlock & display callbacks + +} + + +unsigned FVlcMediaCallbacks::StaticVideoSetupCallback(void** Opaque, char* Chroma, unsigned* Width, unsigned* Height, unsigned* Pitches, unsigned* Lines) +{ + auto Callbacks = *(FVlcMediaCallbacks**)Opaque; + + if (Callbacks == nullptr) + { + return 0; + } + + UE_LOG(LogVlcMedia, VeryVerbose, TEXT("Callbacks %llx: StaticVideoSetupCallback (Chroma = %s, Dim = %ix%i)"), + Opaque, + ANSI_TO_TCHAR(Chroma), + *Width, + *Height + ); + + // get video output size + if (FVlc::VideoGetSize(Callbacks->Player, 0, (uint32*)&Callbacks->VideoOutputDim.X, (uint32*)&Callbacks->VideoOutputDim.Y) != 0) + { + Callbacks->VideoBufferDim = FIntPoint::ZeroValue; + Callbacks->VideoOutputDim = FIntPoint::ZeroValue; + Callbacks->VideoBufferStride = 0; + + return 0; + } + + if (Callbacks->VideoOutputDim.GetMin() <= 0) + { + return 0; + } + + // determine decoder & sample formats + Callbacks->VideoBufferDim = FIntPoint(*Width, *Height); + + if (FCStringAnsi::Stricmp(Chroma, "AYUV") == 0) + { + Callbacks->VideoSampleFormat = EMediaTextureSampleFormat::CharAYUV; + Callbacks->VideoBufferStride = *Width * 4; + } + else if (FCStringAnsi::Stricmp(Chroma, "RV32") == 0) + { + Callbacks->VideoSampleFormat = EMediaTextureSampleFormat::CharBGRA; + Callbacks->VideoBufferStride = *Width * 4; + } + else if ((FCStringAnsi::Stricmp(Chroma, "UYVY") == 0) || + (FCStringAnsi::Stricmp(Chroma, "Y422") == 0) || + (FCStringAnsi::Stricmp(Chroma, "UYNV") == 0) || + (FCStringAnsi::Stricmp(Chroma, "HDYC") == 0)) + { + Callbacks->VideoSampleFormat = EMediaTextureSampleFormat::CharUYVY; + Callbacks->VideoBufferStride = *Width * 2; + } + else if ((FCStringAnsi::Stricmp(Chroma, "YUY2") == 0) || + (FCStringAnsi::Stricmp(Chroma, "V422") == 0) || + (FCStringAnsi::Stricmp(Chroma, "YUYV") == 0)) + { + Callbacks->VideoSampleFormat = EMediaTextureSampleFormat::CharYUY2; + Callbacks->VideoBufferStride = *Width * 2; + } + else if (FCStringAnsi::Stricmp(Chroma, "YVYU") == 0) + { + Callbacks->VideoSampleFormat = EMediaTextureSampleFormat::CharYVYU; + Callbacks->VideoBufferStride = *Width * 2; + } + else + { + // reconfigure output for natively supported format + FLibvlcChromaDescription* ChromaDescr = FVlc::FourccGetChromaDescription(*(FLibvlcFourcc*)Chroma); + + if (ChromaDescr->PlaneCount == 0) + { + return 0; + } + + if (ChromaDescr->PlaneCount > 1) + { + FMemory::Memcpy(Chroma, "YUY2", 4); + + Callbacks->VideoBufferDim = FIntPoint(Align(Callbacks->VideoOutputDim.X, 16) / 2, Align(Callbacks->VideoOutputDim.Y, 16)); + Callbacks->VideoSampleFormat = EMediaTextureSampleFormat::CharYUY2; + Callbacks->VideoBufferStride = Callbacks->VideoBufferDim.X * 4; + *Height = Callbacks->VideoBufferDim.Y; + } + else + { + FMemory::Memcpy(Chroma, "RV32", 4); + + Callbacks->VideoBufferDim = Callbacks->VideoOutputDim; + Callbacks->VideoSampleFormat = EMediaTextureSampleFormat::CharBGRA; + Callbacks->VideoBufferStride = Callbacks->VideoBufferDim.X * 4; + } + } + + // get other video properties + //Callbacks->VideoFrameDuration = FTimespan::FromSeconds(1.0 / FVlc::MediaPlayerGetFps(Callbacks->Player)); + Callbacks->VideoFrameDuration = FTimespan::FromMilliseconds(1); + + // initialize decoder + Lines[0] = Callbacks->VideoBufferDim.Y; + Pitches[0] = Callbacks->VideoBufferStride; + + return 1; +} + + +void FVlcMediaCallbacks::StaticVideoUnlockCallback(void* Opaque, void* Picture, void* const* Planes) +{ + if ((Opaque != nullptr) && (Picture != nullptr)) + { + UE_LOG(LogVlcMedia, VeryVerbose, TEXT("Callbacks %llx: StaticVideoUnlockCallback"), Opaque); + } + + // discard temporary buffer for VLC crash workaround + if ((Picture == nullptr) && (Planes != nullptr) && (Planes[0] != nullptr)) + { + FMemory::Free(Planes[0]); + } +} diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaCallbacks.h b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaCallbacks.h new file mode 100644 index 0000000..aa656b2 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaCallbacks.h @@ -0,0 +1,147 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "IMediaAudioSample.h" +#include "IMediaTextureSample.h" + +class FMediaSamples; +class FVlcMediaAudioSamplePool; +class FVlcMediaTextureSamplePool; +class IMediaOptions; +class IMediaAudioSink; +class IMediaOverlaySink; +class IMediaSamples; +class IMediaTextureSink; + +struct FLibvlcMediaPlayer; + + +/** + * Handles VLC callbacks. + */ +class FVlcMediaCallbacks +{ +public: + + /** Default constructor. */ + FVlcMediaCallbacks(); + + /** Virtual destructor. */ + ~FVlcMediaCallbacks(); + +public: + + /** + * Get the output media samples. + * + * @return Media samples interface. + */ + IMediaSamples& GetSamples(); + + /** + * Initialize the handler for the specified media player. + * + * @param InPlayer The media player that owns this handler. + */ + void Initialize(FLibvlcMediaPlayer& InPlayer); + + /** + * Set the player's current time. + * + * @param Time The player's play time. + */ + void SetCurrentTime(FTimespan Time) + { + CurrentTime = Time; + } + + /** Shut down the callback handler. */ + void Shutdown(); + +private: + + /** Handles audio cleanup callbacks from VLC.*/ + static void StaticAudioCleanupCallback(void* Opaque); + + /** Handles audio drain callbacks from VLC. */ + static void StaticAudioDrainCallback(void* Opaque); + + /** Handles audio flush callbacks from VLC. */ + static void StaticAudioFlushCallback(void* Opaque, int64 Timestamp); + + /** Handles audio pause callbacks from VLC. */ + static void StaticAudioPauseCallback(void* Opaque, int64 Timestamp); + + /** Handles audio play callbacks from VLC. */ + static void StaticAudioPlayCallback(void* Opaque, void* Samples, uint32 Count, int64 Timestamp); + + /** Handles audio resume callbacks from VLC. */ + static void StaticAudioResumeCallback(void* Opaque, int64 Timestamp); + + /** Handles audio setup callbacks from VLC. */ + static int StaticAudioSetupCallback(void** Opaque, ANSICHAR* Format, uint32* Rate, uint32* Channels); + + /** Handles video cleanup callbacks from VLC. */ + static void StaticVideoCleanupCallback(void *Opaque); + + /** Handles display callbacks from VLC. */ + static void StaticVideoDisplayCallback(void* Opaque, void* Picture); + + /** Handles buffer lock callbacks from VLC. */ + static void* StaticVideoLockCallback(void* Opaque, void** Planes); + + /** Handles video setup callbacks from VLC. */ + static unsigned StaticVideoSetupCallback(void** Opaque, char* Chroma, unsigned* Width, unsigned* Height, unsigned* Pitches, unsigned* Lines); + + /** Handles buffer unlock callbacks from VLC. */ + static void StaticVideoUnlockCallback(void* Opaque, void* Picture, void* const* Planes); + +private: + + /** Current number of channels in audio samples( accessed by VLC thread only). */ + uint32 AudioChannels; + + /** Current audio sample format (accessed by VLC thread only). */ + EMediaAudioSampleFormat AudioSampleFormat; + + /** Audio sample object pool. */ + FVlcMediaAudioSamplePool* AudioSamplePool; + + /** Current audio sample rate (accessed by VLC thread only). */ + uint32 AudioSampleRate; + + /** Size of a single audio sample (in bytes). */ + SIZE_T AudioSampleSize; + + /** The player's current time. */ + FTimespan CurrentTime; + + /** The VLC media player object. */ + FLibvlcMediaPlayer* Player; + + /** The output media samples. */ + FMediaSamples* Samples; + + /** Current video buffer dimensions (accessed by VLC thread only; may be larger than VideoOutputDim). */ + FIntPoint VideoBufferDim; + + /** Number of bytes per row of video pixels. */ + uint32 VideoBufferStride; + + /** Current duration of video frames. */ + FTimespan VideoFrameDuration; + + /** Current video output dimensions (accessed by VLC thread only). */ + FIntPoint VideoOutputDim; + + /** Play time of the previous frame. */ + FTimespan VideoPreviousTime; + + /** Current video sample format (accessed by VLC thread only). */ + EMediaTextureSampleFormat VideoSampleFormat; + + /** Video sample object pool. */ + FVlcMediaTextureSamplePool* VideoSamplePool; +}; \ No newline at end of file diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaPlayer.cpp b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaPlayer.cpp new file mode 100644 index 0000000..29ce3bf --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaPlayer.cpp @@ -0,0 +1,534 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#include "VlcMediaPlayer.h" +#include "VlcMediaPrivate.h" + +#include "IMediaEventSink.h" +#include "IMediaOptions.h" +#include "Misc/FileHelper.h" +#include "Serialization/ArrayReader.h" + +#include "Vlc.h" +#include "VlcMediaUtils.h" + + +/* FVlcMediaPlayer structors + *****************************************************************************/ + +FVlcMediaPlayer::FVlcMediaPlayer(IMediaEventSink& InEventSink, FLibvlcInstance* InVlcInstance) + : CurrentRate(0.0f) + , CurrentTime(FTimespan::Zero()) + , EventSink(InEventSink) + , MediaSource(InVlcInstance) + , Player(nullptr) + , ShouldLoop(false) +{ } + + +FVlcMediaPlayer::~FVlcMediaPlayer() +{ + Close(); +} + + +/* IMediaControls interface + *****************************************************************************/ + +bool FVlcMediaPlayer::CanControl(EMediaControl Control) const +{ + if (Player == nullptr) + { + return false; + } + + if (Control == EMediaControl::Pause) + { + return (FVlc::MediaPlayerCanPause(Player) != 0); + } + + if (Control == EMediaControl::Resume) + { + return (FVlc::MediaPlayerGetState(Player) != ELibvlcState::Playing); + } + + if ((Control == EMediaControl::Scrub) || (Control == EMediaControl::Seek)) + { + return (FVlc::MediaPlayerIsSeekable(Player) != 0); + } + + return false; +} + + +FTimespan FVlcMediaPlayer::GetDuration() const +{ + return MediaSource.GetDuration(); +} + + +float FVlcMediaPlayer::GetRate() const +{ + return CurrentRate; +} + + +EMediaState FVlcMediaPlayer::GetState() const +{ + if (Player == nullptr) + { + return EMediaState::Closed; + } + + ELibvlcState State = FVlc::MediaPlayerGetState(Player); + + switch (State) + { + case ELibvlcState::Error: + return EMediaState::Error; + + case ELibvlcState::Buffering: + case ELibvlcState::Opening: + return EMediaState::Preparing; + + case ELibvlcState::Paused: + return EMediaState::Paused; + + case ELibvlcState::Playing: + return EMediaState::Playing; + + case ELibvlcState::Ended: + case ELibvlcState::NothingSpecial: + case ELibvlcState::Stopped: + return EMediaState::Stopped; + } + + return EMediaState::Error; // should never get here +} + + +EMediaStatus FVlcMediaPlayer::GetStatus() const +{ + return (GetState() == EMediaState::Preparing) ? EMediaStatus::Buffering : EMediaStatus::None; +} + + +TRangeSet FVlcMediaPlayer::GetSupportedRates(EMediaRateThinning Thinning) const +{ + TRangeSet Result; + + if (Thinning == EMediaRateThinning::Thinned) + { + Result.Add(TRange::Inclusive(0.0f, 10.0f)); + } + else + { + Result.Add(TRange::Inclusive(0.0f, 1.0f)); + } + + return Result; +} + + +FTimespan FVlcMediaPlayer::GetTime() const +{ + return CurrentTime; +} + + +bool FVlcMediaPlayer::IsLooping() const +{ + return ShouldLoop; +} + + +bool FVlcMediaPlayer::Seek(const FTimespan& Time) +{ + ELibvlcState State = FVlc::MediaPlayerGetState(Player); + + if ((State == ELibvlcState::Opening) || + (State == ELibvlcState::Buffering) || + (State == ELibvlcState::Error)) + { + return false; + } + + if (Time != CurrentTime) + { + FVlc::MediaPlayerSetTime(Player, Time.GetTotalMilliseconds()); + CurrentTime = Time; + } + + return true; +} + + +bool FVlcMediaPlayer::SetLooping(bool Looping) +{ + ShouldLoop = Looping; + return true; +} + + +bool FVlcMediaPlayer::SetRate(float Rate) +{ + if (Player == nullptr) + { + return false; + } + + if ((FVlc::MediaPlayerSetRate(Player, Rate) == -1)) + { + return false; + } + + if (FMath::IsNearlyZero(Rate)) + { + if (FVlc::MediaPlayerGetState(Player) == ELibvlcState::Playing) + { + if (FVlc::MediaPlayerCanPause(Player) == 0) + { + return false; + } + + FVlc::MediaPlayerPause(Player); + } + } + else if (FVlc::MediaPlayerGetState(Player) != ELibvlcState::Playing) + { + if (FVlc::MediaPlayerPlay(Player) == -1) + { + return false; + } + } + + return true; +} + + +/* IMediaPlayer interface + *****************************************************************************/ + +void FVlcMediaPlayer::Close() +{ + if (Player == nullptr) + { + return; + } + + // detach callback handlers + Callbacks.Shutdown(); + Tracks.Shutdown(); + View.Shutdown(); + + // release player + FVlc::MediaPlayerStop(Player); + FVlc::MediaPlayerRelease(Player); + Player = nullptr; + + // reset fields + CurrentRate = 0.0f; + CurrentTime = FTimespan::Zero(); + MediaSource.Close(); + Info.Empty(); + + // notify listeners + EventSink.ReceiveMediaEvent(EMediaEvent::TracksChanged); + EventSink.ReceiveMediaEvent(EMediaEvent::MediaClosed); +} + + +IMediaCache& FVlcMediaPlayer::GetCache() +{ + return *this; +} + + +IMediaControls& FVlcMediaPlayer::GetControls() +{ + return *this; +} + + +FString FVlcMediaPlayer::GetInfo() const +{ + return Info; +} + + +FName FVlcMediaPlayer::GetPlayerName() const +{ + static FName PlayerName(TEXT("VlcMedia")); + return PlayerName; +} + + +IMediaSamples& FVlcMediaPlayer::GetSamples() +{ + return Callbacks.GetSamples(); +} + + +FString FVlcMediaPlayer::GetStats() const +{ + FLibvlcMedia* Media = MediaSource.GetMedia(); + + if (Media == nullptr) + { + return TEXT("No media opened."); + } + + FLibvlcMediaStats Stats; + + if (!FVlc::MediaGetStats(Media, &Stats)) + { + return TEXT("Stats currently not available."); + } + + FString StatsString; + { + StatsString += TEXT("General\n"); + StatsString += FString::Printf(TEXT(" Decoded Video: %i\n"), Stats.DecodedVideo); + StatsString += FString::Printf(TEXT(" Decoded Audio: %i\n"), Stats.DecodedAudio); + StatsString += FString::Printf(TEXT(" Displayed Pictures: %i\n"), Stats.DisplayedPictures); + StatsString += FString::Printf(TEXT(" Lost Pictures: %i\n"), Stats.LostPictures); + StatsString += FString::Printf(TEXT(" Played A-Buffers: %i\n"), Stats.PlayedAbuffers); + StatsString += FString::Printf(TEXT(" Lost Lost A-Buffers: %i\n"), Stats.LostAbuffers); + StatsString += TEXT("\n"); + + StatsString += TEXT("Input\n"); + StatsString += FString::Printf(TEXT(" Bit Rate: %i\n"), Stats.InputBitrate); + StatsString += FString::Printf(TEXT(" Bytes Read: %i\n"), Stats.ReadBytes); + StatsString += TEXT("\n"); + + StatsString += TEXT("Demux\n"); + StatsString += FString::Printf(TEXT(" Bit Rate: %f\n"), Stats.DemuxBitrate); + StatsString += FString::Printf(TEXT(" Bytes Read: %i\n"), Stats.DemuxReadBytes); + StatsString += FString::Printf(TEXT(" Corrupted: %i\n"), Stats.DemuxCorrupted); + StatsString += FString::Printf(TEXT(" Discontinuity: %i\n"), Stats.DemuxDiscontinuity); + StatsString += TEXT("\n"); + + StatsString += TEXT("Network\n"); + StatsString += FString::Printf(TEXT(" Bitrate: %f\n"), Stats.SendBitrate); + StatsString += FString::Printf(TEXT(" Sent Bytes: %i\n"), Stats.SentBytes); + StatsString += FString::Printf(TEXT(" Sent Packets: %i\n"), Stats.SentPackets); + StatsString += TEXT("\n"); + } + + return StatsString; +} + + +IMediaTracks& FVlcMediaPlayer::GetTracks() +{ + return Tracks; +} + + +FString FVlcMediaPlayer::GetUrl() const +{ + return MediaSource.GetCurrentUrl(); +} + + +IMediaView& FVlcMediaPlayer::GetView() +{ + return View; +} + + +bool FVlcMediaPlayer::Open(const FString& Url, const IMediaOptions* Options) +{ + Close(); + + if (Url.IsEmpty()) + { + return false; + } + + if (Url.StartsWith(TEXT("file://"))) + { + // open local files via platform file system + TSharedPtr Archive; + const TCHAR* FilePath = &Url[7]; + + if ((Options != nullptr) && Options->GetMediaOption("PrecacheFile", false)) + { + FArrayReader* Reader = new FArrayReader; + + if (FFileHelper::LoadFileToArray(*Reader, FilePath)) + { + Archive = MakeShareable(Reader); + } + else + { + delete Reader; + } + } + else + { + Archive = MakeShareable(IFileManager::Get().CreateFileReader(FilePath)); + } + + if (!Archive.IsValid()) + { + UE_LOG(LogVlcMedia, Warning, TEXT("Failed to open media file: %s"), FilePath); + return false; + } + + if (!MediaSource.OpenArchive(Archive.ToSharedRef(), Url)) + { + return false; + } + } + else if (!MediaSource.OpenUrl(Url)) + { + return false; + } + + return InitializePlayer(); +} + + +bool FVlcMediaPlayer::Open(const TSharedRef& Archive, const FString& OriginalUrl, const IMediaOptions* /*Options*/) +{ + Close(); + + if (OriginalUrl.IsEmpty() || !MediaSource.OpenArchive(Archive, OriginalUrl)) + { + return false; + } + + return InitializePlayer(); +} + + +void FVlcMediaPlayer::TickInput(FTimespan DeltaTime, FTimespan /*Timecode*/) +{ + if (Player == nullptr) + { + return; + } + + // process events + ELibvlcEventType Event; + + while (Events.Dequeue(Event)) + { + switch (Event) + { + case ELibvlcEventType::MediaParsedChanged: + Tracks.Initialize(*Player, Info); + Callbacks.Initialize(*Player); + View.Initialize(*Player); + EventSink.ReceiveMediaEvent(EMediaEvent::TracksChanged); + break; + + case ELibvlcEventType::MediaPlayerEndReached: + // begin hack: this causes a short delay, but there seems to be no + // other way. looping via VLC Media List players is also broken :( + FVlc::MediaPlayerStop(Player); + // end hack + + Callbacks.GetSamples().FlushSamples(); + EventSink.ReceiveMediaEvent(EMediaEvent::PlaybackEndReached); + + if (ShouldLoop && (CurrentRate != 0.0f)) + { + CurrentTime = FTimespan::Zero(); + SetRate(CurrentRate); + } + else + { + EventSink.ReceiveMediaEvent(EMediaEvent::PlaybackSuspended); + } + break; + + case ELibvlcEventType::MediaPlayerPaused: + EventSink.ReceiveMediaEvent(EMediaEvent::PlaybackSuspended); + break; + + case ELibvlcEventType::MediaPlayerPlaying: + EventSink.ReceiveMediaEvent(EMediaEvent::PlaybackResumed); + break; + + default: + continue; + } + } + + const ELibvlcState State = FVlc::MediaPlayerGetState(Player); + + // update current time & rate + if (State == ELibvlcState::Playing) + { + CurrentRate = FVlc::MediaPlayerGetRate(Player); + CurrentTime += DeltaTime * CurrentRate; + } + else + { + CurrentRate = 0.0f; + } + + Callbacks.SetCurrentTime(CurrentTime); +} + + +/* FVlcMediaPlayer implementation + *****************************************************************************/ + +bool FVlcMediaPlayer::InitializePlayer() +{ + // create player for media source + Player = FVlc::MediaPlayerNewFromMedia(MediaSource.GetMedia()); + + if (Player == nullptr) + { + UE_LOG(LogVlcMedia, Warning, TEXT("Failed to initialize media player: %s"), ANSI_TO_TCHAR(FVlc::Errmsg())); + return false; + } + + // attach to event managers + FLibvlcEventManager* MediaEventManager = FVlc::MediaEventManager(MediaSource.GetMedia()); + FLibvlcEventManager* PlayerEventManager = FVlc::MediaPlayerEventManager(Player); + + if ((MediaEventManager == nullptr) || (PlayerEventManager == nullptr)) + { + FVlc::MediaPlayerRelease(Player); + Player = nullptr; + + return false; + } + + FVlc::EventAttach(MediaEventManager, ELibvlcEventType::MediaParsedChanged, &FVlcMediaPlayer::StaticEventCallback, this); + FVlc::EventAttach(PlayerEventManager, ELibvlcEventType::MediaPlayerEndReached, &FVlcMediaPlayer::StaticEventCallback, this); + FVlc::EventAttach(PlayerEventManager, ELibvlcEventType::MediaPlayerPlaying, &FVlcMediaPlayer::StaticEventCallback, this); + FVlc::EventAttach(PlayerEventManager, ELibvlcEventType::MediaPlayerPositionChanged, &FVlcMediaPlayer::StaticEventCallback, this); + FVlc::EventAttach(PlayerEventManager, ELibvlcEventType::MediaPlayerStopped, &FVlcMediaPlayer::StaticEventCallback, this); + + // initialize player + CurrentRate = 0.0f; + CurrentTime = FTimespan::Zero(); + + EventSink.ReceiveMediaEvent(EMediaEvent::MediaOpened); + + return true; +} + + +/* FVlcMediaPlayer static functions + *****************************************************************************/ + +void FVlcMediaPlayer::StaticEventCallback(FLibvlcEvent* Event, void* UserData) +{ + if (Event == nullptr) + { + return; + } + + UE_LOG(LogVlcMedia, Verbose, TEXT("Player %llx: Event [%s]"), UserData, *VlcMedia::EventToString(Event)); + + if (UserData != nullptr) + { + ((FVlcMediaPlayer*)UserData)->Events.Enqueue(Event->Type); + } +} diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaPlayer.h b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaPlayer.h new file mode 100644 index 0000000..775bb2b --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaPlayer.h @@ -0,0 +1,131 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Containers/Queue.h" +#include "IMediaCache.h" +#include "IMediaControls.h" +#include "IMediaPlayer.h" +#include "IMediaSamples.h" + +#include "VlcMediaCallbacks.h" +#include "VlcMediaSource.h" +#include "VlcMediaTracks.h" +#include "VlcMediaView.h" + +class IMediaEventSink; +class IMediaOutput; + +enum class ELibvlcEventType; + +struct FLibvlcEvent; +struct FLibvlcEventManager; +struct FLibvlcInstance; +struct FLibvlcMediaPlayer; + + +/** + * Implements a media player using the Video LAN Codec (VLC) framework. + */ +class FVlcMediaPlayer + : public IMediaPlayer + , protected IMediaCache + , protected IMediaControls +{ +public: + + /** + * Create and initialize a new instance. + * + * @param InEventSink The object that receives media events from this player. + * @param InInstance The LibVLC instance to use. + */ + FVlcMediaPlayer(IMediaEventSink& InEventSink, FLibvlcInstance* InInstance); + + /** Virtual destructor. */ + virtual ~FVlcMediaPlayer(); + +public: + + //~ IMediaPlayer interface + + virtual void Close() override; + virtual IMediaCache& GetCache() override; + virtual IMediaControls& GetControls() override; + virtual FString GetInfo() const override; + virtual FName GetPlayerName() const override; + virtual IMediaSamples& GetSamples() override; + virtual FString GetStats() const override; + virtual IMediaTracks& GetTracks() override; + virtual FString GetUrl() const override; + virtual IMediaView& GetView() override; + virtual bool Open(const FString& Url, const IMediaOptions* Options) override; + virtual bool Open(const TSharedRef& Archive, const FString& OriginalUrl, const IMediaOptions* Options) override; + virtual void TickInput(FTimespan DeltaTime, FTimespan Timecode) override; + +protected: + + /** + * Initialize the media player. + * + * @return true on success, false otherwise. + */ + bool InitializePlayer(); + +protected: + + //~ IMediaControls interface + + virtual bool CanControl(EMediaControl Control) const override; + virtual FTimespan GetDuration() const override; + virtual float GetRate() const override; + virtual EMediaState GetState() const override; + virtual EMediaStatus GetStatus() const override; + virtual TRangeSet GetSupportedRates(EMediaRateThinning Thinning) const override; + virtual FTimespan GetTime() const override; + virtual bool IsLooping() const override; + virtual bool Seek(const FTimespan& Time) override; + virtual bool SetLooping(bool Looping) override; + virtual bool SetRate(float Rate) override; + +private: + + /** Handles event callbacks. */ + static void StaticEventCallback(FLibvlcEvent* Event, void* UserData); + +private: + + /** VLC callback manager. */ + FVlcMediaCallbacks Callbacks; + + /** Current playback rate. */ + float CurrentRate; + + /** Current playback time (to work around VLC's broken time tracking). */ + FTimespan CurrentTime; + + /** The media event handler. */ + IMediaEventSink& EventSink; + + /** Collection of received player events. */ + TQueue Events; + + /** Media information string. */ + FString Info; + + /** The media source (from URL or archive). */ + FVlcMediaSource MediaSource; + + /** The VLC media player object. */ + FLibvlcMediaPlayer* Player; + + /** Whether playback should be looping. */ + bool ShouldLoop; + + /** Track collection. */ + FVlcMediaTracks Tracks; + + /** View settings. */ + FVlcMediaView View; +}; diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaSource.cpp b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaSource.cpp new file mode 100644 index 0000000..a9ed208 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaSource.cpp @@ -0,0 +1,189 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#include "VlcMediaSource.h" +#include "VlcMediaPrivate.h" + +#include "Vlc.h" + + +/* FVlcMediaReader structors +*****************************************************************************/ + +FVlcMediaSource::FVlcMediaSource(FLibvlcInstance* InVlcInstance) + : Media(nullptr) + , VlcInstance(InVlcInstance) +{ } + + +/* FVlcMediaReader interface +*****************************************************************************/ + +FTimespan FVlcMediaSource::GetDuration() const +{ + if (Media == nullptr) + { + return FTimespan::Zero(); + } + + int64 Duration = FVlc::MediaGetDuration(Media); + + if (Duration < 0) + { + return FTimespan::Zero(); + } + + return FTimespan(Duration * ETimespan::TicksPerMillisecond); +} + + +FLibvlcMedia* FVlcMediaSource::OpenArchive(const TSharedRef& Archive, const FString& OriginalUrl) +{ + check(Media == nullptr); + + if (Archive->TotalSize() > 0) + { + Data = Archive; + Media = FVlc::MediaNewCallbacks( + VlcInstance, + nullptr, + &FVlcMediaSource::HandleMediaRead, + &FVlcMediaSource::HandleMediaSeek, + &FVlcMediaSource::HandleMediaClose, + this + ); + + if (Media == nullptr) + { + UE_LOG(LogVlcMedia, Warning, TEXT("Failed to open media from archive: %s (%s)"), *OriginalUrl, ANSI_TO_TCHAR(FVlc::Errmsg())); + Data.Reset(); + } + else + { + CurrentUrl = OriginalUrl; + } + } + + return Media; +} + + +FLibvlcMedia* FVlcMediaSource::OpenUrl(const FString& Url) +{ + check(Media == nullptr); + + Media = FVlc::MediaNewLocation(VlcInstance, TCHAR_TO_ANSI(*Url)); + + if (Media == nullptr) + { + UE_LOG(LogVlcMedia, Warning, TEXT("Failed to open media from URL: %s (%s)"), *Url, ANSI_TO_TCHAR(FVlc::Errmsg())); + } + else + { + CurrentUrl = Url; + } + + return Media; +} + + +void FVlcMediaSource::Close() +{ + if (Media != nullptr) + { + FVlc::MediaRelease(Media); + Media = nullptr; + } + + Data.Reset(); + CurrentUrl.Reset(); +} + + +/* FVlcMediaReader static functions +*****************************************************************************/ + +int FVlcMediaSource::HandleMediaOpen(void* Opaque, void** OutData, uint64* OutSize) +{ + auto Reader = (FVlcMediaSource*)Opaque; + + if ((Reader == nullptr) || !Reader->Data.IsValid()) + { + return 0; + } + + *OutSize = Reader->Data->TotalSize(); + + return 0; +} + + +SSIZE_T FVlcMediaSource::HandleMediaRead(void* Opaque, void* Buffer, SIZE_T Length) +{ + auto Reader = (FVlcMediaSource*)Opaque; + + if (Reader == nullptr) + { + return -1; + } + + TSharedPtr Data = Reader->Data; + + if (!Reader->Data.IsValid()) + { + return -1; + } + + SIZE_T DataSize = (SIZE_T)Data->TotalSize(); + SIZE_T BytesToRead = FMath::Min(Length, DataSize); + SIZE_T DataPosition = Reader->Data->Tell(); + + if ((DataSize - BytesToRead) < DataPosition) + { + BytesToRead = DataSize - DataPosition; + } + + if (BytesToRead > 0) + { + Data->Serialize(Buffer, BytesToRead); + } + + return (SSIZE_T)BytesToRead; +} + + +int FVlcMediaSource::HandleMediaSeek(void* Opaque, uint64 Offset) +{ + auto Reader = (FVlcMediaSource*)Opaque; + + if (Reader == nullptr) + { + return -1; + } + + TSharedPtr Data = Reader->Data; + + if (!Reader->Data.IsValid()) + { + return -1; + } + + if ((uint64)Data->TotalSize() <= Offset) + { + return -1; + } + + Reader->Data->Seek(Offset); + + return 0; +} + + +void FVlcMediaSource::HandleMediaClose(void* Opaque) +{ + auto Reader = (FVlcMediaSource*)Opaque; + + if (Reader != nullptr) + { + Reader->Data->Seek(0); + } +} diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaSource.h b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaSource.h new file mode 100644 index 0000000..9705269 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaSource.h @@ -0,0 +1,103 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" + + +struct FLibvlcInstance; +struct FLibvlcMedia; + + +/** + * Implements a media source, such as a movie file or URL. + */ +class FVlcMediaSource +{ +public: + + /** + * Create and initialize a new instance. + * + * @param InInstance The LibVLC instance to use. + */ + FVlcMediaSource(FLibvlcInstance* InVlcInstance); + +public: + + /** Get the media object. */ + FLibvlcMedia* GetMedia() const + { + return Media; + } + + /** Get the URL of the currently open media source. */ + const FString& GetCurrentUrl() const + { + return CurrentUrl; + } + + /** + * Get the duration of the media source. + * + * @return Media duration. + */ + FTimespan GetDuration() const; + + /** + * Open a media source using the given archive. + * + * You must call Close() if this media source is open prior to calling this method. + * + * @param Archive The archive to read media data from. + * @return The media object. + * @see OpenUrl, Close + */ + FLibvlcMedia* OpenArchive(const TSharedRef& Archive, const FString& OriginalUrl); + + /** + * Open a media source from the specified URL. + * + * You must call Close() if this media source is open prior to calling this method. + * + * @param Url The media resource locator. + * @return The media object. + * @see OpenArchive, Close + */ + FLibvlcMedia* OpenUrl(const FString& Url); + + /** + * Close the media source. + * + * @see OpenArchive, OpenUrl + */ + void Close(); + +private: + + /** Handles open callbacks from VLC. */ + static int HandleMediaOpen(void* Opaque, void** OutData, uint64* OutSize); + + /** Handles read callbacks from VLC. */ + static SSIZE_T HandleMediaRead(void* Opaque, void* Buffer, SIZE_T Length); + + /** Handles seek callbacks from VLC. */ + static int HandleMediaSeek(void* Opaque, uint64 Offset); + + /** Handles close callbacks from VLC. */ + static void HandleMediaClose(void* Opaque); + +private: + + /** The file or memory archive to stream from (for local media only). */ + TSharedPtr Data; + + /** The media object. */ + FLibvlcMedia* Media; + + /** Currently opened media. */ + FString CurrentUrl; + + /** The LibVLC instance. */ + FLibvlcInstance* VlcInstance; +}; diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaTextureSample.h b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaTextureSample.h new file mode 100644 index 0000000..fd8764e --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaTextureSample.h @@ -0,0 +1,206 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreTypes.h" +#include "IMediaTextureSample.h" +#include "MediaObjectPool.h" +#include "Math/IntPoint.h" +#include "Misc/Timespan.h" +#include "Templates/SharedPointer.h" + + +/** + * Texture sample generated by VlcMedia player. + */ +class FVlcMediaTextureSample + : public IMediaTextureSample + , public IMediaPoolable +{ +public: + + /** Default constructor. */ + FVlcMediaTextureSample() + : Buffer(nullptr) + , BufferSize(0) + , Dim(FIntPoint::ZeroValue) + , Duration(FTimespan::Zero()) + , OutputDim(FIntPoint::ZeroValue) + , SampleFormat(EMediaTextureSampleFormat::Undefined) + , Stride(0) + , Time(FTimespan::Zero()) + { } + + /** Virtual destructor. */ + virtual ~FVlcMediaTextureSample() + { + FreeBuffer(); + } + +public: + + /** + * Get a writable pointer to the sample buffer. + * + * @return The buffer. + * @see Initialize + */ + void* GetMutableBuffer() + { + return Buffer; + } + + /** + * Initialize the sample. + * + * @param InDim The sample buffer's width and height (in pixels). + * @param InOutputDim The sample's output width and height (in pixels). + * @param InSampleFormat The sample format. + * @param InStride Number of bytes per pixel row. + * @param InDuration The duration for which the sample is valid. + * @return true on success, false otherwise. + */ + bool Initialize( + const FIntPoint& InDim, + const FIntPoint& InOutputDim, + EMediaTextureSampleFormat InSampleFormat, + uint32 InStride, + FTimespan InDuration) + { + if (InSampleFormat == EMediaTextureSampleFormat::Undefined) + { + return false; + } + + const SIZE_T RequiredBufferSize = InStride * InDim.Y; + + if (RequiredBufferSize == 0) + { + return false; + } + + if (RequiredBufferSize > BufferSize) + { + Buffer = FMemory::Realloc(Buffer, RequiredBufferSize, 32); + BufferSize = RequiredBufferSize; + } + + Dim = InDim; + Duration = InDuration; + OutputDim = InOutputDim; + SampleFormat = InSampleFormat; + Stride = InStride; + + return true; + } + + /** + * Set the time for which the sample was generated. + * + * @param InTime The time to set (in the player's clock). + */ + void SetTime(FTimespan InTime) + { + Time = InTime; + } + +public: + + //~ IMediaTextureSample interface + + virtual const void* GetBuffer() override + { + return Buffer; + } + + virtual FIntPoint GetDim() const override + { + return Dim; + } + + virtual FTimespan GetDuration() const override + { + return Duration; + } + + virtual EMediaTextureSampleFormat GetFormat() const override + { + return SampleFormat; + } + + virtual FIntPoint GetOutputDim() const override + { + return OutputDim; + } + + virtual uint32 GetStride() const override + { + return Stride; + } + +#if WITH_ENGINE + virtual FRHITexture* GetTexture() const override + { + return nullptr; + } +#endif //WITH_ENGINE + + virtual FTimespan GetTime() const override + { + return Time; + } + + virtual bool IsCacheable() const override + { + return true; + } + + virtual bool IsOutputSrgb() const override + { + return true; + } + +protected: + + /** Free the sample buffer. */ + void FreeBuffer() + { + if (Buffer != nullptr) + { + FMemory::Free(Buffer); + + Buffer = nullptr; + BufferSize = 0; + } + } + +private: + + /** The sample's frame buffer. */ + void* Buffer; + + /** Allocated size of the buffer (in bytes). */ + SIZE_T BufferSize; + + /** Width and height of the texture sample. */ + FIntPoint Dim; + + /** Duration for which the sample is valid. */ + FTimespan Duration; + + /** Width and height of the output. */ + FIntPoint OutputDim; + + /** The sample format. */ + EMediaTextureSampleFormat SampleFormat; + + /** Number of bytes per pixel row. */ + uint32 Stride; + + /** Play time for which the sample was generated. */ + FTimespan Time; +}; + + +/** Implements a pool for VLC texture sample objects. */ +class FVlcMediaTextureSamplePool : public TMediaObjectPool { }; diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaTracks.cpp b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaTracks.cpp new file mode 100644 index 0000000..9e45408 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaTracks.cpp @@ -0,0 +1,443 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#include "VlcMediaTracks.h" +#include "Vlc.h" + +#include "MediaHelpers.h" + + +#define LOCTEXT_NAMESPACE "FVlcMediaTracks" + + +/* FVlcMediaTracks structors +*****************************************************************************/ + +FVlcMediaTracks::FVlcMediaTracks() + : Player(nullptr) +{ } + + +/* FVlcMediaTracks interface +*****************************************************************************/ + +void FVlcMediaTracks::Initialize(FLibvlcMediaPlayer& InPlayer, FString& OutInfo) +{ + Shutdown(); + + UE_LOG(LogVlcMedia, Verbose, TEXT("Tracks: %p: Initializing tracks"), this); + + Player = &InPlayer; + + int32 Width = FVlc::VideoGetWidth(Player); + int32 Height = FVlc::VideoGetHeight(Player); + int32 StreamCount = 0; + + // @todo gmp: fix audio specs + FVlc::AudioSetFormat(Player, "S16N", 44100, 2); + FVlc::VideoSetFormat(Player, "RV32", Width, Height, Width * 4); + + // initialize audio tracks + FLibvlcTrackDescription* AudioTrackDescr = FVlc::AudioGetTrackDescription(Player); + { + while (AudioTrackDescr != nullptr) + { + if (AudioTrackDescr->Id != -1) + { + FTrack Track; + { + Track.Id = AudioTrackDescr->Id; + Track.Name = ANSI_TO_TCHAR(AudioTrackDescr->Name); + Track.DisplayName = Track.Name.IsEmpty() + ? FText::Format(LOCTEXT("AudioTrackFormat", "Audio Track {0}"), FText::AsNumber(AudioTracks.Num())) + : FText::FromString(Track.Name); + } + + AudioTracks.Add(Track); + + OutInfo += FString::Printf(TEXT("Stream %i\n"), StreamCount); + OutInfo += TEXT(" Type: Audio\n"); + OutInfo += FString::Printf(TEXT(" Name: %s\n"), *Track.Name); + OutInfo += TEXT("\n"); + + ++StreamCount; + } + + AudioTrackDescr = AudioTrackDescr->Next; + } + } + FVlc::TrackDescriptionListRelease(AudioTrackDescr); + + // initialize caption tracks + FLibvlcTrackDescription* CaptionTrackDescr = FVlc::VideoGetSpuDescription(Player); + { + while (CaptionTrackDescr != nullptr) + { + if (CaptionTrackDescr->Id != -1) + { + FTrack Track; + { + Track.Id = CaptionTrackDescr->Id; + Track.Name = ANSI_TO_TCHAR(CaptionTrackDescr->Name); + Track.DisplayName = Track.Name.IsEmpty() + ? FText::Format(LOCTEXT("CaptionTrackFormat", "Caption Track {0}"), FText::AsNumber(CaptionTracks.Num())) + : FText::FromString(Track.Name); + } + + CaptionTracks.Add(Track); + + OutInfo += FString::Printf(TEXT("Stream %i\n"), StreamCount); + OutInfo += TEXT(" Type: Caption\n"); + OutInfo += FString::Printf(TEXT(" Name: %s\n"), *Track.Name); + OutInfo += TEXT("\n"); + + ++StreamCount; + } + + CaptionTrackDescr = CaptionTrackDescr->Next; + } + } + FVlc::TrackDescriptionListRelease(CaptionTrackDescr); + + // initialize video tracks + FLibvlcTrackDescription* VideoTrackDescr = FVlc::VideoGetTrackDescription(Player); + { + while (VideoTrackDescr != nullptr) + { + if (VideoTrackDescr->Id != -1) + { + FTrack Track; + { + Track.Id = VideoTrackDescr->Id; + Track.Name = ANSI_TO_TCHAR(VideoTrackDescr->Name); + Track.DisplayName = Track.Name.IsEmpty() + ? FText::Format(LOCTEXT("VideoTrackFormat", "Video Track {0}"), FText::AsNumber(VideoTracks.Num())) + : FText::FromString(Track.Name); + } + + VideoTracks.Add(Track); + + OutInfo += FString::Printf(TEXT("Stream %i\n"), StreamCount); + OutInfo += TEXT(" Type: Video\n"); + OutInfo += FString::Printf(TEXT(" Name: %s\n"), *Track.Name); + OutInfo += TEXT("\n"); + + ++StreamCount; + } + + VideoTrackDescr = VideoTrackDescr->Next; + } + } + FVlc::TrackDescriptionListRelease(VideoTrackDescr); + + UE_LOG(LogVlcMedia, Verbose, TEXT("Tracks %p: Found %i streams"), this, StreamCount); +} + + +void FVlcMediaTracks::Shutdown() +{ + UE_LOG(LogVlcMedia, Verbose, TEXT("Tracks: %p: Shutting down tracks"), this); + + if (Player != nullptr) + { + AudioTracks.Reset(); + VideoTracks.Reset(); + Player = nullptr; + } +} + + +/* IMediaTracks interface +*****************************************************************************/ + +bool FVlcMediaTracks::GetAudioTrackFormat(int32 TrackIndex, int32 FormatIndex, FMediaAudioTrackFormat& OutFormat) const +{ + if (!AudioTracks.IsValidIndex(TrackIndex) || (FormatIndex != 0)) + { + return false; + } + + // @todo gmp: fix audio format + OutFormat.BitsPerSample = 0; + OutFormat.NumChannels = 2; + OutFormat.SampleRate = 44100; + OutFormat.TypeName = TEXT("PCM"); + + return true; +} + + +int32 FVlcMediaTracks::GetNumTracks(EMediaTrackType TrackType) const +{ + switch (TrackType) + { + case EMediaTrackType::Audio: + return AudioTracks.Num(); + + case EMediaTrackType::Caption: + return CaptionTracks.Num(); + + case EMediaTrackType::Video: + return VideoTracks.Num(); + + default: + return 0; + } +} + + +int32 FVlcMediaTracks::GetNumTrackFormats(EMediaTrackType TrackType, int32 TrackIndex) const +{ + return ((TrackIndex >= 0) && (TrackIndex < GetNumTracks(TrackType))) ? 1 : 0; +} + + +int32 FVlcMediaTracks::GetSelectedTrack(EMediaTrackType TrackType) const +{ + if (Player == nullptr) + { + return INDEX_NONE; + } + + const TArray* Tracks = nullptr; + int32 TrackId = INDEX_NONE; + + switch (TrackType) + { + case EMediaTrackType::Audio: + Tracks = &AudioTracks; + TrackId = FVlc::AudioGetTrack(Player); + break; + + case EMediaTrackType::Caption: + Tracks = &CaptionTracks; + TrackId = FVlc::VideoGetSpu(Player); + break; + + case EMediaTrackType::Video: + Tracks = &VideoTracks; + TrackId = FVlc::VideoGetTrack(Player); + break; + } + + if (TrackId != INDEX_NONE) + { + check(Tracks != nullptr); + + for (int32 TrackIndex = 0; TrackIndex < Tracks->Num(); ++TrackIndex) + { + if ((*Tracks)[TrackIndex].Id == TrackId) + { + return TrackIndex; + } + } + } + + return INDEX_NONE; +} + + +FText FVlcMediaTracks::GetTrackDisplayName(EMediaTrackType TrackType, int32 TrackIndex) const +{ + switch (TrackType) + { + case EMediaTrackType::Audio: + if (AudioTracks.IsValidIndex(TrackIndex)) + { + return AudioTracks[TrackIndex].DisplayName; + } + break; + + case EMediaTrackType::Caption: + if (CaptionTracks.IsValidIndex(TrackIndex)) + { + return CaptionTracks[TrackIndex].DisplayName; + } + break; + + case EMediaTrackType::Video: + if (VideoTracks.IsValidIndex(TrackIndex)) + { + return VideoTracks[TrackIndex].DisplayName; + } + + default: + break; + } + + return FText::GetEmpty(); +} + + +int32 FVlcMediaTracks::GetTrackFormat(EMediaTrackType TrackType, int32 TrackIndex) const +{ + return (GetSelectedTrack(TrackType) != INDEX_NONE) ? 0 : INDEX_NONE; +} + + +FString FVlcMediaTracks::GetTrackLanguage(EMediaTrackType TrackType, int32 TrackIndex) const +{ + return TEXT("und"); // libvlc currently doesn't provide language codes +} + + +FString FVlcMediaTracks::GetTrackName(EMediaTrackType TrackType, int32 TrackIndex) const +{ + switch (TrackType) + { + case EMediaTrackType::Audio: + if (AudioTracks.IsValidIndex(TrackIndex)) + { + return AudioTracks[TrackIndex].Name; + } + break; + + case EMediaTrackType::Caption: + if (CaptionTracks.IsValidIndex(TrackIndex)) + { + return CaptionTracks[TrackIndex].Name; + } + break; + + case EMediaTrackType::Video: + if (VideoTracks.IsValidIndex(TrackIndex)) + { + return VideoTracks[TrackIndex].Name; + } + + default: + break; + } + + return FString(); +} + + +bool FVlcMediaTracks::GetVideoTrackFormat(int32 TrackIndex, int32 FormatIndex, FMediaVideoTrackFormat& OutFormat) const +{ + if (!VideoTracks.IsValidIndex(TrackIndex) || (FormatIndex != 0) || (Player == nullptr)) + { + return false; + } + + // @todo gmp: fix video specs + OutFormat.Dim = FIntPoint(FVlc::VideoGetWidth(Player), FVlc::VideoGetHeight(Player)); + OutFormat.FrameRate = FVlc::MediaPlayerGetFps(Player); + OutFormat.FrameRates = TRange(OutFormat.FrameRate); + OutFormat.TypeName = TEXT("Default"); + + return true; +} + + +bool FVlcMediaTracks::SelectTrack(EMediaTrackType TrackType, int32 TrackIndex) +{ + if (Player == nullptr) + { + return false; // not initialized + } + + UE_LOG(LogVlcMedia, Verbose, TEXT("Tracks %p: Selecting %s track %i"), this, *MediaUtils::TrackTypeToString(TrackType), TrackIndex); + + int32 TrackId = INDEX_NONE; + + switch (TrackType) + { + case EMediaTrackType::Audio: + if (AudioTracks.IsValidIndex(TrackIndex)) + { + TrackId = AudioTracks[TrackIndex].Id; + } + else if (TrackIndex == INDEX_NONE) + { + TrackId = -1; + } + else + { + return false; // invalid track + } + + if (FVlc::AudioSetTrack(Player, TrackId) != 0) + { + UE_LOG(LogVlcMedia, Verbose, TEXT("Tracks %p: Failed to %s audio track %i (id %i)"), this, (TrackId == -1) ? TEXT("disable") : TEXT("enable"), TrackIndex, TrackId); + return false; + } + + case EMediaTrackType::Caption: + if (CaptionTracks.IsValidIndex(TrackIndex)) + { + TrackId = CaptionTracks[TrackIndex].Id; + } + else if (TrackIndex == INDEX_NONE) + { + TrackId = -1; + } + else + { + return false; // invalid track + } + + if (FVlc::VideoSetSpu(Player, TrackId) != 0) + { + UE_LOG(LogVlcMedia, Verbose, TEXT("Tracks %p: Failed to %s caption track %i (id %i)"), this, (TrackId == -1) ? TEXT("disable") : TEXT("enable"), TrackIndex, TrackId); + return false; + } + + case EMediaTrackType::Video: + if (VideoTracks.IsValidIndex(TrackIndex)) + { + TrackId = VideoTracks[TrackIndex].Id; + } + else if (TrackIndex == INDEX_NONE) + { + TrackId = -1; + } + else + { + return false; // invalid track + } + + if ((TrackId != -1) && (FVlc::VideoSetTrack(Player, -1) != 0)) + { + UE_LOG(LogVlcMedia, Verbose, TEXT("Tracks %p: Failed to disable video decoding"), this); + return false; + } + + if (FVlc::VideoSetTrack(Player, TrackId) != 0) + { + UE_LOG(LogVlcMedia, Verbose, TEXT("Tracks %p: Failed to %s video track %i (id %i)"), this, (TrackId == -1) ? TEXT("disable") : TEXT("enable"), TrackIndex, TrackId); + return false; + } + + default: + return false; // unsupported track type + } + + return true; +} + + +bool FVlcMediaTracks::SetTrackFormat(EMediaTrackType TrackType, int32 TrackIndex, int32 FormatIndex) +{ + if ((Player == nullptr) || (FormatIndex != 0)) + { + return false; + } + + switch (TrackType) + { + case EMediaTrackType::Audio: + return AudioTracks.IsValidIndex(TrackIndex); + + case EMediaTrackType::Caption: + return CaptionTracks.IsValidIndex(TrackIndex); + + case EMediaTrackType::Video: + return VideoTracks.IsValidIndex(TrackIndex); + + default: + return false; + } +} + + +#undef LOCTEXT_NAMESPACE diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaTracks.h b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaTracks.h new file mode 100644 index 0000000..8a5c3ba --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaTracks.h @@ -0,0 +1,73 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "Containers/Array.h" +#include "Containers/UnrealString.h" +#include "IMediaTracks.h" +#include "Internationalization/Text.h" + +struct FLibvlcMediaPlayer; + + +/** + * Implements the track collection for VLC based media players. + */ +class FVlcMediaTracks + : public IMediaTracks +{ + struct FTrack + { + FText DisplayName; + int32 Id; + FString Name; + }; + +public: + + /** Default constructor. */ + FVlcMediaTracks(); + +public: + + /** + * Initialize this object for the specified VLC media player. + * + * @param InPlayer The VLC media player. + * @param OutInfo Will contain information about the available media tracks. + */ + void Initialize(FLibvlcMediaPlayer& InPlayer, FString& OutInfo); + + /** Shut down this object. */ + void Shutdown(); + +public: + + //~ IMediaTracks interface + + virtual bool GetAudioTrackFormat(int32 TrackIndex, int32 FormatIndex, FMediaAudioTrackFormat& OutFormat) const override; + virtual int32 GetNumTracks(EMediaTrackType TrackType) const override; + virtual int32 GetNumTrackFormats(EMediaTrackType TrackType, int32 TrackIndex) const override; + virtual int32 GetSelectedTrack(EMediaTrackType TrackType) const override; + virtual FText GetTrackDisplayName(EMediaTrackType TrackType, int32 TrackIndex) const override; + virtual int32 GetTrackFormat(EMediaTrackType TrackType, int32 TrackIndex) const override; + virtual FString GetTrackLanguage(EMediaTrackType TrackType, int32 TrackIndex) const override; + virtual FString GetTrackName(EMediaTrackType TrackType, int32 TrackIndex) const override; + virtual bool GetVideoTrackFormat(int32 TrackIndex, int32 FormatIndex, FMediaVideoTrackFormat& OutFormat) const override; + virtual bool SelectTrack(EMediaTrackType TrackType, int32 TrackIndex) override; + virtual bool SetTrackFormat(EMediaTrackType TrackType, int32 TrackIndex, int32 FormatIndex) override; + +private: + + /** Audio track descriptors. */ + TArray AudioTracks; + + /** Caption track descriptors. */ + TArray CaptionTracks; + + /** The VLC media player object. */ + FLibvlcMediaPlayer* Player; + + /** Video track descriptors. */ + TArray VideoTracks; +}; diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaView.cpp b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaView.cpp new file mode 100644 index 0000000..2c8cd0b --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaView.cpp @@ -0,0 +1,138 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#include "VlcMediaView.h" +#include "VlcMediaPrivate.h" + +#include "Vlc.h" + + +/* FVlcMediaView structors +*****************************************************************************/ + +FVlcMediaView::FVlcMediaView() + : CurrentFieldOfView(90.0f) + , CurrentOrientation(EForceInit::ForceInit) + , Player(nullptr) +{ + Viewpoint = FVlc::VideoNewViewpoint(); + + if (Viewpoint == nullptr) + { + UE_LOG(LogVlcMedia, Warning, TEXT("Failed to create viewpoint structure; 360 view controls will be unavailable.")); + } +} + + +FVlcMediaView::~FVlcMediaView() +{ + if (Viewpoint != nullptr) + { + FVlc::Free(Viewpoint); + Viewpoint = nullptr; + } +} + + +/* FVlcMediaView interface +*****************************************************************************/ + +void FVlcMediaView::Initialize(FLibvlcMediaPlayer& InPlayer) +{ + Player = &InPlayer; +} + + +void FVlcMediaView::Shutdown() +{ + Player = nullptr; +} + + +/* IMediaView interface +*****************************************************************************/ + +bool FVlcMediaView::GetViewField(float& OutHorizontal, float& OutVertical) const +{ + OutHorizontal = CurrentFieldOfView; + OutVertical = CurrentFieldOfView; + + return true; +} + + +bool FVlcMediaView::GetViewOrientation(FQuat& OutOrientation) const +{ + OutOrientation = CurrentOrientation; + + return true; +} + + +bool FVlcMediaView::SetViewField(float Horizontal, float Vertical, bool Absolute) +{ + if ((Player == nullptr) || (Viewpoint == nullptr)) + { + return false; + } + + if (!Absolute) + { + Horizontal = CurrentFieldOfView + Horizontal; + } + + FVector Euler = CurrentOrientation.Euler(); + + Viewpoint->Roll = Euler.X; + Viewpoint->Pitch = Euler.Y; + Viewpoint->Yaw = Euler.Z; + Viewpoint->FieldOfView = FMath::ClampAngle(Horizontal, 10.0f, 360.0f); + + UE_LOG(LogVlcMedia, VeryVerbose, TEXT("Setting viewpoint to %f %f %f / %f."), Viewpoint->Roll, Viewpoint->Pitch, Viewpoint->Roll, Viewpoint->FieldOfView); + + if (FVlc::VideoUpdateViewpoint(Player, Viewpoint, true) != 0) + { + return false; + } + + CurrentFieldOfView = Horizontal; + + return true; +} + + +bool FVlcMediaView::SetViewOrientation(const FQuat& Orientation, bool Absolute) +{ + if ((Player == nullptr) || (Viewpoint == nullptr)) + { + return false; + } + + FQuat NewOrientation; + + if (Absolute) + { + NewOrientation = Orientation; + } + else + { + NewOrientation = Orientation * CurrentOrientation; + } + + FVector Euler = NewOrientation.Euler(); + + Viewpoint->Roll = Euler.X; + Viewpoint->Pitch = Euler.Y; + Viewpoint->Yaw = Euler.Z; + Viewpoint->FieldOfView = CurrentFieldOfView; + + UE_LOG(LogVlcMedia, VeryVerbose, TEXT("Setting viewpoint to %f %f %f / %f."), Viewpoint->Roll, Viewpoint->Pitch, Viewpoint->Roll, Viewpoint->FieldOfView); + + if (FVlc::VideoUpdateViewpoint(Player, Viewpoint, true) != 0) + { + return false; + } + + CurrentOrientation = NewOrientation; + + return true; +} diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaView.h b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaView.h new file mode 100644 index 0000000..b62b039 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Player/VlcMediaView.h @@ -0,0 +1,59 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "IMediaView.h" + +struct FLibvlcMediaPlayer; +struct FLibvlcVideoViewpoint; + + +/** + * Implements VLC video view settings. + */ +class FVlcMediaView + : public IMediaView +{ +public: + + /** Default constructor. */ + FVlcMediaView(); + + /** Virtual destructor. */ + virtual ~FVlcMediaView(); + +public: + + /** + * Initialize this object for the specified VLC media player. + * + * @param InPlayer The VLC media player. + */ + void Initialize(FLibvlcMediaPlayer& InPlayer); + + /** Shut down this object. */ + void Shutdown(); + +public: + + //~ IMediaView interface + + virtual bool GetViewField(float& OutHorizontal, float& OutVertical) const override; + virtual bool GetViewOrientation(FQuat& OutOrientation) const override; + virtual bool SetViewField(float Horizontal, float Vertical, bool Absolute) override; + virtual bool SetViewOrientation(const FQuat& Orientation, bool Absolute) override; + +private: + + /** The current field of view (horizontal & vertical). */ + float CurrentFieldOfView; + + /** The current view orientation. */ + FQuat CurrentOrientation; + + /** The VLC media player object. */ + FLibvlcMediaPlayer* Player; + + /** The VLC video viewpoint. */ + FLibvlcVideoViewpoint* Viewpoint; +}; diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Shared/VlcMediaUtils.cpp b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Shared/VlcMediaUtils.cpp new file mode 100644 index 0000000..4d555b1 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Shared/VlcMediaUtils.cpp @@ -0,0 +1,97 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#include "VlcMediaUtils.h" +#include "VlcTypes.h" + + +namespace VlcMedia +{ + FString EventToString(FLibvlcEvent* Event) + { + switch (Event->Type) + { + case ELibvlcEventType::MediaMetaChanged: return TEXT("Media Data Changed"); + case ELibvlcEventType::MediaSubItemAdded: return TEXT("Media Sub Item Added"); + case ELibvlcEventType::MediaDurationChanged: return TEXT("Media Duration Changed"); + case ELibvlcEventType::MediaParsedChanged: return TEXT("Media Parsed Changed"); + case ELibvlcEventType::MediaFreed: return TEXT("Media Freed"); + case ELibvlcEventType::MediaStateChanged: return FString::Printf(TEXT("Media State Changed: %s"), *StateToString(Event->Descriptor.MediaStateChanged.NewState)); + case ELibvlcEventType::MediaSubItemTreeAdded: return TEXT("Media Sub Item Tree Added"); + + case ELibvlcEventType::MediaPlayerMediaChanged: return TEXT("Player Media Changed"); + case ELibvlcEventType::MediaPlayerNothingSpecial: return TEXT("Player Nothing Special"); + case ELibvlcEventType::MediaPlayerOpening: return TEXT("Player Opening"); + case ELibvlcEventType::MediaPlayerBuffering: return FString::Printf(TEXT("Player Buffering: %f"), Event->Descriptor.MediaPlayerBuffering.NewCache); + case ELibvlcEventType::MediaPlayerPlaying: return TEXT("Player Playing"); + case ELibvlcEventType::MediaPlayerPaused: return TEXT("Player Paused"); + case ELibvlcEventType::MediaPlayerStopped: return TEXT("Player Stopped"); + case ELibvlcEventType::MediaPlayerForward: return TEXT("Player Forward"); + case ELibvlcEventType::MediaPlayerBackward: return TEXT("Player Backward"); + case ELibvlcEventType::MediaPlayerEndReached: return TEXT("Player End Reached"); + case ELibvlcEventType::MediaPlayerEncounteredError: return TEXT("Player Encountered Error"); + case ELibvlcEventType::MediaPlayerTimeChanged: return FString::Printf(TEXT("Player Time Changed: %s"), *FTimespan::FromMilliseconds(Event->Descriptor.MediaPlayerTimeChanged.NewTime).ToString()); + case ELibvlcEventType::MediaPlayerPositionChanged: return FString::Printf(TEXT("Position Changed: %f"), Event->Descriptor.MediaPlayerPositionChanged.NewPosition); + case ELibvlcEventType::MediaPlayerSeekableChanged: return FString::Printf(TEXT("Player Seekable Changed: %s"), Event->Descriptor.MediaPlayerSeekableChanged.new_seekable ? *GTrue.ToString() : *GFalse.ToString()); + case ELibvlcEventType::MediaPlayerPausableChanged: return FString::Printf(TEXT("Player Pausable Changed: %s"), Event->Descriptor.MediaPlayerPausableChanged.NewPausable ? *GTrue.ToString() : *GFalse.ToString()); + case ELibvlcEventType::MediaPlayerTitleChanged: return FString::Printf(TEXT("Player Title Changed: %s"), Event->Descriptor.MediaPlayerTitleChanged.NewTitle); + case ELibvlcEventType::MediaPlayerSnapshotTaken: return TEXT("Player Snapshot Taken"); + case ELibvlcEventType::MediaPlayerLengthChanged: return FString::Printf(TEXT("Player Length Changed: %i"), Event->Descriptor.MediaPlayerLengthChanged.NewLength); + case ELibvlcEventType::MediaPlayerVout: return FString::Printf(TEXT("Player Vout: %i"), Event->Descriptor.MediaPlayerVout.NewCount); + case ELibvlcEventType::MediaPlayerScrambledChanged: return FString::Printf(TEXT("Player Scambled Changed: %s"), Event->Descriptor.MediaPlayerScrambledChanged.NewScrambled ? *GTrue.ToString() : *GFalse.ToString()); + case ELibvlcEventType::MediaPlayerESAdded: return TEXT("Player ES Added"); + case ELibvlcEventType::MediaPlayerESDeleted: return TEXT("Player ES Deleted"); + case ELibvlcEventType::MediaPlayerESSelected: return TEXT("Player ES Selected"); + + case ELibvlcEventType::MediaListItemAdded: return TEXT("Media List Item Added"); + case ELibvlcEventType::MediaListWillAddItem: return TEXT("Media List Will Add Item"); + case ELibvlcEventType::MediaListItemDeleted: return TEXT("Media List Item Deleted"); + case ELibvlcEventType::MediaListWillDeleteItem: return TEXT("Media List Will Delete Item"); + case ELibvlcEventType::MediaListEndReached: return TEXT("Media List End Reached"); + + case ELibvlcEventType::MediaListViewItemAdded: return TEXT("Media List View Item Added"); + case ELibvlcEventType::MediaListViewWillAddItem: return TEXT("Media List View Will Add Item"); + case ELibvlcEventType::MediaListViewItemDeleted: return TEXT("Media List View Item Deleted"); + case ELibvlcEventType::MediaListViewWillDeleteItem: return TEXT("Media List View Will Delete Item"); + + case ELibvlcEventType::MediaListPlayerPlayed: return TEXT("Media List Player Played"); + case ELibvlcEventType::MediaListPlayerNextItemSet: return TEXT("Media List Player Next Item Set"); + case ELibvlcEventType::MediaListPlayerStopped: return TEXT("Media List Player Stopped"); + + case ELibvlcEventType::MediaDiscovererStarted: return TEXT("Media Discovery Started"); + case ELibvlcEventType::MediaDiscovererEnded: return TEXT("Media Discovery Ended"); + + case ELibvlcEventType::VlmMediaAdded: return TEXT("VLM Media Added"); + case ELibvlcEventType::VlmMediaRemoved: return TEXT("VLM Media Removed"); + case ELibvlcEventType::VlmMediaChanged: return TEXT("VLM Media Changed"); + case ELibvlcEventType::VlmMediaInstanceStarted: return TEXT("VLM Instance Started"); + case ELibvlcEventType::VlmMediaInstanceStopped: return TEXT("VLM Instance Stopped"); + case ELibvlcEventType::VlmMediaInstanceStatusInit: return TEXT("VLM Instance Status Init"); + case ELibvlcEventType::VlmMediaInstanceStatusOpening: return TEXT("VLM Instance Status Opening"); + case ELibvlcEventType::VlmMediaInstanceStatusPlaying: return TEXT("VLM Instance Status Playing"); + case ELibvlcEventType::VlmMediaInstanceStatusPause: return TEXT("VLM Instance Status Paused"); + case ELibvlcEventType::VlmMediaInstanceStatusEnd: return TEXT("VLM Instance Status End"); + case ELibvlcEventType::VlmMediaInstanceStatusError: return TEXT("VLM Instance Status Error"); + + default: + return FString::Printf(TEXT("Unknown event %i"), (int32)Event->Type); + } + } + + + FString StateToString(ELibvlcState State) + { + switch (State) + { + case ELibvlcState::NothingSpecial: return TEXT("Nothing Special"); + case ELibvlcState::Opening: return TEXT("Opening"); + case ELibvlcState::Buffering: return TEXT("Buffering"); + case ELibvlcState::Playing: return TEXT("Playing"); + case ELibvlcState::Paused: return TEXT("Paused"); + case ELibvlcState::Stopped: return TEXT("Stopped"); + case ELibvlcState::Ended: return TEXT("Ended"); + case ELibvlcState::Error: return TEXT("Error"); + default: + return FString::Printf(TEXT("Unknown state %i"), (int32)State); + } + } +} diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Shared/VlcMediaUtils.h b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Shared/VlcMediaUtils.h new file mode 100644 index 0000000..913acf8 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Shared/VlcMediaUtils.h @@ -0,0 +1,29 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" + + +enum class ELibvlcState; +struct FLibvlcEvent; + + +namespace VlcMedia +{ + /** + * Convert a LibVLC event to string. + * + * @param Event The event code to convert. + * @return The corresponding string. + */ + FString EventToString(FLibvlcEvent* Event); + + /** + * Convert a LibVLC state to string. + * + * @param Event The state code to convert. + * @return The corresponding string. + */ + FString StateToString(ELibvlcState State); +} diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Vlc/Vlc.cpp b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Vlc/Vlc.cpp new file mode 100644 index 0000000..18b998b --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Vlc/Vlc.cpp @@ -0,0 +1,306 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#include "Vlc.h" +#include "VlcMediaPrivate.h" + +#include "HAL/PlatformProcess.h" +#include "Interfaces/IPluginManager.h" +#include "Misc/Paths.h" + + +#define VLC_DEFINE(Func) \ + FLibvlc##Func##Proc FVlc::Func = nullptr; + +#define VLC_IMPORT(Name, Func) \ + Func = (FLibvlc##Func##Proc)FPlatformProcess::GetDllExport(LibHandle, TEXT(#Name)); \ + if (Func == nullptr) \ + { \ + UE_LOG(LogVlcMedia, Warning, TEXT("Failed to import VLC function %s"), TEXT(#Name)); \ + Shutdown(); \ + return false; \ + } + +#define VLCCORE_IMPORT(Name, Func) \ + Func = (FLibvlc##Func##Proc)FPlatformProcess::GetDllExport(CoreHandle, TEXT(#Name)); \ + if (Func == nullptr) \ + { \ + UE_LOG(LogVlcMedia, Warning, TEXT("Failed to import VLC Core function %s"), TEXT(#Name)); \ + Shutdown(); \ + return false; \ + } + + +/* Static initialization + *****************************************************************************/ + +void* FVlc::CoreHandle = nullptr; +void* FVlc::LibHandle = nullptr; +FString FVlc::PluginDir; + + +VLC_DEFINE(New) +VLC_DEFINE(Release) +VLC_DEFINE(Retain) + +VLC_DEFINE(Errmsg) +VLC_DEFINE(Clearerr) + +VLC_DEFINE(EventAttach) +VLC_DEFINE(EventDetach) +VLC_DEFINE(EventTypeName) + +VLC_DEFINE(LogGetContext) +VLC_DEFINE(LogSet) +VLC_DEFINE(LogUnset) + +VLC_DEFINE(Free) +VLC_DEFINE(GetChangeset) +VLC_DEFINE(GetCompiler) +VLC_DEFINE(GetVersion) + +VLC_DEFINE(Clock) + +VLC_DEFINE(MediaEventManager) +VLC_DEFINE(MediaGetDuration) +VLC_DEFINE(MediaGetStats) +VLC_DEFINE(MediaNewCallbacks) +VLC_DEFINE(MediaNewLocation) +VLC_DEFINE(MediaNewPath) +VLC_DEFINE(MediaParseAsync) +VLC_DEFINE(MediaRelease) +VLC_DEFINE(MediaRetain) +VLC_DEFINE(MediaTracksGet) +VLC_DEFINE(MediaTracksRelease) + +VLC_DEFINE(MediaPlayerEventManager) +VLC_DEFINE(MediaPlayerGetMedia) +VLC_DEFINE(MediaPlayerNew) +VLC_DEFINE(MediaPlayerNewFromMedia) +VLC_DEFINE(MediaPlayerRelease) +VLC_DEFINE(MediaPlayerRetain) +VLC_DEFINE(MediaPlayerSetMedia) + +VLC_DEFINE(MediaPlayerCanPause) +VLC_DEFINE(MediaPlayerGetFps) +VLC_DEFINE(MediaPlayerGetLength) +VLC_DEFINE(MediaPlayerGetPosition) +VLC_DEFINE(MediaPlayerGetRate) +VLC_DEFINE(MediaPlayerGetState) +VLC_DEFINE(MediaPlayerGetTime) +VLC_DEFINE(MediaPlayerIsSeekable) +VLC_DEFINE(MediaPlayerSetPosition) +VLC_DEFINE(MediaPlayerSetRate) +VLC_DEFINE(MediaPlayerSetTime) + +VLC_DEFINE(MediaPlayerIsPlaying) +VLC_DEFINE(MediaPlayerPause) +VLC_DEFINE(MediaPlayerPlay) +VLC_DEFINE(MediaPlayerSetPause) +VLC_DEFINE(MediaPlayerStop) +VLC_DEFINE(MediaPlayerWillPlay) + +VLC_DEFINE(AudioGetTrack) +VLC_DEFINE(AudioSetCallbacks) +VLC_DEFINE(AudioSetFormat) +VLC_DEFINE(AudioSetFormatCallbacks) +VLC_DEFINE(AudioSetTrack) + +VLC_DEFINE(VideoGetHeight) +VLC_DEFINE(VideoGetSize) +VLC_DEFINE(VideoGetSpu) +VLC_DEFINE(VideoGetSpuCount) +VLC_DEFINE(VideoGetTrack) +VLC_DEFINE(VideoNewViewpoint) +VLC_DEFINE(VideoGetWidth) +VLC_DEFINE(VideoSetCallbacks) +VLC_DEFINE(VideoSetFormat) +VLC_DEFINE(VideoSetFormatCallbacks) +VLC_DEFINE(VideoSetSpu) +VLC_DEFINE(VideoSetTrack) +VLC_DEFINE(VideoUpdateViewpoint) + +VLC_DEFINE(AudioGetTrackDescription) +VLC_DEFINE(VideoGetSpuDescription) +VLC_DEFINE(VideoGetTrackDescription) +VLC_DEFINE(TrackDescriptionListRelease) + +VLC_DEFINE(FourccGetChromaDescription) + + +/* FVlc static functions + *****************************************************************************/ + +FString FVlc::GetPluginDir() +{ + return PluginDir; +} + + +bool FVlc::Initialize() +{ + // determine directory paths + const FString BaseDir = IPluginManager::Get().FindPlugin("VlcMedia")->GetBaseDir(); + const FString VlcDir = FPaths::Combine(*BaseDir, TEXT("ThirdParty"), TEXT("vlc")); + +#if PLATFORM_LINUX + const FString LibDir = FPaths::Combine(*VlcDir, TEXT("Linux"), TEXT("x86_64-unknown-linux-gnu"), TEXT("lib")); +#elif PLATFORM_MAC + const FString LibDir = FPaths::Combine(*VlcDir, TEXT("Mac")); +#elif PLATFORM_WINDOWS + #if PLATFORM_64BITS + const FString LibDir = FPaths::Combine(*VlcDir, TEXT("Win64")); + #else + const FString LibDir = FPaths::Combine(*VlcDir, TEXT("Win32")); + #endif +#endif + + // load required libraries in the correct order + if (!LoadDependency(LibDir, TEXT("libvlccore"), CoreHandle)) + { + return false; + } + + if (!LoadDependency(LibDir, TEXT("libvlc"), LibHandle)) + { + FreeDependency(CoreHandle); + + return false; + } + + PluginDir = FPaths::ConvertRelativePathToFull(FPaths::Combine(*LibDir, TEXT("plugins"))); + +#if PLATFORM_LINUX + PluginDir = FPaths::ConvertRelativePathToFull(FPaths::Combine(*LibDir, TEXT("vlc"), TEXT("plugins"))); +#endif + + // import library functions + VLC_IMPORT(libvlc_new, New) + VLC_IMPORT(libvlc_release, Release) + VLC_IMPORT(libvlc_retain, Retain) + + VLC_IMPORT(libvlc_errmsg, Errmsg) + VLC_IMPORT(libvlc_clearerr, Clearerr) + + VLC_IMPORT(libvlc_event_attach, EventAttach) + VLC_IMPORT(libvlc_event_detach, EventDetach) + VLC_IMPORT(libvlc_event_type_name, EventTypeName) + + VLC_IMPORT(libvlc_log_get_context, LogGetContext) + VLC_IMPORT(libvlc_log_set, LogSet) + VLC_IMPORT(libvlc_log_unset, LogUnset) + + VLC_IMPORT(libvlc_free, Free) + VLC_IMPORT(libvlc_get_changeset, GetChangeset) + VLC_IMPORT(libvlc_get_compiler, GetCompiler) + VLC_IMPORT(libvlc_get_version, GetVersion) + + VLC_IMPORT(libvlc_clock, Clock) + + VLC_IMPORT(libvlc_media_event_manager, MediaEventManager) + VLC_IMPORT(libvlc_media_get_duration, MediaGetDuration) + VLC_IMPORT(libvlc_media_get_stats, MediaGetStats) + VLC_IMPORT(libvlc_media_new_callbacks, MediaNewCallbacks) + VLC_IMPORT(libvlc_media_new_location, MediaNewLocation) + VLC_IMPORT(libvlc_media_new_path, MediaNewPath) + VLC_IMPORT(libvlc_media_parse_async, MediaParseAsync) + VLC_IMPORT(libvlc_media_release, MediaRelease) + VLC_IMPORT(libvlc_media_retain, MediaRetain) + VLC_IMPORT(libvlc_media_tracks_get, MediaTracksGet) + VLC_IMPORT(libvlc_media_tracks_release, MediaTracksRelease) + + VLC_IMPORT(libvlc_media_player_event_manager, MediaPlayerEventManager) + VLC_IMPORT(libvlc_media_player_get_media, MediaPlayerGetMedia) + VLC_IMPORT(libvlc_media_player_new, MediaPlayerNew) + VLC_IMPORT(libvlc_media_player_new_from_media, MediaPlayerNewFromMedia) + VLC_IMPORT(libvlc_media_player_release, MediaPlayerRelease) + VLC_IMPORT(libvlc_media_player_retain, MediaPlayerRetain) + VLC_IMPORT(libvlc_media_player_set_media, MediaPlayerSetMedia) + + VLC_IMPORT(libvlc_media_player_can_pause, MediaPlayerCanPause) + VLC_IMPORT(libvlc_media_player_get_fps, MediaPlayerGetFps) + VLC_IMPORT(libvlc_media_player_get_length, MediaPlayerGetLength) + VLC_IMPORT(libvlc_media_player_get_position, MediaPlayerGetPosition) + VLC_IMPORT(libvlc_media_player_get_rate, MediaPlayerGetRate) + VLC_IMPORT(libvlc_media_player_get_state, MediaPlayerGetState) + VLC_IMPORT(libvlc_media_player_get_time, MediaPlayerGetTime) + VLC_IMPORT(libvlc_media_player_is_seekable, MediaPlayerIsSeekable) + VLC_IMPORT(libvlc_media_player_set_position, MediaPlayerSetPosition) + VLC_IMPORT(libvlc_media_player_set_rate, MediaPlayerSetRate) + VLC_IMPORT(libvlc_media_player_set_time, MediaPlayerSetTime) + + VLC_IMPORT(libvlc_media_player_is_playing, MediaPlayerIsPlaying) + VLC_IMPORT(libvlc_media_player_pause, MediaPlayerPause) + VLC_IMPORT(libvlc_media_player_play, MediaPlayerPlay) + VLC_IMPORT(libvlc_media_player_set_pause, MediaPlayerSetPause) + VLC_IMPORT(libvlc_media_player_stop, MediaPlayerStop) + VLC_IMPORT(libvlc_media_player_will_play, MediaPlayerWillPlay) + + VLC_IMPORT(libvlc_audio_get_track, AudioGetTrack) + VLC_IMPORT(libvlc_audio_set_callbacks, AudioSetCallbacks) + VLC_IMPORT(libvlc_audio_set_format, AudioSetFormat) + VLC_IMPORT(libvlc_audio_set_format_callbacks, AudioSetFormatCallbacks) + VLC_IMPORT(libvlc_audio_set_track, AudioSetTrack) + + VLC_IMPORT(libvlc_video_get_height, VideoGetHeight) + VLC_IMPORT(libvlc_video_get_size, VideoGetSize) + VLC_IMPORT(libvlc_video_get_spu, VideoGetSpu) + VLC_IMPORT(libvlc_video_get_spu_count, VideoGetSpuCount) + VLC_IMPORT(libvlc_video_get_track, VideoGetTrack) + VLC_IMPORT(libvlc_video_get_width, VideoGetWidth) + VLC_IMPORT(libvlc_video_new_viewpoint, VideoNewViewpoint) + VLC_IMPORT(libvlc_video_set_callbacks, VideoSetCallbacks) + VLC_IMPORT(libvlc_video_set_format, VideoSetFormat) + VLC_IMPORT(libvlc_video_set_format_callbacks, VideoSetFormatCallbacks) + VLC_IMPORT(libvlc_video_set_spu, VideoSetSpu) + VLC_IMPORT(libvlc_video_set_track, VideoSetTrack) + VLC_IMPORT(libvlc_video_update_viewpoint, VideoUpdateViewpoint) + + VLC_IMPORT(libvlc_audio_get_track_description, AudioGetTrackDescription) + VLC_IMPORT(libvlc_video_get_spu_description, VideoGetSpuDescription) + VLC_IMPORT(libvlc_video_get_track_description, VideoGetTrackDescription) + VLC_IMPORT(libvlc_track_description_release, TrackDescriptionListRelease) + + // import core functions + VLCCORE_IMPORT(vlc_fourcc_GetChromaDescription, FourccGetChromaDescription) + + return true; +} + + +void FVlc::Shutdown() +{ + PluginDir.Empty(); + + FreeDependency(LibHandle); + FreeDependency(CoreHandle); +} + + +/* FVlc static functions + *****************************************************************************/ + +void FVlc::FreeDependency(void*& Handle) +{ + if (Handle != nullptr) + { + FPlatformProcess::FreeDllHandle(Handle); + Handle = nullptr; + } +} + + +bool FVlc::LoadDependency(const FString& Dir, const FString& Name, void*& Handle) +{ + FString Lib = Name + TEXT(".") + FPlatformProcess::GetModuleExtension(); + FString Path = Dir.IsEmpty() ? *Lib : FPaths::Combine(*Dir, *Lib); + + Handle = FPlatformProcess::GetDllHandle(*Path); + + if (Handle == nullptr) + { + UE_LOG(LogVlcMedia, Warning, TEXT("Failed to load required library %s. Plug-in will not be functional."), *Lib); + return false; + } + + return true; +} diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Vlc/Vlc.h b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Vlc/Vlc.h new file mode 100644 index 0000000..96da6f9 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Vlc/Vlc.h @@ -0,0 +1,133 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "VlcImports.h" +#include "VlcTypes.h" + + +class FVlc +{ +public: + + static const uint32 MaxPlanes = 5; + +public: + + static FString GetPluginDir(); + static bool Initialize(); + static void Shutdown(); + +public: + + static FLibvlcNewProc New; + static FLibvlcReleaseProc Release; + static FLibvlcRetainProc Retain; + + static FLibvlcErrmsgProc Errmsg; + static FLibvlcClearerrProc Clearerr; + + static FLibvlcEventAttachProc EventAttach; + static FLibvlcEventAttachProc EventDetach; + static FLibvlcEventTypeNameProc EventTypeName; + + static FLibvlcLogGetContextProc LogGetContext; + static FLibvlcLogSetProc LogSet; + static FLibvlcLogUnsetProc LogUnset; + + static FLibvlcFreeProc Free; + static FLibvlcGetChangesetProc GetChangeset; + static FLibvlcGetCompilerProc GetCompiler; + static FLibvlcGetVersionProc GetVersion; + + static FLibvlcClockProc Clock; + + static FLibvlcMediaEventManagerProc MediaEventManager; + static FLibvlcMediaGetDurationProc MediaGetDuration; + static FLibvlcMediaGetStatsProc MediaGetStats; + static FLibvlcMediaNewCallbacksProc MediaNewCallbacks; + static FLibvlcMediaNewLocationProc MediaNewLocation; + static FLibvlcMediaNewPathProc MediaNewPath; + static FLibvlcMediaParseAsyncProc MediaParseAsync; + static FLibvlcMediaReleaseProc MediaRelease; + static FLibvlcMediaRetainProc MediaRetain; + static FLibvlcMediaTracksGetProc MediaTracksGet; + static FLibvlcMediaTracksReleaseProc MediaTracksRelease; + + static FLibvlcMediaPlayerEventManagerProc MediaPlayerEventManager; + static FLibvlcMediaPlayerGetMediaProc MediaPlayerGetMedia; + static FLibvlcMediaPlayerNewProc MediaPlayerNew; + static FLibvlcMediaPlayerNewFromMediaProc MediaPlayerNewFromMedia; + static FLibvlcMediaPlayerReleaseProc MediaPlayerRelease; + static FLibvlcMediaPlayerRetainProc MediaPlayerRetain; + static FLibvlcMediaPlayerSetMediaProc MediaPlayerSetMedia; + + static FLibvlcMediaPlayerCanPauseProc MediaPlayerCanPause; + static FLibvlcMediaPlayerGetFpsProc MediaPlayerGetFps; + static FLibvlcMediaPlayerGetLengthProc MediaPlayerGetLength; + static FLibvlcMediaPlayerGetPositionProc MediaPlayerGetPosition; + static FLibvlcMediaPlayerGetRateProc MediaPlayerGetRate; + static FLibvlcMediaPlayerGetStateProc MediaPlayerGetState; + static FLibvlcMediaPlayerGetTimeProc MediaPlayerGetTime; + static FLibvlcMediaPlayerIsSeekableProc MediaPlayerIsSeekable; + static FLibvlcMediaPlayerSetPositionProc MediaPlayerSetPosition; + static FLibvlcMediaPlayerSetRateProc MediaPlayerSetRate; + static FLibvlcMediaPlayerSetTimeProc MediaPlayerSetTime; + + static FLibvlcMediaPlayerIsPlayingProc MediaPlayerIsPlaying; + static FLibvlcMediaPlayerPauseProc MediaPlayerPause; + static FLibvlcMediaPlayerPlayProc MediaPlayerPlay; + static FLibvlcMediaPlayerSetPauseProc MediaPlayerSetPause; + static FLibvlcMediaPlayerStopProc MediaPlayerStop; + static FLibvlcMediaPlayerWillPlayProc MediaPlayerWillPlay; + + static FLibvlcAudioGetTrackProc AudioGetTrack; + static FLibvlcAudioSetCallbacksProc AudioSetCallbacks; + static FLibvlcAudioSetFormatProc AudioSetFormat; + static FLibvlcAudioSetFormatCallbacksProc AudioSetFormatCallbacks; + static FLibvlcAudioSetTrackProc AudioSetTrack; + + static FLibvlcVideoGetHeightProc VideoGetHeight; + static FLibvlcVideoGetSizeProc VideoGetSize; + static FLibvlcVideoGetSpuProc VideoGetSpu; + static FLibvlcVideoGetSpuCountProc VideoGetSpuCount; + static FLibvlcVideoGetTrackProc VideoGetTrack; + static FLibvlcVideoGetWidthProc VideoGetWidth; + static FLibvlcVideoNewViewpointProc VideoNewViewpoint; + static FLibvlcVideoSetCallbacksProc VideoSetCallbacks; + static FLibvlcVideoSetFormatProc VideoSetFormat; + static FLibvlcVideoSetFormatCallbacksProc VideoSetFormatCallbacks; + static FLibvlcVideoSetSpuProc VideoSetSpu; + static FLibvlcVideoSetTrackProc VideoSetTrack; + static FLibvlcVideoUpdateViewpointProc VideoUpdateViewpoint; + + static FLibvlcAudioGetTrackDescriptionProc AudioGetTrackDescription; + static FLibvlcVideoGetSpuDescriptionProc VideoGetSpuDescription; + static FLibvlcVideoGetTrackDescriptionProc VideoGetTrackDescription; + static FLibvlcTrackDescriptionListReleaseProc TrackDescriptionListRelease; + + static FLibvlcFourccGetChromaDescriptionProc FourccGetChromaDescription; + +public: + + static int64 Delay(int64 Timestamp) + { + return Timestamp - Clock(); + } + +protected: + + static void FreeDependency(void*& Handle); + static bool LoadDependency(const FString& Dir, const FString& Name, void*& Handle); + +private: + + static void* CoreHandle; + static void* LibHandle; + static FString PluginDir; + +#if PLATFORM_WINDOWS + static void* GccHandle; +#endif +}; \ No newline at end of file diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Vlc/VlcImports.h b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Vlc/VlcImports.h new file mode 100644 index 0000000..5fbd656 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Vlc/VlcImports.h @@ -0,0 +1,175 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "VlcTypes.h" + + +// library instance +typedef FLibvlcInstance* (*FLibvlcNewProc)(int32 /*Argc*/, const ANSICHAR* const* /*Argv*/); +typedef void (*FLibvlcReleaseProc)(FLibvlcInstance* /*Instance*/); +typedef void (*FLibvlcRetainProc)(FLibvlcInstance* /*Instance*/); + +// error handling +typedef const char* (*FLibvlcErrmsgProc)(); +typedef void (*FLibvlcClearerrProc)(); + +// events +typedef void (*FLibvlcCallback)(FLibvlcEvent* /*Event*/, void* /*UserData*/); +typedef int32 (*FLibvlcEventAttachProc)(FLibvlcEventManager* /*EventManager*/, ELibvlcEventType /*EventType*/, FLibvlcCallback /*Callback*/, void* /*UserData*/); +typedef int32 (*FLibvlcEventDetachProc)(FLibvlcEventManager* /*EventManager*/, ELibvlcEventType /*EventType*/, FLibvlcCallback /*Callback*/, void* /*UserData*/); +typedef const ANSICHAR* (*FLibvlcEventTypeNameProc)(ELibvlcEventType /*EventType*/); + +// logging +typedef void (*FLibvlcLogCb)(void* /*Data*/, ELibvlcLogLevel /*Level*/, FLibvlcLog* /*Context*/, const char* /*Format*/, va_list /*Args*/); +typedef void (*FLibvlcLogGetContextProc)(FLibvlcLog* /*Context*/, const char** /*Module*/, const char** /*File*/, unsigned* /*Line*/); +typedef void (*FLibvlcLogSetProc)(FLibvlcInstance* /*Instance*/, FLibvlcLogCb /*Callback*/, void* /*Data*/); +typedef void (*FLibvlcLogUnsetProc)(FLibvlcInstance* /*Instance*/); + +// misc +typedef void (*FLibvlcFreeProc)(void* /*Pointer*/); +typedef char* (*FLibvlcGetChangesetProc)(); +typedef char* (*FLibvlcGetCompilerProc)(); +typedef char* (*FLibvlcGetVersionProc)(); + +// time +typedef int64 (*FLibvlcClockProc)(); + +// media callbacks +typedef void (*FLibvlcMediaCloseCb)(void* /*Opaque*/); +typedef int32 (*FLibvlcMediaOpenCb)(void* /*Opaque*/, void** /*OutData*/, uint64* /*OutSize*/); +typedef SSIZE_T (*FLibvlcMediaReadCb)(void* /*Opaque*/, void* /*Buffer*/, SIZE_T /*Length*/); +typedef int32 (*FLibvlcMediaSeekCb)(void* /*Opaque*/, uint64 /*Offset*/); + +// media +typedef FLibvlcEventManager* (*FLibvlcMediaEventManagerProc)(FLibvlcMedia* /*Media*/); +typedef int64 (*FLibvlcMediaGetDurationProc)(FLibvlcMedia* /*Media*/); +typedef int (*FLibvlcMediaGetStatsProc)(FLibvlcMedia* /*Media*/, FLibvlcMediaStats* /*Stats*/); + +typedef FLibvlcMedia* (*FLibvlcMediaNewCallbacksProc)( + FLibvlcInstance* /*Instance*/, + FLibvlcMediaOpenCb /*OpenCb*/, + FLibvlcMediaReadCb /*ReadCb*/, + FLibvlcMediaSeekCb /*SeekCb*/, + FLibvlcMediaCloseCb /*CloseCb*/, + void* /*Opaque*/); + +typedef FLibvlcMedia* (*FLibvlcMediaNewLocationProc)(FLibvlcInstance* /*Instance*/, const ANSICHAR* /*Location*/); +typedef FLibvlcMedia* (*FLibvlcMediaNewPathProc)(FLibvlcInstance* /*Instance*/, const ANSICHAR* /*Path*/); +typedef void (*FLibvlcMediaParseAsyncProc)(FLibvlcMedia* /*Media*/); +typedef void (*FLibvlcMediaReleaseProc)(FLibvlcMedia* /*Media*/); +typedef void (*FLibvlcMediaRetainProc)(FLibvlcMedia* /*Media*/); +typedef uint32 (*FLibvlcMediaTracksGetProc)(FLibvlcMedia* /*Media*/, FLibvlcMediaTrack*** /*OutTracks*/); +typedef void (*FLibvlcMediaTracksReleaseProc)(FLibvlcMediaTrack** /*Tracks*/, uint32 /*Count*/); + +// media player +typedef FLibvlcEventManager* (*FLibvlcMediaPlayerEventManagerProc)(FLibvlcMediaPlayer* /*Player*/); +typedef FLibvlcMedia* (*FLibvlcMediaPlayerGetMediaProc)(FLibvlcMediaPlayer* /*Player*/); +typedef FLibvlcMediaPlayer* (*FLibvlcMediaPlayerNewProc)(FLibvlcInstance* /*Instance*/); +typedef FLibvlcMediaPlayer* (*FLibvlcMediaPlayerNewFromMediaProc)(FLibvlcMedia* /*Media*/); +typedef void (*FLibvlcMediaPlayerReleaseProc)(FLibvlcMediaPlayer* /*Player*/); +typedef void (*FLibvlcMediaPlayerRetainProc)(FLibvlcMediaPlayer* /*Player*/); +typedef void (*FLibvlcMediaPlayerSetMediaProc)(FLibvlcMediaPlayer* /*Player*/, FLibvlcMedia* /*Media*/); + +// media player status +typedef int32 (*FLibvlcMediaPlayerCanPauseProc)(const FLibvlcMediaPlayer* /*Player*/); +typedef float (*FLibvlcMediaPlayerGetFpsProc)(const FLibvlcMediaPlayer* /*Player*/); +typedef int64 (*FLibvlcMediaPlayerGetLengthProc)(const FLibvlcMediaPlayer* /*Player*/); +typedef float (*FLibvlcMediaPlayerGetPositionProc)(const FLibvlcMediaPlayer* /*Player*/); +typedef float (*FLibvlcMediaPlayerGetRateProc)(const FLibvlcMediaPlayer* /*Player*/); +typedef ELibvlcState (*FLibvlcMediaPlayerGetStateProc)(const FLibvlcMediaPlayer* /*Player*/); +typedef int64 (*FLibvlcMediaPlayerGetTimeProc)(const FLibvlcMediaPlayer* /*Player*/); +typedef int32 (*FLibvlcMediaPlayerIsSeekableProc)(const FLibvlcMediaPlayer* /*Player*/); +typedef void (*FLibvlcMediaPlayerSetPositionProc)(FLibvlcMediaPlayer* /*Player*/, float /*Position*/); +typedef int32 (*FLibvlcMediaPlayerSetRateProc)(FLibvlcMediaPlayer* /*Player*/, float /*Rate*/); +typedef void (*FLibvlcMediaPlayerSetTimeProc)(FLibvlcMediaPlayer* /*Player*/, int64 /*Time*/); + +// media player control +typedef int32 (*FLibvlcMediaPlayerIsPlayingProc)(const FLibvlcMediaPlayer* /*Player*/); +typedef void (*FLibvlcMediaPlayerPauseProc)(FLibvlcMediaPlayer* /*Player*/); +typedef int32 (*FLibvlcMediaPlayerPlayProc)(FLibvlcMediaPlayer* /*Player*/); +typedef void (*FLibvlcMediaPlayerSetPauseProc)(FLibvlcMediaPlayer* /*Player*/, int32 /*DoPause*/); +typedef void (*FLibvlcMediaPlayerStopProc)(FLibvlcMediaPlayer* /*Player*/); +typedef int32 (*FLibvlcMediaPlayerWillPlayProc)(FLibvlcMediaPlayer* /*Player*/); + +// audio +typedef void (*FLibvlcAudioDrainCb)(void* /*Opaque*/); +typedef void (*FLibvlcAudioFlushCb)(void* /*Opaque*/, int64 /*Timestamp*/); +typedef void (*FLibvlcAudioPauseCb)(void* /*Opaque*/, int64 /*Timestamp*/); +typedef void (*FLibvlcAudioPlayCb)(void* /*Opaque*/, void* /*Samples*/, uint32 /*Count*/, int64 /*Timestamp*/); +typedef void (*FLibvlcAudioResumeCb)(void* /*Opaque*/, int64 /*Timestamp*/); + +typedef void (*FLibvlcAudioSetCallbacksProc)( + FLibvlcMediaPlayer* /*Player*/, + FLibvlcAudioPlayCb /*Play*/, + FLibvlcAudioPauseCb /*Pause*/, + FLibvlcAudioResumeCb /*Resume*/, + FLibvlcAudioFlushCb /*Flush*/, + FLibvlcAudioDrainCb /*Drain*/, + void* /*Opaque*/); + +typedef void (*FLibvlcAudioSetFormatProc)( + FLibvlcMediaPlayer* /*Player*/, + const ANSICHAR* /*Format*/, + uint32 Rate, + uint32 Channels); + +typedef int32 (*FLibvlcAudioSetupCb)(void** /*Opaque*/, ANSICHAR* /*Format*/, uint32* /*Rate*/, uint32* /*Channels*/); +typedef void (*FLibvlcAudioCleanupCb)(void* /*Opaque*/); + +typedef void (*FLibvlcAudioSetFormatCallbacksProc)( + FLibvlcMediaPlayer* /*Player*/, + FLibvlcAudioSetupCb /*Setup*/, + FLibvlcAudioCleanupCb /*Cleanup*/); + +typedef int32 (*FLibvlcAudioGetTrackProc)(FLibvlcMediaPlayer* /*Player*/); +typedef int32 (*FLibvlcAudioSetTrackProc)(FLibvlcMediaPlayer* /*Player*/, int32 /*TrackId*/); + +// video +typedef void* (*FLibvlcVideoLockCb)(void* /*Opaque*/, void** /*Planes*/); +typedef void (*FlibvlcVideoUnlockCb)(void* /*Opaque*/, void* /*Picture*/, void* const* /*Planes*/); +typedef void (*FlibvlcVideoDisplayCb)(void* /*Opaque*/, void* /*Picture*/); + +typedef void (*FLibvlcVideoSetCallbacksProc)( + FLibvlcMediaPlayer* /*Player*/, + FLibvlcVideoLockCb /*Lock*/, + FlibvlcVideoUnlockCb /*Unlock*/, + FlibvlcVideoDisplayCb /*Display*/, + void* /*Opaque*/); + +typedef void (*FLibvlcVideoSetFormatProc)( + FLibvlcMediaPlayer* /*Player*/, + const ANSICHAR* /*Chroma*/, + uint32 /*Width*/, + uint32 /*Height*/, + uint32 /*Pitch*/); + +typedef void (*FLibvlcVideoCleanupCb)(void* /*Opaque*/); +typedef uint32 (*FLibvlcVideoFormatCb)(void** /*Opaque*/, ANSICHAR* /*Chroma*/, uint32* /*Width*/, uint32* /*Height*/, uint32* /*Pitches*/, uint32* /*Lines*/); + +typedef void (*FLibvlcVideoSetFormatCallbacksProc)( + FLibvlcMediaPlayer* /*Player*/, + FLibvlcVideoFormatCb /*Setup*/, + FLibvlcVideoCleanupCb /*Cleanup*/ +); + +typedef int32 (*FLibvlcVideoGetHeightProc)(FLibvlcMediaPlayer* /*Player*/); +typedef int32 (*FLibvlcVideoGetSizeProc)(FLibvlcMediaPlayer* /*Player*/, uint32 /*VideoNum*/, uint32* /*Width*/, uint32* /*Height*/); +typedef int32 (*FLibvlcVideoGetSpuProc)(FLibvlcMediaPlayer* /*Player*/); +typedef int32 (*FLibvlcVideoGetSpuCountProc)(FLibvlcMediaPlayer* /*Player*/); +typedef int32 (*FLibvlcVideoGetTrackProc)(FLibvlcMediaPlayer* /*Player*/); +typedef int32(*FLibvlcVideoGetWidthProc)(FLibvlcMediaPlayer* /*Player*/); +typedef FLibvlcVideoViewpoint* (*FLibvlcVideoNewViewpointProc)(); +typedef int32 (*FLibvlcVideoSetSpuProc)(FLibvlcMediaPlayer* /*Player*/, int32 /*SpuId*/); +typedef int32 (*FLibvlcVideoSetTrackProc)(FLibvlcMediaPlayer* /*Player*/, int32 /*TrackId*/); +typedef int32 (*FLibvlcVideoUpdateViewpointProc)(FLibvlcMediaPlayer* /*Player*/, FLibvlcVideoViewpoint* /*Viewpoint*/, bool /*Absolute*/); + +// tracks +typedef FLibvlcTrackDescription* (*FLibvlcAudioGetTrackDescriptionProc)(FLibvlcMediaPlayer* /*Player*/); +typedef FLibvlcTrackDescription* (*FLibvlcVideoGetSpuDescriptionProc)(FLibvlcMediaPlayer* /*Player*/); +typedef FLibvlcTrackDescription* (*FLibvlcVideoGetTrackDescriptionProc)(FLibvlcMediaPlayer* /*Player*/); +typedef void(*FLibvlcTrackDescriptionListReleaseProc)(FLibvlcTrackDescription* /*Desription*/); + +// FourCC +typedef FLibvlcChromaDescription* (*FLibvlcFourccGetChromaDescriptionProc)(FLibvlcFourcc /*Fourcc*/); diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/Vlc/VlcTypes.h b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Vlc/VlcTypes.h new file mode 100644 index 0000000..ae0712b --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/Vlc/VlcTypes.h @@ -0,0 +1,392 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" + + +/** Enumerates event types. */ +enum class ELibvlcEventType +{ + MediaMetaChanged = 0, + MediaSubItemAdded, + MediaDurationChanged, + MediaParsedChanged, + MediaFreed, + MediaStateChanged, + MediaSubItemTreeAdded, + + MediaPlayerMediaChanged = 0x100, + MediaPlayerNothingSpecial, + MediaPlayerOpening, + MediaPlayerBuffering, + MediaPlayerPlaying, + MediaPlayerPaused, + MediaPlayerStopped, + MediaPlayerForward, + MediaPlayerBackward, + MediaPlayerEndReached, + MediaPlayerEncounteredError, + MediaPlayerTimeChanged, + MediaPlayerPositionChanged, + MediaPlayerSeekableChanged, + MediaPlayerPausableChanged, + MediaPlayerTitleChanged, + MediaPlayerSnapshotTaken, + MediaPlayerLengthChanged, + MediaPlayerVout, + MediaPlayerScrambledChanged, + MediaPlayerESAdded, + MediaPlayerESDeleted, + MediaPlayerESSelected, + + MediaListItemAdded = 0x200, + MediaListWillAddItem, + MediaListItemDeleted, + MediaListWillDeleteItem, + MediaListEndReached, + + MediaListViewItemAdded = 0x300, + MediaListViewWillAddItem, + MediaListViewItemDeleted, + MediaListViewWillDeleteItem, + + MediaListPlayerPlayed = 0x400, + MediaListPlayerNextItemSet, + MediaListPlayerStopped, + + MediaDiscovererStarted = 0x500, + MediaDiscovererEnded, + + VlmMediaAdded = 0x600, + VlmMediaRemoved, + VlmMediaChanged, + VlmMediaInstanceStarted, + VlmMediaInstanceStopped, + VlmMediaInstanceStatusInit, + VlmMediaInstanceStatusOpening, + VlmMediaInstanceStatusPlaying, + VlmMediaInstanceStatusPause, + VlmMediaInstanceStatusEnd, + VlmMediaInstanceStatusError +}; + + +/** Enumerates logging levels. */ +enum class ELibvlcLogLevel +{ + Debug = 0, + Notice = 2, + Warning = 3, + Error = 4 +}; + + +/** Enumerates meta data types. */ +enum class ELibvlcMeta +{ + Title, + Artist, + Genre, + Copyright, + Album, + TrackNumber, + Description, + Rating, + Date, + Setting, + URL, + Language, + NowPlaying, + Publisher, + EncodedBy, + ArtworkURL, + TrackID, + TrackTotal, + Director, + Season, + Episode, + ShowName, + Actors, + AlbumArtist, + DiscNumber +}; + + +/** Enumerates possible media player states. */ +enum class ELibvlcState +{ + NothingSpecial = 0, + Opening, + Buffering, + Playing, + Paused, + Stopped, + Ended, + Error +}; + + +/** Enumerates known track types. */ +enum class ELibvlcTrackType +{ + Unknown, + Audio, + Video, + Text +}; + + +/** Opaque structure representing a LibVLC event manager. */ +typedef struct FLibvlcEventManager FLibvlcEventManager; + +/** Opaque structure representing a LibVLC instance. */ +typedef struct FLibvlcInstance FLibvlcInstance; + +/** Opaque structure representing a LibVLC log context. */ +typedef struct FLibvlcLog FLibvlcLog; + +/** Opaque structure representing a media instance. */ +typedef struct FLibvlcMedia FLibvlcMedia; + +/** Opaque structure representing a LibVLC media player. */ +typedef struct FLibvlcMediaPlayer FLibvlcMediaPlayer; + +/** FourCC code type. */ +typedef uint32 FLibvlcFourcc; + + +/** + * Structure for chroma format descriptions (libvlc_chroma_description_t). + */ +struct FLibvlcChromaDescription +{ + uint32 PlaneCount; + + struct + { + struct + { + uint32 Num; + uint32 Den; + } W; + + struct + { + uint32 Num; + uint32 Den; + } H; + } P[4]; + + uint32 PixelSize; + uint32 PixelBits; +}; + + +/** + * Structure for VLC events (libvlc_event_t). + */ +struct FLibvlcEvent +{ + /** The type of event (see ELibvlcEvents) */ + ELibvlcEventType Type; + + /** The object emitting the event. */ + void *Obj; + + union + { + // media descriptor + struct + { + ELibvlcMeta MetaType; + } MediaMetaChanged; + + struct + { + FLibvlcMedia* NewChild; + } MediaSubitemAdded; + + struct + { + int64 NewDuration; + } MediaDurationChanged; + + struct + { + int32 NewStatus; + } MediaParsedChanged; + + struct + { + FLibvlcMedia* Md; + } MediaFreed; + + struct + { + ELibvlcState NewState; + } MediaStateChanged; + + struct + { + FLibvlcMedia* Item; + } MediaSubitemtreeAdded; + + // media instance + struct + { + float NewCache; + } MediaPlayerBuffering; + + struct + { + float NewPosition; + } MediaPlayerPositionChanged; + + struct + { + int64 NewTime; + } MediaPlayerTimeChanged; + + struct + { + int32 NewTitle; + } MediaPlayerTitleChanged; + + struct + { + int32 new_seekable; + } MediaPlayerSeekableChanged; + + struct + { + int32 NewPausable; + } MediaPlayerPausableChanged; + + struct + { + int32 NewScrambled; + } MediaPlayerScrambledChanged; + + struct + { + int32 NewCount; + } MediaPlayerVout; + + // media list + struct + { + FLibvlcMedia* Item; + int32 Index; + } MediaListItemAdded; + + struct + { + FLibvlcMedia* Item; + int32 Index; + } MediaListWillAddItem; + + struct + { + FLibvlcMedia* Item; + int32 Index; + } MediaListItemDeleted; + + struct + { + FLibvlcMedia* Item; + int32 Index; + } MediaListWillDeleteItem; + + // media list player + struct + { + FLibvlcMedia* Item; + } MediaListPlayerNextItemSet; + + // snapshot taken + struct + { + ANSICHAR* Filename; + } MediaPlayerSnapshotTaken; + + // Length changed + struct + { + int64 NewLength; + } MediaPlayerLengthChanged; + + // VLM media + struct + { + const ANSICHAR* MediaName; + const ANSICHAR* InstanceName; + } VlmMediaEvent; + + // extra MediaPlayer + struct + { + FLibvlcMedia* NewMedia; + } MediaPlayerMediaChanged; + } Descriptor; +}; + + +/** + * Structure for VLC media statistics (libvlc_media_stats). + */ +struct FLibvlcMediaStats +{ + int32 ReadBytes; + float InputBitrate; + int32 DemuxReadBytes; + float DemuxBitrate; + int32 DemuxCorrupted; + int32 DemuxDiscontinuity; + int32 DecodedVideo; + int32 DecodedAudio; + int32 DisplayedPictures; + int32 LostPictures; + int32 PlayedAbuffers; + int32 LostAbuffers; + int32 SentPackets; + int32 SentBytes; + float SendBitrate; +}; + + +/** + * Structure for VLC media tracks (libvlc_media_track). + */ +struct FLibvlcMediaTrack +{ + uint32 Codec; + uint32 OriginalFourCC; + int32 Id; + ELibvlcTrackType Type; + int32 Profile; + int32 Level; +}; + + +/** + * Structure for VLC media track descriptions (libvlc_track_t). + */ +struct FLibvlcTrackDescription +{ + int32 Id; + ANSICHAR* Name; + FLibvlcTrackDescription* Next; +}; + + +/** + * Structure for VLC video viewpoints (libvlc_video_viewpoint_t). + */ +struct FLibvlcVideoViewpoint +{ + float Yaw; + float Pitch; + float Roll; + float FieldOfView; +}; diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/VlcMediaModule.cpp b/Plugins/VlcMedia-master/Source/VlcMedia/Private/VlcMediaModule.cpp new file mode 100644 index 0000000..2b57d15 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/VlcMediaModule.cpp @@ -0,0 +1,245 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#include "IVlcMediaModule.h" +#include "VlcMediaPrivate.h" + +#include "HAL/FileManager.h" +#include "Misc/OutputDeviceFile.h" +#include "Misc/Paths.h" +#include "Modules/ModuleManager.h" +#include "UObject/Class.h" +#include "UObject/UObjectGlobals.h" +#include "UObject/WeakObjectPtr.h" + +#include "Vlc.h" +#include "VlcMediaPlayer.h" + + +DEFINE_LOG_CATEGORY(LogVlcMedia); + +#define LOCTEXT_NAMESPACE "FVlcMediaModule" + + +/** + * Implements the VlcMedia module. + */ +class FVlcMediaModule + : public IVlcMediaModule +{ +public: + + /** Default constructor. */ + FVlcMediaModule() + : Initialized(false) + { } + +public: + + //~ IVlcMediaModule interface + + virtual TSharedPtr CreatePlayer(IMediaEventSink& EventSink) override + { + if (!Initialized) + { + return nullptr; + } + + return MakeShared(EventSink, VlcInstance); + } + +public: + + //~ IModuleInterface interface + + virtual void StartupModule() override + { + // initialize LibVLC + if (!FVlc::Initialize()) + { + UE_LOG(LogVlcMedia, Error, TEXT("Failed to initialize LibVLC")); + return; + } + + UE_LOG(LogVlcMedia, Log, TEXT("Initialized LibVLC %s (%s - %s)"), + ANSI_TO_TCHAR(FVlc::GetVersion()), + ANSI_TO_TCHAR(FVlc::GetChangeset()), + ANSI_TO_TCHAR(FVlc::GetCompiler()) + ); + +#if UE_BUILD_DEBUG + // backup old log file + const FString LogFilePath = FPaths::Combine(FPaths::ProjectLogDir(), TEXT("vlc.log")); + FOutputDeviceFile::CreateBackupCopy(*LogFilePath); + IFileManager::Get().Delete(*LogFilePath); +#endif + + const auto Settings = GetDefault(); + + // create LibVLC instance + const ANSICHAR* Args[] = + { + // caching + TCHAR_TO_ANSI(*(FString::Printf(TEXT("--disc-caching=%i"), (int32)Settings->DiscCaching.GetTotalMilliseconds()))), + TCHAR_TO_ANSI(*(FString::Printf(TEXT("--file-caching=%i"), (int32)Settings->FileCaching.GetTotalMilliseconds()))), + TCHAR_TO_ANSI(*(FString::Printf(TEXT("--live-caching=%i"), (int32)Settings->LiveCaching.GetTotalMilliseconds()))), + TCHAR_TO_ANSI(*(FString::Printf(TEXT("--network-caching=%i"), (int32)Settings->NetworkCaching.GetTotalMilliseconds()))), + + // config + "--ignore-config", + + // logging +#if UE_BUILD_DEBUG + "--file-logging", + TCHAR_TO_ANSI(*(FString(TEXT("--logfile=")) + LogFilePath)), +#endif + +#if (UE_BUILD_DEBUG || UE_BUILD_DEVELOPMENT) + "--verbose=2", +#else + "--quiet", +#endif + + // output + "--aout", "amem", + "--intf", "dummy", + "--text-renderer", "dummy", + "--vout", "vmem", + + // performance + "--drop-late-frames", + + // undesired features + "--no-disable-screensaver", + "--no-plugins-cache", + "--no-snapshot-preview", + "--no-video-title-show", + +#if (UE_BUILD_SHIPPING || UE_BUILD_TEST) + "--no-stats", +#endif + +#if PLATFORM_LINUX + "--no-xlib", +#endif + }; + + int Argc = sizeof(Args) / sizeof(*Args); + VlcInstance = FVlc::New(Argc, Args); + + if (VlcInstance == nullptr) + { + UE_LOG(LogVlcMedia, Warning, TEXT("Failed to create VLC instance (%s)"), ANSI_TO_TCHAR(FVlc::Errmsg())); + FVlc::Shutdown(); + + return; + } + + // register logging callback + FVlc::LogSet(VlcInstance, &FVlcMediaModule::HandleVlcLog, nullptr); + + Initialized = true; + } + + virtual void ShutdownModule() override + { + if (!Initialized) + { + return; + } + + Initialized = false; + + // unregister logging callback + FVlc::LogUnset(VlcInstance); + + // release LibVLC instance + FVlc::Release((FLibvlcInstance*)VlcInstance); + VlcInstance = nullptr; + + // shut down LibVLC + FVlc::Shutdown(); + } + +private: + + /** Handles log messages from LibVLC. */ + static void HandleVlcLog(void* /*Data*/, ELibvlcLogLevel Level, FLibvlcLog* Context, const char* Format, va_list Args) + { +#if (UE_BUILD_DEBUG || UE_BUILD_DEVELOPMENT) + const auto Settings = GetDefault(); + + // filter unwanted messages + if ((uint8)Level < (uint8)Settings->LogLevel) + { + return; + } + + FString LogContext; + + // get context information + if (Context != nullptr) + { + const char* Module = nullptr; + const char* File = nullptr; + unsigned Line = 0; + + FVlc::LogGetContext(Context, &Module, &File, &Line); + LogContext = FString::Printf(TEXT("%s: "), (Module != nullptr) ? ANSI_TO_TCHAR(Module) : TEXT("unknown module")); + + if (Settings->ShowLogContext) + { + LogContext += FString::Printf(TEXT("%s, line %s: "), + (File != nullptr) ? ANSI_TO_TCHAR(File) : TEXT("unknown file"), + (Line != 0) ? *FString::Printf(TEXT("%i"), Line) : TEXT("n/a") + ); + } + } + else + { + LogContext = TEXT("generic: "); + } + + // forward message to log + ANSICHAR Message[1024]; + + FCStringAnsi::GetVarArgs(Message, ARRAY_COUNT(Message), ARRAY_COUNT(Message) - 1, Format, Args); + + switch (Level) + { + case ELibvlcLogLevel::Debug: + UE_LOG(LogVlcMedia, VeryVerbose, TEXT("%s%s"), *LogContext, ANSI_TO_TCHAR(Message)); + break; + + case ELibvlcLogLevel::Error: + UE_LOG(LogVlcMedia, Error, TEXT("%s%s"), *LogContext, ANSI_TO_TCHAR(Message)); + break; + + case ELibvlcLogLevel::Notice: + UE_LOG(LogVlcMedia, Verbose, TEXT("%s%s"), *LogContext, ANSI_TO_TCHAR(Message)); + break; + + case ELibvlcLogLevel::Warning: + UE_LOG(LogVlcMedia, Warning, TEXT("%s%s"), *LogContext, ANSI_TO_TCHAR(Message)); + break; + + default: + UE_LOG(LogVlcMedia, Log, TEXT("%s%s"), *LogContext, ANSI_TO_TCHAR(Message)); + break; + } +#endif + } + +private: + + /** Whether the module has been initialized. */ + bool Initialized; + + /** The LibVLC instance. */ + FLibvlcInstance* VlcInstance; +}; + + +IMPLEMENT_MODULE(FVlcMediaModule, VlcMedia); + + +#undef LOCTEXT_NAMESPACE diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Private/VlcMediaPrivate.h b/Plugins/VlcMedia-master/Source/VlcMedia/Private/VlcMediaPrivate.h new file mode 100644 index 0000000..3e3875f --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Private/VlcMediaPrivate.h @@ -0,0 +1,11 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "Logging/LogMacros.h" + +#include "../../VlcMediaFactory/Public/VlcMediaSettings.h" + + +/** Declares a log category for this module. */ +DECLARE_LOG_CATEGORY_EXTERN(LogVlcMedia, Log, All); diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/Public/IVlcMediaModule.h b/Plugins/VlcMedia-master/Source/VlcMedia/Public/IVlcMediaModule.h new file mode 100644 index 0000000..f969397 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/Public/IVlcMediaModule.h @@ -0,0 +1,32 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "Modules/ModuleInterface.h" +#include "Templates/SharedPointer.h" + +class IMediaEventSink; +class IMediaPlayer; + + +/** + * Interface for the VlcMedia module. + */ +class IVlcMediaModule + : public IModuleInterface +{ +public: + + /** + * Create a VideoLAN based media player. + * + * @param EventSink The object that receives media events from the player. + * @return A new media player, or nullptr if a player couldn't be created. + */ + virtual TSharedPtr CreatePlayer(IMediaEventSink& EventSink) = 0; + +public: + + /** Virtual destructor. */ + virtual ~IVlcMediaModule() { } +}; diff --git a/Plugins/VlcMedia-master/Source/VlcMedia/VlcMedia.Build.cs b/Plugins/VlcMedia-master/Source/VlcMedia/VlcMedia.Build.cs new file mode 100644 index 0000000..35efce4 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMedia/VlcMedia.Build.cs @@ -0,0 +1,92 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +using System.IO; + +namespace UnrealBuildTool.Rules +{ + using System.IO; + + public class VlcMedia : ModuleRules + { + public VlcMedia(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + DynamicallyLoadedModuleNames.AddRange( + new string[] { + "Media", + }); + + PrivateDependencyModuleNames.AddRange( + new string[] { + "Core", + "CoreUObject", + "MediaUtils", + "Projects", + "RenderCore", + "VlcMediaFactory", + }); + + PrivateIncludePathModuleNames.AddRange( + new string[] { + "Media", + }); + + PrivateIncludePaths.AddRange( + new string[] { + "VlcMedia/Private", + "VlcMedia/Private/Player", + "VlcMedia/Private/Shared", + "VlcMedia/Private/Vlc", + }); + + // add VLC libraries + string BaseDirectory = Path.GetFullPath(Path.Combine(ModuleDirectory, "..", "..")); + string VlcDirectory = Path.Combine(BaseDirectory, "ThirdParty", "vlc", Target.Platform.ToString()); + + if (Target.Platform == UnrealTargetPlatform.Linux) + { + VlcDirectory = Path.Combine(VlcDirectory, Target.Architecture, "lib"); + RuntimeDependencies.Add(Path.Combine(VlcDirectory, "libvlc.so")); + RuntimeDependencies.Add(Path.Combine(VlcDirectory, "libvlc.so.5")); + RuntimeDependencies.Add(Path.Combine(VlcDirectory, "libvlc.so.5.6.0")); + RuntimeDependencies.Add(Path.Combine(VlcDirectory, "libvlccore.so")); + RuntimeDependencies.Add(Path.Combine(VlcDirectory, "libvlccore.so.9")); + RuntimeDependencies.Add(Path.Combine(VlcDirectory, "libvlccore.so.9.0.0")); + } + else if (Target.Platform == UnrealTargetPlatform.Mac) + { + RuntimeDependencies.Add(Path.Combine(VlcDirectory, "libvlc.dylib")); + RuntimeDependencies.Add(Path.Combine(VlcDirectory, "libvlc.5.dylib")); + RuntimeDependencies.Add(Path.Combine(VlcDirectory, "libvlccore.dylib")); + RuntimeDependencies.Add(Path.Combine(VlcDirectory, "libvlccore.9.dylib")); + } + else if (Target.Platform == UnrealTargetPlatform.Win32) + { + RuntimeDependencies.Add(Path.Combine(VlcDirectory, "libvlc.dll")); + RuntimeDependencies.Add(Path.Combine(VlcDirectory, "libvlccore.dll")); + } + else if (Target.Platform == UnrealTargetPlatform.Win64) + { + RuntimeDependencies.Add(Path.Combine(VlcDirectory, "libvlc.dll")); + RuntimeDependencies.Add(Path.Combine(VlcDirectory, "libvlccore.dll")); + } + + // add VLC plug-ins + string PluginDirectory = Path.Combine(VlcDirectory, "plugins"); + + if (Target.Platform == UnrealTargetPlatform.Linux) + { + PluginDirectory = Path.Combine(VlcDirectory, "vlc", "plugins"); + } + + if (Directory.Exists(PluginDirectory)) + { + foreach (string Plugin in Directory.EnumerateFiles(PluginDirectory, "*.*", SearchOption.AllDirectories)) + { + RuntimeDependencies.Add(Path.Combine(PluginDirectory, Plugin)); + } + } + } + } +} diff --git a/Plugins/VlcMedia-master/Source/VlcMediaEditor/Private/VlcFileMediaSourceFactory.cpp b/Plugins/VlcMedia-master/Source/VlcMediaEditor/Private/VlcFileMediaSourceFactory.cpp new file mode 100644 index 0000000..f3c956c --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMediaEditor/Private/VlcFileMediaSourceFactory.cpp @@ -0,0 +1,166 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#include "VlcFileMediaSourceFactory.h" + +#include "FileMediaSource.h" +#include "Misc/Paths.h" + + +/* UVlcFileMediaSourceFactory structors + *****************************************************************************/ + +UVlcFileMediaSourceFactory::UVlcFileMediaSourceFactory(const FObjectInitializer& ObjectInitializer) + : Super(ObjectInitializer) +{ + Formats.Add(TEXT("3g2;3GPP2 Multimedia")); + Formats.Add(TEXT("3ga;3GPP Audio")); + Formats.Add(TEXT("3gp;3GP Video Stream")); + Formats.Add(TEXT("3gp2;3GPP Multimedia")); + Formats.Add(TEXT("3gpp;3GPP Media")); + Formats.Add(TEXT("669;UNIS Composer 669 Module")); + Formats.Add(TEXT("a52;Dolby Digital AC-3 Audio")); + Formats.Add(TEXT("aac;MPEG-2 Advanced Audio Coding")); + Formats.Add(TEXT("ac3;Audio Codec 3")); + Formats.Add(TEXT("adt;Audio Data Transport Stream")); + Formats.Add(TEXT("adts;Audio Data Transport Stream")); + Formats.Add(TEXT("aif;Audio Interchange File Format")); + Formats.Add(TEXT("aifc;Compressed Audio Interchange File")); + Formats.Add(TEXT("aiff;Audio Interchange File Format")); + Formats.Add(TEXT("amb;Ambisonics B-Format")); + Formats.Add(TEXT("amr;Adaptive Multi-Rate Codec")); + Formats.Add(TEXT("amv;Anime Music Video")); + Formats.Add(TEXT("aob;DVD-Audio Audio Object")); + Formats.Add(TEXT("ape;AVS Plugin Effects File")); + Formats.Add(TEXT("asf;ASF Media")); + Formats.Add(TEXT("au;Sun Microsystems Audio")); + Formats.Add(TEXT("avi;Audio Video Interleave File")); + Formats.Add(TEXT("awb;AMR-WB Audio")); + Formats.Add(TEXT("bik;Bink Video")); + Formats.Add(TEXT("bin;Binary File")); + Formats.Add(TEXT("caf;Core Audio")); + Formats.Add(TEXT("crf;CRF Video")); + Formats.Add(TEXT("divx;DivX-Encoded Movie")); + Formats.Add(TEXT("drc;DRM Rights Object")); + Formats.Add(TEXT("dts;Digital Theater System")); + Formats.Add(TEXT("dv;Digital Video")); + Formats.Add(TEXT("evo;SeeVogh Player Video Recording")); + Formats.Add(TEXT("f4v;Flash MP4 Video")); + Formats.Add(TEXT("flac;Free Lossless Audio Codec")); + Formats.Add(TEXT("flv;Adobe Flash Video")); + Formats.Add(TEXT("gvi;Google Video")); + Formats.Add(TEXT("gxf;General eXchange Format")); + Formats.Add(TEXT("iso;Disc Image")); + Formats.Add(TEXT("it;Impulse Tracker Module")); + Formats.Add(TEXT("kar;Karaoke MIDI")); + Formats.Add(TEXT("m1v;MPEG-1 Video")); + Formats.Add(TEXT("m2t;HDV Video")); + Formats.Add(TEXT("m2ts;Blu-ray BDAV Video")); + Formats.Add(TEXT("m2v;MPEG-2 Video")); + Formats.Add(TEXT("m4a;MPEG-4 Audio")); + Formats.Add(TEXT("m4b;MPEG-4 Audio Book")); + Formats.Add(TEXT("m4p;iTunes Music Store Audio")); + Formats.Add(TEXT("m5p;MachFive Preset File")); + Formats.Add(TEXT("m4v;iTunes Video")); + Formats.Add(TEXT("mid;MIDI File")); + Formats.Add(TEXT("mka;Matroska Audio")); + Formats.Add(TEXT("mkv;Matroska Video")); + Formats.Add(TEXT("mlp;Meridian Lossless Packing Audio")); + Formats.Add(TEXT("mod;Amiga Music Module")); + Formats.Add(TEXT("mov;Apple QuickTime Movie")); + Formats.Add(TEXT("mp1;MPEG-1 Layer 1 Audio")); + Formats.Add(TEXT("mp2;MPEG-1 Audio")); + Formats.Add(TEXT("mp2v;MPEG-2 Video")); + Formats.Add(TEXT("mp3;MPEG-2 Audio")); + Formats.Add(TEXT("mp4;MPEG-4 Movie")); + Formats.Add(TEXT("mp4v;MPEG-4 Video")); + Formats.Add(TEXT("mpa;MPEG-2 Audio")); + Formats.Add(TEXT("mpc;Musepack Compressed Audio")); + Formats.Add(TEXT("mpe;MPEG Movie")); + Formats.Add(TEXT("mpeg;MPEG Movie")); + Formats.Add(TEXT("mpeg1;MPEG-1 Video")); + Formats.Add(TEXT("mpeg2;MPEG-2 Video")); + Formats.Add(TEXT("mpeg4;MPEG-4 Video")); + Formats.Add(TEXT("mpg;MPEG-2 Movie")); + Formats.Add(TEXT("mpga;MPEG-1 Layer 3 Audio")); + Formats.Add(TEXT("mpv2;MPEG-2 Video Stream")); + Formats.Add(TEXT("mts;AVCHD Video")); + Formats.Add(TEXT("mtv;MTV Video Format")); + Formats.Add(TEXT("mus;Finale Notation File")); + Formats.Add(TEXT("mxf;Material Exchange Format")); + Formats.Add(TEXT("mxg;Miinoto Exchangeable Group File")); + Formats.Add(TEXT("nsc;Windows Media Station")); + Formats.Add(TEXT("nsv;Nullsoft Streaming Video")); + Formats.Add(TEXT("nut;NUT Multimedia Container")); + Formats.Add(TEXT("nuv;NuppelVideo File")); + Formats.Add(TEXT("oga;Ogg Vorbis Audio")); + Formats.Add(TEXT("ogg;Ogg Multimedia")); + Formats.Add(TEXT("ogm;Ogg Multimedia")); + Formats.Add(TEXT("ogv;Ogg Video")); + Formats.Add(TEXT("ogx;Ogg Vorbis Multiplexed Media")); + Formats.Add(TEXT("oma;Sony OpenMG Music")); + Formats.Add(TEXT("opus;Opus Audio")); + Formats.Add(TEXT("qcp;PureVoice Audio")); + Formats.Add(TEXT("ps;Program Stream Container")); + Formats.Add(TEXT("ra;Real Audio")); + Formats.Add(TEXT("ram;Real Audio Metadata")); + Formats.Add(TEXT("rec;Topfield PVR Recording")); + Formats.Add(TEXT("rm;Real Media")); + Formats.Add(TEXT("rmi;RMID MIDI")); + Formats.Add(TEXT("rmvb;Real Media VBR")); + Formats.Add(TEXT("rpl;Toribash Replay File")); + Formats.Add(TEXT("rv;Real Video")); + Formats.Add(TEXT("s3m;ScreamTracker 3 Module")); + Formats.Add(TEXT("sdp;Session Description Protocol")); + Formats.Add(TEXT("sid;Commodore C64 SID File")); + Formats.Add(TEXT("spx;Speex Audio")); + Formats.Add(TEXT("ts;MPEG-2 Transport Stream")); + Formats.Add(TEXT("tak;Tom's Lossless Audio Kompressor")); + Formats.Add(TEXT("thd;Dolby TrueHD Audio Stream")); + Formats.Add(TEXT("thp;Wii/GameCube Video")); + Formats.Add(TEXT("tod;JVC Everio Video Capture")); + Formats.Add(TEXT("tta;True Audio Codec")); + Formats.Add(TEXT("tts;Telerik Trainer Session")); + Formats.Add(TEXT("txd;TXD File")); + Formats.Add(TEXT("ty;Tivo Container")); + Formats.Add(TEXT("vid;Generic Video")); + Formats.Add(TEXT("vob;DVD Video Object")); + Formats.Add(TEXT("voc;Creative Labs Audio")); + Formats.Add(TEXT("vqf;TwinVQ Audio")); + Formats.Add(TEXT("vro;DVD Video Recording Format")); + Formats.Add(TEXT("w64;Sony Wave64 Audio")); + Formats.Add(TEXT("wav;Wave Audio")); + Formats.Add(TEXT("webm;WebM Video")); + Formats.Add(TEXT("wm;Windows Media")); + Formats.Add(TEXT("wma;Windows Media Audio")); + Formats.Add(TEXT("wmv;Windows Media Video")); + Formats.Add(TEXT("wtv;Windows Recorded TV Show")); + Formats.Add(TEXT("wv;WavPack Audio")); + Formats.Add(TEXT("xa;PlayStation Audio")); + Formats.Add(TEXT("xesc;Expression Encoder Screen Capture")); + Formats.Add(TEXT("xm;Fasttracker 2 Extended Module")); + + SupportedClass = UFileMediaSource::StaticClass(); + bEditorImport = true; +} + + +/* UFactory overrides + *****************************************************************************/ + +bool UVlcFileMediaSourceFactory::FactoryCanImport(const FString& Filename) +{ + // @hack: disable file extensions that are used in other factories + // @todo gmp: add support for multiple factories per file extension + const FString FileExtension = FPaths::GetExtension(Filename); + + return (FileExtension.ToUpper() != FString("WAV")); +} + + +UObject* UVlcFileMediaSourceFactory::FactoryCreateFile(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, const FString& Filename, const TCHAR* Parms, FFeedbackContext* Warn, bool& bOutOperationCanceled) +{ + UFileMediaSource* MediaSource = NewObject(InParent, InClass, InName, Flags); + MediaSource->SetFilePath(CurrentFilename); + + return MediaSource; +} diff --git a/Plugins/VlcMedia-master/Source/VlcMediaEditor/Private/VlcFileMediaSourceFactory.h b/Plugins/VlcMedia-master/Source/VlcMediaEditor/Private/VlcFileMediaSourceFactory.h new file mode 100644 index 0000000..f743026 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMediaEditor/Private/VlcFileMediaSourceFactory.h @@ -0,0 +1,24 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "Factories/Factory.h" +#include "VlcFileMediaSourceFactory.generated.h" + + +/** + * Implements a factory for UFileMediaSource objects. + */ +UCLASS(hidecategories=Object) +class UVlcFileMediaSourceFactory + : public UFactory +{ + GENERATED_UCLASS_BODY() + +public: + + //~ UFactory Interface + + virtual bool FactoryCanImport(const FString& Filename) override; + virtual UObject* FactoryCreateFile(UClass* InClass, UObject* InParent, FName InName, EObjectFlags Flags, const FString& Filename, const TCHAR* Parms, FFeedbackContext* Warn, bool& bOutOperationCanceled) override; +}; diff --git a/Plugins/VlcMedia-master/Source/VlcMediaEditor/Private/VlcMediaEditorModule.cpp b/Plugins/VlcMedia-master/Source/VlcMediaEditor/Private/VlcMediaEditorModule.cpp new file mode 100644 index 0000000..33752df --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMediaEditor/Private/VlcMediaEditorModule.cpp @@ -0,0 +1,22 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#include "Modules/ModuleInterface.h" +#include "Modules/ModuleManager.h" + + +/** + * Implements the VlcMediaEditor module. + */ +class FVlcMediaEditorModule + : public IModuleInterface +{ +public: + + //~ IModuleInterface interface + + virtual void StartupModule() override { } + virtual void ShutdownModule() override { } +}; + + +IMPLEMENT_MODULE(FVlcMediaEditorModule, VlcMediaEditor); diff --git a/Plugins/VlcMedia-master/Source/VlcMediaEditor/Private/VlcMediaEditorPrivate.h b/Plugins/VlcMedia-master/Source/VlcMediaEditor/Private/VlcMediaEditorPrivate.h new file mode 100644 index 0000000..08c5da0 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMediaEditor/Private/VlcMediaEditorPrivate.h @@ -0,0 +1,7 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "Runtime/Core/Public/Core.h" +#include "Runtime/CoreUObject/Public/CoreUObject.h" +#include "Runtime/MediaAssets/Public/FileMediaSource.h" diff --git a/Plugins/VlcMedia-master/Source/VlcMediaEditor/VlcMediaEditor.Build.cs b/Plugins/VlcMedia-master/Source/VlcMediaEditor/VlcMediaEditor.Build.cs new file mode 100644 index 0000000..845db91 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMediaEditor/VlcMediaEditor.Build.cs @@ -0,0 +1,25 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +namespace UnrealBuildTool.Rules +{ + public class VlcMediaEditor : ModuleRules + { + public VlcMediaEditor(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + PrivateDependencyModuleNames.AddRange( + new string[] { + "Core", + "CoreUObject", + "MediaAssets", + "UnrealEd", + }); + + PrivateIncludePaths.AddRange( + new string[] { + "VlcMediaEditor/Private", + }); + } + } +} diff --git a/Plugins/VlcMedia-master/Source/VlcMediaFactory/Private/VlcMediaFactoryModule.cpp b/Plugins/VlcMedia-master/Source/VlcMediaFactory/Private/VlcMediaFactoryModule.cpp new file mode 100644 index 0000000..0d4b491 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMediaFactory/Private/VlcMediaFactoryModule.cpp @@ -0,0 +1,358 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#include "Containers/Array.h" +#include "Containers/UnrealString.h" +#include "IMediaPlayerFactory.h" +#include "IMediaModule.h" +#include "IMediaOptions.h" +#include "Internationalization/Internationalization.h" +#include "Misc/Paths.h" +#include "Modules/ModuleInterface.h" +#include "Modules/ModuleManager.h" +#include "UObject/Class.h" +#include "UObject/NameTypes.h" +#include "UObject/UObjectGlobals.h" +#include "UObject/WeakObjectPtr.h" + +#if WITH_EDITOR + #include "ISettingsModule.h" + #include "ISettingsSection.h" + #include "VlcMediaSettings.h" +#endif + +#include "../../VlcMedia/Public/IVlcMediaModule.h" + + +#define LOCTEXT_NAMESPACE "FVlcMediaFactoryModule" + + +/** + * Implements the VlcMediaFactory module. + */ +class FVlcMediaFactoryModule + : public IMediaPlayerFactory + , public IModuleInterface +{ +public: + + //~ IMediaPlayerFactory interface + + virtual bool CanPlayUrl(const FString& Url, const IMediaOptions* Options, TArray* OutWarnings, TArray* OutErrors) const override + { + FString Scheme; + FString Location; + + // check scheme + if (!Url.Split(TEXT("://"), &Scheme, &Location, ESearchCase::CaseSensitive)) + { + if (OutErrors != nullptr) + { + OutErrors->Add(LOCTEXT("NoSchemeFound", "No URI scheme found")); + } + + return false; + } + + if (!SupportedUriSchemes.Contains(Scheme)) + { + if (OutErrors != nullptr) + { + OutErrors->Add(FText::Format(LOCTEXT("SchemeNotSupported", "The URI scheme '{0}' is not supported"), FText::FromString(Scheme))); + } + + return false; + } + + // check file extension + if (Scheme == TEXT("file")) + { + const FString Extension = FPaths::GetExtension(Location, false); + + if (!SupportedFileExtensions.Contains(Extension)) + { + if (OutErrors != nullptr) + { + OutErrors->Add(FText::Format(LOCTEXT("ExtensionNotSupported", "The file extension '{0}' is not supported"), FText::FromString(Extension))); + } + + return false; + } + } + + // check options + if ((OutWarnings != nullptr) && (Options != nullptr)) + { + if (Options->GetMediaOption("PrecacheFile", false) && (Scheme != TEXT("file"))) + { + OutWarnings->Add(LOCTEXT("PrecacheFileWarning", "Precaching is supported for local files only")); + } + } + + return true; + } + + virtual TSharedPtr CreatePlayer(IMediaEventSink& EventSink) override + { + auto VlcMediaModule = FModuleManager::LoadModulePtr("VlcMedia"); + return (VlcMediaModule != nullptr) ? VlcMediaModule->CreatePlayer(EventSink) : nullptr; + } + + virtual FText GetDisplayName() const override + { + return LOCTEXT("MediaPlayerDisplayName", "VideoLAN Player"); + } + + virtual FName GetPlayerName() const override + { + static FName PlayerName(TEXT("VlcMedia")); + return PlayerName; + } + + virtual const TArray& GetSupportedPlatforms() const override + { + return SupportedPlatforms; + } + + virtual bool SupportsFeature(EMediaFeature Feature) const override + { + return ((Feature == EMediaFeature::AudioSamples) || + (Feature == EMediaFeature::AudioTracks) || + (Feature == EMediaFeature::CaptionTracks) || + (Feature == EMediaFeature::Video360) || + (Feature == EMediaFeature::VideoSamples) || + (Feature == EMediaFeature::VideoTracks)); + + } + +public: + + //~ IModuleInterface interface + + virtual void StartupModule() override + { + // supported file extensions + SupportedFileExtensions.Add(TEXT("3g2")); + SupportedFileExtensions.Add(TEXT("3ga")); + SupportedFileExtensions.Add(TEXT("3gp")); + SupportedFileExtensions.Add(TEXT("3gp2")); + SupportedFileExtensions.Add(TEXT("3gpp")); + SupportedFileExtensions.Add(TEXT("669")); + SupportedFileExtensions.Add(TEXT("a52")); + SupportedFileExtensions.Add(TEXT("aac")); + SupportedFileExtensions.Add(TEXT("ac3")); + SupportedFileExtensions.Add(TEXT("adt")); + SupportedFileExtensions.Add(TEXT("adts")); + SupportedFileExtensions.Add(TEXT("aif")); + SupportedFileExtensions.Add(TEXT("aifc")); + SupportedFileExtensions.Add(TEXT("aiff")); + SupportedFileExtensions.Add(TEXT("amb")); + SupportedFileExtensions.Add(TEXT("amr")); + SupportedFileExtensions.Add(TEXT("amv")); + SupportedFileExtensions.Add(TEXT("aob")); + SupportedFileExtensions.Add(TEXT("ape")); + SupportedFileExtensions.Add(TEXT("asf")); + SupportedFileExtensions.Add(TEXT("au")); + SupportedFileExtensions.Add(TEXT("avi")); + SupportedFileExtensions.Add(TEXT("awb")); + SupportedFileExtensions.Add(TEXT("bik")); + SupportedFileExtensions.Add(TEXT("bin")); + SupportedFileExtensions.Add(TEXT("caf")); + SupportedFileExtensions.Add(TEXT("crf")); + SupportedFileExtensions.Add(TEXT("divx")); + SupportedFileExtensions.Add(TEXT("drc")); + SupportedFileExtensions.Add(TEXT("dts")); + SupportedFileExtensions.Add(TEXT("dv")); + SupportedFileExtensions.Add(TEXT("evo")); + SupportedFileExtensions.Add(TEXT("f4v")); + SupportedFileExtensions.Add(TEXT("flac")); + SupportedFileExtensions.Add(TEXT("flv")); + SupportedFileExtensions.Add(TEXT("gvi")); + SupportedFileExtensions.Add(TEXT("gxf")); + SupportedFileExtensions.Add(TEXT("iso")); + SupportedFileExtensions.Add(TEXT("it")); + SupportedFileExtensions.Add(TEXT("kar")); + SupportedFileExtensions.Add(TEXT("m1v")); + SupportedFileExtensions.Add(TEXT("m2t")); + SupportedFileExtensions.Add(TEXT("m2ts")); + SupportedFileExtensions.Add(TEXT("m2v")); + SupportedFileExtensions.Add(TEXT("m4a")); + SupportedFileExtensions.Add(TEXT("m4b")); + SupportedFileExtensions.Add(TEXT("m4p")); + SupportedFileExtensions.Add(TEXT("m4v")); + SupportedFileExtensions.Add(TEXT("m5p")); + SupportedFileExtensions.Add(TEXT("mid")); + SupportedFileExtensions.Add(TEXT("mka")); + SupportedFileExtensions.Add(TEXT("mkv")); + SupportedFileExtensions.Add(TEXT("mlp")); + SupportedFileExtensions.Add(TEXT("mod")); + SupportedFileExtensions.Add(TEXT("mov")); + SupportedFileExtensions.Add(TEXT("mp1")); + SupportedFileExtensions.Add(TEXT("mp2")); + SupportedFileExtensions.Add(TEXT("mp2v")); + SupportedFileExtensions.Add(TEXT("mp3")); + SupportedFileExtensions.Add(TEXT("mp4")); + SupportedFileExtensions.Add(TEXT("mp4v")); + SupportedFileExtensions.Add(TEXT("mpa")); + SupportedFileExtensions.Add(TEXT("mpc")); + SupportedFileExtensions.Add(TEXT("mpe")); + SupportedFileExtensions.Add(TEXT("mpeg")); + SupportedFileExtensions.Add(TEXT("mpeg1")); + SupportedFileExtensions.Add(TEXT("mpeg2")); + SupportedFileExtensions.Add(TEXT("mpeg4")); + SupportedFileExtensions.Add(TEXT("mpg")); + SupportedFileExtensions.Add(TEXT("mpga")); + SupportedFileExtensions.Add(TEXT("mpv2")); + SupportedFileExtensions.Add(TEXT("mts")); + SupportedFileExtensions.Add(TEXT("mtv")); + SupportedFileExtensions.Add(TEXT("mus")); + SupportedFileExtensions.Add(TEXT("mxf")); + SupportedFileExtensions.Add(TEXT("mxg")); + SupportedFileExtensions.Add(TEXT("nsc")); + SupportedFileExtensions.Add(TEXT("nsv")); + SupportedFileExtensions.Add(TEXT("nut")); + SupportedFileExtensions.Add(TEXT("nuv")); + SupportedFileExtensions.Add(TEXT("oga")); + SupportedFileExtensions.Add(TEXT("ogg")); + SupportedFileExtensions.Add(TEXT("ogm")); + SupportedFileExtensions.Add(TEXT("ogv")); + SupportedFileExtensions.Add(TEXT("ogx")); + SupportedFileExtensions.Add(TEXT("oma")); + SupportedFileExtensions.Add(TEXT("opus")); + SupportedFileExtensions.Add(TEXT("qcp")); + SupportedFileExtensions.Add(TEXT("ps")); + SupportedFileExtensions.Add(TEXT("ra")); + SupportedFileExtensions.Add(TEXT("ram")); + SupportedFileExtensions.Add(TEXT("rec")); + SupportedFileExtensions.Add(TEXT("rm")); + SupportedFileExtensions.Add(TEXT("rmi")); + SupportedFileExtensions.Add(TEXT("rmvb")); + SupportedFileExtensions.Add(TEXT("rpl")); + SupportedFileExtensions.Add(TEXT("rv")); + SupportedFileExtensions.Add(TEXT("s3m")); + SupportedFileExtensions.Add(TEXT("sdp")); + SupportedFileExtensions.Add(TEXT("sid")); + SupportedFileExtensions.Add(TEXT("spx")); + SupportedFileExtensions.Add(TEXT("ts")); + SupportedFileExtensions.Add(TEXT("tak")); + SupportedFileExtensions.Add(TEXT("thd")); + SupportedFileExtensions.Add(TEXT("thp")); + SupportedFileExtensions.Add(TEXT("tod")); + SupportedFileExtensions.Add(TEXT("tta")); + SupportedFileExtensions.Add(TEXT("rp")); + SupportedFileExtensions.Add(TEXT("rs")); + SupportedFileExtensions.Add(TEXT("tta")); + SupportedFileExtensions.Add(TEXT("tts")); + SupportedFileExtensions.Add(TEXT("txd")); + SupportedFileExtensions.Add(TEXT("ty")); + SupportedFileExtensions.Add(TEXT("vid")); + SupportedFileExtensions.Add(TEXT("vob")); + SupportedFileExtensions.Add(TEXT("voc")); + SupportedFileExtensions.Add(TEXT("vqf")); + SupportedFileExtensions.Add(TEXT("vro")); + SupportedFileExtensions.Add(TEXT("w64")); + SupportedFileExtensions.Add(TEXT("wav")); + SupportedFileExtensions.Add(TEXT("webm")); + SupportedFileExtensions.Add(TEXT("wm")); + SupportedFileExtensions.Add(TEXT("wma")); + SupportedFileExtensions.Add(TEXT("wmv")); + SupportedFileExtensions.Add(TEXT("wtv")); + SupportedFileExtensions.Add(TEXT("wv")); + SupportedFileExtensions.Add(TEXT("xa")); + SupportedFileExtensions.Add(TEXT("xesc")); + SupportedFileExtensions.Add(TEXT("xm")); + + // supported platforms + SupportedPlatforms.Add(TEXT("Linux")); + SupportedPlatforms.Add(TEXT("Mac")); + SupportedPlatforms.Add(TEXT("Windows")); + SupportedPlatforms.Add(TEXT("WinRT")); + + // supported schemes + SupportedUriSchemes.Add(TEXT("cdda")); + SupportedUriSchemes.Add(TEXT("dccp")); + SupportedUriSchemes.Add(TEXT("dshow")); + SupportedUriSchemes.Add(TEXT("dvd")); + SupportedUriSchemes.Add(TEXT("file")); + SupportedUriSchemes.Add(TEXT("dvd")); + SupportedUriSchemes.Add(TEXT("ftp")); + SupportedUriSchemes.Add(TEXT("http")); + SupportedUriSchemes.Add(TEXT("https")); + SupportedUriSchemes.Add(TEXT("icyx")); + SupportedUriSchemes.Add(TEXT("itpc")); + SupportedUriSchemes.Add(TEXT("mms")); + SupportedUriSchemes.Add(TEXT("mmsh")); + SupportedUriSchemes.Add(TEXT("mmst")); + SupportedUriSchemes.Add(TEXT("mmsu")); + SupportedUriSchemes.Add(TEXT("mtp")); + SupportedUriSchemes.Add(TEXT("pnm")); + SupportedUriSchemes.Add(TEXT("realrtsp")); + SupportedUriSchemes.Add(TEXT("rtmp")); + SupportedUriSchemes.Add(TEXT("rtp")); + SupportedUriSchemes.Add(TEXT("rtsp")); + SupportedUriSchemes.Add(TEXT("sap")); + SupportedUriSchemes.Add(TEXT("smb")); + SupportedUriSchemes.Add(TEXT("screen")); + SupportedUriSchemes.Add(TEXT("unsv")); + SupportedUriSchemes.Add(TEXT("v4l2")); + SupportedUriSchemes.Add(TEXT("vcd")); + +#if WITH_EDITOR + // register settings + ISettingsModule* SettingsModule = FModuleManager::GetModulePtr("Settings"); + + if (SettingsModule != nullptr) + { + ISettingsSectionPtr SettingsSection = SettingsModule->RegisterSettings("Project", "Plugins", "VlcMedia", + LOCTEXT("VlcMediaSettingsName", "VLC Media"), + LOCTEXT("VlcMediaSettingsDescription", "Configure the VLC Media plug-in."), + GetMutableDefault() + ); + } +#endif //WITH_EDITOR + + // register player factory + auto MediaModule = FModuleManager::LoadModulePtr("Media"); + + if (MediaModule != nullptr) + { + MediaModule->RegisterPlayerFactory(*this); + } + } + + virtual void ShutdownModule() override + { + // unregister player factory + auto MediaModule = FModuleManager::GetModulePtr("Media"); + + if (MediaModule != nullptr) + { + MediaModule->UnregisterPlayerFactory(*this); + } + +#if WITH_EDITOR + // unregister settings + ISettingsModule* SettingsModule = FModuleManager::GetModulePtr("Settings"); + + if (SettingsModule != nullptr) + { + SettingsModule->UnregisterSettings("Project", "Plugins", "VlcMedia"); + } +#endif //WITH_EDITOR + } + +private: + + /** List of supported media file types. */ + TArray SupportedFileExtensions; + + /** List of platforms that the media player support. */ + TArray SupportedPlatforms; + + /** List of supported URI schemes. */ + TArray SupportedUriSchemes; +}; + + +#undef LOCTEXT_NAMESPACE + +IMPLEMENT_MODULE(FVlcMediaFactoryModule, VlcMediaFactory); diff --git a/Plugins/VlcMedia-master/Source/VlcMediaFactory/Private/VlcMediaFactoryPrivate.h b/Plugins/VlcMedia-master/Source/VlcMediaFactory/Private/VlcMediaFactoryPrivate.h new file mode 100644 index 0000000..3ae365f --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMediaFactory/Private/VlcMediaFactoryPrivate.h @@ -0,0 +1,16 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#if WITH_EDITOR + #include "Developer/Settings/Public/ISettingsModule.h" + #include "Developer/Settings/Public/ISettingsSection.h" +#endif + +#include "Runtime/Core/Public/Core.h" +#include "Runtime/Core/Public/Modules/ModuleManager.h" +#include "Runtime/CoreUObject/Public/CoreUObject.h" +#include "Runtime/Media/Public/IMediaModule.h" +#include "Runtime/Media/Public/IMediaOptions.h" + +#include "../../VlcMedia/Public/IVlcMediaModule.h" diff --git a/Plugins/VlcMedia-master/Source/VlcMediaFactory/Private/VlcMediaFactorySettings.cpp b/Plugins/VlcMedia-master/Source/VlcMediaFactory/Private/VlcMediaFactorySettings.cpp new file mode 100644 index 0000000..0a69008 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMediaFactory/Private/VlcMediaFactorySettings.cpp @@ -0,0 +1,13 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#include "VlcMediaSettings.h" + + +UVlcMediaSettings::UVlcMediaSettings() + : DiscCaching(FTimespan::FromMilliseconds(300.0)) + , FileCaching(FTimespan::FromMilliseconds(300.0)) + , LiveCaching(FTimespan::FromMilliseconds(300.0)) + , NetworkCaching(FTimespan::FromMilliseconds(1000.0)) + , LogLevel(EVlcMediaLogLevel::Warning) + , ShowLogContext(false) +{ } diff --git a/Plugins/VlcMedia-master/Source/VlcMediaFactory/Public/VlcMediaSettings.h b/Plugins/VlcMedia-master/Source/VlcMediaFactory/Public/VlcMediaSettings.h new file mode 100644 index 0000000..349b4fc --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMediaFactory/Public/VlcMediaSettings.h @@ -0,0 +1,75 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreTypes.h" +#include "UObject/Object.h" +#include "UObject/ObjectMacros.h" + +#include "VlcMediaSettings.generated.h" + + +/** + * Available levels for LibVLC log messages. + */ +UENUM() +enum class EVlcMediaLogLevel : uint8 +{ + /** Error messages. */ + Error = 0, + + /** Warnings and potential errors. */ + Warning = 1, + + /** Debug messages. */ + Debug = 2, +}; + + +/** + * Settings for the VlcMedia plug-in. + */ +UCLASS(config=Engine) +class VLCMEDIAFACTORY_API UVlcMediaSettings + : public UObject +{ + GENERATED_BODY() + +public: + + /** Default constructor. */ + UVlcMediaSettings(); + +public: + + /** Caching duration for optical media (default = 300 ms). */ + UPROPERTY(config, EditAnywhere, Category=Caching) + FTimespan DiscCaching; + + /** Caching duration for local files (default = 300 ms). */ + UPROPERTY(config, EditAnywhere, Category=Caching) + FTimespan FileCaching; + + /** Caching duration for cameras and microphones (default = 300 ms). */ + UPROPERTY(config, EditAnywhere, Category=Caching) + FTimespan LiveCaching; + + /** Caching duration for network resources (default = 1000 ms). */ + UPROPERTY(config, EditAnywhere, Category=Caching) + FTimespan NetworkCaching; + +public: + + /** + * Log level for LibVLC log messages to be forwarded to UE4 log file (default = Warning). + * + * This setting is used only in Debug and Development builds. + * No log entries will written in Shipping and Test builds. + */ + UPROPERTY(config, EditAnywhere, Category=Debugging) + EVlcMediaLogLevel LogLevel; + + /** Whether to include file name & line number in LibVLC log messages. */ + UPROPERTY(config, EditAnywhere, Category=Debugging) + bool ShowLogContext; +}; diff --git a/Plugins/VlcMedia-master/Source/VlcMediaFactory/VlcMediaFactory.Build.cs b/Plugins/VlcMedia-master/Source/VlcMediaFactory/VlcMediaFactory.Build.cs new file mode 100644 index 0000000..9101eb4 --- /dev/null +++ b/Plugins/VlcMedia-master/Source/VlcMediaFactory/VlcMediaFactory.Build.cs @@ -0,0 +1,53 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +namespace UnrealBuildTool.Rules +{ + public class VlcMediaFactory : ModuleRules + { + public VlcMediaFactory(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + DynamicallyLoadedModuleNames.AddRange( + new string[] { + "Media", + }); + + PrivateDependencyModuleNames.AddRange( + new string[] { + "MediaAssets", + }); + + PrivateIncludePathModuleNames.AddRange( + new string[] { + "Media", + "VlcMedia", + }); + + PrivateIncludePaths.AddRange( + new string[] { + "VlcMediaFactory/Private", + }); + + PublicDependencyModuleNames.AddRange( + new string[] { + "Core", + "CoreUObject", + }); + + if (Target.Type == TargetRules.TargetType.Editor) + { + DynamicallyLoadedModuleNames.Add("Settings"); + PrivateIncludePathModuleNames.Add("Settings"); + } + + if ((Target.Platform == UnrealTargetPlatform.Mac) || + (Target.Platform == UnrealTargetPlatform.Linux) || + (Target.Platform == UnrealTargetPlatform.Win32) || + (Target.Platform == UnrealTargetPlatform.Win64)) + { + DynamicallyLoadedModuleNames.Add("VlcMedia"); + } + } + } +} diff --git a/Plugins/VlcMedia-master/ThirdParty/vlc/AUTHORS b/Plugins/VlcMedia-master/ThirdParty/vlc/AUTHORS new file mode 100644 index 0000000..ef1697e --- /dev/null +++ b/Plugins/VlcMedia-master/ThirdParty/vlc/AUTHORS @@ -0,0 +1,852 @@ +VideoLAN and the VLC team would like to acknowledge the following contributors: + +Programming +----------- +Rémi Denis-Courmont +Jean-Baptiste Kempf +Laurent Aimar +Gildas Bazin +Felix Paul Kühne +Rafaël Carré +Pierre d'Herbemont +Rémi Duraffort +Derk-Jan Hartman +Antoine Cellerier +Samuel Hocevar +Jean-Paul Saman +Christophe Mutricy +Clément Stenac +Christophe Massiot +Ilkka Ollakka +Pierre Ynard +François Cartegnie +Damien Fouilleul +Sigmund Augdal Helberg +Erwan Tulou +David Fuhrmann +Olivier Teulière +Cyril Deguet +Eric Petit +Filippo Carone +Rocky Bernstein +Hugo Beauzée-Luyssen +Olivier Aubert +Pavlov Konstantin +Jakob Leben +Benjamin Pracht +Jean-Philippe André +Steve Lhomme +Stéphane Borel +JP Dinger +Geoffroy Couprie +Martin Storsjö +Marian Ďurkovič +Ludovic Fauvet +Yoann Peronneau +Sébastien Escudier +Jon Lech Johansen +KO Myung-Hun +Edward Wang +Dennis van Amerongen +Faustino Osuna +Mirsal Ennaime +Denis Charmet +Jérôme Decoodt +Loïc Minier +David Flynn +Frédéric Yhuel +Kaarlo Raiha +Mark Moriarty +Christopher Mueller +Fabio Ritrovato +Tony Castley +Srikanth Raju +Michel Kaempf +Jean-Marc Dressler +Johan Bilien +Vincent Seguin +Simon Latapie +Bernie Purcell +Henri Fallon +Sebastien Zwickert +Christoph Miebach +Adrien Maglo +Emmanuel Puig +Renaud Dartus +Alexis de Lattre +Vincent Penquerc'h +Arnaud de Bossoreille de Ribou +Mohammed Adnène Trojette +Boris Dorès +Jai Menon +Anil Daoud +Daniel Mierswa +Naohiro Koriyama +Rob Jonson +Pierre Baillet +Dominique Leuenberger +Andre Pang +Zoran Turalija +Akash Mehrotra +André Weber +Anthony Loiseau +Lukas Durfina +Xavier Marchesini +Cyril Mathé +Devin Heitmueller +Juho Vähä-Herttua +Ken Self +Alexis Ballier +Juha Jeronen +Nicolas Chauvet +Richard Hosking +Éric Lassauge +Marc Ariberti +Sébastien Toque +Tobias Güntner +Benoit Steiner +Michel Lespinasse +Carlo Calabrò +Cheng Sun +Michał Trzebiatowski +Brad Smith +Brendon Justin +Alexey Sokolov +Basos G +Philippe Morin +Steinar H. Gunderson +Vicente Jimenez Aguilar +Yuval Tze +Yves Duret +Benjamin Drung +Michael Hanselmann +Alex Merry +Damien Lucas +Grigori Goronzy +Richard Shepherd +Gaël Hendryckx +Michael Feurstein +Stephan Assmus +Adrien Grand +Colin Guthrie +David Menestrina +Dominique Martinet +Gleb Pinigin +Jason Luka +Luc Saillard +Luca Barbato +Mario Speiß +Pankaj Yadav +Ramiro Polla +Ronald Wright +Rui Zhang +Can Wu +Christophe Courtaut +FUJISAWA Tooru +Hannes Domani +Manol Manolov +Timothy B. Terriberry +Antoine Lejeune +Arnaud Schauly +Branko Kokanovic +Dylan Yudaken +Florian G. Pflug +François Revol +G Finch +Keary Griffin +Konstanty Bialkowski +Ming Hu +Philippe Coent +Przemyslaw Fiala +Tanguy Krotoff +Vianney BOYER +Casian Andrei +Chris Smowton +David Kaplan +Eugenio Jarosiewicz +Fabian Keil +Guillaume Poussel +John Peterson +Justus Piater +Mark Lee +Martin T. H. Sandsmark +Rune Botten +Søren Bøg +Toralf Niebuhr +Tristan Matthews +Angelo Haller +Aurélien Nephtali +Austin Burrow +Bill C. Riemers +Colin Delacroix +Cristian Maglie +Elminster2031 +Jakub Wieczorek +John Freed +Mark Hassman +Martin Briza +Mike Houben +Romain Goyet +Adrian Yanes +Alexander Lakhin +Anatoliy Anischovich +Barry Wardell +Ben Hutchings +Besnard Jean-Baptiste +Brian Weaver +Clement Chesnin +David Geldreich +Diego Elio Pettenò +Diego Fernando Nieto +Georgi Chorbadzhiyski +Jon Stacey +Jonathan Rosser +Joris van Rooij +Kaloyan Kovachev +Katsushi Kobayashi +Kelly Anderson +Loren Merritt +Maciej Blizinski +Mark Bidewell +Miguel Angel Cabrera Moya +Niles Bindel +Samuel Pitoiset +Scott Caudle +Sean Robinson +Sergey Radionov +Simon Hailes +Stephen Parry +Sukrit Sangwan +Thierry Reding +Xavier Martin +Alex Converse +Alexander Bethke +Alexandre Ratchov +Andres Krapf +Andrey Utkin +Andri Pálsson +Andy Chenee +Anuradha Suraparaju +Benjamin Poulain +Brieuc Jeunhomme +Chris Clayton +Clément Lecigne +Cédric Cocquebert +Daniel Peng +Danny Wood +David K +Edouard Gomez +Emmanuel de Roux +Frode Tennebø +GBX +Gaurav Narula +Geraud CONTINSOUZAS +Hugues Fruchet +Jan Winter +Jean-François Massol +Jean-Philippe Grimaldi +Josh Watzman +Kai Lauterbach +Konstantin Bogdanov +Kuan-Chung Chiu +Kuang Rufan +Matthias Dahl +Michael McEll +Michael Ploujnikov +Mike Schrag +Nickolai Zeldovich +Nicolas Bertrand +Niklas Hayer +Olafs Vandāns +Olivier Gambier +Paul Corke +Ron Frederick +Rov Juvano +Sabourin Gilles +Sam Lade +Sandeep Kumar +Sasha Koruga +Sreng Jean +Sven Petai +Tomas Krotil +Tomer Barletz +Tristan Leteurtre +Vittorio Giovara +Wang Bo +maxime Ripard +xxcv +Adam Hoka +Adrian Knoth +Adrien Cunin +Alan Fischer +Alan McCosh +Alex Helfet +Alexander Terentyev +Alexandre Ferreira +Alina Friedrichsen +An L. Ber +Andreas Schlick +Andrew Schubert +Andrey Makhnutin +Arnaud Vallat +Asad Mehmood +Ashok Bhat +Austin English +Baptiste Coudurier +Benoit Calvez +Björn Stenberg +Blake Livingston +Brandon Brooks +Brian Johnson +Brian Kurle +Cezar Elnazli +Chris White +Christian Masus +Christoph Pfister +Christoph Seibert +Christopher Key +Christopher Rath +Claudio Ortelli +Cody Russell +Cristian Morales Vega +Dan Rosenberg +Daniel Marth +Daniel Tisza +Detlef Schroeder +Diego Biurrun +Dominik 'Rathann' Mierzejewski +Duncan Salerno +Edward Sheldrake +Elliot Murphy +Eren Inan Canpolat +Ernest E. Teem III +Etienne Membrives +Fargier Sylvain +Fathi Boudra +Felix Geyer +Filipe Azevedo +Finn Hughes +Florian Hubold +Florian Roeske +Frank Enderle +Frédéric Crozat +Georg Seifert +Gertjan Van Droogenbroeck +Gilles Chanteperdrix +Greg Farrell +Gregory Maxwell +Gwenole Beauchesne +Götz Waschk +Hans-Kristian Arntzen +Harry Sintonen +Iain Wade +Ibraheem Paredath +Isamu Arimoto +Ismael Luceno +James Bates +James Bond +James Turner +Janne Grunau +Janne Kujanpää +Jarmo Torvinen +Jason Scheunemann +Jeff Lu +Jeroen Ost +Joe Taber +Johann Ransay +Johannes Weißl +John Hendrikx +John Stebbins +Jonas Gehring +Joseph S. Atkinson +Juergen Lock +Julien 'Lta' BALLET +Julien / Gellule +Julien Humbert +Kamil Baldyga +Kamil Klimek +Karlheinz Wohlmuth +Kevin Anthony +Kevin DuBois +Lari Natri +Lorenzo Pistone +Lucas C. Villa Real +Lukáš Lalinský +Mal Graty +Malte Tancred +Martin Pöhlmann +Martin Zeman +Marton Balint +Mathew King +Mathieu Sonet +Matthew A. Townsend +Matthias Bauer +Mika Tiainen +Mike Cardillo +Mounir Lamouri (volkmar) +Natanael Copa +Nathan Phillip Brink +Nick Briggs +Nick Pope +Nil Geiswiller +Pascal Thomet +Pere Orga +Peter Bak Nielsen +Phil Roffe and David Grellscheid +Philip Sequeira +Pierre Souchay +Piotr Fusik +Pádraig Brady +R.M +Ralph Giles +Ramon Gabarró +Robert Forsman +Robert Jedrzejczyk +Robert Paciorek +Rolf Ahrenberg +Roman Pen +Ruud Althuizen +Samuli Suominen +Scott Lyons +Sebastian Birk +Sergey Puzanov +Sergio Ammirata +Sharad Dixit +Song Ye Wen +Stephan Krempel +Steven Kramer +Steven Sheehy +Sveinung Kvilhaugsvik +Sylvain Cadhillac +Sylver Bruneau +Takahito HIRANO +Theron Lewis +Thijs Alkemade +Tillmann Karras +Timo Paulssen +Timo Rothenpieler +Tobias Rapp +Tomasen +Tony Vankrunkelsven +Tristan Heaven +Varphone Wong +Vasily Fomin +Vikram Narayanan +Yannick Bréhon +Yavor Doganov +Yohann Martineau +dharani.prabhu.s +suheaven +wucan +김정은 +Adam Sampson +Alexander Gall +Alex Antropoff +Alexis Guillard +Alex Izvorski +Amir Gouini +Andrea Guzzo +Andrew Flintham +Andrew Zaikin +Andy Lindsay +Arai/Fujisawa Tooru +Arkadiusz Miskiewicz +Arnaud Gomes-do-Vale +Arwed v. Merkatz +Barak Ori +Basil Achermann +Benjamin Mironer +Bill +Bob Maguire +Brian C. Wiles +Brian Raymond +Brian Robb +Carsten Gottbehüt +Carsten Haitzler +Charles Hordis +Chris Clepper +Christian Henz +Christof Baumgaertner +Christophe Burgalat +Christopher Johnson +Cian Duffy +Colin Simmonds +Damian Ivereigh +Daniel Fischer +Daniel Stränger +Danko Dolch +Dennis Lou +Dermot McGahon +Douglas West +Dugal Harris +Emmanuel Blindauer +Enrico Gueli +Enrique Osuna +Eren Türkay +Eric Dudiak +Espen Skoglund +Ethan C. Baldridge +François Seingier +Frans van Veen +Frédéric Ruget +Gerald Hansink +Gisle Vanem +Glen Gray +Goetz Waschk +Gregory Hazel +Gustaf Neumann +Hang Su +Hans Lambermont +Hans-Peter Jansen +Harris Dugal +Heiko Panther +Igor Helman +Isaac Osunkunle +Jan David Mol +Jan Gerber +Jan Van Boghout +Jasper Alias +Jean-Alexis Montignies +Jean-Baptiste Le Stang +Jeffrey Baker +Jeroen Massar +Jérôme Guilbaud +Johannes Buchner +Johen Michael Zorko +Johnathan Rosser +John Dalgliesh +John Paul Lorenti +Jörg +Joseph Tulou +Julien Blache +Julien Plissonneau Duquène +Julien Robert +Kenneth Ostby +Kenneth Self +Kevin H. Patterson +Koehler, Vitally +K. Staring +Lahiru Lakmal Priyadarshana +Laurent Mutricy +Leo Spalteholz +Loox Thefuture +Marc Nolette +Marco Munderloh +Mark Gritter +Markus Kern +Markus Kuespert +Martin Hamrle +Martin Kahr +Mateus Krepsky Ludwich +Mathias Kretschmer +Mats Rojestal +Matthias P. Nowak +Matthieu Lochegnies +Michael Mondragon +Michael S. Feurstein +Michel Lanners +Mickael Hoerdt +Miguel Angel Cabrera +Mikko Hirvonen +Moritz Bunkus +Nilmoni Deb +Olivier Houchard +Olivier Pomel +Ondrej Kuda aka Albert +Øyvind Kolbu +Pascal Levesque +Patrick Horn +Patrick McLean +Pauline Castets +Paul Mackerras +Peter Surda +Petr Vacek +Philippe Van Hecke +Pierre-Luc Beaudoin +Pierre Marc Dumuid +Régis Duchesne +Remco Poortinga +Rene Gollent +Rob Casey +Robson Braga Araujo +Roine Gustafsson +Roman Bednarek +Rudolf Cornelissen +Sašo Kiselkov +Sebastian Jenny +Shane Harper +Stefán Freyr Stefánsson +Steve Brown +Steven M. Schultz +Tapio Hiltunen +Thomas L. Wood +Thomas Mühlgrabner +Thomas Parmelan +Tim 'O Callagha +Tim Schuerewegen +Tong Ka Man +Torsten Spindler +Udo Richter +Vincent Dimar +Vincent Penne +Vitalijus Slavinskas +Vitaly V. Bursov +Vladimir Chernyshov +Wade Majors +Wallace Wadge +Watanabe Go +William Hawkins +Xavier Maillard +Ye zhang +Yuehua Zhao + +Artwork +------- +Damien Erambert +Daniel Dreibrodt, aka aLtgLasS +David Weber +Davor Orel +Dominic Spitaler +Eurodata Computer Club +Geoffrey Roussel +Joeri van Dooren +kty0ne +Max Rudberg +Richard Øiestad +Simon Damkjær Andersen +Tom Bigelajzen +Vincent van den Heuvel + +Documentation +------------- +Bill Eldridge + +Localization +------------ +Abdul Fousan - Tamil +A. Decorte - Friulian +A. Regnander - Swedish +Adem Gunes - Turkish +Adi Nugroho - Tagalog +Adnan Memija - Bosnian +airplanez - Korean +Ajith Manjula - Sinhala +Aled Powell - Welsh +Alexander Didebulidze - Georgian +Alexander Henket - Dutch +Alexander Jansen - Norwegian Bokmål +Alexander Lakhin - Russian +Alexey Lugin - Ukrainian +Alexey Salmin - Russian +Alfred John - Acoli +Amanpreet Singh Alam - Punjabi +André de Barros Martins Ribeiro - Brazilian portuguese +Andrey Brilevskiy - Russian +Andrey Wolk - Russian +Andri Pálsson - Icelandic +Andriy Bandura - Ukrainian +Anh Phan - Vietnamese +Aniket Eknath Kudale - Marathi +Animesh Swar - Nepalese +Aputsiaĸ Niels Janussen - Danish +Ara Bextiyar - Sorani (Kurdish) +Ari Constâncio - Portuguese +Arkadiusz Lipiec - Polish +Ask Hjorth Larsen - Danish +Audrey Prevost - French +Auk Piseth - Khmer +Bayarsaikhan Enkhtaivan Баярсайхан Энхтайван - Mongolian +Biraj Karmakar - Bengali (India) +Bruno Queirós - Portuguese +Bruno Vella - Italian +Caner Başaran - Turkish +Carlo Calabrò - Italian +Chandan Kumar - Hindi +Chesús Daniel Trigo - Aragonese +Christoph Miebach - German +Chynggyz Jumaliev - Kirgyz +Circo Radu - Romanian +Cristian Secară - Romanian +Daniel Nylander - Swedish +Daniel Winzen - German +David González - Spanish +David Planella - Catalan +Dean Lee - Simplified Chinese +Denis Arnaud - Breton +Derk-Jan Hartman - Dutch +DirektX - Hungarian +Dominko Aždajić - Croatian +Dylan Aïssi - French +Đorđe Vasiljević - Serbian +Eduard Babayan - Armenian +Eero - Estonian +Eirik U. Birkeland - Norwegian Nynorsk +Elizabeth Da Conceicao Baptista - Tetum +Emilio Sepúlveda - Interlingua +Emin Mastizada - Azerbaijani +Éric Lassauge - French +Farzaneh Sarafraz - Persian +Florence Tushabe - Chiga +Fouzia Bourai - Arabic +Frank Chao - Traditional Chinese +Freyr Gunnar Ólafsson - Icelandic +Friedel Wolff - Afrikaans +Fumio Nakayama - Japanese +Gabor Kelemen - Hungarian +Gaurav Kumar - Hindi +Gaëtan Rousseaux - Walloon +Ghjuvan Pasquinu - Corsican +Goce Manevski - Macedonian +Golam Maruf Oovee - Bengali +Gonçalo Cordeiro - Galician +Gorana Milicevic - Serbian +Goswami Hardikpuri Kishorpuri - Gujarati +Haakon Meland Eriksen - Norwegian +Han HoJoong - Korean +Hardik Kishorpuri Goswami - Gujarati +Hemanta Nandi - Bengali (India) +Huw Waters - Welsh +H.Shalitha Vikum - Sinhala +Ibrahima Sarr - Fulah +Ingmārs Dīriņš - Latvian +Israt Jahan - Bengali +Ivar Smolin - Estonian +Iván Seoane Pardo - Galician +Ivo Ivanov - Bulgarian +Iñaki Larrañaga Murgoitio - Basque +Iñigo Varela - Asturian; Bable +Jakub Žáček - Czech +James Olweny - Ganda +Jamil Ahmed - Bengali +Javier Varela - Spanish +Jean-Pierre Kuypers - French +Jens Seidel - German +Joao Almeida - Portuguese +Joel Arvidsson - Swedish +jogijs - Latvian +Jonas Larsen - Danish +Jon Stødle - Norwegian Nynorsk +Jouni Kähkönen - Finnish +Juha Jeronen - Finnish +Julen Ruiz Aizpuru - Basque +Kai Hermann - German +Kamil Páral - Czech +Kang Jeong-Hee - Korean +Kasper Tvede - Danish +Kaya Zeren - Turkish +Kenneth Nielsen - Danish +Khin Mi Mi Aung - Burmese +Khoem Sokhem - Khmer +Kola - Albanian +Kypchak Kypchak - Kazakh +Laurent Jonqueres - Occitan +Loba Yeasmeen - Bengali +Lorena Gomes - Catalan +Lorenzo Porta - Italian +Luqman Hakim - Indonesian +L. Balasubramaniam - Hindi +Mahrazi Mohd Kamal - Malay +Manolis Stefanis - Modern Greek +Manuela Silva/Alfredo Silva - Portuguese +Marián Hikaník - Slovak +Mario Siegmann - German +Marko Uskokovic - Serbian +Martin Srebotnjak - Slovenian +Martin Zicha - Czech +Matej Urbančič - Slovenian +Mathias C. Berens, welcome-soft - German +Mattias Põldaru - Estonian +Md. Rezwan Shahid - Bengali +Meelad Zakaria - Persian +Michael Bauer - Scottish Gaelic +Michal Halenka - Czech +Michał Trzebiatowski - Polish +Miguel Sousa - Portuguese +Mihkel Kirjutas - Estonian +Mindaugas Baranauskas - Lithuanian +Miroslav Oujeský - Czech +Morten Brix Pedersen - Danish +Mustafa Sandal - Czech +Myckel Habets - Dutch +Namhyung Kim - Korean +Niels Fanøe - Danish +Niklas 'Nille' Åkerström - Swedish +Olav Dahlum - Norwegian Bokmål +Oleksandr Natalenko - Ukrainian +Omer Ensari - Kurmanji (Kurdish) +Osama Khalid - Arabic +Otto Kekäläinen - Finnish +Paras Nath Chaudhary - Nepali +Pasindu Kavinda - Sinhala +Pau Iranzo - Catalan +Paula Iglesias - Galician +Pedro Valadares - Portuguese +Peter Jespersen - Danish +Petr Šimáček - Czech +Phan Anh - Vietnamese +Philipp Weissenbacher - German +Pittayakom Saingtong - Thai +Prasannajit Acharya - Oriya +Praveen Illa - Telugu +Predrag Ljubenović - Serbian +Pyae Sone - Burmese +Rajnikant Kumbhar - Marathi +Ricardo Perdigão - Portuguese +Ricardo Pérez López - Spanish +Roustam Ghizdatov - Russian +Ruei-Yuan Lu - Traditional Chinese +Saad Liaquat Kiani - Urdu +Sadia Afroz - Bengali +Said Marjan Zazai - Pashto +Salar Khalilzadeh - Persian +Sam Askari - Spanish +Sam Hocevar - British +Samuel Hocevar - French +Saúl Ortega - Spanish +Savvas Nesseris - Modern Greek +Sayan Chowdhury - Hindi +Seanán Ó Coistín - Irish +Semsudin Abdic - Bosnian +Shambhu Kumar - Hindi +Shantanu Sarkar - Hindi +Shashi Ranjan - Hindi +Siarhei Daryichau Дар'ічаў Сяргей - Belarusian +Sidney Doria - Brazilian Portuguese +Sigmund Augdal - Norwegian Bokmål +Simos Xenitellis - Modern Greek +Sipho Sibiya - Zulu +Sok Sophea - Khmer +Solomon Gizaw - Amharic +Sreejith P - Malayalam +Suraj Kawade - Marathi +Stian Jørgensrud - Norwegian Bokmål +Sveinn í Felli - Icelandic +Tadashi Jokagi - Japanese +Tarsem Singh - Hindi +Thanakrit Chomphuming - Thai +Tero Pelander - Finnish +Thomas De Rocker - Dutch +Thomas Graf - gettext support, German +Tomáš Chvátal - Czech +Tòni Galhard - Occitan +Umesh Agarwal - Bengali (India) +Umidjon Almasov - Uzbek +Václav Pavlíček - Czech +Valek Filippov - Russian +Vicente Jimenez Aguilar - Spanish +Vincenzo Reale - Italian +Vít Pelčák - Czech +viyyer - Hindi +Vladimir Yermolayev - Russian +Vojtěch Smejkal - Czech +Wei Mingzhi - Simplified Chinese +Xènia Albà Cantero - Catalan +Xuacu Saturio - Asturian +Yaron Shahrabani - Hebrew +Yaşar Tay - Turkish +Yhal Htet Aung - Burmese +Yogesh K S - Kannada +Yoyo - Simplified Chinese +Yuksel Yildirim - Turkish +Zabeeh Khan - Pashto +Zhang Tong - Chinese diff --git a/Plugins/VlcMedia-master/ThirdParty/vlc/COPYING b/Plugins/VlcMedia-master/ThirdParty/vlc/COPYING new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/Plugins/VlcMedia-master/ThirdParty/vlc/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/Plugins/VlcMedia-master/ThirdParty/vlc/Mac/plugins/libbluray-j2se-1.0.2.jar b/Plugins/VlcMedia-master/ThirdParty/vlc/Mac/plugins/libbluray-j2se-1.0.2.jar new file mode 100644 index 0000000..06d9183 Binary files /dev/null and b/Plugins/VlcMedia-master/ThirdParty/vlc/Mac/plugins/libbluray-j2se-1.0.2.jar differ diff --git a/Plugins/VlcMedia-master/ThirdParty/vlc/NEWS b/Plugins/VlcMedia-master/ThirdParty/vlc/NEWS new file mode 100644 index 0000000..cab32bf --- /dev/null +++ b/Plugins/VlcMedia-master/ThirdParty/vlc/NEWS @@ -0,0 +1,4889 @@ +Changes between 2.2.x and 3.0.0-git: +-------------------------------- + +Important changes: + * The Windows XP/2003/2003R2 support for VLC is now on a best-efforts basis: + it should work, but not without limitations. + libVLC support for Windows XP is deprecated. + You _really_ should upgrade. + * Windows Vista (all versions) without Platform Upgrade is not supported. + * Linux support requires now a kernel newer than 2.6.26 + * Mac OS X 10.6 support is now removed. You need OS X 10.7 to run VLC. + +Core: + * Support network browsing for distant file system (SMB, FTP, SFTP, ...) + and rewrite the parsing of those files + * Add a keystore API: fetch and store password for common protocols (HTTP, + SMB, SFTP, FTP, RTSP ...) + * Autodetect external audio tracks (ac3, m4a, aac, dts...), similar to subs + * Support HDMI passthrough for Audio HD codecs, like E-AC3, TrueHD + * Support for 12bits codec and extended colorspaces (HDR) + * Support output renderers, like ChromeCast + * VLC now assumes vlcrc config file is in UTF-8 + * Support portable version of Windows build + * Support wayland surface type + * Allow to start the video paused on the first frame + * Refactor preparsing input + * EPG reworked: table and single event updates, now using network time + * Refactored and fixed subtitles es selection. Demuxers can now override + es category single only or multiple es behavior + * Support for 360 video and audio + * Support for ambisonic audio and > 8 channels + * Support subtitles size live changing + +Access: + * New NFS access module using libnfs + * New SMB access module using libdsm + * Rewrite MPEG-DASH (Dynamic Adaptive Streaming over HTTP) support, including + MPEG2TS and ISOFF profiles + * Support HDS (Http Dynamic Streaming) from Adobe (f4m, f4v, etc.) + * Large rework of the Smooth Streaming module + * Replaced httplive stream filter with new HLS demuxer, replaced smooth + stream filter with new Smooth demuxer, both using unified adaptive module + * Support HLSv4-7, including TS and raw muxing and ID3 tags + * Screen capture plugin for Wayland display + * Support decompression and extraction through libarchive (tar, zip, rar...) + * Improvements of cookie handling (share cookies between playlist items, + domain / path matching, Secure cookies) + * Support DVB-T2 on Windows BDA + * Support depayloading Opus from RTP + * Support sftp username and passwords options in URL, and key authentication + * New UPnP access module, to list directories without infinite recursions + * New WASAPI audio capture module on Windows + * SMB/FTP/SFTP accesses can list directories + * New "concat" access module for concatenating byte streams + * New HTTP/TLS access module for HTTP 2.0 support + * Named pipes and device nodes are no longer included in directory listings + by default. Use --list-special-files to include them back. + * Support for timeout in UDP input --udp-timeout= + * New SAT>IP access module, to receive DVB-S via IP networks + * Improvements on DVB scanning + * BluRay module can open ISO over network and has full BD-J support + * Support for DVD ISO over network + +Decoder: + * OMX GPU-zerocopy support for decoding and display on Android using OpenMax IL + * Support 4:4:4 and 4:2:2 chroma samplings with VDPAU hw acceleration + * Support for ARIB STD-B24 subtitles + * Support for experimental Daala video + * Support for experimental AV1 video + * Important improvements for the MMAL decoder and output for rPI and rPI2 + * Support HEVC hardware decoding on Windows, using DxVA2 and D3D11 + * Support hardware decoding using Direct3D11, including GPU-zerocopy mode, + and hardware filtering, for deinterlace and adjust + * DxVA2 GPU-zerocopy for hardware decoding and displaying on Windows, + and support for hardware filtering, for deinterlace and adjust + * Support HEVC hardware decoding using OMX and MediaCodec (Android) + * Use MediaCodec via NDK native API after Android Lollipop + * Support MPEG-2, VC1/WMV3 on Android using MediaCodec + * Support VP9 and WMV3 decoding using OMX and performance improvements + * New MPEG-1 & 2 audio layer I, II, III + MPEG 2.5 decoder based on libmpg123 + * New BPG decoder based on libbpg + * Fixed uncompressed DVD-Audio (AOB) LPCM decoding + * Rewrite WPL playlists and add ZPL playlists support (Zune) + * Support TDSC, Canopus HQX, Cineform, SpeedHQ, Pixlet, QDMC and FMVC codecs + * TTML subtitles support, including EBU-TT-D variant + * Support 9-bit and 10-bit GBR planar formats + * New hardware accelerated decoder for OS X and and iOS based on Video Toolbox + supporting H.263, H.264/MPEG-4 AVC, MPEG-4 Part 2, and DV depending on device + and OS version + * Support for the OggSpots video codec + * HEVC packetization is now correct + * H264 packetizer can now generate timestamps + * Packetizers have support for captions in SEI + * DTS packetizer handle DTS extensions (like DTS-HD): decoders like avcodec + can now decode up to 8 channels + * JPEG images correctly oriented using embedded orientation tag, if present + * Support VPX high bit depth support + * Extend MicroDVD support with color, fontname, size, position extensions + * BluRay text subtitles are now decoded + * Improve Closed Captions detection + +Demuxers: + * Support HD-DVD .evo (H.264, VC-1, MPEG-2, PCM, AC-3, E-AC3, MLP, DTS) + * Support Opus in MPEG Transport Stream + * Support Daala in Ogg + * Important rework of the MP4 demuxer, including: + * Support for fragmented MP4 + * Support EIA-608 subtitles in MP4/mov + * Support WMV and WMAV in MP4/mov, aka Flip4Mac files + * Support bitmap audio channel reordering in MP4/mov + * Support for RTP Reception Hint Track with H.264, GSM and Speex payloads + * Support for XiphQt(MP4) vorbis and Flac + * Support for VP8/VP9/VP10 in MP4 + * Support GoPro HiLight chapters + * Important rework of the TS demuxer, including: + * Fixed program selection with recorded TS (TopField, DreamBox and others) + * Fixed TS playback with PAT/PMT less recordings + * Basic support for MPEG4-SL in TS and T-DMB + * Support for lame's replaygain extension in mpeg files + * Fixes for DTS detection in WAV and MKV files + * Support for Creative ADPCM/alaw/ulaw/S16L in VOC files + * Support for Creative ADPCM in AVI + * Support WMV extended content metadata + * Directory Demux can now sort items, ignore extensions and hidden files + * Support SBV subtitles + * Support AlbumArtist and DiscNumber metadata + * Support SCTE-18 / EAS inside TS + * Support raw h265/hevc files + * Support multi-channel WAV without channel-maps + * Rewrite MKV seeking + * Support for TTML and WebVTT in ISOBMF/MP4 and DASH + * Support for Scenarist Closed Caption + * Fix Quicktime Mp4 inside MKV and unpacketized VC1 + * Support for isofLaC + * Improved fLaC seeking + * Replaced --demux dvb-open option with --stream-filter dvb to parse + channels.conf digital TV channel list files + +Stream filter: + * Added ADF stream filter + * Added ARIB STD-B25 TS streams decoder + * Added stream prebuffering plugin + * Rewrite libarchive module as a stream_extractor + * Removed HTTP Live streaming stream filter + * Added zlib (a.k.a. deflate) decompression filter + +Demux filter: + * Added a demuxer filter chain to filter or intercept control commands and demuxing + * Added a demuxer filter to block seeking (--demux-filter noseek) + +Audio output: + * Complete rewrite of the AudioTrack Android module, it is now the default + module for Android. It now supports HDMI/SPDIF passthrough for AC3/DTS/EAC3, + 5.1/7.1 channels and float output, depending on the Android version. + * Added Tizen audio module + * HDMI/SPDIF pass-through support for WASAPI (AC3/DTS/DTSHD/EAC3/TRUEHD) + * Support EAC3 and TRUEHD pass-through for PulseAudio + * Support Ambisonics audio with viewpoint changes + +Audio filters: + * Add SoX Resampler library audio filter module (converter and resampler) + * a52tospdif and dtstospdif audio converters are merged into tospdif, + this new converter can convert AC3, DTS, EAC3 and TRUEHD to a IEC61937 frame + * Added the Spatialaudio module with 2 submodules: one Ambisonics audio + * renderer and one Binauralizer audio filter + * Add Headphones option in Stereo Mode: use the spatialaudio module for + * headphones effects + +Video ouput: + * Linux/BSD default video output is now OpenGL, instead of Xvideo + * Wayland shell surface window provider + * Wayland shared memory video output + * Large rework of the Android video outputs: there is now Surface (2.1, 2.2) + NativeWindow (2.3+, supports hw rotation, subpicture blending, opaque) + * Support rotation in Android NativeWindow output and hardware decoders + * Renamed the Direct3D output module to Direct3D9 + * Added Direct3D11 video mode supporting both Windows desktop and WinRT modes, + supporting subpicture blending and hardware acceleration + * EFL Evas video output with Tizen TBM Surface support + * New OpenGL provider for Windows + * Drop OpenGL 1.x and OpenGL ES 1 support + * Direct rendering with OpenGL (starting OpenGL 4.4) + * Direct rendering with VA-API via EGL/OpenGL + +Text renderer: + * CTL support through Harfbuzz in the Freetype module + * More conforming EIA608 captions layout and aspect ratio + +Video filter: + * Hardware deinterlacing on the rPI, using MMAL + * New video filter to convert between fps rates + * Added 9-bit and 10-bit support to image adjust filter + * New edge detection filter uses the Sobel operator to detect edges + * Hardware accelerated deinterlacing/adjust/sharpen/chroma with VA-API + * Hardware accelerated adjust/invert/posterize/sepia/sharpen with CoreImage + +Stream Output: + * Chromecast output module + * RGB24 and YCbCr 4:2:0 RTP packetization + +Encoder: + * Support for Daala video in 4:2:0 and 4:4:4 + * VP8 and VP9 encoder using libvpx + +Muxers: + * Added fragmented/streamable MP4 muxer + * Added support for muxing VC1 and WMAPro in MP4 + * Opus in MPEG Transport Stream + * Daala in Ogg + +Service Discovery: + * New NetBios service discovery using libdsm + * New mDNS services discovery using libmicrodns + * New mDNS services discovery using Bonjour (Mac OS X, tvOS, iOS) + * Rewrite of the UPnP service discovery + +Mac OS X Interface + * Dropped support for Mac OS X 10.6 Snow Leopard + * Add support for keyboard blacklight dimming during fullscreen video playback + * new AppleScript API giving access to audio desynchronization + * Support for building with disabled sparkle update mechanism + * New configure flag to disable automatic updates + * Expanded AppleScript API for menu detection and navigation + * New resizable fullscreen controller with improved design + * Add status bar icon which displays metadata and play controls + +iOS: + * Dropped support for iOS 6.x + +Qt interface: + * Batch convert support + * It is now possible to specify 'stop-time' in Convert/Save dialog + +Skins2: + * Support key accelerators + +libVLC: + * Add libvlc_media_new_callbacks for custom input byte streams + * Add libvlc_audio_output_device_enum to enumerate devices of current aout + * Split of libvlc_media_discoverer_new_from_name into libvlc_media_discoverer_new, + libvlc_media_discoverer_start and libvlc_media_discoverer_stop + This allows to attach media events between create and start + * Add libvlc_media_get_codec_description to get a human readable description of a codec + * Add libvlc_MediaListEndReached Event to get notified when a media list reached the end + * Add libvlc_media_list_player_get_media_player to get the media player instance of a list player + * Add libvlc_media_parse_with_options that uses a flag to specify parse options + * Add libvlc_audio_output_device_get to get the currently selected audio output device + identifier (if there is one available) + * Add libvlc_media_get_type to get the type of the media + * Add libvlc_media_player_get_full_title_descriptions to get full title info of the media + and +libvlc_title_descriptions_release to match it + * Add libvlc_media_player_get_full_chapter_descriptions to get full chapter info of the media + and libvlc_chapter_descriptions_release to match it + * Deprecate libvlc_video_get_title_description, libvlc_video_get_chapter_description, + libvlc_media_player_get_agl, libvlc_media_player_set_agl + * Add libvlc_media_player_set_android_context to integrate in an Android surface + * Add libvlc_media_player_set_evas_object to draw on an EFL/Evas Object + * Add a new libvlc dialog API to forward dialogs requests to the applications: + libvlc_dialog_set_context, libvlc_dialog_get_context, libvlc_dialog_set_callbacks, + libvlc_dialog_dismiss, libvlc_dialog_post_action, libvlc_dialog_post_login + * Add libvlc_media_discoverer_list_get|release to list the media discoverers + * Add libvlc_media_slaves_add, libvlc_media_slaves_clear + libvlc_media_slaves_get, libvlc_media_slaves_release to add and get slaves + from a libvlc_media + * Add libvlc_media_player_(get|set)_role to set the media role + * Add libvlc_media_player_add_slave to replace libvlc_video_set_subtitle_file, + working with MRL and supporting also audio slaves + * Add vlc_epg_event_(New|Delete|Duplicate), vlc_epg_AddEvent, vlc_epg_Duplicate + and removes vlc_epg_Merge + +Logging + * Support for the SystemD Journal + * Use --syslog and --syslog-debug command line options to include debug + messages in syslog. With --syslog, errors and warnings will be sent only. + * New Android module for logging + +Misc + * remove langfromtelx + * remove ZPL playlist format + * Update libVLC doxygen modules + * Add a text-to-speech renderer for subtitles on OS X/iOS + * Add a text-to-speech renderer for subtitles on Windows + * Add Gnome libsecret-based crypto keystore + * Add KDE Kwallet-based crypto keystore + * Add a memory keystore + * Add a file keystore that can use a submodule to crypt secrets + * Add Keychain based crypto keystore for iOS, Mac OS X and tvOS + +Removed modules + * Atmo video filter + * QTCapture access module (use AVCapture instead) + * httplive (use adaptive instead) + * smooth (use adaptive instead) + * Gnome-VFS access module (i.e. Gnome 2.x) + * QuartzText text renderer module (use Freetype instead) + * Win32 GDI text renderer module (use Freetype instead) + * Growl notification (replaced by osx_notifications) + * VCDX "extended" Video CD access module (use the normal VCD module) + * Mac OS X Dialog Provider (use VLCKit instead) + * iOS Dialog Provider (use MobileVLCKit / TVVLCKit instead) + * QuickTime decoder module (use native codecs) + * BD access module (use libbluray) + * Direct2D module (use Direct3D11) + * EyeTV access module + * Rar access and stream filter: use libarchive + * VDA decoder: use VT + * Audioqueue: use audiounit + * SDL video output module + * DirectFB video output module + + +Changes between 2.2.5 and 2.2.5.1: +-------------------------------- + +Security hardening for DLL hijacking environments + +Translations updates + +Misc: + * Update for Soundcloud, liveleak and Youtube scripts + * Fix potential out-of-band dereference in flac decoder + * Fix potential out-of-band reads in mpeg packetizers + * Fix infinite loop in subtitles demuxer + * Fix incorrect memory free in ogg demuxer + * Fix potential out-of-band reads in subtitle decoders and demuxers + * Fix green line on Windows with odd sizes + + +Changes between 2.2.4 and 2.2.5: +-------------------------------- + +Decoder: + * Fix mp3 playback quality regression in libmad + * Fix video scaling in VDPAU + * Fix playback of palettized codecs + * Fix ADPCM heap corruption (FG-VD-16-067) + * Fix AES3 16bps decoding + * Fix DVD/LPCM heap corruption (FG-VD-16-090) + * Fix SCTE-27 colors + +Demuxer: + * Fix possible ASF integer overflow + * Fix MP4, VOC, XA, SMF divide-by-zero errors + * Fix MP4 heap buffer overflows + * Fix Flac metadata integer overflow + * Fix NSVf and AIFF infinite loops + * Fix flac null-pointer dereference + * Fix vorbis and opus comments integer overflows and leaks + +Video output: + * Fix green line on Windows with AMD drivers + * Fix screenshots size + +Access: + * Fix crash in screen recording on Windows + * Fix FTP scan string injection + * Fix HTTP size handling + +Mux: + * Fix mp4 drift + +Lua: + * Fix vimeo, youtube, dailymotion, cli, appletrailers, http, + soundcloud scripts + +Audio filter: + * Fix heap write in stereo_widen audio filter + +Windows: + * The plugins loading will not load external DLLs by default. + Plugins will need to LoadLibrary explicitely. + * Fix uninstaller path handling + * Fix taskbar buttons behavior + +MacOS: + * Fix scrolling sensitivity on Sierra + * Resume points are deleted now if the user clears the list of + recent items + + +Changes between 2.2.3 and 2.2.4: +-------------------------------- + +Decoder: + * Fix crash in G.711 wav files + * Fix mp3 crash in libmad + * Fix out-of-bound write in adpcm QT IMA codec (CVE-2016-5108) + +Qt: + * Fix resizing issues + +Win32: + * Fix overlay creation on Windows XP for DirectDraw video output + +Misc: + * Build fixes for Hurd + +Translations: + * Update of Bulgarian, Catalan, German, French, Italian, Marathi, Norwegian + Bokmål, Norwegian Nynorsk, Portuguese, Slovak, Spanish (Mexico), Swedish, + Simplified Chinese, and Traditional Chinese translations + + +Changes between 2.2.2 and 2.2.3: +-------------------------------- + +Demux: + * Fix HLS quality selection and a potential stack overflow + * Fix potential MKV infinite loop and improve MKV tags support + * Fix WMV regression + +Decoder: + * Fix hardware decoding with libvdpau-va-gl + * Fix crashes with libvpx + * Use libass without caching dialog + +Video Ouptut: + * Fix green lines on Direct3D output + +Skins2: + * Fix maximizing Window in multi-screen context + +Qt: + * Fix resume where you left off + * Fix infinite recursion in the customize dialog + * Fix size when switching to/from the minimal interface + * Fix size after resume toolbar is displayed + +MacOS X: + * Fix crashes in media information panel + * Correctly respect the disable-screensaver option + +Win32: + * Allow opening more than 15 elements in Explorer + +Translations: + * Update of most translations + + +Changes between 2.2.1 and 2.2.2: +-------------------------------- + +Access: + * Fix SetupFormat for continuous framesize in v4l2 + * Fix off-by-one buffer overflow in RealRtsp module + * Fix screen recording aspect-ratio, framerate and potential crash + * Fix Windows directshow input freeze + * Fix MMS segmentation fault/abort when server forces a large allocation + +Demux: + * Fix support for ms-dvr files + * Fix time detection in AVI files over HTTP + * HLS: fix hang on stop, crashes and small improvements + * Fix mp4 NULL dereference reported by by Fortinet's FortiGuard Labs + * Fix regression for VC-1 in WMV + * Fix MXF crashes on stop + * Fix EAC3 detection in some TS files + +Decoders: + * Fix importing surface from main memory in VDPAU + * Fix possible double-free in ADPCM decoder + * Support 9-bit and 10-bit GBR planar formats + * Support GoToMeeting 2 and GoToMeeting 3 codecs + * Fix crash in teletext (zvbi) decoder + * Fix Bluray subtitles (PGS) timestamps + +Audio output: + * Fix audio drop after a flush with pulseaudio + * Fix audio initialization on iOS + * Fix audio stuttering with AirPlay devices on OS X (2 sec delay needs to + be set manually by the user) + * Fix pulseaudio latency computation + * Fix alsa default device selection + +Skins2: + * Fix video control that fails to show up + * Fix UTF-8 conversion issues + * Fix Unicode folders location failing to open the skins + * Fix crash over malformed skins bitmaps + * Fix fullscreen for Gnome3/Unity Window Managers + +OS X: + * Support for OS X El Capitan + * Fix code signature for releases on El Capitan + * Improve resume dialog, starting time, preferences, lua extensions + * Fix threads ordering, preferences crashes, URL drag'n drops + +Qt: + * Fix crash when opening multiple items on Windows + * Fix recent items appending when using a playlist + * Improve addons manager dialog, playlist + * Fix changing the audio-device in the menu + * Fix key and mouse event support for Qt >= 5.5 under X11 + * Fix memory leaks + +Video Output: + * Fix build if one disables XCB but activate VDPAU on Unix + * Fix Direct3D plane allocation size to avoid colour bleeding + * Fix some crashes in swscale resizing + +Misc: + * Fix build with recent FreeRDP versions + * Fix interface crashes when input-title-format option is empty + * Fix MP4 mux divide-by-zero crash + * Improve PNG encoding time + * Fix some UPnP initialization lag + * Rewrite of the Jamendo Service Discovery + * Fix snapshot aspect ratio for anamorphic contents + * Fix custom snapshot sizes + * Dynamic generation of GnuTLS Diffie-Hellman parameters + * Fix "vb" transcoding parameter + * Fix superfluous audio channel extraction in the core + * Fix miscellaneous crashes, double-frees, integer overflows, infinite loops, + read overflow, invalid frees and division by zero issues + * Fix support for lua 5.2 and fix XSS in the http interface + * Update and improve Soundcloud, Vimeo and Youtube scripts + * Update of codecs and libraries to fix 3rd party security issues (like + TALOS-CAN-0036, TALOS-CAN-0037, CVE-2015-7981, CVE-2015-8126 + +Translations: + * Add Kashmiri and Maithili languages + * Update of most translations + +libVLC: + * Expose audio mute, cork and volume change events: libvlc_MediaPlayerCorked, + libvlc_MediaPlayerUncorked, libvlc_MediaPlayerMuted, + libvlc_MediaPlayerUnmuted and libvlc_MediaPlayerAudioVolume + * Fix propagation of libvlc_MediaPlayerTitleChanged event + +Translations: + * Update of most translations + + +Changes between 2.2.0 and 2.2.1: +-------------------------------- + +Codec: + * Fix compilation with older libavcodec versions + * Fix some VP9 decoding + * Fix flac crashes + * Fix lpcm channel ordering + * Fix potential NULL dereference in dmo + * Fix teletext framing code in DVB PES packets + * Fix potential buffer overflow in schroendinger decoder (CVE-2014-9629) + * Fix AAC samplerate + +Demuxers: + * Fix MP4 chapters + * Fix MKV overseeking, introducing slowness over network shares + * Fix crash when playing SPC files + * Fix ATRAC3 playback in MKV + * Revert to older ASX code + * Workaround TS issue with mpeg-audio + +Access: + * Fix sftp read and close sockets + * Fix DTV build with Linux DVB versions < 5.8 + * Fix UDP/RTP input on Windows + +Audio output: + * Fix Alsa HDMI plugs + * Improve Alsa output, with larger buffers + * Fix DirectSound output with multi-channel files + +OS X: + * Fix numerous crashes in the UI + * Fix video-wallpaper mode + * Fix race when starting VLC from command line + +Qt: + * Fix recent items behaviour + * Fix rotation filter activation + * Fix mux modules names for the streaming wizard + +Win32: + * Timestamp the signature of the dlls + * Fix extensions registration during install + * Fix extensions dialog crash + * Default to no DxVA decoding + +libVLC: + * fix libvlc_media_get_stats + +Translations: + * Update of Afrikaans, Albanian, Azerbaijani, Catalan, Czech, Danish, Dutch, + English (United Kingdom), Finnish, French, German, Hebrew, Hindi, Italian, + Japanese, Korean, Latvian, Macedonian, Malay, Modern Greek, Norwegian Bokmål, + Norwegian Nynorsk, Polish, Portuguese, Russian, Scottish Gaelic, Serbian, + Simplified Chinese, Slovak, Slovenian, Spanish, Swedish, Tamil, Thai, + Traditional Chinese, Turkish, Ukrainian translations + + +Changes between 2.1.6 and 2.2.0: +-------------------------------- + +Important changes: + * The licenses of more modules have changed from GPLv2+ to LGPLv2.1+, + notably most of the streaming output, muxers and access output modules + +Core: + * Support automatic rotation using streams metadata, GPU-accelerated when possible + * Add extensions manager and downloading from external repositories + * Rework the metadata fetching algorithm and policies + * Partial fix of playback of short audio samples + +Access: + * Added TLS support for ftp access and sout access + New schemes for implicit (ftps) and explicit (ftpes) modes + * MMS audio selection on split audio streams + * Blu-Ray: support overlays, preferred menu languages, region selection + and BD-J navigation + * Digital Cinema Package support, including encrypted DCP with KDM + * Partial fixes for Arccos protected DVDs + * Fix CDDB lookups, including pregap data + +Decoder: + * Support VDPAU acceleration for GPU-zerocopy decoding + * Support MediaCodec acceleration for GPU-zerocopy decoding + * Add Media Foundation Transform audio and video decoder + * Add video decoder module based on GStreamer plugins + * Add MMAL decoder for Broadcom VideoCore chips (like the RaspberryPi) + supporting MPEG-2 and H.264, supporting GPU-zerocopy display + * Partial support for Voxware MetaSound + * libvpx decoder for VP8 and VP9 + * Support MSN Audio, Atrac3+, VP7, Bink, TAK, On2 AVC, DK3, DK4, IMC, Vivo g723.1, + Smacker, FIC, Auravision, Canopus Lossless, and numerous videogame codecs + * Teletext subtitles display improvements + * Mediacodec speed improvements on x86 + * Support setting the post processing level in Theora + * OpenMax IL improvements, notably for RaspberryPi + * Fix channel ordering of LPCM codec in m2ts files + * New jpeg image decoder + * Add tx3g subtitles decoder + * New SVG image decoder + * Fix Speex decoding over RTP and in flv + * Support more x264 and FFv1 RGB modes + * Improvements on ZVBI teletext decoder, notably for speed and alignments + +Encoder: + * Support for MPEG-2 encoding using x262 + * Support for HEVC/H.265 encoding using x265 + * Support for Opus encoding using libopus + * New jpeg image encoder using libjpeg + * New png image encoder using libpng + +Demuxer: + * Support for Core Audio Format (CAF) files + * Important rework of the Ogg demuxer, notably improving seeking, + streaming resilience, speex demuxing and chained Ogg + * Important rework of the ASF/WMV demuxer, notably for seeking, + synchronization and tracks exclusion + * AVI improvements for better seek-indexing in non-fastseekable situations + * AVI fixes for uncompressed, indexed and paletized bitmaps + * MP4 fixes for fragmented files, vobsub, duration, aspect-ratio + and support for rotation, covr atom and tracks exclusion + * Support Opus in MKV + * Support VP8 in OGG + * Basic support for WebVTT + * Handle support for ISO/IEC 14496-3 (AAC) Audio stream type in TS + * Support HDPR TS files + * Support microseconds in SubRip subtitles + * FLAC packets validation using CRC + * Improvements in metadata support in Ogg/Opus/Vorbis files + * Fix encoding issues and relative paths in some XML playlist formats + * Support THP Wii/Gamecube, RenderWare and Escape Replay game video files + * New HEVC raw packetizer and demuxer + * TS support for WiDi/Miracast LPCM + * Handle MOV/MP4 tx3g styled subtitles through codec + * Support SVG images files (on glib platforms) + * Keep selection of tracks on segment changes in MKV + * Support detection of SRT languages based on filename + * Support for seeking Standard MIDI Files + +Video Output: + * Direct rendering and filtering for VDPAU hardware acceleration + * New CoreAnimation OpenGL video output module for NPAPI plugins + * New OpenGL ES 2.0 through EGL video output module for Android + * New Android native window provider module + * Direct rendering for MediaCodec Android hardware acceleration + * Support for loading HLSL shaders in Direct3D video output + * Add MMAL based video output for RaspberryPi + +Video Filter: + * New Oldmovie effect filter + * New VHS effect filter + * New Freeze effect filter + * Support I422 and J422 in transform + * NEON optimizations for deinterleaving chroma, notably NV12->I420 + * Fix audiobargraph activation and usage + +Audio Output: + * Allow setting volume while not connected with PulseAudio + * Audio device notifications for WASAPI + * Fix replay of sound buffer in DirectSound + * Split of MMDevice and WinRT audio modules + * Numerous fixes on AUHAL, including device management and stream changes + * Fixes for SPDIF passthru in most modules + +Muxers: + * Important rework of the Ogg muxer, notably for skeleton + * Fixes for the AVI muxer to respect the specification + * Support VP8 in OGG + * Add HEVC muxing in MP4 and TS + +Streaming: + * Important rework of the transcoding module to fix numerous bugs + * WebM streaming, including live sources, compatible with all major browsers + vlc vlc://quit --sout '#transcode{vcodec=VP80,vb=1000,acodec=vorb,ab=128} + :std{access=http{mime=video/webm},mux=webm,dst=:4212}' + * GSM, VP8, Opus and JPEG RTP packetization + * HLS: Allow setting the first segment number and numerous improvements + * new stats module to output block timing values and md5 sums + * transcode module access fps values as rationals now, eg 30000/1001 + * VLC now streams all elementary streams, you can revert to previous behaviour + with --no-sout-all + * --ts-out option has been removed, it has been superceded by --demux demuxdump + --demuxdump-access udp --demuxdump-file 127.0.0.1:1234 + * Support Metacube protocol when streaming over HTTP + +libVLC: + * add equalizer API libvlc_audio_equalizer_* functions + * add libvlc_media_player_program_scrambled function + +Visualizations: + * Add a 3D OpenGL spectrum visualization. + * Allow setting the FFT windowing style for 3D and normal spectrum + +Interfaces: + * Add support for subtitles drag 'n drop in skins2 + * Add record button in Qt menus + * New module for core dialogs on iOS + * New layout for Qt buttons customization + * Support to continue media playback where it was left off for Qt and OS X + +Mac OS X Interface: + * Support for OS X Yosemite + * Avoid grey bars in fullscreen when using Mavericks with multiple monitors + * Improve fullscreen behavior for the native and VLCs own mode + * Fixes for advanced preferences + * Added 'file size' column to playlist table + * in addition to iTunes, Spotify is automatically paused on playback start + * Option to increase playlist font size + * Improved crash log reporting + +Misc: + * New module for TLS on OS X and iOS + * Windows installer will kill running instance before installing + * Teletext navigation buttons support in Qt4 gui + * Update and improve Koreus, Dailymotion, Soundcloud and Youtube scripts + +Security: + * Numerous integer and heap overflow in Ogg, AVI, ASF, TTA and MP4 demuxers + +Removed modules: + * iOS video output: use ios2 + * OpenMash H.261 video decoder + * dirac encoder: use schroedinger + +Translations: + * New translation in Urdu, Tatar, Silesian, Samoan, Kapampangan, N'ko, + Kurdish, Kabyle, Mexican Spanish, Catalan, Amharic + * Update of all translations: + Traditional Chinese, Simplified Chinese, Vietnamese, Uzbek, Ukrainian, + Turkish, Thai, Swedish, Serbian, Albanian, Slovenian, Slovak, Russian, + Romanian, Brazilian Portuguese, Polish, Punjabi, Dutch, Nepali, Norwegian + Bokmål, Malay, Marathi, Latvian, Lithuanian, Korean, Kannada, Khmer, + Japanese, Italian, Icelandic, Indonesian, Hebrew, Galician, Scottish + Gaelic, French, Finnish, Persian, Estonian, Spanish, Modern Greek, German, + Danish, Welsh, Czech, Bosnian, Bengali, Asturian + + +Changes between 2.1.5 and 2.1.6: +-------------------------------- + +Audio output: + * Fix OSS stuttering + +Security: + * Fix heap overflow in decomp stream filter + * Fix buffer overflow in updater (CVE-2014-9625) + * Fix potential buffer overflow in schroedinger encoder + * Fix null-pointer dereference in DMO decoder + * Fix buffer overflow in parsing of string boxes in mp4 demuxer (CVE-2014-9626,9627,9628) + * Fix SRTP integer overflow + * Fix potential crash in zip access + * Fix read overflow in Ogg demuxer + * Fix RTP overflow (CVE-2014-9630) + +Win32 installer: + * Update translations and greek encoding + + +Changes between 2.1.4 and 2.1.5: +-------------------------------- + +Core: + * Fix compilation on OS/2 + +Access: + * Stability improvements for the QTSound capture module + +Mac OS X audio output: + * Fix channel ordering + * Increase the buffersize + +Decoders: + * Fix DxVA2 decoding of samples needing more surfaces + * Improve MAD resistance to broken mp3 streams + * Fix PGS alignment in MKV + +Qt Interface: + * Don't rename mp3 converted files to .raw + +Mac OS X Interface: + * Correctly support video-on-top + * Fix video output event propagation on Macs with retina displays + * Stability improvements when using future VLC releases side by side + +Streaming: + * Fix transcode when audio format changes + +Security contents: + * Updated GnuTLS to 3.1.25 (CVE-2014-3466) + * Updated libpng to 1.6.10 (CVE-2014-0333) + +Translations: + * Update British English + + +Changes between 2.1.3 and 2.1.4: +-------------------------------- + +Demuxers: + * Fix issue in WMV with multiple compressed payload and empty payloads + +Video Output: + * Fix subtitles size rendering on Windows + +Mac OS X: + * Fix DVD playback regression + * Fix misleading error message during video playback on OS X 10.9 + * Fix hardware acceleration memleaks + + +Changes between 2.1.2 and 2.1.3: +-------------------------------- + +Core: + * Fix broken behaviour with SOCKSv5 proxies + * Fix integer overflow on error when using vlc_readdir + +Access: + * Fix DVB-T2 tuning on Linux + * Fix encrypted DVD playback + * Fix v4l2 frequency conversion + +Decoders: + * Fix numerous issues (M2TS, VC1 interlaced, Lagarith, FFv1.3, Xvid) + by updating codec libraries + * Bring fluidsynth back on Mac OS X + * Fix some Opus crashes with some filters + * Fix teletext crash on Windows + +Demuxers: + * Avoid an infinite recursion in MKV tags parsing + * Fix an issue with some Vobsub tracks + * Fix missing samples at the end of some wav files + * Fix divide by 0 on ASF/WMV parsing + +Audio output: + * Fix audio device selection via command line on Mac OS X + * Fix audio crashes on Mac OS X + +Video Output: + * Fix selection of DirectDraw as the default output for XP + * Fix transform off-by-one issue + * Fix screensaver disabling on Windows outputs + * Fix DirectDraw device enumeration and multi-display output + * Fix a potential crash when playing a fullscreen game at the same time as VLC + +Stream output: + * Fix 24bits audio MTU alignment in RTP + * Fix record file names + +Qt interface: + * Fix minimal size possible on start + * Fix a crash with the simple volume widget + * Fix a crash in the audio menu building + * Fix multimedia keys issues on Windows + * Fix opening of DVD and BD folders on Windows + +HTTP interface: + * Fix album art display on Windows + +Translations: + * Update of Bulgarian, Catalan, Czech, Danish, German, Modern Greek, + Spanish, Basque, Finnish, French, Scottish Gaelic, Galician, Hebrew, + Hungarian, Italian, Japanese, Korean, Malay, Norwegian Bokmål, Nepali, + Dutch, Polish, Brazilian Portuguese, Portuguese, Romanian, Russian, + Sinhala, Slovak, Slovenian, Swedish, Telugu, Thai, Turkish, Ukrainian + and Simplified Chinese translations + * Fix encoding for Windows installer translations + + +Changes between 2.1.1 and 2.1.2: +-------------------------------- + +Audio output: + * Fix digital playback on OS X when more than one audio device is installed + * Fix digital playback (SPDIF/HDMI) on Windows + * Fix stuttering or silent playback when using sound enhancers or external + audio devices on OS X + * Improve responsiveness on OS X when playback starts or is being paused + * Improve responsiveness, silent playback intervals and reliability on iOS + +Demuxers: + * Fix Vimeo and DailyMotion parsing + * Various WMV playback improvements and fixes + +Decoders: + * Fix LPCM 20/24-bit decoding and 16 bits with channel padding + * Fix playback of some HEVC samples + +Video filters: + * Fix crash on deinterlace selection + +Qt interface: + * Fix some streaming profiles when copy existed + * Improve A-B loop control + * Fix album art update when changing media + +Mac OS X interface: + * Add a language option in the interface + * Option to control VLC's iTunes pausing behavior is more easy to find + * Improved UI resetting when requested in the preferences + * Fix issue which prevented to enable more than one video filter on Mavericks + * Fix an issue which could prevent automatic UI language settings from working + * Fix opening subtitles files through drag & drop or double-clicking + * Fix crash when closing window without decorations + * Fix issue where extra video window was resized even if this was disabled + +Win32 installer: + * Kill running VLC process on uninstall/update + +Translations: + * Update of Basque, Bosnian, Bulgarian, Croatian, Czech, Danish, Estonian, + French, Hungarian, Icelandic, Indonesian, Italian, Kannada, Khmer, + Lithuanian, Occitan, Persian, Polish, Romanian, Scottish Gaelic, Sinhala, + Slovenian, Spanish, Swedish, Tamil, Thai, Uzbek, Welsh translations + + +Changes between 2.1.0 and 2.1.1: +-------------------------------- + +Core: + * Fix random and reshuffling behaviour + * Fix recording + * Fix some subtitles track selection + +Decoders: + * VP9 support in WebM + * HEVC/H.265 support in MKV, MP4 and raw files + * Fix GPU decoding under Windows (DxVA2) crashes + +Demuxers: + * Fix crashes on wav, mlp and mkv and modplug files + * Support Speex in ogg files + * Fix some .mov playlists support + * Support Alac in mkv + * Fix WMV3 and palette in AVI + * Fix FLAC packetizer issues in some files + +Access: + * Fix DVB options parsing + * Fix DeckLink HDMI input + * Fix HTTPS connectivity on OS X by loading root certificates from Keychain + +Audio output: + * Fixes for DirectSound pass-through + * Fixes for OSS output, notably on BSD + +Interfaces: + * Fix HTTP interface infinite loop + * Fix D-Bus volume setting + +Qt: + * Reinstore right click subtitle menu to open a subtitle + * Fix saving the hotkeys in preferences + * Fix saving the audio volume on Win32, using DirectSound + * Fix play after drag'n drop + * Fix streaming options edition and scale parameter + +Stream out: + * Fix transcoding audio drift issues + * Fix numerous audio encoding issues + +Win32 installer: + * Important rewrite to fix numerous bugs, notably about updates + * Simplification of the upgrade mechanism + +Mac OS X interface: + * Reintroduce the language selector known from pre-2.1 releases + * Fix fullscreen behaviour and various crashes + * Fix about dialog crash in Japanese + * Fix crashes on proxy lookups + * Fixes on the playlist and information behaviours + * Fixes on the streaming dialogs + * Improves interface resizings + +Translations: + * Update of Arabic, Basque, Belarusian, Czech, Danish, Dutch, French, + Galician, Gujarati, Hindi, Hungarian, Icelandic, Italian, Japanese, Korean, + Lithuanian, Marathi, Modern Greek, Norwegian Bokmål, Occitan, Persian, + Polish, Portuguese, Punjabi, Romanian, Sinhala, Slovak, Slovenian, Spanish, + Swedish, Telugu, Thai, Traditional Chinese, Turkish, Ukrainian, Uzbek + translations + + +Changes between 2.0.9 and 2.1.0: +-------------------------------- + +Important changes: + * The licenses of numerous modules have changed from GPLv2+ to LGPLv2.1+ + * Discontinued support for PowerPC-based Macs; VLC now requires Mac OS X 10.6+ + Moreover, the official builds will be 64bit only + * The --with-tuning and --without-tuning options are removed; to tune + compilation for a specific processor type, set CFLAGS manually + +3rd party libraries (contrib): + * /extras/contrib has been replaced by a cleaner build system in /contrib + +Core: + * Audio core rewrite, supporting higher samplerates, better volume management, + better device selection, new channel layouts and new output capabilities + * Fix support for .001, .00x split files on Windows + * Full support for UNICODE Windows mode + * Disable and mark obsolete --language selection + * Port to Android + * Port to iOS + * Partial support for Windows Store App / WinRT + * Add an audio fingerprinter, using AcoustID! + * Remove SQL support + +Decoders: + * Support for CDXL, Ut Video, VBLE, Dxtory codecs via libavcodec + * Numerous improvements on the OpenMAX IL codec module + * Support for Ulead DV audio + * Support for TechSmith Screen Codec 2, Microsoft Expression Encoder Screen, + Microsoft Application Screen Decoder 1 (MSS1) and 2 (MSS2) + * Support for Indeo Audio Coder, RealAudio Lossless + * Add Hardware Acceleration support on OS X for H.264 based upon VDADecoder + * Add Hardware Acceleration support on Android Jelly Bean using MediaCodec + * Add Hardware Acceleration support on Linux using VDPAU + * Support for SCTE-27 subtitles + * Split G.711 decoder from Araw decoder + * X Window system raster image dump pseudo-decoder + * Support for Webinar GoToMeeting 4 (G2M4) + +Encoders: + * high10, high422 and high444 encoding support in h264 + * QuickSyncVideo Encoding (Intel Media SDK) support using Intel GPU on Windows + * New AAC encoder using the fdk-aac library (non-free) + +Access: + * Screen: add support for OS X Lion and later, + remove support for previous OS X releases + * Major improvements in DASH support + * Improvements in Blu-Ray module, notably for multiple video tracks support + * Important improvements and rewrite of the v4l2 access module + * HTTP: support for Internationalized Domain Names + * Microsoft Smooth Streaming support (H264 and VC1) developed by Viotech.net + * NTSC EIA-608 closed caption input support via V4L2 VBI devices + * Add support for VNC/rfb in view only mode + * Add support for Remote Desktop/RDP in view only mode + * Timecode: generate a clock/timecode as a subtitle track + vlc video.mkv --input-slave timecode:// --timecode-fps 30/1001 + * New video capture module for OS X based on AVFoundation, named AVcapture + * New shared memory framebuffer access module, named shm + +Demuxers: + * MP4: partial support for fragmented MP4 + * Vorbis: better support for metadata and cover art + * AVI: better support for tags and extended metadata + * Support for FLAC, Atrac and some ADPCM in AVI + * Support for DV data type 1 in AVI and 12 bits DV Audio + * Support for total number of tracks in major container + * Support for Cook and Atrac in MKV + * AVI: support for files produced by Nikon cameras + * Support for more MJPEG streams + * Add support for liveleak streams + * Add support for Wave/RF64 files + * Prevent numerous uncaught exceptions in MKV + * Add protection against several potential heap buffer overflow in libebml + +Audio output: + * Windows Audio Session API audio output support + * OpenBSD sndio audio output support + * Important improvements on the Android OpenSL ES audio output + * Android AudioTrack audio output support + * OS X Auhal output support for 6.1, 7.1, 8.0 and 8.1 playback and layouts + * Rewrite of OSS module to support OSSv4 + * OS X Auhal output support for multi-buffer output devices + This fix was facilitated through a hardware lending by TEAC Europe GmbH + distributing such devices under the brand "TASCAM" (US-122, US-144, etc.). + * Rewrite of the AudioQueue output for iOS (and OS X) + * New, simplified AudioUnit output for iOS + +Audio Filters: + * New remapping channel filter + * New filter to enhance stereo effect by mono suppression and delay effect + * New VSXu visualization plugin + * ARM NEON acceleration of volume filter + * Rewrite of the simple downmixer filter + * New gain audio filter + +Video Outputs: + * New output for Decklink Blackmagic cards + * New output using OpenMAX IL hardware acceleration API + * OpenGL: use glsl instead of ARB to do the YUV->RGB conversions + * OpenGLES: add support for color conversation shaders on Android and iOS + * Fix and enable the OpenGL ES1 and ES2 outputs + * Support for subpictures in the OpenGL ES2 output + * Fix the power management issue on Windows for standby management + * New output module for iOS using OpenGL ES2 + * Fix performance issue on Macs with multiple graphics cards + +Video Filters: + * New anaglyph video filter which transforms side by side 3D video streams in + anaglyph glasses (aka red/blue) compatible images + * Support in deinterlacing filter for most 4:2:0, 4:2:2, 4:4:4 YUV formats + and for bits depth higher than 8bits (like 10bits) + * Improvements on the transform filter, to support 10bits and RGB formats + * Revival of the openCV and openCV example filters + * ARM NEON acceleration of chroma filters + +Stream Output: + * Extended support for recording, notably for MKV and AVI + * Options support for AVIO output module + * Livehttp places more accurate segments durations in playlist + * Livehttp allows setting cachin-variable in playlist + * Livehttp stream encryption support + * Livehttp supports changing encryption key and uri on segment change with key-loadfile option + * Added chromaprint based audio fingerprinting + +Fingerprinters: + * Add AcoustID/Musicbrainz based fingerprinter + +Interfaces: + * configurable password for the HTTP server + * .hosts removed from the HTTP server + * fix Lua command line interface console mode under Windows + * Better support for MCE remotes on Windows + * Hotkey support for TS program selection + * Rewrite of D-Bus inhibit interface + * Improvements on motion sensing interface, fix orientation, move out + rotate mode into the rotate video filter + +Services discovery: + * UPnP A/V subtitles + * Support for multiple UPnP resources on a single item + +OS X Interface: + * Add support for multiple video outputs + * Add accessibility support to playback windows, open panel and fullscreen + controller + * Add a GUI to manage podcasts + * Add a new panel for media conversation and streaming + * Add a GUI for the QTSound access input to process audio captured locally + - This also allows to capture input from a webcam and a mic at the same time + * Add a GUI to capture QTSound data along with the current screen content + * Add an option to let the Apple Remote control the system volume instead of + VLC's internal volume level + * Add a new Subtitles menu to change Subtitles and their properties during + playback + * Add the ability to create custom equalizer presets based upon the current + selection and to manage the list of presets + * Add custom profiles for video and audio effects, which let the user keep + multiple configuration sets of all the individual filters + * Support for pausing iTunes during media playback with VLC + * Add support for video filters to clone the video output or split it in parts + * Add A->B loop feature known from the Qt interface + * Add an option to disable skipping to next/previous file with the Apple Remote + * Add an option to show next / previous buttons + * Add an option to hide the shuffle and repeat buttons + * Add an option to hide the audio effects button (default enabled) + * Add optional playlist columns for track number, genre, album, description, + date and language + * Add options to the Advanced Open File dialog for start and stop time + * Add an option to play videos as a desktop background + * Add support for playing video and showing audio visualizations side by side + * improve fullscreen controller time slider with larger click target + * rewrite of minimal macosx module for use within VLCKit + * Add support for 'macosx-autoplay' to the Apple Event / Apple Script bindings + when adding new inputs - this also affects network streams opened through + 3rd party applications + * Add a UI to the preferences dialog to configure the default application + handler for ftp, mms, rtmp, rtp, rtsp, sftp, smb and udp streams + (system-wide settings) + * Add support for the Video Title option + * Add support for the Boss Key + * The Streaming/Transcoding wizard and the open dialog's output panel are + deprecated now and will be removed in a future release + +Qt: + * Partial support for Qt5.0 + * Menus modifications and improvements + * Playlist improvements and fixes, including PictureFlow view + * Streaming output wizard rewrite + * Add bitrate graph in information panels + * Filters panels improvements, notably Equalizer and Compressor + * EPG display fixes and improvements + * Add SD pixmap sources + * Preferences hotkeys management fixes + * Display playlist total duration + * Support for a Maximum volume in the UI + * Add audio track fingerprinting from media info + * New profiles format and dialog to handle filters and quality + * Numerous fixes + +Skins2: + * Port to OS/2 + * Extend sliders, offsets options + * New bitmaps caching mechanism + * Numerous fixes and improvements + * Skinning of the Fullscreen controller + +libVLC: + * new libvlc_audio_output_device_list_get and libvlc_audio_output_device_list_release functions + to replace the deprecated libvlc_audio_output_device_count, libvlc_audio_output_device_longname + and libvlc_audio_output_device_id + * libvlc_audio_output_get_device_type and libvlc_audio_output_set_device_type are now deprecated + * new libvlc_media_tracks_get and libvlc_media_tracks_release methods to get more info about the + media tracks. libvlc_media_get_tracks_info is now deprecated. + * new fingerprinter_Create and fingerprinter_Destroy for fingerprinter support + * new libvlc_log_set, libvlc_log_set_file, libvlc_log_unset, libvlc_log_get_context and + libvlc_log_get_object for a better logger mechanism + * new libvlc_set_app_id to complement libvlc_set_user_agent to set the icons + +Removed modules: + * portaudio audio output: use the native audio output instead + * X11 On Screen Display notifications (xosd) + * Linux Framebuffer On Screen Display interface (fbosd) + * PVR: IVTV analog TV encoder - use V4L instead + * RTMP access: use libavformat avio instead + * RTMP access_output: use libavformat avio instead + * Hildon GUI + * MSN messenger "now playing" (broken and unmaintained since VLC 1.0.0) + * Telepathy framework "now playing" (broken and unmaintained since VLC 1.0.0) + * Nokia/Maemo MCE screen unblanking plugin + * Broken crop video filter + * Switcher module + * OSD parser and menu + * Xscreensaver: use xdg-screensaver + * Removed DLL loader for non-Windows Operating Systems + * SQL Media Library (broken and unmaintained) + * SQL Lite (only used as SQL Media library backend) + * htcpcp :) + +Translations: + * Update of all translations + + +Changes between 2.0.8 and 2.0.9: +-------------------------------- + +Demux: + * Improve handling of corrupt ASF files + * Fix buffer overflow in the mp4a packetizer + +Contribs: + * Fix modplug security issues + + +Changes between 2.0.7 and 2.0.8: +-------------------------------- + +Access: + * Fix ISDB-S tuning + * Fix crash in QTsound + * Fix screen mouse file location + * Fix invalid memcpy in MMS access + +Demux: + * Fix use after free in sgimb + * Improve resistance and checking against malformed MKV files + +Decoders: + * Fix crash in the libavcodec module + +Mac OS X: + * Fix interface crashes + * Fix autostart playback option + * Respect "playlist-autostart" option + +Translations: + * update Welsh translation + * New Kannada translation + + +Changes between 2.0.6 and 2.0.7: +-------------------------------- + +Input: + * Fix playback termination when switching ES tracks (PowerPC only) + * Fix memory exhaustion vulnerability when playing specifically crafted + playlist files + +Decoders: + * Fix WMA Pro, MPEG 4 ALS, APE, MLP and ADPCM-IMA4 playback + +Encoders: + * Fix audio encoding for numerous codecs, notably mp3 and aac + +Muxers: + * Fix noticeable memory leak when creating AVI files + +Video output: + * Fix crash when using libvlc in 3rd party applications (Mac only) + +Mac OS X Interface + * Minor improvements + * Fix issue which could lead to loss of media files created through transcoding + +HTTP Interface + * Fix two xss vulnerabilities (CVE-2013-3565) + +Translations: + * Update Basque, Simplified Chinese, Ukrainian, Turkish, Portuguese, Norwegian Bokmål, + Burmese, Lithuanian, Italian, Hindi, Spanish, German, Czech, Danish, Welsh translations + * New Azerbaijani, Kirgyz, Oriya translations + + +Changes between 2.0.5 and 2.0.6: +-------------------------------- + +Access: + * Fix HTTPS playback with some certificates previously rejected + +Audio Output: + * Improve lookup of human readable device names in AUHAL plugin (OS X) + +Demuxers: + * Fix crash with broken asf files (SA-1302) + * Fix MKV behaviour with unknown or new ebml elements + * Fix use-after-free crash in Ogg demuxer, found by Tomi Juntunen + * Fix regression on some paletted codecs in AVI + * Fix ALAC in mp4 regression + * Improvements to the vimeo playlist parser + +Decoders: + * Fix GPU decoding on Intel HD 2000/3000 cards on Windows + * Fix FLAC 6.1 and 7.1 channel layout + * Fix crashes in HTML srt subtitles + * 3rd party codecs updates + +Mac OS X: + * Fix subtitle rendering resolution when using OS X's native fullscreen mode + * Improve fullscreen controller time slider with larger click target + * Fix listing of the lua interfaces (web, telnet and console) + in the advanced preferences panel + * Fix spatializer audio filter panel + * Fix crash within the video output code + * Fix BDMV folder selection issue on OS X Mountain Lion, which treats such + folders as a AVCHD file as soon as they include an item named INDEX.BDM + * Fix bug which caused a hidden fullscreen panel + * Fix various minor UI drawing issues (main window, fullscreen controller, + lua extensions, ...) + * Allow VLC to be associated with .dvdmedia packages + +Qt: + * Fix clearing of Media Info panel on dialog exit + +GNU/Linux: + * Numerous D-Bus and MPRIS2 improvements + * Reject broken versions of PulseAudio + +Windows: + * Fix uninstallation in different location than C:\ + +Translations: + * Update of Brazilian Portuguese, Traditional Chinese, Thai, Portuguese, + Japanese, Italian, Hebrew, Estonian, Spanish, Czech, Catalan, Bosnian, + Asturian, French, Romanian, Serbian, Russian, Hindi, Estonian, German + Slovenian Norwegian Bokmål, Khmer, Icelandic, Interlingua, Welsh, Ukrainian, + Dutch, Danish, translations + * New Gujarati, Aragonese translations + + +Changes between 2.0.4 and 2.0.5: +-------------------------------- + +Access: + * Fix DVB-S delivery system detection + +Audio Output: + * Fix playback initial synchronization with PulseAudio + (however similar bugs in PulseAudio version 2.0 and later still exist) + * Fix file output bug affecting floating point on big endian systems + +Demuxers: + * Fix crash with some embedded subtitle fonts + * Fix buffer overflow in HTML subtitles parser + * Fix koreus lua parser + * Improve reliability for RTSP streams sent by some IP cameras + * Fix division by 0 in AIFF demuxer + * Fix some MKV crashes when ordered editions have empty or broken links + * Fix SWF potential crash on malformed files. + +Video filters: + * Fix crash in Freetype with embedded fonts + * Fix wrong aspect ratio in some cases + +Encoders: + * Fix Mpeg-2 audio and video encoders initialization + +Mac OS X: + * Fix Reveal-in-Finder for files with non-Western file names + * Fix crash with local statistics disabled + * Fix Time counter UI look + * Fix system sleep issue on OS X 10.5 + +Win32: + * Fix https streaming + +libVLC: + * Fix audio and video track selection: + The constant track identifier is now always used. Some functions previously + incorrectly used the (moving) index of the track in the table of tracks. + +Translations: + * Update of Asturian, Bengali (India), Bosnian, Croatian, Czech, Danish, + Dutch, Estonian, French, Galician, Scottish Gaelic, German, Hebrew, + Italian, Japanese, Khmer, Malayalam, Polish, Slovak, Simplified Chinese, + Traditional Chinese, Brazilian Portuguese, Turkish, Thai translations + * Initial translations for Welsh and Interlingua + + +Changes between 2.0.3 and 2.0.4: +-------------------------------- + +Audio Output: + * Improve playback synchronization with PulseAudio. + * Fix ALSA digital pass-through ("S/PDIF"). + * Fix live audio device selection on Mac OS X + * Fix detection of some 5.1 and 7.1 kits on Windows. + * Fix audio output behavior when the output device is plugged or unplugged + during playback on Mac OS X + +Access: + * Fix numerous DVD (dvdnav) crashes + * Fix HTTP playback through proxy and advertise gzip correctly + * Fix TLS busy-loop during client-side handshake + +Codecs: + * Support for Opus decoding via libopus, including multi-channel files + * Support MSS1 and MSS2 decoding through DMO libraries + * Fix Hebrew and Greek subtitles encoding + * Fix crashes on malformed subtitles and malformed png files + * Fix crashes when using hardware decoding + +Demuxers: + * Fix issues in Ogg with zero length packets + * Fix file duration of Ogg/Theora and Ogg/Vorbis files + * Fix vimeo, koreus and youtube lua parsers + * Support Youtube live streams + +Windows: + * Fix Wallpaper mode on Windows 7/8 + +Qt: + * Fix media info dialog update + * Fix random/repeat preferences saving + * Fix crashes when opening audio effects dialog, with skins and playlist + * Fix crash on association dialog on Windows XP + * Fix album art display at start + +Mac OS X: + * Fix command-line options to control the interface behavior + * Deactivate CoreAnimation effects on Leopard + * Fix menus display and behavior + * Fix various crashes and small issues including bookmarks, playlist, buttons, + streaming wizard, video size, hotkeys and fullscreen controller + * Fix font selection for Unicode subtitles + * Improve system sleep behavior when playing audio-only media. The screen is + allowed to sleep while the system is kept awake during playback. + * Fix code signing of Delete Preferences application + * Add option to Audio Effects panel to activate the Karaoke filter + +Miscellaneous: + * Fix Notify (D-Bus) plugin deadlock. + * Fix buffer corruption in freetype and subtitles modules + * Improve Blu-Ray and HLS support + * Fix issues on selection of playlist items for WebUI + * Codec and other 3rd party library updates + * Fix swscale and canvas behavior with Aspect Ratio + * Fix mime-type when streaming Webm over HTTP + * Fix recording behaviour in Windows network environments + * Codecs and 3rd party libary updates + +Translations: + * Updates of Norwegian Bokmål, Korean, Slovak, Serbian, Russian, Traditional + Chinese, Simplified Chinese, Portuguese, Walloon, Turkish, Thai, Polish, + Dutch, Khmer, Hindi, Japanese, Galician, Hebrew, German, Breton, Scottish + Gaelic, Czech, Estonian translations + * Initial translations for Bengali, Fula, Gujarati and Bosnian + + +Changes between 2.0.2 and 2.0.3: +-------------------------------- + +Access: + * Fix some HTTP request that broke some radio channels + +Demuxers: + * Fix support for some flv files (notably joined) + * Fix a crash when opening ape files with ID3v1 tags + +Mac OS X: + * Add GateKeeper support + * Fix handling for some hotkeys + * Fix fullscreen toggle over extra interfaces + * Minor bugfixes and improvements + +Qt: + * Fix Windows 8 interface style + +Translations: + * Updates for Breton, Czech, Dutch, Gaelic, German, Hebrew, Hindi, Icelandic, + Japanese, Khmer, Korean, Polish, Russian, Simplified Chinese, Slovenian, + Thai, Turkish and Walloon + * New translations to Uzbek and Marathi + * Fix activation of Gaelic and Thai translations + + +Changes between 2.0.1 and 2.0.2: +-------------------------------- + +Video Output: + * XP machine will now use DirectX mode by default, like in previous versions. + There were too many errors with broken drivers. + * More accurate colourspaces conversions for YUV->RGB in OpenGL + * Add menu support for libvlc / VLCKit applications on Mac OS X + * Various fixes on Mac OS X, notably for crop, zoom, osd and menu support + * Misc fixes in OpenGL module, on all platforms + * Fix video output on PowerPC-based Macs equipped with an ATI Radeon 7500, + an ATI Radeon 9200 or a NVIDIA GeForceFX 5200 Ultra. + * Fix video output of 10bit encoded contents on Intel-based Macs equipped + with an Intel GMA 950 chipset running OS X 10.6 or later. + * Add support for the HiDPI mode used on recent Apple products with so-called + Retina Displays. + +Access: + * Rework Digital TV module for Windows. DVB-T and DVB-C should work again + * Fixes for RAR compressed files + * Fix DirectShow crashes on exit + * Improve PulseAudio input latency + * Fixes for HTTP access through a proxy + * v4l2 webcam outputting H264 can now be used directly (use --v4l2-chroma=h264) + * Fix subtitles auto-detection in subfolders and detection behaviour + * IE http proxy is not used anymore by VLC on Win32 + * Accept more extensions for DVD images + * Fix crash in VC1 packetizer + * Improvements in Blu-Ray playback + * Improvements and fixes in HLS support + +Codec: + * Fix crashes in AAC decoder on channels changes, notably in ISDB streams + * Fix compilation with multiple FFmpeg and libav versions + * Fix G726 support + * Fix MP3 free format support + +Demuxers: + * Fixes for MKV segments, seeking and MKV title display + * Fix for some mp4, voc, midi and au crashes + * Fix for Real .ram, .f4v, .avi and .ra files support + * Fix for DVB channels file support + * Fixes for alac, vorbis, DTS, VC-1 and Dirac in mp4 + +Encoders: + * Fix for MPEG Audio encoding, use layer2 when using fourcc "mp2 " and "mp2a" + * Fix for JPEG generation, when doing snapshots + +Audio filters and output: + * Limitation of spatializer volume output + * Fix DirectSound device selection + * Correct PulseAudio volume control + * Do not apply volume in file output + * Fix sampling rate in JACK output + * Fixes in ALSA output for latency and for broken drivers + +Mac OS X: + * Enable drag and drop of playlist items between the temporary playlist and + the persistant media library + * Enable import of playlist items taken from the service discovery modules + to the media library or the temporary playlist + * Media key support for keyboards by other manufacturers than Apple + This fix was facilitated through a hardware donation by ZF Friedrichshafen AG + manufacturing keyboards under the brand "Cherry". + * Add support for the Apple Remote to set the Mac to sleep using a longer + press on the Play/Pause button + * Remove libfontconfig's font cache by an Apple Type Services lookup. + This removes the "Updating Cache" dialog, before finding all fonts. + * Re-add an option to hide the window decoration during video playback + * Improve compatibility with other 3rd party apps using SPMediaKeyTap + * Many Fullscreen fixes + * Keep Aspect Ratio when resizing is back + * Add controls to manipulate the Subtitles Duration to the Track + Synchronization panel + * Hidden items in the sidebar are being retained for the next launch now + * Fix crash when trying to open an Audio CD by drag & drop + * Improve reliability when opening DVDs or BDs by drag & drop + * Fix crashes on exit + * Fix crash when mounting a device with multiple logical volumes while + VLC is running + * Chosen audio output device is retained throughout multiple sessions + * Since running the Mac OS X interface as an Extra Interface or Control + Interface can lead to undefined results, eventual settings will be + automatically reset on the first launch. + - This fixes issues with unresponsive playback controls and crashes on quit. + * Update Growl plugin for use with Growl 1.3 + * Miscellaneous minor interface improvements + +Lua Scripts: + * Fixes for stdin/stdout and for different locale issues + * Fixes for icecast SD + +Qt: + * Fix preferences for audio devices on Windows + * Fix playlist search and selector behaviour + * Fix multiple issues in the Open Disc dialog + * Miscellaneous fixes in preferences, buttons, EPG, playlist and customize dialog + * Fix tags and file names display + * Fix various crashes, display issues and usability issues + +Skins2: + * Fix mousewheel on Windows + * Fix for key events and focus loss + +Web interface: + * Fix display of some buttons + * Fix listing of files in the Open interface + * Fixes for widgets behaviour and vlm dialog + +Security: + * Fix Ogg Heap buffer overflow + * Update taglib (CVE-2012-2396) + * Update libavcodec and other codecs libraries + +Translation: + * Traditional Chinese, Simplified Chinese, Walloon, Slovak, Polish, Khmer, + Japanese, Italian, French, Czech, Belarusian, Breton, Greek, Spanish, + Estonian, Irish, Galician, Hungarian, Japanese, Dutch, Telugu, Ukrainian, + Thai translations update + * New Scottish Gaelic translation + + +Changes between 2.0.0 and 2.0.1: +-------------------------------- + +Access: + * fix and improve the CDDB information retrieval + * fix the samba module compilation + * fix UDP / RTP multicast stream reception on Mac OS X when using the 10.7 SDK + * multiple fixes for HLS support, notably on Win32 and for encryption + * multiple fixes for Bluray discs playback + * fix for DVD decryption on some RPC-I drives + +Codecs: + * Support for MXPEG files + * limit auto-detected threads to 4 in avcodec module + * fix quicktime audio codecs in RTSP streams + +Demuxers: + * Fix multi-file splitted RAR archive support + * Fix a crash when seeking in mka + * Improve MKV multi-video tracks support + +Muxers: + * Fix ogm header creation + +Audio filters: + * limit spatializer filter distortions + * Use fastest SinC algorithm for samplerate module + +Audio output: + * Fix S/PDIF passthrough with ALSA. + * Remove flawed ALSA channels autodetection. + The available ALSA channels MUST be configured now (stereo by default). + * Fix delay when changing the volume on Mac OS X + +Video filters: + * Fix gradfun unloading on Windows platform + +Mac OS X interface: + * allow to hide the playlist to get a small controller window + * allow to hide the sidebar + * disable Lion fullscreen mode by default, since its behavior is misleading + - this fixes fullscreen video output on a secondary screen + * noticebly faster launch time + * correct a few visual glitches and accessibility support + * re-enable visual feedback on seek and volume changes + * improve track synchronization panel + * fix fontconfig cache dialog, closure of the interface and numerous crashes + * fix crop, aspect ratio handling, DVD (no menu) support and Open subtitle menu + +Qt interface: + * allow a native seek slider instead of the blue one + * fixes in the playlist, the addons dialog, the menus, the main toolbar + the open dialogs, preferences and customization dialogs + * fix for fontconfig cache dialog, when rebuilding ASS fonts + +Skins interface: + * fix for menus display + * Addition of $R to display current playback speed + * documentation update + +Web interface: + * fix mobiles display for remote control mode + * support for .drc and .3ga extensions + +Service discovery: + * fix SAP discovery, where an item was added multiple times + * fix SAP discovery on Mac OS X when using the 10.7 SDK + * Update Jamendo selections + +Miscellaneous: + * fix DBus crash + * fix build issues on BSD, Linux/PPC and Linux/Sparc + * fix a crash on VLM close + +Security: + * Update libpng to 1.5.9 (CVE-2011-3026) + * Update freetype to 2.4.9 (CVE-2012-1126 up to CVE-2012-1144) + * Fix MMS stack overflow (SA-1201 - CVE-2012-1775) + * Fix RealRTSP heap overflow (SA-1202 - CVE-2012-1776) + +Translations: + * Update of Czech, Spanish, Swedish, Turkish and Walloon translations + + +Changes between 1.1.13 and 2.0.0: +--------------------------------- + +Important notes: + * The licenses of libVLC and libVLCcore have changed from GPLv2+ to LGPLv2.1+ + * Start/end titles/chapters are now specified with # rather than @ to fix + conflicts with some URLs and file names. For instance, this plays a DVD + from the 2nd chapter of the 1st title up to the 4th chapter of the 3rd + title: vlc dvd://#1:2-3:4 + * The 40+ --*-caching options were simplified and dumbed down to 4 options: + - --file-caching specifies caching for local files, + - --network-caching specifies caching for network resources, + - --live-caching specifies caching for capture devices and + - --disc-caching specifies caching for local optical media. + All values are expressed in milliseconds as in previous versions. + * HTTP server IP address, port, and TLS configuration is now centralized: + - The --http-host option sets the address, e.g. "--http-host=[2001:db8::1]". + By default, both :: and 0.0.0.0 are used. + - The --http-port and --https-port options set the port numbers. + By default, 8080 is used for HTTP, and 8443 for HTTPS. + - The TLS credentials are configured with --http-cert (public certificate), + --http-key (private key), --http-ca (optional CA) and + --http-crl (optional CRL). + * RTSP server IP address and port are updated similarly. + Use --rtsp-host and --rtsp-port respectively. + * The --miface-addr option does not exist anymore. To select the multicast + output interface, use --miface instead, e.g. --miface=eth0. + * The Windows version will only work with Windows XP SP2 or later. + Windows 2000 SP4, Windows XP < SP2, Windows 2003 SP0 are now unsupported. + * The Mac OS version will require Quartz Extreme compatible machines. + +Important changes for packagers: + * The default builds now assume that the operating system uses UTF-8 for + its file systems and files content (except the Windows port). If this is + not acceptable, pass --enable-non-utf8 to the configure script. + Non-UTF-8 file systems support will be removed in future versions. + * The VLC plugins path can be overridden with the VLC_PLUGIN_PATH environment + variable. The --plugin-path command line option was removed. + * The default tarballs are now compressed with XZ/LZMA: .tar.xz + * OSS support is not compiled on Linux by default, pass --enable-oss to the + configure script if you use OSSv4 or really want to use OSS emulation. + * The webplugins have moved to: git://git.videolan.org/npapi-vlc.git + +Core: + * Major Video Core and Outputs rework and rewrite: + Subtitles, subpictures and OSD can now be sized and blent inside outputs + x11 (Unix), OpenGL (Unix) and Direct3D (Windows) are such video outputs. + * Almost every video filter can now be transcoded + * Playback rate doesn't get resetted to 1 between items anymore + * Option --sub-filter was renamed --sub-source + * Port to Android, iOS, OS/2 and Win64. + +Access: + * Multiple files are now supported inside RAR files + * Experimental support for ClearQam devices in the BDA/DTV module + * DVB-S scanning support on Unix + * DVB-C scanning on Unix scans correct modulation/symbolrate if needed + * Support for freq and video standard selection in DirectShow + * Support for VDR recordings (http://www.tvdr.de/) folders + * Experimental Blu-Ray Discs support using libbluray + * HTTP Live Streaming (IETF draft) playback support + * Blackmagic DeckLink SDI cards input support (Linux only currently) + * Linear Systems (HD-)SDI cards input support (Linux) + * PulseAudio audio input support + * Support for RTP dynamic payload types by specifying the payload format + in an option (no autodetection): only Theora supported for now + * Basic HTCPCP implementation for Coffee Pot control + * Support for all QTKit-compatible video input devices, aka QTCapture + * Support for all QTKit-compatible audio input devices, aka QTSound + * Support for capturing partially hidden windows in the X11 Screen input + * MPEG DASH (Dynamic Adaptive Streaming over HTTP) support + * Support for HTTPS is now fixed in the Windows port + +Codecs: + * One can now use ffmpeg-mt in conjunction with vlc, to split decoding load + on multiple cores. H.264, VP3, VP8, JPEG-2000, Mpeg-4 ASP/DivX and RV3/RV4 + are notably concerned. + * Important fixes for RealVideo 3.0 and 4.0 playback, notably in MKV + * Experimental Hardware decoding using Broadcom CrystalHD cards + * New module for decoding EBU subtitles (.stl) + * Support for 9bits and 10bits H.264/AVC decoding + * Support for 20-bits PCM and DAT-12 (digital magnetic tapes) from RTP + * New module for Dirac encoding, using the faster libschroedinger + The Schroedinger module should be prefered to the Dirac one + * Support for WMV Images, aka WMVP and WVP2, as used by Photo Story + * Support for Lagarith Lossless video codec + * Support for ProRes 422 video codec in 10bits + * Support for DNxHD (VC-3) and JPEG-2000 in 10bits + * EIA-608 closed captions improvements + * Support for JPEG-2000 and Motion JPEG-2000 in the Windows and Mac binaries + * Experimental support of IOMX for OpenMAX IL codecs on Android + * One can use "mp2 " fourcc to encode in mpeg1/2 layer 2 + +Demuxers: + * New images demuxer supporting jpeg, png, targa, xcf, git, tiff, bmp, pcx, lbm + * C64 SID file playback support of using sidplay2 + * Support for images/cover art in wma/wmv/asf files + * Improvements in .ape files metadata reading and writing + * New demuxer module for EBU subtitles (.stl) + * Support for caf, mtv, awb, f4v, amr, vro (DVD-VR) files + * Ogg, flv, mxf, amr seeking improvements + * Major improvements in Matroska (mkv) chapters/segments handling and seeking + * Support for duration and better seeking in Mpeg-TS files (.ts, .m2ts, .mts) + * Mov improvements, notably for aspect-ratio handling and Audio DV tracks + * Improved support of tracker files + * Real Media (.rm and .rmvb) demuxer is now based on libavformat + +Interfaces: + * Qt: effects dialogs rework + * Qt: new CoverFlow-like view of the playlist + * Qt: port to MacOS X platform + * Qt: various interface improvements, notably on the seek bar + * Skins2 / Qt: misc improvements and usability fixes + * Skins2: fullscreen controller support, relative placement support + and important cleanups and optimisations + * Mac OS X: re-written Main Window, which also includes the Video Windows + It is available in 2 looks, one grey (Lion style) and one black (QTX style) + * Mac OS X: new Audio Effects panel adding Compressor and Spatializer filters + * Mac OS X: new Track Synchronization panel + * Mac OS X: new Video Effects panel for color and geometry adjustments + * Mac OS X: re-written Open Disc functionality with automatic media detection + * Mac OS X: support for the native fullscreen mode on OS X Lion + * Mac OS X: enhanced AppleScript support + * Mac OS X: support for lua extensions + * The rc and telnet lua interfaces were merged into a new "cli" interface + * lua: the recommended way to run custom interface scripts is now to pass + -I luaintf --lua-intf myscript + * ncurses: heavy refactor of the complete interface + * dbus: Upgrade to an mpris2 compliant interface, see http://www.mpris.org + * dbus: Rewrite of the main loop to use a more efficient poll-based model + * webUI/http: Rewrite of the web interface, using jQuery + * webUI/http: some requests are now supported in JSON in addition to XML + * webUI/http: path values for input and output are deprecated in favour of uri + * Qt/Win32: the update system now downloads the updates in the temp folder + * Qt: preferences are now searchable + * Qt: the fullscreen controller is now stackable, full-width, at the bottom + +Video Output: + * New video output based on Direct2D for Windows 7 and Vista (with Platform Update) + * New video output for iOS platform + * Experimental work in progress on a video output using EGL + * Adaptation of the OpenGL layer for OpenGL ES 1.1 + * Various vmem improvements + * OpenGL video output now accepts YUV as input and uses fragment programs for + chroma conversion between YUV and RGB + * New video output for Android platform, based on Surface + * Support for 9/10bits output in the OpenGL output + * Updated OpenGL video output for Mac, requires a Quartz Extreme capable machine + * New video output based on kva API for OS/2 + +Audio Output and Filters: + * New audio output based on AudioQueue API for iOS + * New audio output in memory (amem) + * Important simplification and improvements in the core audio output + * New audio output based on OpenSL ES API for Android + * New audio resampler using Speex (DSP) + * New audio resampler using the Secret Rabbit Code (a.k.a. libsamplerate) + * New Compressor filter, a dynamic range compressor + * New simplistic Karaoke filter + * New audio output based on kai API for OS/2 + * Automatic handover from S/PDIF to PCM with PulseAudio 1.0 + +Video Filter: + * New gradfun filter for debanding videos using dithering + * Rewrite of the grain filter, faster and with better quality + * New posterize filter for lowering the number of colors + * Atmo ambilight: improve Fnordlicht support up to 254 channels + * New sepia filter for creating sepia effect in videos + * New deinterlacer mode Phosphor, a framerate doubling CRT TV simulator + * New deinterlacer mode IVTC, to do live inverse telecine for NTSC films + * New subsdelay filter to change subtitles delay + * New anti-flickering filter + * New OpenMAX DL IPCS filter for color space conversion and resizing + * New video filter for denoising, based on the famous hqdn3d filter + * Major improvements in the freetype text-rendering module, notably supporting + blackbox and customizable shadow. + NB: The freetype module is now used by default on the Mac OS X instead of + the quartztext module, which can still be enabled manually. + The Win32 font selection was improved too. + +Stream output: + * New livehttp-module for HTTP Live Streaming (IETF draft) output + example: vlc inputfile :sout="#transcode{vcodec=h264,acodec=mp3, + venc=x264{profile=baseline},width=320,vb=256,ab=96}:std{ + access=livehttp{index=public_html/iphonestream.m3u8, + index-url=http://url-to-iphonestreamfile-###.ts},mux=ts{use-key-frames}, + dst=public_html/iphonestreamfile-###.ts}" + * Support for Vorbis and Theora in RTP + * Major rework of VoD support + * New delay module, to introduce delays of one ES, when streaming: + #delay{id=12,delay=500}:standard... + * New setlang, setid modules to change lang or id of one ES, when streaming: + #setid{id=12,new-id=42}:std... + * New langfromtelx module, to change lang of one ES, when streaming, based on + a telextex page: #langfromtelx{id=12,magazine=7,page=0x99,row=1}:std... + * New select module, to replace an existing ES with another ES in the same track + #duplicate{dst=bridge-out{id=1},select=video,dst=bridge-out{id=0xa3},select=audio} + #transcode{...}:bridge-in{id-offset=0}:select{disable=0}:setid{id=0,newid=0xa3}:autodel:std{...} + * New libavformat/avio access_output module for network streaming + +Services Discovery: + * Search API to be able to query distant search APIs from the interfaces + * Upnp module was ported to Win32 + +libVLC: + * New capabilities for libVLC: + ** libvlc_media_player_navigate for DVD navigation + ** libvlc_audio_filter_list_get, libvlc_video_filter_list_get to get the + list of available audio and video filters + ** libvlc_audio_set_format, libvlc_audio_set_format_callbacks, + libvlc_audio_set_callbacks + allow grabbing audio data from a chosen memory location in real-time. + +Removed modules: + * asademux, subsass: use libass + * fake, invmem: use the new image demuxers + * hal, v4l, gapi, omapfb, hd1000a, hd1000v: obsolete unmaintained modules + * id3tag: use taglib + * upnp: use upnp_intel + * removal of old telnet interface in favor of the new lua CLI + * removal of http interface in favor of luahttp + * removal of the noise filter + * removal of the SDL audio output, use the native outputs + * growl_udp: use Growl for local notifications on the Mac. UDP support will be + removed in Growl's next release, too. + * removal of the OSSO screensave module, use the MCE one + +Translations: + * Update of translations for most languages. + * New Telugu and Kurmanji translations. + + +Changes between 1.1.12 and 1.1.13: +---------------------------------- + +Security: + * Heap overflow in TiVo demuxer fixed. + * Same default ACL for HTTP requests as for the rest of the HTTP interface. + +Audio outputs: + * PulseAudio channels mapping (non-stereo) fix. + * PulseAudio stream accidental overflow recovery. + +Video outputs: + * XVideo support for mixed CPU/GPU endianess (especially on PowerPC). + * XVideo support for automatic color keying. + * xosd Xlib initialization failure fix. + +Decoders: + * Camtasia decoding fix. + +Qt interface: + * Rare crash while seeking fixed. + * V4L2 video standard selection fixed. + +Translations: + * Update of Chinese simplified, Estonian, German and Polish languages. + + +Changes between 1.1.11 and 1.1.12: +---------------------------------- + +Audio outputs: + * Mac OS X / auhal: multiple fixes for the Digital Audio output (S/PDIF) + including support for OS X Lion + * Multiple fixes and improved synchronization for PulseAudio support + * Support for AC-3 and DTS passthrough with PulseAudio 1.0 + +Unix port: + * Fix build compatibility with taglib < 1.6 and Xulrunner 1.9.1 + +Misc: + * Fix crashes with Japanese locale on OS X + * Minor fixes for Webplugin under Win32, AVI demuxer, smem and AudioScrobbler + * Fix crash in HTTP and RTSP server (stream output or Web interface) + +Translations: + * Update of Breton, Chinese Simplified and Basque + + +Changes between 1.1.10 and 1.1.11: +---------------------------------- + +Security: + * Fix buffer overflows in the RealMedia demuxer (CVE-2011-2587) + and the AVI one (CVE-2011-2588). + +Mac OS X: + * Fixed scrolling direction if the input device's signal is inverted + * Update Auhal audio output to the latest API + * Fix images disappearing issue on the interface + * Reduced installation size by up to 30 MB + * Resolved conflict between iTunes and VLC wrt Media Key handling + +Mozilla/ActiveX webplugin: + * Fullscreen mode is fixed on Win32 + * Very simple fullscreen controller is visible on Win32 + +Demuxers/Meta Readers: + * Better support for cover art embedded in mp4, wma + +Muxers/Output: + * Fix AVI muxer so the generated files are readable on other players + +Extensions: + * Multiple fixes for crashes and malfunctionning issues + +Qt Interface: + * Fix quitting on Linux + * Fix opening of VIDEO_TS folders through the open disc dialog on Windows + * Miscellaneous + +Win32 port: + * Update of codecs, fixing the mpeg-2 decoder crash + +Translations: + * Update of Slovak, Lithunanian, Russian, Brazillian Portuguese, Serbian + + +Changes between 1.1.9 and 1.1.10: +--------------------------------- + +Windows and Mac OS X: + * Update of external library modplug, to address multiple security issues + +Mac OS X Interface: + * Improved Media Key handling based upon SPMediaKeyTap by Spotify AB + * Fix for various crashes and small issues + +Demuxer: + * Fix heap corruption / integer overflow in XSPF playlist parser + +Audio output: + * PulseAudio output re-written due to unstability of the current one + +Win32 port: + * Remove the fontconfig dependency from the freetype module + +Miscellaneous fixes in: + * Windows 7 taskbar buttons + * Qt interface + * asx, live555, dvdnav demuxer + * RTP output and XML export + * Subtitles colours when using GPU decoding on Windows + * v4l2 access + +Translations: + * Update of Norwegian Bokmål, Slovak, Afrikaans, Luganda, + Brazillian Portuguese, Irish, Thai, Estonian, Chinese, Polish, + Dutch, German, Galician, Bulgarian, Lithuanian and Japanese translations + * Initial Basque, Zulu, Peul, Amharic, Acoli, Chiga translations + + +Changes between 1.1.8 and 1.1.9: +-------------------------------- + +Windows and Mac OS X: + * Update of external library modplug, to address a security issue + +Demuxers: + * mp4: Fix heap-based buffer overflow (VideoLAN-SA-1103) + +Mac OS X Interface: + * Miscellaneous interface look adjustments + * Improve Apple Remote handling + * Fixe bugs in the Streaming / Transcoding wizard + * Layout fixes in the Preferences and Controls windows + * Fix incomplete list of hotkeys in the Preferences dialog + * Fix quitting through Apple Events (Dock menu, App Switcher, AppleScript, etc.) + +Mac OS X Port: + * Fix Growl local notification plugin + * VLC bundle now includes the Growl framework + * Fixes for eyeTV + +Translations: + * Updates of Lithuanian, Estonian, Chinese, Japanese, Bengali, Dutch, Polish, + German, Galician, Traditional Chinese translations + * New Luganda Translation + + +Changes between 1.1.7 and 1.1.8: +-------------------------------- + +Mac OS X Interface: + * New UI graphics by Damien Erambert + +Interfaces: + * Oldrc interface is again the default RC interface, on Windows + * Luarc, luahttp and luatelnet fixes + * Qt and Mac OS X fixes + * numerous Skins2 fixes, notably winamp2 skins + +Encoder: + * new libschroedinger-based Dirac codec encoder, faster than the current one + +Access/Demuxers/Codecs: + * Subtitles auto-detection is back for .txt files + * vod/rtsp server and rtsp input fixes + * mp4 demuxer improvements + * ogg, rstp input, video filters minor fixes + * taglib's replaygain is fixed for mp3 + * vobsub support has an improved auto-detection + * fix a crash in malformed ape files + +Miscellaneous fixes in: + * Pulseaudio audio output, notably for usb cards + * Stacktraces are now limited in size on Windows + * Video resolution is now limited to 8192x8192, for security reasons + See CORE-2011-0208, CVE-2010-3275, CVE-2010-3276 + * Configure and build system improvements + * DirectShow and BDA build headers have been updated + +Translations: + * Update for Finnish, Galician, Dutch, Chinese, German, Japanese, Lithuanian, + Slovak, French, Polish, Estonian, Brazillian Portuguese and Hebrew + * New icelandic translation + + +Changes between 1.1.6 and 1.1.7: +-------------------------------- + +Linux port: + * Integration with the KDE GUI platform is disabled due to KDE bugs + #234484 and #260719. + +Mac OS X port: + * Updated live555 library to fix playback of RTSP and Freebox streams + * Running VLC in 64bit mode requires Mac OS X 10.6.0 or later for speed + and stability reasons + +Demuxers: + * Fix for Matroska / WebM remote code execution vulnerability. + VideoLAN-SA-1102 + +Translations: + * Update for Hebrew, Japanese, Danish and Russian translations + + +Changes between 1.1.6 and 1.1.6.1: +---------------------------------- + +Source: + * Fix libnotify, lirc, pulse compilation and packaging for Unix/Linux + + +Changes between 1.1.5 and 1.1.6: +--------------------------------- + +Audio output: + * Multiple fixes and improvements on PulseAudio output + PACKAGERS are VERY STRONGLY advised to update libpulse to 0.9.22. + Update is required to use PulseAudio with the Phonon-VLC backend (KDE) + and with the Mozilla VLC web browser plugin. + +Access: + * Fix the Audio CD crash when looking for CDDB metadata on Windows + +Decoders: + * Support for MPC SV7 and SV8 on Windows and Mac OS X (Unix was already working) + * Enabled FluidSynth MIDI playback plugin on Mac OS X + * Faster VP8/Webm decoding with recent codecs libraries + * Fix heap corruption in CD+G decoder - CVE-2011-0021 / VideoLAN-SA-1101 + +Demuxers: + * Fix Buffer overflow in Real demuxer - CVE-2010-3907 / VideoLAN-SA-1007 + * Fix some asf/wmv seeking issues, notably when seek didn't go to a keyframe + * Support for 24-bits PCM over RTP (audio/L24) + +Subtitles and renderer: + * Do not auto-detect .txt files for subtitles + * Mark more freetype options as safe + * Mac OS X: fixed fontconfig cache creation + * Fix heap corruption in subtitle decoders, potentially exploitable, + discovered by Harry Sintonen - sintonen at iki.fi - CVE-2011-0522 + +Visualization: + * Fix projectM visualization for Linux in all locales + * Fix projectM visualization support for Windows + * Various projectM improvements: the module should be working now + * Fix goom crash on Windows XP and Mac OS X + +Interfaces: + * Qt4: fixes for media keys processing and MCE remotes + * Qt4: various fixes and portability improvements + +Miscellaneous fixes: + * KDE device solid actions + * XDG screensaver + * Transcode integer overflow + * HTTP Icy metadata reading + * Windows: revert to 1.1.4 performance timers + +Translations: + * Update translations for Chinese, Nippon, Slovak, Estonian, Spanish, Galician, + Swedish, Bulgarian, French, Bengalese, German, Slovak, Japanese, Dutch, + Polish, Hungarian, Indonesian, Sinhala and Irish + + +Changes between 1.1.4.1 and 1.1.5: +---------------------------------- + +Security: + * Fix a Windows crash on accessing Network Shared files/drives, + VideoLAN-SA-1006 + +Access: + * Support for RTP access for H264 streams by specifying the demux in the MRL + +Services Discovery: + * Integration in the playlist, of a list of web shows, provided by channels.com + +Demuxers: + * Game Music Emu (GME) plugin rewritten, using the proper C API + * DVDnav and DVDread fixes for encoding and misc issues + * Playback of live http .Webm streams + * Taglib thread-safety fix + +Decoders: + * Fix decoding of H264 using DxVA2 using Intel IGP, thanks to the donation from + "Puget Systems" + +Skins: + * Add an icon to VLC on Linux + +Video Output: + * fix a bug that could lead to 100% CPU usage on XCB + +Interfaces: + * fix for Qt bug where VLC didn't exit properly on some Windows XP configuration + * fixes on luatelnet and luarc + +Miscellaneous crashes and fixes in various plugins (telnet, live555, theora and + TS-mux, Qt) + +libLVC: + * add libvlc_media_new_fd() to play directly file descriptors (not Win32/Win64) + * Miscellaneous fixes + +Translations: + * Update translations for Walloon, Lithuanian, Spanish, Turkish, Estonian, Dutch, + Bengali, German, Polish, Brazillian Portuguese, Japanese, Italian, Galician, + French and Ukrainian + * Major update and activation on Windows of Modern Greek + * New Asturian translation + + +Changes between 1.1.4 and 1.1.4.1: +---------------------------------- + +Mac OS X: + * Fixed video output on PowerPC-based Macs for videos with widths divisible + by 16 + * Fixed an issue with the Equalizer's 170Hz slider + +Demuxer: + * Fix crash when closing rtsp streams + +Qt interface: + * Fix Windows 7 jumplists with Unicode files + * Various fixes for Windows + +Translations: + * New Armenian translation + * Update translations for Dutch, Estonian, Lithuanian, Japanese, Nynorsk, + Brazillian Portuguese, Armenian, Wallon + + +Changes between 1.1.3 and 1.1.4: +-------------------------------- + +Win32: + * Fix a security issue when loading DLLs, especially in Qt4 and dmo modules, + See VideoLAN-SA-1005 + * Fix folders opening from the interface + +Translations: + * Update translations for Lithuanian, Bengali, Slovak, French, Dutch, Ukrainian + Polish, Simplified Chinese, German and Galician + + +Changes between 1.1.2 and 1.1.3: +-------------------------------- + +Access and demuxers: + * fixes for FTP relatives path and FTP directory support + * fix for podcasts parsing + * DVD: fix an assert error and various memory leaks + +Taglib: + * fix NULL dereferences, as reported by FortiGuard Lab, + CVE-2010-2937 / VideoLAN-SA-1004 + +Playlist: + * fix a regression where the wrong entry was played + * fix m3u playlists exports + +Skins2: + * fix video autoresize behaviour + +Translations: + * Update translations for Dutch, Sinhala, Hebrew, Estonian, Spanish and Bengali + +Windows and Mac: + * Update of many codecs libraries, fixing bugs and improving speed + +Mac: + * architecture-specific installations will now be replaced by specific updates + +BSD: + * Add AltiVec detetion for OpenBSD/powerpc + + +Changes between 1.1.1 and 1.1.2: +-------------------------------- + +Demuxers: + * Avformat fps displaying fix + * TS, fix an issue where some programs would get dropped (fixes DVB issues too) + +Audio filters: + * fix timestamps handling on some filters that provoked issues when playback + of mono streams, especially on Windows + +Windows: + * fix a bug in direct3d video output with old nVidia drivers that broke video + playback with overlay (YUV->RGB) + * fix console output encoding + +Interface and extensions: + * Youtube and other scripts updates + * Misc fixes in Qt4 (especially VLM and EPG dialogs) and MacOS interface + + +Changes between 1.1.0 and 1.1.1: +-------------------------------- + +libVLC: + * New capabilities for libVLC: + * Adjust video filter control: libvlc_adjust_Enable, + libvlc_adjust_Contrast, libvlc_adjust_Brightness, libvlc_adjust_Hue, + libvlc_adjust_Saturation, libvlc_adjust_Gamma + * libvlc_media_player_set_pause() can force the pause state, whereas + libvlc_media_player_pause() would only toggle it. + * libvlc_set_user_agent() configures the "user agent" strings used for some + protocols (HTTP, PulseAudio...). This replaces the --http-user-agent and + the former --user-agent libvlc_new() parameters. + * libvlc_video_set_callbacks() and libvlc_video_set_format() allow grabbing + video frames from a chosen memory location in real-time. This replace the + ugly --vmem-* libvlc_new() parameters in previous versions. + See http://wiki.videolan.org/LibVLC_SampleCode_SDL as an example. + * libvlc_audio_get_delay() and libvlc_audio_set_delay() configure the delay + between audio and video/subpictures for the current input. + * Various fixes and crash preventions, especially when video functions were + called early + +Decoders/Demuxers: + * Fix performance issues with GPU decoding using DxVA2 using ATI graphic cards + You NEED ATI Catalyst 10.7 + * Fix :program selection in TS and DVB-T + * Fixes and improvements for MKV, Avformat and Avcodec modules + * Fix mod (.xm, .s3m, .it) files support on Windows and Mac builds + +Stream output: + * Fix h264 streaming in ts + +Interfaces: + * Qt: fix preferences, hotkeys, messages and some fulscreen behaviour + * Skins: support for mousewheel in fullscreen, fix radialsliders + * Http: fix fullscreen toggle + +Linux: + * Fix pulse closing + * VAAPI small improvements, notably for extraction mode selection + +MacOS: + * Multiple interface and crash fixes + * Deinterlace selection is repaired + * Crashes when playing multi-channel tracks fixes + +Windows: + * Activation of DEP on XP SP3 + * Fix opening of .m3u and .pls playlists + * Fix crash when My Document isn't available + * Fix crash when Windows was getting into standby while playing video + +Translations: + * Update translations for Spanish, Polish, German, Sinhala, Hungarian, Khmer, + Brazilian Portuguese, Chinese, Hebrew, Slovak, Galician + + +Changes between 1.0.6 and 1.1.0: +-------------------------------- + +Important changes for users: + * On Linux, known bugs in the ALSA library might prevent audio output. + Update to alsa-lib 1.0.24 or later, or use the PulseAudio output instead. + +Important changes for packagers: + * The module cache has moved to ${libdir}/vlc/. The module cache can now be + generated at install time except if you use staged installation. In the + later case, you can generate the module cache in your post-inst script + by invoking 'vlc-cache-gen'. If the module cache is not present and vlc + can't write in ${libdir}/vlc/, it will result it vlc taking a long time to + launch each time. + * Most X11-related plugins now use XCB instead of Xlib. VLC now uses + - xproto, + - xcb, xcb-shm, xcb-xv, xcb-randr (from libxcb), + - xcb-keysyms (from xcb-utils), + - x11-xcb (from libx11) - only for GLX support. + * On X11 platforms, a _working_ version of xdg-screensaver is typically + required to inhibit the screensaver during video playback. + +Access: + * Support for the sftp protocol + * Support for CDDB servers for Audio-CD on the Windows port + * New memory input (imem) access and access_demux module to feed VLC from data in memory + * New avio module to use libavformat capabilities for network streams, like rtmp:// + * Port of the screen module from Xlib to XCB + * Port of the dc1394 module from libdc1394 to libdc1394 v2.0 + +Decoders: + * Support for DxVA2 for H.264 decoding on GPU on Windows Vista and 7 + * Support for VAAPI for H.264 decoding on GPU on GNU/Linux + * Support for Audio/Video decoders and encoders using OpenMAX IL components for DSP + + * Support PGS subtitles for Blu-Ray + * Support for HD-DVB subtitles - Display Definition Segment + * Invmem module improvements + * Support for Atrac1 audio codec + * Support for SSE3 and SSE4 capabilities in some codecs + * Multiple improvements for subtitles styles in .SRT and .SSA + * Support for native decoding of Windows Media Speech (Voice) audio codec + * Support for AMR-NB audio codec on the Windows and Mac port + * Support for Indeo5 video codec + * Improvements on the FLAC format (7.1 channels and 88.2/176.4/192 kHz support) + * Direct rendering is used more often with H.264 in avcodec module + * Support for MPEG-4 ALS lossless audio codec + * Support for VP8 codec + * Support for 7.1 channels in vorbis audio + +Demuxers: + * Many fixes on Matroska support (notably seeking) and support for Webm format + * Support for .aob files from DVD-Audio (MLP and LPCM) (Full disc support is NOT present yet) + * Support for ADPCM in .flv streams + * Support for TwinVQ (.vqf) and AMV (.amv) files + * Various EGP improvements + * Support for embedded subtitles in OpenDML and legacy .avi files + * Metadata and cover art improvements + +Playlist: + * WPL and ZPL playlist support + * Lua scripts for Mpora, Vimeo playback and Rockbox FM radios + * New Play-And-Pause function to stop playback on latest video image + * Podcast images are now displayed + +Video Output: + * Rewrite of the video output core and most video outputs + * Added desktop mode to the Direct3D output module. It differs from DirectX + desktop mode, because it hides the desktop icons, but reacts to mouse clicks. + * New x11, glx and xv modules based on XCB + * New deinterlacing modes based on yadif and yadif(x2) + * New audio/video filter to show audio level on the video output + * Enhanced AtmoLight filter with hardware support for + Classic AtmoLight (http://www.vdr-wiki.de/wiki/index.php/Atmo-plugin) + Quattro AtmoLight (use just 4 Classic AtmoLights as one) + MoMoLight (http://www.ambilight4pc.com/momolight/momolight.html) + Simple serial DMX controller (http://www.ulrichradig.de/ search for DMX) + +Extensions: + * New content extensions lua framework + +Audio filters: + * Chorus/Flanger audio filter + * 3F1R to stereo down-mix filter + * Dolby mixer, parameterized equalizer, trivial mixer, scaletempo, bandlimited + resampler, linear resampler, ugly resampler, converter_fixed, DTS to SPDIF + and A/52 to SPDIF filters have been upgraded to the "audio filter2" API + * NEON assembly audio converter module + * Converter filters have been rewritten and extended to support s32 as input + +Service discovery: + * Service discoveries can now be written in lua + * Service discovery for Picture/Music/Video user directories + * Service discovery based on libudev + * Shoutcast Service discoveries are now removed + +Encoders: + * x264, add psy-rd parameter and change default settings + * x264, add profile-limitter same way as x264.exe has, for example + #transcode{vcodec=h264,venc=x264{profile=baseline,level=1.2},vb=384,width=320,height=176} + * x264, defaults to crf=23 as x264.exe-does, if bitrate is given, + uses ABR and if qp-value is set uses CQP + * libx264-version 0.76 or higher is required + * x264 has tune/preset parameters supported + +Stream output: + * New smem module, streaming to memory + * Allow duplicate outputs to be merged, like: + --sout "#duplicate{dst=transcode{vcodec=mp2v},select=es=0,dst=transcode,select=es=1}:std{...}" + +Interfaces: + * Renamed the legacy rc, telnet and http interfaces to oldrc, oldtelnet + and oldhttp. + * rc, telnet and http are now implemented using the lua interface system. + * qt4 interface contains new iconview and listview mode for playlist + +Visualization: + * Support of .milk visualization files using projectM libraries + +Mac OS X Port: + * Vastly improved VLCKit framework + * A new dialog provider for libvlc-internal interaction without full interface + * Improved update detection and installation by using the Sparkle framework + by Andy Matuschak et al. + * New CoreText based text renderer replacing the former ATSUI renderer + * New Video output module (mostly targetting VLCKit) + * Optimised behavior when using the 2009 Apple Remote + +Windows port: + * Integration in Windows 7 taskbar + * Playback of .Midi files is supported through fluidsynth's module + +Maemo port: + * Multiple improvements for N900 compliance and efficiency + * Support for HW accelerated video decoding on N900 + * Improvements to the maemo/hildon interface + +Misc: + * new sqlite module + * --save-config command line option not supported anymore. + * Fixed and reenabled netsync module. + * Improved Solaris port + +Bindings: + * new C++ wrapper around libVLC: libVLCpp + * phonon-VLC backend is now usable + +Removed modules: + * csri codec: use the libass module instead. + * galaktos visualisation: use the new projectM module instead. + * showintf: Useless in Qt and on Mac OS X + * transrate: broken since too long + * Xlib x11, Xlib xvideo, Xlib glx: Use the new XCB modules instead. + * HAL: Use libudev instead. + * gtk_main, gtk_main2, gnome_main, gnome_main2 and pda interfaces + * WinCE, BeOS and qnx interfaces + * opie, qte and qte_main interfaces + * linear_resampler and trivial_resampler are removed: use the ugly one. + * XvMC accelerated modules: use VAAPI instead. + * MGA (Matroska) for Linux: use Linux Framebuffer (or X) instead. + * opengllayer: use macosx_video instead. + * cddax: use cdda instead. + * cmml and tarkin codecs are removed because they are dead codecs. + * realaudio codecs: use libavcodec + * access_file removed in favor of filesystem + * RTMP input and output: use avio module + + +Changes between 1.0.5 and 1.0.6: +-------------------------------- + +Access: + * Fix crash on FTP URI with no file path + +Decoders/Packetizers: + * Fix overflows in A/52, DTS, MPEG Audio and subtitles support + +Demuxers: + * Update LUA script for Youtube pages + * Fix crashes in AVI, ASF and Matroska files + * Fix crashes on malformatted ZIP archives + * Fix crashes and leaks in the FFmpeg/avformat plugin + * Fix crash on invalid XSPF playlist + +X11 port: + * Partial Xlib threading fixes + More complete fixes are available in VLC 1.1.0. Please update! + +Interfaces: + * Fix crash (use after free) in Qt4 bookmarks + * Fix a few crashes in Qt4 playlist + +Translations: + * Simplified Chinese, Estonian, French, Japanese, Korean, Spanish, Swedish + and Walloon translations updated + * Sinhala translation started + +Removed modules: + * RTMP input and output are removed due to security problems. Please update + to VLC 1.1.0 which provides an FFmpeg-based RTMP input if needed. + + +Changes between 1.0.4 and 1.0.5: +-------------------------------- + +Decoders: + * SubRip extra styles improvements + * Fix potential crashes in SSA and svg decoders + +Mac OS X Interface: + * Improved support for the 2009 Apple Remote + +Windows port: + * Use of gcc 4.4.2 to compile instead of gcc 4.2. This might slightly + increase performance and fix x264 issues + +Translations: + * Portuguese Brazilian, Lithuanian, Romanian, Ukrainian, Japanese, Bengali, + Walloon, Galician, Danish, Khmer, Polish, Slovenian, Vietnamese, Finnish + Russian, Slovak translation updates + * New Malayalam, Macedoninan, Nynorsk translations + + +Changes between 1.0.3 and 1.0.4: +-------------------------------- + +Audio outputs: + * Fix deadlocks in the audio output core + * Make PulseAudio the default output if available + +Video outputs: + * Fix fullscreen mode with KDE 4.3.3 and other window managers + * Fix incompatibility with cairo-dock and compositing + +Input: + * Fix DVB scanning regression from VLC 1.0.3 + * Support for XZ-compressed byte stream (LZMA algorithm) + +Playlist: + * Support for .m3u8 playlist files (UTF-8 M3U) + +Unix: + * Support for xcb-keysyms version 0.3.4 or higher + * Fix globalhotkeys on FreeBSD + +Qt4 interface: + * Fix opening V4L version 1 devices + * Fix default destination ports in the streaming wizard + +Translations: + * New Walloon translation + * Swedish, Ukrainian and French translation updates + + +Changes between 1.0.2 and 1.0.3: +-------------------------------- + +Video outputs: + * Fix video quality when resizing the video on Windows Vista and 7, due to + regressions in most popular drivers + * New deinterlacers modules based on yadif and yadif(x2) algorithms + +Decoders: + * Windows version supports now natively the WMA Professional codec, as it + didn't work in the packaged version of 1.0.2 + * Fix downmixing of particual 4.0 AC-3 audio tracks + +Encoders: + * x264 has profile-limitter, like: + #transcode{vcodec=h264,venc=x264{profile=baseline,level=12}..} + +Input: + * Update for appletrailers lua script + * Fixes on the RAR stream filter + * Fix for E-AC3 in ATSC/TS streams + * Various fixes for v4l and v4l2 + * Fix a crash in mjpeg demuxer + +Service discovery: + * New udev module for linux + +Qt4 interface: + * Fixes on the playlist and the stream output panels + +Translations: + * French, Galician, Korean, Polish, Russian, Romanian, Slovak and Ukrainian updates + + +Changes between 1.0.1 and 1.0.2: +-------------------------------- + +Decoders: + * Native support for WMA Professional, without the use of the Win32 dlls + * Fix issues in subtitles, especially SSA ones + * Various fixes on theora and ogg + +Demuxers: + * Various fixes for EPG support in MPEG-TS demuxer + * Fixes for potential stack overflow in .avi, .mp4 and .asf demuxers + +Access: + * Fixes for v4l2 devices + * Fixes for dvb-c channels-scanning + +Qt Interface: + * Fix some playlist sorting issues + +Mac OS X Interface: + * Fixed a crash when updating VLC + * Fixed a crash related to QTKit when opening video files (10.6 only) + * Added the ability to play 2nd media in sync to the primary item (input-slave) + * Added the "Quit after Playback" feature + +Mac OS X Port: + * The "Delete Preferences" script is now delivered as a Universal Binary + with native code for PowerPC, Intel and Intel 64bit + * Full 64bit runtime compatibility on both Mac OS X 10.5 and 10.6 + - no support for Goom and SDL + - limited text rendering support + - This port is still considered as EXPERIMENTAL despite its binary release. + +Encoders: + * MPEG2 transrate stream output removed + * x264 default-values closer to x264.exe defaults. + * x264 rc-behaviour fixes: + - if user defines qp-value, CQP-mode is used + - otherwise if user defines vb=0, CRF-mode is used + - otherwise ABR-mode is used + * x264 set vbv-bufsize/vbv-maxsize better if user hasn't defined these: + - ABR mode set vbv-max-bitrate=bitrate + - vbv-bufsize is bitrate * seconds between keyframes (keyint/fps) + + +Playlist: + * Lua scripts for Mpora and Vimeo playback + +Unix builds: + * Various fixes to enable 1.0 to build on Solaris and OpenBSD + +Translations: + * New Kazakh and Croatian translations + * Lithunanian translation is available on Windows + * Galician, Korean, Nepali, Vietnamese, Ukrainian, Portuguese Brazilian, + Arabic and French translation updates + + +Changes between 1.0.0 and 1.0.1: +-------------------------------- + +Demuxers: + * Fix wmv/asf issues that caused audio to drop + * Various fixes for ac3, mp3, dts and stability for wav format + * Fix seek in RTSP in conformity to RFC 2326 + * Fix Dailymotion access script + * Fix crashes in xspf files handler + * Fix seeking and timing issues in some flv files on Windows version + +Access: + * Add extra caching for files on network shares + * Prevent integer underflow in Real pseudo-RTSP module, discovered by tixxDZ, + DZCORE Labs, Algeria + +Decoders: + * Fix seeking in mpeg2 video files + * Improve SSA subtitles rendering + * Update most codecs for the Windows and Mac version + +Muxers: + * Fix sound recording of .flv files with mp3 audio + +Qt Interface: + * Possibility to change the opacity level of the Fullscreen controller + * Fix various crashes and VIDEO_TS folders opening + +Mac OS X Interface: + * Added options to disable support for Apple Remote and Media Keys + * Fixed options for Volume, Last.fm password and Subtitle Encoding + * Fixed redraw issues when autosizing the video window + * Preferences panel now includes help through tool-tips + * More reliable Information and Messages panels + * Fix various crashes + +Windows port: + * The ZVBI module is now available for Windows, for complete teletext support + +Translations updates for Brazillian, French, German, Korean, Norwegian Nynorsk, +Lithuanian + + +Changes between 0.9.10 and 1.0.0: +--------------------------------- + +Important notes: +---------------- + * Alsa and OSS audio capture has been removed from the v4l and v4l2 accesses. + See 'Access:' for more info. + * Support for Mac OS X 10.4.x was dropped due to its technical limitations + +Playback: + * Instantaneous pausing + * Frame-by-Frame playback + * Finer speed control + * On-the-fly recording for all medias + * Timeshift for most medias + * RTSP trickplay support + * Subtitles core improvements and fixes + +Decoders: + * New AES3 (SMPTE 302M) decoder + * New Dolby Digital Plus - E-AC-3 (A/52b) decoder + * New True HD/MLP decoder and parser + * New Blu-Ray Linear PCM decoder + * New QCELP (Qualcomm PureVoice) decoder + * Improved Real Video 3.0 & 4.0 decoder + * New WMA v1/2 fixed point integer decoder + * Closed Captions using the SCTE-20 standard are now correctly decoded + * Improvement of WavPack decoder to support all integer modes and float mode + * Corrections on 5.1 and 7.1 channel decoding and ordering + +Demuxers: + * Support for Dirac, MLP and RealVideo in Matroska files + * Major improvements in RealMedia files opening (.rm and .rmvb) + * Improvements of the TS demuxer for M2TS files from Blu-Ray and AVCHD + * Metadata for mod files are supported + * GSM codecs in Wav files are supported + * New raw audio demuxer supporting raw PCM streams + * New Dirac demuxer for raw Dirac streams + +Encoders: + * Dirac encoding using libdirac (supported in Ogg and in TS) + * Shine mp3 fixed-point encoder + +Access: + * RTSP authentication with Darwin Streaming Server + * On-the-fly gzip and bzip2 file decompression (except on Windows) + * Playback for video in uncompressed multi-RAR archives + * DVB-S and ATSC cards support on Windows + * New OSS and Alsa accesses. The v4l2 and v4l modules no longer support + OSS or Alsa audio input. Use --input-slave alsa:// or oss:// if needed. + * DVB scanning on linux + * EXPERIMENTAL Blu-Ray Disc and AVCHD Folders support + * On-the-fly zip file decompression and browsing (MRL of the form + zip://file.zip!/file.avi to specify the file - the development form of + zip://file.zip|file.avi is not supported anymore) + * Opening of any file descriptor using 'fd://' + * MTP device access on Unix + * CD-Text support on the cdda module (CD-Audio) + * :start-time and :stop-time can handle sub-second values + +Inputs: + * Mouse cursor support in x11 and win32 screen modules + * Screen module now features partial screen capture and mouse following on + Windows and Mac OS X. + +Playlist: + * Export the playlist in HTML + * Lua script for BBC radio playback + * Better metadata handling and reading + +Linux/Windows interface: + * Global Hotkeys on Windows and Linux + * Various fixes for skins2 interface + * Recently played items list + * Interface toolbar customizations + * Various Improvements on the Qt interface: + - More menus actions + - Finer speed slider + - Improvements on many dialogs + - New dialog for plugins listing + - Fixed-size mode for videos + - Better Teletext, trickplay and encrypted streams control + * Better integration in GTK environments + +Mac OS X Interface: + * Controllable by the Media Keys on modern Apple keyboards (brushed Aluminium) + * Reveal-in-Finder functionality for locally stored items. + * Easy addition of subtitles through the Video menu + * Additional usability improvements + +Stream output: + * Restored the old mpeg2 transrating module. + * Multiple bridge-in instances are now possible. + * bridge-in can be used to configure a placeholder stream. + * Remote Audio Output Protocol (AirTunes) module. + * Fixed mosaic memleak. Mosaics are now usable again. + +Maemo Port: + * New Maemo port with: + - an interface based on Hildon framework. + - scaler based on the swscale_nokia770 library. + +Windows CE Port: + EXPERIMENTAL work for the winCE port has been done. + +Mac OS X Port: + * EXPERIMENTAL 64bit support + * Speed improvements by using llvm-gcc + * New document icons by Dominic Spitaler + * Support for latest iSight models + +Audio output: + * Removed obsolete Esound and aRts plugins + * Surround support for PulseAudio + +Video output: + * Effects (cube, torus, etc.) removed from OpenGL video output + * Video is able to stay in original size and to zoom in fullscreen + (hotkey 'o') while keeping black borders + * Image video output has been rewritten into a video-filter named 'scene'. + The old image video output has been removed. + * Support for scaling and converting video chromas with FFMPEG imgresample was + withdrawn due to bugs. Please use the newer FFMPEG swscale instead. + +Miscellaneous: + * Invmem, a fake codec to display images from external applications + +New Localization: + * Khmer + * Mongolian + * Sorani + + +Changes between 0.9.9a and 0.9.10: +-------------------------------------- + +HTTP Interface: + * Fixed default ACL + +Mac OS X: + * Fixed crashes on multi-screen setups + * Corrected volume and subtitle encoding options in the Preferences + * Improved Information panel behavior, when playlist is not displayed + * Fixed QTCapture input support for the latest iSight models + * Added a menu-item to unlock the video window's aspect ratio + * Fixed redraw issues when autosizing the video window + * Updated libpng, libgpg-error, libgcrypt, fribidi + +Various fixes to the following modules: + * access: + - HTTP, SMB + - updated and additional access scripts (BBC radio, dailymotion, ...) + - Prevent integer underflow in Real pseudo-RTSP module, discovered by tixxDZ, + DZCORE Labs, Algeria + * stream out: + - RTP, RTSP VoD, Mosaic Bridge + * decoder: + - TSCC + + +Changes between 0.9.9 and 0.9.9a: +--------------------------------- + +Mac OS X: + * Updated multiple 3rd party libraries to keep in sync with the Win32 port + * Playback fixes for PowerPC-based Macs + + +Changes between 0.9.8a and 0.9.9: +--------------------------------- + +Decoders: + * Experimental new decoder for Real Video 3.0 & 4.0 + +Demuxers: + * Various fixes related to real demuxer + +Mac OS X Interface: + * Fixed circumstances, which could lead to an empty Information panel + - Note that VLC will show information on the currently _selected_ item + instead of the currently _playing_ item, if the playlist is visible in the + main controller window. + * Fixed multiple UTF8 issues in the Streaming / Exporting Wizard + +Mac OS X Port: + * Improved video playback performance on Intel-based Macs + +New Localizations: + * Indonesian + * Bengali + * Updates of other localizations + +Various bugfixes: + * Support for receiving RTP packets on odd port numbers. + * Lots of small bugfixes. + * Correct Fullscreen behaviour on Multi-Screen setups on Windows + * Telnet fixes on Windows + * Resampling fixes when transcoding + + +Changes between 0.9.6 and 0.9.8a: +--------------------------------- + +Security update: + * Fixed buffer overflow in Real demuxer (SA-0811, CVE-2008-5276) + +Bunch of small bugfixes. + + +Changes between 0.9.5 and 0.9.6: +-------------------------------- +New Localizations: + * Ukrainian + +Security updates: + * Fixed overflow in CUE support from VCD access (SA-0810, CVE-2008-5032) + * Fixed overflow in RealText subtitles support (SA-0810, CVE-2008-5036) + + +Changes between 0.9.4 and 0.9.5: +-------------------------------- +Security updates: + * Fixed buffer overflow in TiVo demuxer (SA-0809, CVE-2008-4686, CVE-2008-4654) + * Fixed libpng CVE-2008-3964 in Win32 and MacOS builds + +Features: + * Closed Caption EIA 608/708 parsing enabled for libmpeg2 + +Various bugfixes: + * Fixed various potential crashes and memleaks + * Fixed issues with reading from files (especially non-local) + +Windows port: + * Fix bug where interface was "eating" some media keys + * Fix some crashes in DirectShow access + +Qt Interface: + * Fix bug when the resetting of preferences didn't reset the dialog states + * Right-click menu to select playlist columns reenabled + * Various fixed in playlist + +Access: + * MMAP module is now deactivated by default + +Translations: + * Update of Brazillian, Swedish translation + + +Changes between 0.9.3 and 0.9.4: +------------------------------------ +Various bugfixes: + * Crashes fixed in ogg, vobsub, dvdread + * Fixes several memory leaks. + +Mac OS X port: + * Apple machines without Quartz Extreme are no longer supported (use 0.9.2 or earlier ) + * Fixed a crash with deletion of old preferences. + * Fixed targetname for downloaded updates + +Windows port: + * Stability fix for the video output. + + +Changes between 0.9.2 and 0.9.3: +-------------------------------- + +Various bugfixes: + * Fixed DTS channel order on 5.1 systems + * Fixed pausing behavior for subtitles and for Audio-CD + * Multiple subtitles and podcast fixes + * Various crashes fixed in PS, SSA, mkv, xspf, freetype + * Fixed update system bugs + * Other bug fixes (dvd language selection, subtitle colours, HTTP keep-alive...+) + +Mac OS X port: + * Fixed ffmpeg slowness on PowerPC-based Macs + * Fixed crash on startup when installed on old preferences + * Fixed bug in directory opening on Mac OS X + * Fixed font selection in the Simple Preferences + * Thicker border to the subtitle renderer + * Fixed the appearance of playlist items in the Streaming/Transcoding Wizard + * Fixed AC3 passthrough on Mac OS X + * Fixed behavior of the Volume Normalizer settings on Mac OS X + * Removed the deprecated QuickDraw video output module to avoid crashes on + modern Mac OS X versions + +Windows port: + * Fixed sensitivity of Fullscreen Controller + * Fixed error messages on startup when VLC wasn't correctly uninstalled + before installation + * Fix showing of controller when returning from fullscreen playback + * Multiple directory and path location fixes. + +Qt4 interface: + * Added Faster/Slower icons to the controller panel + * Fixed lost playlist columns when switching the playlist view + * Added needed options to Simple preferences (to avoid NVIDIA drivers issues) + * Fullscreen controller: added time label, remembering of last position + * Fixed drag'n drop behaviour on the playlist + * Multiple other fixes (Enter hotkey in preferences, Skins selection...) + + +Changes between 0.9.1 and 0.9.2: +-------------------------------- + + * Restored the old behavior of --sout-keep. It is now de-activated by default. + * Skins2 interface repaired on Windows. + * Multiple bugfixes. + + +Changes between 0.9.1 and 0.9.0: +-------------------------------- + + * Multiple bug fixes. + + +Changes between 0.8.6i and 0.9.0: +--------------------------------- + +Important notes: +---------------- + * This release will need Windows 2000 and Mac OS X 10.4 (Tiger), or more + recent to work correctly + * The HTTP interface is now only available on the local machine by default. + If you want to make it available from other machines, you will have to + edit the ".hosts" file. + - On UNIX/Linux, the file is in /usr/share/vlc/http/.hosts + If you're using the old http interface, it's located in + /usr/share/vlc/http/old/.hosts + - On Windows they are in C:\Program Files\VideoLAN\VLC\http\.hosts and + C:\Program Files\VideoLAN\VLC\http\old\.hosts + - On Mac OS X, you can find it in VLC.app/Contents/MacOS/share/http/.hosts + and respectively in VLC.app/Contents/MacOS/share/http/old/.hosts + * This version of VLC contains a new interface for Windows and Linux. + This interface has a fullscreen controller and simplified preferences. + This interface lacks the "Streaming Wizard" that used to be present in VLC + 0.8.6, but provides basic profiles. + * The behavior of --sout-keep was changed. It's now activated by default. + * The marq, mosaic and logo commands in the rc interface changed. They + now require a target name as their first argument. Example: + vlc --sub-filter "marq@test{marquee=Hello}" -I rc + You can then use commands like: @test marq-marquee Goodbye + If you didn't name the object using @test, its name will default to the + plugin name (hence 'marq') in this example. + These new commands are also available in the telnet interface. + * The "rtp" access output module has been removed. + Please use the RTP stream output instead, e.g.: + Old: '#std{access=rtp,mux=ts,dst=239.255.1.2:5004,sap}' + New: '#rtp{mux=ts,dst=239.255.1.2,port=5004,sap}' + * You now need to append --m3u-extvlcopt to your command line to enable + EXTVLCOPT options parsing in m3u playlists. Note that only a limited set + of options is available to m3u playlists (CVE-2007-6683). + * The old access:url syntax is no longer supported to resolve ambiguities + with some file names. Use access://url instead. + E.g.: vlc:quit -> vlc://quit ; + udp:@239.255.12.12 -> udp://@239.255.12.12 + * The ffmpeg module has been removed and replaced by the new avcodec, + avformat, swscale (or imgresample if you use a swscale-less ffmpeg build) + and postproc modules. + * The web plugins ActiveX (IE)/Firefox/Mozilla/Safari now recognize the + following states: IDLE/CLOSE=0, OPENING=1, BUFFERING=2, PLAYING=3, PAUSED=4, + STOPPING=5, FORWARD=6, BACKWARD=7, ENDED=8, ERROR=9. With FORWARD and + BACKWARD being reserved for future implementations and are thus not + functional atm. + * Croping and padding in transcode are now done using the croppadd video + filter. For example: + transcode{vcodec=mp2v,vfilter=croppadd{cropttop=20,cropbottom=30,paddleft=100}} + * Canvas setting in transcode is now done using the canvas video filter. + For example: + transcode{vcodec=mp2v,vfilter=canvas{width=640,height=480}} + * Glide video output module has been removed. + +Changes: +-------- + +Security updates: + * Updated libfreetype on Windows and Mac OS X (CVE-2008-1806, CVE-2008-1806, + CVE-2008-1807) + * TTA Parser improvements (CVE-2008-3732) + * MMS Access Module improvements (CVE-2008-3794 ) + +Playlist: + * Vastly improved playlist support: + * Media library creation to save all your playlist items + * "Live search" + * Shoutcast TV listings + * Audioscrobbler/Last.FM support + * Album art support + * User definable Lua playlist scripts. See share/lua/playlist/README.txt + (Default scripts open YouTube, DailyMotion, metacafe, Google Video and + lots of other URLs) + * User definable Lua album art fetcher scripts. See share/lua/meta/README.txt + +Inputs: + * Video for Linux 2 (V4L2) input support + * UDP-Lite transport for RTP/AVP + * DCCP transport for RTP/AVP + * Proxy support for MMSH stream + * JACK audio input support + * Input run time option (improved live stream recording) + * BDA devices access module for DVB-C/S/T capture cards on Microsoft Windows + * Re-written Screen access module for Mac OS X + using OpenGL instead of QuickDraw + * Screen module now supports partial screen capture and mouse following on X11. + * Experimental EyeTV access module + This requires the user to install a plugin to EyeTV.app + (available as a separate download). + * Simple RTP input (with MPEG A/V, G.711 and PCM support). + * RTMP input support + * QTKit-based Input module for Mac OS X allowing display and streaming of video + taken from all iSight-labelled video cameras (no audio support) + * HTTP access now supports gzip compressed data and Digest Access + Authentication. + * New options to reduce latency between arrival of raw data and display of + frames. (--auto-adjust-pts-delay and --use-stream-immediate) + +Demuxers: + * MP4 gpac and Apple chapter support + * Fixed playback of AIFF stereo files + * Fixed audio glitch on seek + * Improved FLAC demuxer (duration / current time / meta data) + * AAC tags support + * APEv1/2 tags support + * Improved ID3v2 tags support + * Improved Ogg/Vorbis tags support + * Raw video support + * Standard MIDI File (types 0 & 1) support + * TiVo Series 2 support + * CD+G karaoke Files support + * MXF files support + * OMA support + +Decoders: + * VP60/VP61/VP6F/VP62 support + * Flash Screen Video support + * CamStudio Screen Video support + * DosBox Capture support + * Karl Morton's Video support + * limited atrac3 support + * Fraps support + * Fluidsynth MIDI software synthesis (with external sound fonts) + * New codec FOURCCs to support more specific files: + Avid, FCP, Sony, Samsung, ... + * H.264 PAFF support + * DNxHD / VC-3 support + * NellyMoser ASAO support + * APE (Monkey audio) support + * RealVideo support (with the RealVideo run-time) + * Dirac video support using libschroedinger + +Subtitles: + * Closed Caption Decoder (DVD, ReplayTV, TiVo, DVB/ATSC) + * VBI & EBU (Teletext) support (*nix, Mac OS) + * Ogg/Kate subtitles support + * AQTitle subtitles support + * MKV USF subtitles support + * HTML-based subtitles support + * MPSub subtitles support + * JacoSub subtitles basic support + * MPL2 subtitles support + * Rewrite of ASS/SSA scripts and subtitles support + * PowerDivx (.psb) Subtitles support + * Realtext subtitle support + * DKS subtitle support + * SubViewer 1.0 (SubRip09) subtitles support + * Correct Right-to-left languages in subtitles support + +Encoders: + * Flash Screen Video support + * Improved H.264 encoding speed + +Video outputs and filters: + * New CoreAnimation-based output module (VLCKit framework on OS X only) + * Adjust, Invert and Distort (now split into Wave, Ripple, Gradient and + Psychedelic) video filters can now be streamed + * New puzzle video output filter + * Re-written motion detection video filter + * New extract video filter (extract Red, Green and Blue components from a + video) + * New sharpen video filter (increase the contrast of adjacent pixels) + * New erase video filter (removes logos from a video) + * Enhanced subtitles' renderer to support bold, italic and some HTML tags + (Google Summer of Code Student project) + * Support for RGBA and I420 blending. + The latter improves Mosaic CPU usage *a lot*. + * New transparency mask video filter (for use with the mosaic_bridge module). + * New bluescreen video filter (for use with the mosaic_bridge module). + This was previously part of the mosaic module. + * Fixed random characters problem in RSS filter. + * Add rotate-deciangle for more precision on rotate filter + * Support for Intel SSE2 instruction set in chroma converters + * Improved use of Intel MMX instruction set in chroma converters + * New croppadd and canvas video filters. + +Audio outputs and filters: + * Replay gain support + * Audio playback when going slower/faster (with pitch correction via + new scaletempo audio filter) + * New spatializer audio filter + * Correct DTS output via S/PDIF + +Stream output: + * RTSP for TS-multiplexed broadcast streams + * New RTP payload formats: + * Speex voice audio codec + * ITU T.140 (for text, subtitles) output + * G.711 (both A-law and µ-law) output + * UDP-Lite transport for RTP + * DCCP transport for RTP + * Lots of fixes for RTSP broadcasting + * RTMP output + +Interfaces: + * All + * New Simple Preferences dialogs showing the most important settings in an + end-user suitable way. + * Improved user interaction + * Improved mouse gestures + * Vastly improved Update checker + * Full support for meta data editing (ID3v2, Ogg/Vorbis, AAC, APEv1/2) + * Windows/Linux + * Brand new interface for Linux and Windows, based on the Qt toolkit + * Fullscreen controller (transparency on Linux+Composite) + * Mac OS X + * Improved video output features + * Online access to VideoLAN's Help Wiki within VLC + * New setting to disable the "Recent Items" service + * When playing Radio (live) streams, the current track is shown correctly + * Correct appearance on Macs using Aqua's graphite theme + * Simplified Extended Controls panel + * Ncurses: + * Correctly displays wide characters when using an UTF-8 locale, + if libncursesw is available. + * Some nice colors if the terminal supports it (most do) + * Experimental Lua interface modules. See vlc -I lua and + share/lua/intf/README.txt for more info. + * Unix + * Option to allow only one running instance, using D-Bus interface. + * D-Bus Interface implementing the MPRIS + (Media Player Remote Interfacing specification), a common dbus control + interface for media players that intends to become an xdg standard when + finished: http://wiki.xmms2.xmms.se/index.php/Media_Player_Interfaces . + * Motion module using disk accelerometers to keep video horizontal + * Plugin to set Telepathy presence message using MissionControl + * Fixed VLM schedule time on Linux + +Linux Port: + * VLC now complies with the XDG Base Directory Specification version 0.6 + http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html + (which means that VLC doesn't use the $HOME/.vlc directory anymore) + +Mac OS X Port: + * Mac OS X Framework "VLCKit" that can be used to embed VLC in third party + applications (Google Summer of Code Student project, Mac OS X 10.5 only) + * New text renderer based on Quartz replacing the existing Freetype solution + * Complete compatibility with Mac OS X 10.5 Leopard + * It is now required to compile a fully featured build + * The support of Mac OS X 10.3.9 and QuickTime 6.x was discontinued. + +LibVLC: + * Event management and various improvements in libvlc + (Part of a Google Summer of Code Student project) + +New Localizations: + * Finnish + * Persian + * Polish + * Punjabi + * Bulgarian + +Developers: + * LibVLC now supports externally built plugins properly. + A "vlc-plugin" pkg-config package is provided. + * Java bindings are now built from a separate source. + + +Changes between 0.8.6h and 0.8.6i: +---------------------------------- + +Security updates: + * Fixed integer overflow in WAV demuxer (CVE-2008-2430) + +Various bugfixes: + * Fixed option to use shared memory within the GLX video output module + * Improved galaktos-based audio visualizations on FreeBSD + * Miscellaneous bugfixes in multiple modules and in libvlc + (transcode stream output, OSD menu video filter, VCD input, + SAP services discovery, http control interface) + * Updated Polish translation + + +Changes between 0.8.6g and 0.8.6h: +---------------------------------- + +Security updates: + * Updated GnuTLS and libgcrypt on Windows and Mac OS X (CVE-2008-1948, + CVE-2008-1949, CVE-2008-1950) + * Updated libxml2 on Windows and Mac OS X (CVE-2007-6284) + +Goodies: + * Updated libebml and libmatroska on Mac OS X. Reliability improvements. + * Miscellaneous bugfixes in multiple modules and in libvlc + (ftp access, record access filter, video filters, RC interface, + playlist demuxer, IP networking, MPJPEG muxer, stream outputs) + * Improved support for MPEG2 content created by Final Cut Pro + * More reliable audio reception for MPEG TS streams + * Fixed a regression in 0.8.6g where usage of the snapshot feature could lead + to an unexpected application termination + * New Serbian translation + * Updated Romanian translation + + +Changes between 0.8.6f and 0.8.6g: +---------------------------------- + +Security updates: + * Removed VLC variable settings from Mozilla and ActiveX + (CVE-2007-6683, VideoLAN-SA-0804) + * Removed loading plugins from the current directory + (CVE-2008-2147, VideoLAN-SA-0805) + * Updated libpng on Windows and Mac OS X (CVE-2008-1382) + * Fixed libid3tag denial of service (CVE-2008-2109) + * Fixed libvorbis vulnerabilities (CVE-2008-1419, CVE-2008-1420, CVE-2008-1423) + * Fixed speex insufficient boundary check (CVE-2008-1686, oCERT-2008-004) + +Various bugfixes: + * Fixed various memory leaks, improving stability when running as a server + * Fixed compilation with recent versions of FFmpeg + * Correctly parses SAP announcements from MPEG-TS + * Fixed AAC resampling + * The Fullscreen Controller appears correctly on Mac OS X, + if the 'Always-on-top' video option was selected. + + +Changes between 0.8.6e and 0.8.6f: +---------------------------------- + +Security updates: + * Really fixed subtitle buffer overflow (CVE-2007-6681, CVE-2008-1881) + * Fixed Real RTSP code execution problem (CVE-2008-0073) + * Fixed MP4 integer overflows (CVE-2008-1489, CVE-2008-1768) + * Fixed cinepak vulnerabilities (CVE-2008-1769) + - More information can be found in VideoLAN-SA-0801 and VideoLAN-SA-0803. + +Various bugfixes: + * The Mozilla plugin registers a usable range of MIME-types on Mac OS X + * Improved VLC's video output behavior on multi-screen setups running Mac OS X + * Fixed crashes in H264 packetizer + * Close MMS access on network timeout + * Fix some problems with AAC decoder & packetizer + + +Changes between 0.8.6d and 0.8.6e: +---------------------------------- + +Various bugfixes: + * Resume playback for viewing content over FTP + * Fixed XShm detection with remote X11 + +Security updates: + * Subtitle demuxers overflow (CVE-2007-6681) + * HTTP listener format string injection (CVE-2007-6682) + * Fixed buffer overflow in the SDL_image library (CVE-2006-4484) + * Real RTSP overflows (CVE-2008-0225, CVE-2008-0295, CVE-2008-0296, + VideoLAN-SA-0801) + * Arbitrary memory overwrite in the MP4 demuxer (CORE-2008-0130, + VideoLAN-SA-0802) + +Audio filter: + * Fixed DTS to S/PDIF converter + +Audio output: + * Fixed 5.1 audio on ALSA + +Access: + * Fixed some RTSP hanging and user/password passing through RTSP URLs + +Stream output: + * Fixed waiting for SPS/PPS problem in H.264 packetizer + +Encoders: + * Improved compatibility for creating H.264 video files playable on iPhones + * Improved detection of optimal amount of threads for multi-threaded H.264 + encoding on multi-cpu systems + - Note that this is used when transcode threads is set to 0 (default) + - Not supported on Windows (multiple threads require manual configuration) + +Mac OS X Interface & Port: + * Restored compatibility with Mac OS X 10.3.9 + * Corrected behavior of the Preferences panel + * VLC no longer crashes on quit while playing + +Localization: + * Updated Romanian and Polish translations + + +Changes between 0.8.6c and 0.8.6d: +---------------------------------- + +Various bugfixes: + * Mozilla plugin: supports a reasonable amount of MIME types on Windows + * Linux: Fixed S/PDIF passthrough with ALSA + * Automatic recovery on unexpected stream discontinuity (clock gap) occurrences + in input + * Use field order (top/bottom) for correct bob/linear deinterlacing + * Fix invalid free in bookmarks loading code + +Windows and Mac OS Binaries + * FLAC Security Update (CVE-2007-4619) to prevent multiple integer overflows + +Active X plugin: + * Security update (VideoLAN-SA-0703, CVE-2007-6262) + +Mac OS X Interface & Port: + * Apple Remote support on Mac OS X 10.5 Leopard with enhanced functionality + * Improved Video Output compatibility for Mac OS X 10.5 Leopard + * Improved behavior of the Fullscreen Controller and mode changes between + Fullscreen and Windowed Video Output + * Softened the white flash artifacts that may appear during the transition of + two different movies + * Support for current Ogg file formats + NOTE: This release requires Mac OS X 10.4 or higher. + Mac OS X 10.3.9 is not supported anymore. + +Encoders: + * Improved H.264 encoding speed on Mac OS X + +Other changes: + * The automatic updating facility was removed + * You now need to append --m3u-extvlcopt to your command line to enable + EXTVLCOPT options parsing in m3u playlists. + * RTSP server remote denial of service fixed (CVE-2007-6684). + + +Changes between 0.8.6b and 0.8.6c: +---------------------------------- + +Various bugfixes, notably: + * Windows Vista compatibility + * Cropping in Direct3D + * Fullscreen change crash on Mac OS X + * RSS filter string overflow + * Few memory leaks + * MKV demuxer crash (related to seeking) + +CDDA / Vorbis / Theora / SAP plugins: + * Security updates (VideoLAN-SA-0702, CVE-2007-3316, US-CERT VU#200928) + +Demuxers: + * Fixed a problem with detecting embedded subtitles (GAB2 format) in AVI + * Prevent WAV file integer overflow (CVE-2007-3467 & CVE-2007-3468) + +Decoders: + * Updated FLAC API compatibility + +Input: + * Support for new v4l2 encoder API + +Localisation: + * New localisation: Arabic, Persian + + +Changes between 0.8.6a and 0.8.6b: +---------------------------------- + +Various bugfixes, notably: + * Out-of-bound read in demuxers + * Demuxers crashes (incl. CVE-2007-0256) + * Mac OS X Interface crashes + * VP31 decoding on Windows platforms + * Direct3D Video Output modifications for Vista compatibility + * Correct behaviour for feeding streams to Icecast or Shoutcast servers + +Decoders: + * Enhanced Flash Video support incl. VP61 and VP60 + * Teletext subtitles (telx) support + +Webbrowser plugins: + * Rectified behaviour and improved usability + +Mac OS X Interface & Port: + * Diverse usability improvements + * New wizard option to embed subtitles + * Screensaver/automatic sleep mode is enabled when a video is paused + * Improved Delete-Preferences-Script + + +Changes between 0.8.6 and 0.8.6a: +--------------------------------- + +CDDA / VCDX plugins: + * Security updates (VideoLAN-SA-0701, CVE-2007-0017) + +Mac OS X Interface: + * Fullscreen controller improvements + + +Changes between 0.8.5 and 0.8.6: +-------------------------------- + +Playlist: + * Shoutcast TV listings support + +Input: + * Support for RTSP authentication + * Support for adding subtitles on the fly + * Fixed MPEG-PS duration calculation + * ATSC support for DVB input + * Partial reading support for DVR-ms recordings + * Partial reading support for MXF and GXF fileformat + * Improved support for Flash Video files + +Decoders: + * Native WMV9/VC-1 support + * WMA Speech support (through binary codecs) + * VP5/VP6 - Flash Video support (not VP61) + * The True Audio Lossless codec support + * Matroska WavPack support + * Improved H.264 support (interlaced, speed improvements etc but no PAFF) + * Fixed a problem with MPEG2 field pictures + * Fixed swapped colors on DVB subtitles + +Video output: + * Additional OpenGL effects (cylinder, torus, sphere, ...) + * Experimental Direct3D 9 video output (win32). Best served on Vista :) + * Improved libcaca support + +Interfaces: + * All + * New hotkeys for crop and zoom + * Support for snapshots from the HTTP interface + * Windows + * Systray support in skins + * OS X + * Support for Apple Remote control + * Fullscreen controller panel (artwork by Simon Damkjær Andersen) + * New playmode buttons (artwork by Simon Damkjær Andersen) + * right/ctrl-click menu in video outputs + * Main Menu uses autohide when playing videos in fullscreen mode + * Linux + * Notifications using notification-daemon + +Windows port: + * Support for Unicode filenames (Windows NT and above) + Windows 9x/ME users: + - Please note that these versions of Windows are not officially supported + - Unicode support for Windows 9x/ME applications is available through the + Microsoft Layer for Unicode available from the following location: + http://www.microsoft.com.nsatc.net/globaldev/handson/dev/mslu_announce.mspx + Download the MSLU package (unicows) and extract the content into the folder + C:\Windows\System + * Fixed IPv6 support on the client side + * Fixed disable screensaver (Direct3D and DirectX video output) + +Localization: + * Add Czech + * Add Slovak + * Add Malay + * Add Slovenian + +Developers: + * Updates to the libvlc API + * Fixes for the mozilla and activeX plugins + + +Changes between 0.8.4a and 0.8.5 +-------------------------------- + +Core support: + * Statistics collection (bitrates, packets, connections, ...) + * Support for downloading updates + * Updated strings + +Input: + * Initial support for RTSP-over-HTTP (to allow NAT traversal) + * Linux DV (Digital Video - Firewire) input + * Improvements to the Audio CD input + - Separate playlist entries for the tracks + - Support for CDDB + * Support for more DVB (satellite) encryption modules + * Improved subtitles encoding support + * Improved support for playing MP4 files from the Web + +Decoders: + * Cook (Real audio) support + +Playlist / Services discovery: + * XSPF playlist support + * Podcast support + * Updated Shoutcast to use new listing + +Audio output: + * New JACK audio output + +Video output: + * New video filters: + - magnify: allows you to zoom on part of the image + - gradient and edge detection: "cartoon-like" effect + - bluescreen: overlay parts of a video transparently on another one + * Logo video filter: can now loop through multiple images + * RSS video filter: display feed images. Support for Atom feeds. + * Improvements to the subtitles rendering + +Stream output: + * Initial support for throttling users on VOD streams + +Interfaces: + * System to inform the user and request information + - HTTP authentication + - Fatal errors + - ... + * wxWidgets + - VLM (VideoLAN Media Manager) control panel + - Improved media information panel (shows statistics, metadata, ...) + - Drag & Drop support in the playlist + * Skins2 + - New default skin + - Support for Winamp 2 skins + - Improved playlist handling + - Support for popup menus, animated bitmaps, equalizer, ... + * OS X + - Embedded Video output + - new Go-To-Specific-Time feature + - Video cropping and aspect ratio changing while playing + - Improved media information panel (shows statistics, metadata, ...) + - support for processing multiple items with the wizard in a single run + - option to save selections in the wizard for a session (default enabled) + * HTTP + - New default interface pages for VLC and VLM (including a mosaic wizard) + - A bunch of new RPN functions + +Windows Port: + * MSN messenger "Now playing" support + +OS X Port: + * Mac-Intel compatibility + * Enhanced support of various audio output devices + * Growl "Now playing" support + +*Nix port: + * Ability to log to syslog + * Root wrapper to avoid running VLC as root + +Developers: + * New libvlc API (not finished yet) + * Java bindings + * A bit more automatic testing + + +Changes between 0.8.4 and 0.8.4a: +--------------------------------- + +Audio output: + * Fix a52 over spdif in alsa + * SPDIF output available again in the Mac OS X Audio menu. + +Decoder: + * Add support for new BMP and Cook (RealAudio G2) decoders in ffmpeg + * Add support for some non-standard FOURCCs used for H.264/H.263 + +Demux: + * Fix bug with some HE-AAC audio tracks + +Services Discovery: + * HAL fixes, should now work with new API + * SAP, fix 20 second freeze on windows + * UPnP fixes + * Avahi 0.6 support + +Interfaces: + * Mac OS X + - fixed encoding of H.264/H.263 content when using the wizard + + +Changes between 0.8.2 and 0.8.4: +-------------------------------- + +Core support: + * Internal strings handling is now UTF-8 based + * New OSD system + +Video output: + * Fixed problems with OpenGL output + * New --monitor-par (pixel aspect ratio) option + * Fixed display problems with HDTV-1080 format + +Input: + * Improved DVB support for satellite bands other than Ku-band + * IPv6 and Extended passive mode support for FTP + * IPv6 Source Specific Multicast support + * GnomeVFS input module + * Support for RTP packet reordering + * Fixed syntax for FTP URLs + +Decoders: + * Support for libSDL_image to import different image types + * Musepack decoder using libmpdec + * QDM2 audio support (needs ffmpeg from 19th Oct 2005 or later) + +Services discovery: + * UPnP service discovery (Linux only at the moment) + * Bonjour service discovery using avahi (Linux only) + +Video filters: + * RSS feed overlay + +Audio filters: +* Fixes, enhancements and new options related to the Headphone Channel + Mixer and Dolby Surround + +Stream output: + * New shout output module to forward streams to icecast servers + * Fixed several SAP and SDP announcement bugs + * Fixed MTU handling to avoid IP fragments + +Interfaces: +- new cone icon by Richard ¯iestad (Eurodata, retron.info) + * Mac OS X + - New streaming and transcoding wizard + - New extended controls panel + - New bookmarks window + - Fixed playlist sorting + - Fixed drag-and-drop inside the playlist + * wxWidgets + - Rename wxWindows interface in wxWidgets. + - All the --wxwin-* options are now --wx-* + - Support for RTP streaming in Stream Ouput dialog + - Now require wx2.6 with Unicode support + * Skins2 + - Tree playlist + * HTTP + - New RPN functions to control VLC features (see play-howto) + - Facilities to correctly handle non-ASCII characters and spaces in + the names of files + - Include macro to include other files + - CGI 1.0 support + +ActiveX plugin: +* Should now work outside IE as well + +Mac OS X port: +* New script to delete the preferences automatically + +Windows port: +* Fixed bandwidth problems of HTTP streaming +* Fixed audio problems with DirectX audio output + +Translations: + The following languages were added: + * Galician + * Korean + * Romanian + * Simplified Chinese + The following languages were re-added: + * Swedish + + +Changes between 0.8.1 and 0.8.2: +-------------------------------- + +Core support: + * Rewrite of the playlist + - Tree structure + - Input preparsing (for meta-data) + - Grouping (by artist, ...) support + * Preferences improvements: + - New organization, designed to improve usability + - New configuration types (list of modules, ...) + * XML parsers + * Core image manipulation support + * Client-side SSL/TLS support + * SSL Client certificates checking support (allows for secure VoD) + * Renamed --spu-channel to --sub-track + * Renamed --spumargin to --sub-margin + * Renamed --audio-channel to --audio-track + * Renamed --filter to --vout-filter + * filters, extra interfaces, visualizations and service discovery modules are + now separated by ':' instead of ',' + * Access filter architecture + * Track selection based on preferred language (--sub-language and --audio-language) + * Zsh autocompletion for VLC's arguments + * Many bugfixes... + +Input/Demuxers: + * Support for SOCKS proxy + * Support for Shoutcast Meta-data + * Support for (HE-)AAC raw-audio streams + * Support for images on a HTTP server that get refreshed on the server + * Better support for Kasenna streams + * RTSP UDP->TCP rollover support + * Massive Matroska improvements + * Support for XA and VOC audio files + * TiVo demuxer + * Samba (Windows shares) access module + * Improved CDDAX module (uses several playlist items) + * Fixes to Linux DVB support + * Fix the "negative subtitles delay" bug + * Support for FTP over IPv6 + +Decoders / Encoders: + * Dirac decoder and encoder + * PNG decoder/encoder + * Improvements to DVB subtitles encoder + * Support for Apple Lossless Audio Codec + +Access filters: + * New Record and Timeshift filters + +Services discovery: + * New type of modules, that add items to the playlist + * Brand new SAP module + * To enable SAP, you now need to use "-S sap" or add SAP in + the "Manage->Services Discovery" menu + ( IPv6 SAP is now enabled by default ) + * Non-standard support for HTTP streams SAP announces removed + * HAL (Hardware Abstraction Layer) discovery + * DAAP (iTunes shares) support + * Shoutcast + +Audio output: + * Support for 20/24 bits LPCM + +Video output: + * Video snapshot support (png or jpg) + * Image file video output (png) + * Motion detection filter (can trigger playlist actions) + * Improvements to wall video filter + * Support for font color and opacity + +Stream output: + * Muxers + - ASF improvements + * VLM / VoD + - Ability to load a configuration file on startup + - Seeking support in VoD streams + * Mosaic (picture-in-picture system) + +Interfaces: + * wxWidgets + - Redesigned playlist : add playlist, add directory, ... + - Improved preferences + - Improvements to the wizard + - DVD, VCD and Audio CD navigation buttons + * MacOS X + - Redesigned playlist + - Improved preferences + * Skins + - Support for multiple actions + - Fixes + * HTTP + - Support for the new playlist system + * Lirc + - Now uses new config settings. See doc/lirc/example.lirc + +Windows port: + * Screensaver disabling fix + * DirectShow tuner configuration + * Support for no-decoration windows + +MacOS X port: + * Many Mac OS X 10.4 Tiger related fixes + * The OpenGL video output is back + * A new audio module that should work more reliable for analog audio output in various configurations. + - Supports multichannel discrete analog output + - Digital audio output requires you to change a preference setting because it + is not yet available in the new module + - Please read the README.MacOSX.rtf file for more information. + +BeOS port: + * Support for single-buffered overlay + +Pocket PC port: + * Many fixes + * New interface + * New video output + +Mozilla Plugin: + * Javascript fixes + * Mozilla plugin for MacOS X is back (not yet distributed) + +IE Plugin: + * Brand new Internet Explorer ActiveX plugin + +Translations: + The following languages were added: + * Catalan + * Danish + * Turkish + + +Changes between 0.8.0 and 0.8.1: +-------------------------------- + +Core support: + * Include TLS/SSL API (on plattforms where libgnutls is available) + * SSL support in the HTTP daemon (HTTP stream output and HTTP interface) + +Windows port: + * Fixed win32 multichannel audio output support (which was broken in 0.8.0) + * Fixed DV and MPEG (WinTV PVR 250/350) support in the dshow input + * Fixed spurious taskbar item after switching to fullscreen + +WinCE port: + * A few more updates (we still miss an interface and a fast video output). + +Audio Output: + * Portaudio audio output plugin improvements + +Video Output: + * Proper subpictures scaling using the aspect-ratio info when available + +Demuxers: + * Fixed crash with ODML avi files + * Fixed autodetection of VCD/SVCD bin files + * Supports Kasenna VoD (MPEG2 only) and simulcast streaming + +Stream Output: + * Encoders: + * Fixed aspect ratio and interlaced support in ffmpeg encoder module + * Stream output: + * Support of playlist group announcement + + +Changes between 0.7.2 and 0.8.0: +-------------------------------- + +Core support: + * Major work on libvlc. Changed/renamed/added functions + * Complete switch to the new input core (better seeking, multi-input, ...) + * New plugins cache to speed up launch time + * New --play-and-stop feature which stops the playlist after each played item + * Daemon mode (to run vlc in the background) + * Major improvements to the subtitle/OSD subsystem + +Input: + * New screen capture input plugin for X11, Win32, BeOS and Mac OS X + (Stream your desktop) + * Improved DVD support: + - uses libdvdnav for playing DVDs with menus support + - uses libdvdread for simple playback with menus (eg. for streaming) + * Experimental multi-input support ( use --input-slave to play with it ) + * Automatic MTU discovery for UDP streams + * More powerful MRL syntax for DVD/VCD/CDDA access + (selection of titles/chapters). + +Demuxers: + * Support for iTunes Music Store previews + * Support for MJPEG webcams (i.e. AXIS cams) + * Added initial mp4 and mpeg-ts text track support + * Windows Media Server RTSP support + * Support for MPEG TS streams with error correction (204/192 bytes TS packets) + * Support for DTS audio in MPEG TS (ETSI TS 102 154 Annex G) + * Skins2 .vlt file loader (only when skins2 is the current interface) + * Improved Ogg demuxer + * Support for MPEG PS streams with MPEG 4 video. + * Support for so called AACPlus webstreams + +Codecs: + * G.726 audio support + * 14496-17 MPEG TS text support + * MPEG-4 text support + * Vastly improved DVB subtitles decoder (ETS 300 743) + * Enabled color in DVB subtitles rendering + * VobSub supported both externally and in Matroska + +Stream Output: + Encoders: + * Re-use audio/video/spu decoders in transcoder module. From now on, + everything that is playable by VLC should be transcodable as well + * Subtitles overlaying in transcoder + * Subpictures overlaying in transcoder (see video output) + * Frame rate selection in the transcoder + * DVB subtitles encoder + * MPEG 1 layer 2 audio encoder using libtoolame + * Improved vorbis/theora encoding + Muxers: + * Text track muxing for mp4 + * Multipart mjpeg muxing. Your video is directly viewable in a Mozilla Browser + * 14496-17 text track muxing for MPEG TS + * Support for DTS audio in MPEG TS (ETSI TS 102 154 Annex G) + * Teletext (0x56 descriptor) streaming support in MPEG TS. + * New WAV muxer (supports multi-channel audio) + * Improved ASF muxer + Misc: + * H.263 RTP streaming support + * SDP generation outputs more compliant SDPs and can create SDP files now + * Improved RTSP and VoD server (experimental) + +Audio Output: + * New audio equalizer filter + * Very trivial volume normalizer + * True channel downmixing when playing 5:1 material on Stereo + * More gradual resampling which should improve the pitch changing effect + * New audio output plugin using portaudio v19 + +Video Output: + * Roku HD1000 Video output + * Experimental generic OpenGL video output (X11, Win32, MacOS X) + with support for effects. + * Improved filter and subpictures support : + - New filters can be streamed. + - "Subpicture filters" to overlay subpictures on video + - Centralized scaling and blending + * New filters : + - "time", to display current time + - "marq", to display a marquee + +Interfaces: + * OSD sliders for volume and postition information + * OSD icons for Play and Pause + * New Streaming Wizard for Windows and Linux default interfaces (wxWindows) + * A few skins2 improvements + * Added search, volume, loop and random functions to the ncurses interface + * Added a filesystem browser to the ncurses interface + * The remote control interface can now listen for commands on sockets + * Improved CORBA control module + +Mac OS X port: + * Fixed the "cannot set buffersize:[nope]" coreaudio problem + * Major speed improvements to the Quartz video output + * The Mac OS X interface is no longer required to display video + +Linux port: + * New galaktos visualization plugin (MilkDrop-compatible) + * Experimental SVG rendering module + * Support for DVB CAM modules. + +Windows port: + * DirectX Media Object decoder (allows playing some media types, like WMV3) + * DirectX Media Object audio and video encoder + * Fixed long standing win32 thread handles leak + * Fixed problem with CPU usage with subtitles rendering + * Wallpaper mode for the DirectX video output (only in overlay mode) + +WinCE port: + * Massive update (we still miss an interface and a fast video output). + +Mozilla plugin: + * Added a lot of Javascript accessible funtionality + * Volume, position, length, seek etc etc etc. + +Misc: + * Server/client network synchronization module + * VBrick streams fully supported + * Cisco IP/TV streams supported + * VLM enhancements + + +Changes between 0.7.1 and 0.7.2: +-------------------------------- + +Core support: + * Bookmarks feature for easier seeking/access inside medias. + * Support for video output embedded in interfaces. + * Improved HTTP daemon. + * Saved playlists now remember VLC-specific options. + +Codecs: + * New Continuous Media Markup Language (CMML) codec. + (http://www.annodex.net/overview.html) + * New H.261 video decoder using openmash. + * H264 encoder, demuxer and packetizer. + * Packetizer interfaces between demux and codec when needed + (allows using ffmpeg plugin to decode MPEG streams and better aac decoding). + * Support for Theora alpha3 (both decoding and encoding). + +Input: + * --start-time and --stop-time to start and stop playing a + file at the specified amount of seconds. Only works with a few + fileformats (avi, mov, mkv, mp4 ) + * Improved directory access module. + * New "file-cat" option to play truncated movies. + * Better handling of meta info (title, author, description, etc...). + * New options to pass meta info to the input. + * It is now possible to stream programs from a DVB-S/C/T stream + (satellite, cable, or digital terestrial television) + +Demux: + * Annodex (http://www.annodex.net) support. + * mmsh streaming fixes. + * Fixed infinite loop in the AVI demux on broken/incomplete files. + +Subtitles: + * Subviewer and subviewer v2 subtitles support. + * Ability to choose autodetected subtitles path. + * Subtitles delay can be changed in real time with hotkeys. + +Stream output: + * Improved session announcement system. + * Minimize threads usage by default. + * Added faster than realtime stream output (limited by CPU) for file output. + * Improved MOV/MP4 muxer. + * Improved MPEG TS muxer. + * Improved transrater. + * Meta info options used by the muxers. + * New configuration system. + * Better audio channels downmixing when transcoding. + +VideoLAN manager: + * New videolan (media) manager (vlm): a little manager designed to launch + and manage multiple streams from within one instance of VLC. + * Supports live streams and VoD. + * Supports scheduling. + * Telnet interface for vlm. + * HTTP interface for vlm. + +Interfaces: + * Skins II (Windows and Linux only) + - Ability to embed video output. + - Support for bitmap fonts. + - Lots of improvements. + * wxWindows (default Windows and Linux interface) + - New design and set of icons. + - Ability to embed video output. + - Support for hotkeys. + - Support for bookmarks. + * Mac OS X + - Support for 'groups' and playlist item properties. + - Better hotkeys handling. + +Mac OS X port: + * OpenGL video output is now the default when available. + * Added FAAC encoder (mp4a). + * Audio output fix to work with multiple streams on a HAL device. + * Possible fix for conflict with CodeTek VirtualDesktop (untested). + +Win32 port: + * DirectShow input plugin should work with more devices. + * Disable monitor power down when watching movies. + * Improved Windows installer. + +Linux port: + * PowerPC fixes. + +Misc: + * Improvements to the Goom visualisation plugin. + * Roku HD1000 audio output. + + +Changes between 0.7.1 and 0.7.1a: +--------------------------------- + +Mac OS X: + * Fixed the infamous 'mp3 takes twice the CPU it should take' bug + * Playing MOD files is working now. + + +Changes between 0.7.0 and 0.7.1: +-------------------------------- + +Core support: + * Fixed a nasty bug that causes preferences not to be saved some times. + * IGMPv3 support for VLC under Windows XP and Linux. + +Codecs: + * Brand new DTS Coherent Acoustics audio decoder based on libdts + (http://www.videolan.org/dtsdec.html) + * Fixed DTS S/PDIF output + * SVCD (Philips OGT) and CVD subtitles + +Playlist: + * Internal improvments + * Improved import/export + +Input: + * Experimental support for Nullsoft streaming video(.nsv) and real media(.rm) + container formars. + * New demux module that uses libavformat from ffmpeg. Adds support for many + small and strange formats. + * New PVA demux. + * New MOD audio demux. + * Support for DTS and A52/AC3 wav files. + * Support for DTS and A52/AC3 audio CD. + * New and experimental DVD input plugin with menus support (using libdvdnav). + * Added back DV audio support in raw DV demuxer. + +Stream output: + * MP4/MOV muxer improvements (fast-start, aac in mov, etc...). + * Fixed a nasty bug in the mpeg video packetizer. + * Improved transcoding (multithreading, more tuning, etc...). + +Service discovery: + * Fixed sdp in SAP. + +Mac OS X port: + * New opengl video output plugin. + +Win32 port: + * A few improvements to the DirectShow input plugin. + * Fixed ipv6 name resolution. + + +Changes between 0.6.2 and 0.7.0: +-------------------------------- + +Core support: + * Brand new decoder/packetizer api. + Adds a lot more flexibility while also simplifying the decoder plugins. + * New encoder api (Ffmpeg, Vorbis, Theora, Flac and Speex encoders available). + * Video outputs are recycled if possible. + This removes any 'flicker' between two similiar video files. + * Fixed the video filters. Video should no longer go black when using filters. + * New input core. Advantages are: better seeking, more responsive, support for + subtitle files at the core, and much much more. + +Playlist: + * Added a repeat mode to repeat a single file over and over. + * Playlist sorting + +Input: + * RTP/RTSP support. + * Fixed annoying seeking problem with Ogg files (seeking would take ages). + * Support for Flac in Ogg files. + * MPEG TS demuxer also handles A52 and AAC audio in DVB streams. + * Rewrite of the Flac demuxer. + * cddax and vcdx plugins using libcdio, libvcd and libvcdinfo. (Linux only) + * Reworked DVB tuning. + * Better Icecast support. + * New MPEG video elementary streams demuxer. + * New DTS audio elementary streams demuxer. + +Codecs: + * Support for Theora video encoding. + * Support for Speex audio decoding/encoding. + * Rewrite of the Flac decoder + encoding support. + * Support for MPEG2 422 decoding which was recently added to libmpeg2 (cvs). + * Support for AAC + SBR and proper multi-channel re-ordering. + * MPEG 2.5 audio support. + * Removed deprecated decoders (a52_old, mpeg_video and mpeg_audio). + +Stream output: + * Improvements to the MPEG TS muxer. + * New transrating module for MPEG2 video. + * Added packetization for MPEG AAC ADTS streams. + * Added packetizers for Flac, Speex, Theora, LPCM, DTS and SPU streams. + * Improved mp4 muxing and added AAC/MP4V support when transcoding. + * Improved Ogg muxing and added Theora, Speex, Flac and subtitles support. + * MPEG TS muxer follows the ATSC/DVB specs for embedded A52 audio. + * --sout-keep option to keep the stream open while changing input. + * Preliminary RTP support. + * Fixes to SAP announces. + +Interface: + * Skins: + - Bugfixes + - misc improvements (eg, "stay on top" option). + * New standardized and customizable hotkeys. + * wxWindows + - Playlist improvements (Sort, Search, mode buttons). + - Improvements and help in preferences + - New streaming wizard + - Revised Disc Open menu + * HTTP + - Improvements of the standard pages + - Support for new commands + * OSD ( OS X and hotkeys only atm ). + +Service discovery: + * Many fixes to the SAP module + * SAP now supports HTTP streams + +Subtitles: + * Text subtitles now have a black outline. + * Text subtitles autodetection. + * Text subtitles charset autodetection. + * Text subtitles for all videofiles. Results may vary. + * Text subtitles in Hebrew are supported. Arabic partially. + * Automatic fontsize selection for text subtitles. + * Fixed SAMI text subtitles support. + * Support for subtitles in Matroska files. + * Support for subtitles in DVB streams. + +Mac OS X port: + * New controller designed by Max Rudberg from www.maxthemes.com + * Save playlist. + * Works on 10.1.x again. Apologies for that problem. + * Support for Panther. + * Support for raw dumping of streams to disk. + * Mozilla plugin for Mac OS X (experimental). + +Win32 port: + * New DirectShow input module (for video acquisition cards, webcams, PVRs...). + * VLC can be installed as a Windows NT service. + * Allow on the fly switching of the main interface. + * Support for 3F2R in audio output. + * New --one-instance option to "force" only one running instance of VLC. + * Mozilla plugin for Windows (experimental). + * Multimonitor support (untested). + * Fixed nasty timing bug on some dual-cpu / P4 with hyperthreading systems. + +Linux port: + * Improved Video4Linux input. Also added support for an audio only input. + * Support for real-time priority when running with root privileges. + * Allow on the fly switching of the main interface. + +iPaq port: + * Brand new Gtk 2 interface + +Miscellaneous: + * Audio visual effects filters (spectrum, scope and random). + * Audio visual effects filter using goom. + * Spanish, Portuguese Brazilian and Hungarian translations. + * libcaca video output (colored ascii) + + +Changes between 0.6.1 and 0.6.2: +-------------------------------- + +Core support: + * Fixed a nasty regression in 0.6.1 which made some streams unplayable. + +Stream output: + * Transcoder now generates proper pts/dts thus should work a lot better. + * Improved MPEG TS muxer. + +Access input: + * Support for DVB-S/C/T cards using v4l2 API for Linux 2.6.x kernels. + * Few fixes to the VCD navigation. + +Interfaces: + * Support for DVD menus navigation added to the wxWindows interface. + +UNIX ports: + * ALSA multi-channel support fixed and tested. + * Fixed fullscreen with gnome metacity. + +Win32 port: + * Fixed VCD support which was broken on some machines. + +iPaq port: + * Familiar interface with Gtk+-1.2 and GPE support removed (deprecreated). + +Miscellaneous: + * Text subtitles now centered on the picture. + * Ffmpeg decoder now generates proper pts and can be used to play + mpeg1/2 videos. + + +Changes between 0.6.0 and 0.6.1: +-------------------------------- + +Core support: + * There should be less bogus resampling, particularly on DVDs. + * VLC will now wait for the medium to wake up before starting its clock + after a pause. + +Stream output: + * Added vorbis audio support in Ogg streaming. + * Added vorbis audio transcoding support. + * Added mp3 audio transcoding support (when ffmpeg is compiled with mp3lame). +UNIX ports: + * ALSA multi-channel support fixed and tested. + * Fixed fullscreen with gnome metacity. + +Win32 port: + * Fixed VCD support which was broken on some machines. + +iPaq port: + * Familiar interface with Gtk+-1.2 and GPE support removed (deprecreated). + +Miscellaneous: + * Text subtitles now centered on the picture. + * Ffmpeg decoder now generates proper pts and can be used to play + mpeg1/2 videos. + + +Changes between 0.6.0 and 0.6.1: +-------------------------------- + +Core support: + * There should be less bogus resampling, particularly on DVDs. + * VLC will now wait for the medium to wake up before starting its clock + after a pause. + +Stream output: + * Added vorbis audio support in Ogg streaming. + * Added vorbis audio transcoding support. + * Added mp3 audio transcoding support (when ffmpeg is compiled with mp3lame). + * PS muxer can create mpeg1 files now and produce streams with system headers. + * You can transcode a52 with more than two channels to mpga now. + +Win32 port: + * Fixed DVD support which was partly broken due to a bug in libdvdcss + * Fixed 5.1 audio support for the sblive/audigy soundcards. + * Fixed sound on Windows NT. + +UNIX ports: + * Fixed/improved ALSA support and enabled multi-channel audio output. + * X11/Xvideo: Should now work on big endian machines, and you can now + use the arrow keys to browse through the DVD menus. + +iPaq port: + * Gtk+2 interface called PDA + * Familiar Gtk+ is now deprecreated + * Codec a52, Faad2 and flac added + * Video4Linux enabled (demux and transcode) + * Stream Out with transcode support enabled (use codecs: HuffYuvv and A-law). + +Interfaces: + * Small updates/fixes to the wxWindows interface. + * Improved HTTP remote control interface. You can now create your own HTML pages. + * A new CORBA control plugin. + +Input demux: + * Improved support for the Matroska container format. + +Miscellaneous: + * Improved build system. + * New video filter plugin to overlay logos. + * Added support for Winamp 3 B4S files. + * New subtitle module which uses freetype2 to render arbitrary fonts in any size. + Should also work with languages like russion for instance. + + +Changes between 0.5.3 and 0.6.0: +-------------------------------- + +Core Support: + * Channel Server support was removed (was deprecated) + +Input access: + * Fixed a big bug in ftp and http access that prevented many platforms + (OSX most prominently) to view ftp and http streams. + * Fixed large file support on Windows + * Video 4 Linux support + * CD Digital Audio support + * Fixed IPv6 multicasting on Windows and OSX. + +Input demux: + * Better detection of AAC and mp3 files + * Support for OpenDML avi files + * More complete .mp4/.mov support + * Very early support for the Matroska container format (don't complain if it doesn't work ;) + +Codecs: + * VLC's own MPEG1/2 decoder has been replaced with libmpeg2 + * Support for Sorenson 3 (SVQ3 or Quicktime content) via ffmpeg + * OSX support for QDM2 and QDMC sound, often used in QT content. + * Fixed a bug which was causing artefacts in DivX video (ffmpeg) + * Updated our theora decoder to use the alpha 2 release of libtheora + * If ffmpeg cannot keep up, skip and try to recover instead of stopping altogether + * Indeo Video 3 (IV32) support for little-endian computers. (so not for OSX) + +Interfaces: + * The wxWindows interface is now fully useable as well as Unicode safe + * New HTTP remote control interface + +Stream output: + * New stream output scheme. It is now possible to build a chain of stream outputs + allowing for instance to stream and display some content at the same time. + * The stream output now allows to transcode content on the fly. + * Fixed major bug that prevented streaming mpeg 1/2 video with pulldown content. + * SAP/SDP announcing support. (both IPv4 and IPv6) + +Miscellaneous: + * New reset option for the preferences + * You can set your language in the prefences + * New video chroma conversion module using ffmpeg + * Added a Gentoo ebuild to the distribution + * Added a new smaller subtitles font (now the default) + scripts to generate your own + * SAP/SDP IPv6 support + +UNIX ports: + * Basic support for the X11 Xinerama extension. + * New skinable interface ported to X11. + * Run opie-vlc and zaurus-vlc as GuiServer + +Mac OS X port: + * When you add several items to the playlist, they are sorted alphabetically. + * New about panel and revamped preferences panel. + * Fixed the deinterlace menu. + * Float on top, Fit to Screen and a Transparency option for video out. + * New output dialog for transcode and display while stream capabilities. + * New icons by Davor Orel. + * New audio resampler. Should make VLC much faster. + * Fixed disappearing and crackling sound (PTS is out of range bug) + * We no longer automatically save the preferences when you quit the application + * Arrow keys are now use to browse the menus in a DVD + +Win32 port: + * the wxWindows interface is now the default interface + * The keyboard shortcuts are now identical to the linux version + * Fixed the "no sound" problem on NT4 + * Improved skinnable interface (it now uses the wxWindows interface dialogs). + * Added support for compressed skins files (.vlt files) + * Fixed SVCD chapters support. + * Fixed memory leak with 5.1 audio. + +BeOS port: + * Interface localization + * Screensaver disabled if playing in fullscreen + * A few new keyboard shortcuts + * New full-featured Preferences window + + +Changes between 0.5.2 and 0.5.3: +-------------------------------- + +Core Support: + * fixed DTS S/PDIF output on little-endian machines + * support for skins at the interface level + * new OSD module using Freetype2 + * video outputs are now destroyed when the associated input ends + * the video output takes into account the caching delay introduced at the + input level before dropping out of date frames. + * configuration option to disable the translation of the interface + +Input access: + * fixed HTTP redirects + * support for opening an entire directory + * EOF should be detected more reliably + * new video4linux access plug-in + * new kfir access plug-in designed to work around a bug in the kfir driver + +Input demux: + * added stream type for some Motorola MPEG-2 video encoders + * fix for some ogg web radio streams + * fixed reading TS streams over HTTP + +Codecs: + * support for 3ivx D4 (not previous versions) + * support for '3ivd' and '3vid' encodings + * support for 'MSS1' codec ( same as WMV2 ) + * support for SAMI subtitles (untested and incomplete) + * better SSA4 subtitles recognition + * new codec for raw I420 video + * improvements to the libmpeg2-based MPEG video decoder + +Interfaces: + * improvements to wxWindows based interface + (although it still misses some important features) + * skeleton for a Gnome2/GTK2 plug-in + +Stream output: + * new HTTP output support + * fixed a segfault in the AVI muxer + * fixed AV synchronization issues + +Miscellaneous: + * support for oldstyle id3 genres + +UNIX ports: + * the SDL vout plug-in will now work on big-endian machines + +Mac OS X port: + * reorderable playlist + * fixed the hiding of the mouse on multiple monitors + * fixed a big issue with some USB speakers + * support for mono audio output devices + * reset the audio-device to its default mode before quitting VLC + * fixed several cosmetic issues + * you can drag the controller window by its background (as it should be) + * the messages window remembers more lines + * delay and fps can now be overruled with subtitles files + * http and ogg stream output options + * Apple menu and friends will now be translated as well + +Win32 port: + * new skinnable interface + * the directx video output doesn't crash anymore on ctrl+alt+del events. + +iPAQ familiar Linux port: + * support for FLAC audio format + * the interface adapts to the screen size/rotation + * playlist + * network tab in the interface + * "apply" handling in preferences + + +Changes between 0.5.1a and 0.5.2: +--------------------------------- + +Core support: + * advanced config options are now hidden by default + * new --spdif option to use the S/PDIF audio output by default + * fixed a 'clicking' sound when switching between streams + * new bandlimited resampler that should improve audio quality on primarily + Mac OS X + * fixed a problem with audio over http that caused some web radios to not work + * DTS S/PDIF support + +Codecs: + * support for DV audio through the ffmpeg library + * support for FLAC audio through libflac + * new but basic MPEG video decoder based on libmpeg2 + * fixed a major bug in LPCM code (fixes a problem with iDVD disks) + +Stream output: + * support for streaming DivX 1/2/3, wmv1/2, h/i263 over MPEG-2 TS + * new --ttl option for Time To Live + +DVD support: + * fixed quite a few problems with the dvd menu support + +UNIX ports: + * fixed the GNU-pth support + +Win32 port: + * multi-channel audio and S/PDIF support for both the DirectX and Waveout + plugins + * localization support via gettext is now fully working + * rc interface is now fully useable + * fixed the MSVC project files generation + +Mac OS X port: + * several fixes for multi channel audio devices. AC3 over SPDIF with + M-Audio Sonica Theater still does not work. this is most likely a driver + bug and has been reported to M-Audio. (Sonica, Revolution, Delta, Griffin + iMate and MOTU firewire devices should work) + * VLC now uses the default audio device + * new info panel + * very preliminary support for VLC control via applescript + * support for mouse gestures + * new priority scheme allowing to avoid lock-ups on low-end machines + +Linupy port: + * there is a whole new port for the linupy distribution used by o.a. the + YOPY PDA. It is still experimental, please test it + +Miscellaneous: + * improved ID3 tag detection + * changed several errors into warnings ; the frequently reported "this is + not a PS stream, continuing" is one of these + * mouse gestures work on windows and osx, but there still isn't any useful + gestures + * some support for .pls playlists used by shoutcast + + +Changes between 0.5.1 and 0.5.1a: +--------------------------------- + +Mac OS X port: + * fixed a problem that caused VLC to select the wrong language when + English was set as the preferred language + + +Changes between 0.5.0 and 0.5.1: +-------------------------------- + +Core support: + * new mouse gesture interface + * audio volume can now be changed at any time, even when no file is + playing + +Input access: + * various minor fixes on the network inputs + * fixed some weird URL parsing problems (/Volumes/toto:tata/harry@coin.mpg) + * VCD: fixed track number and chapter indexing + +Input demux: + * fixed a bad initialization in the mp4 plug-in + * new --buggy-psi option for TS streams which do not update their + continuity counter + +Codecs: + * support for MPEG-2 intra slice refresh (aka. Slice-I) streams + +DVD support: + * fixed a bug which turned the default interface command-line only + without the user consent + +UNIX ports: + * GTK: fixed a crash when going fullscreen or changing volume from the + popup menu + * X11: new screen saver disabling plug-in (--extraintf screensaver) + * KDE: fixed compilation with KDE 3.1 + * ALSA: fixed mono files output + +Mac OS X port: + * fixed a crash on start-up on some localized systems + * lowered real-time priorities to avoid lock-ups on slow machines + * VLC can now be made the handler of ftp http mms and udp URLs + * playlist enhancements + * added half, normal and double video window menu items + * new step forward/step backward commands + * the dock should no longer be visible in fullscreen mode + * the Mac OS X binary is now compiled with Ogg/Theora support + * vlc.app is now VLC.app + +Win32 port: + * fixed the "RichEdit line insertion error" bug + * VLC can now be run from outside its installation directory + * fixed a bug that prevented to find the default subtitle font + +BeOS port: + * smarter BeOS priorities to avoid lock-ups + * few enhancements in the interface (especially the Settings window) + +Opie port: + * native video output is working again + * only commandline interface support + * support for MPEG4, DivX through ffmpeg package + + +Changes between 0.4.6 and 0.5.0: +-------------------------------- + +Core structure: + * object structure which allows for full re-entrancy, known as libvlc + * new audio output architecture based on filter pipelines, providing + S/PDIF and multi-channel support + * localization support via gettext on most architectures + * new stream output architecture, allowing to use VLC to unicast, + multicast or broadcast a stream to another VLC (only MPEG 1, 2 and 4 + and A/52 streams are supported) + * build system now uses autoconf/automake/autopoint + +Input access: + * mms:// support + * ftp:// support + * stability fixes in the HTTP access + * auto-detection of RTP encapsulation + * VCD entry points support + * VCD image file support + +Input demux: + * support for *.asf format + * improved support for *.avi, especially over an HTTP connection + * support for *.mp4 and *.mov format + * support for ogg encapsulation + * support for raw DV format + * support for *.wav format + * new demuxdump demux allowing to save a stream to a file + * raw AAC support + +Stream discovery & playlists: + * support for the SAP/SDP and SLP protocols + * support for .m3u file format + * support for .asx file format + * hack to find the streaming sources in html-pages with embedded wmp + +Codecs: + * support for the microdvd, subrip, ssa1, ssa2-4 subtitles file formats + (only available with the .avi demux) + * support for ADPCM audio codec + * support for raw PCM data + * support for Cinepak video codec + * support for DV video codec via libdv or ffmpeg + * support for AAC audio codec via libfaad2 + * support for Xvid codec + * support for Xiph.org's Vorbis audio codec + * support for Xiph.org's Tremor audio codec (when compiling from sources) + * support for Xiph.org's Tarkin and Theora video codecs (when compiling + from sources) + * new codecs supported by latest ffmpeg versions: WMV, WMA, SVQ 1, H263, + H263i, MJPEG A/B + * fixed an endianness bug in LPCM codec + +DVD support: + * experimental preliminary support for DVD menus via libdvdplay + +Miscellaneous: + * new WxWindows interface + * all interfaces allow to dynamically change the volume, the audio + device and the channels configuration + * headphone channel mixer with virtual spatialization effect + * Mozilla plugin based on libvlc for embedded playback in webpages of any + format that VLC can play + * new swedish translation + * enhancements of the playlist window + * new messages window to see debug info + * fixed a few crashes + +iPaq port: + * slider bar in GTK+/GPE Familiar interface + * fixed crash on directory change in Familiar interface + * added qte_main module for use in all modules that need Opie or Qte support + * native video output module for Qt Embedded/Opie is not working + diff --git a/Plugins/VlcMedia-master/ThirdParty/vlc/README b/Plugins/VlcMedia-master/ThirdParty/vlc/README new file mode 100644 index 0000000..22222ea --- /dev/null +++ b/Plugins/VlcMedia-master/ThirdParty/vlc/README @@ -0,0 +1,57 @@ +README for the VLC media player +=============================== + +VLC is a popular libre and open source media player and multimedia engine, +used by a large number of individuals, professionals, companies and +institutions. Using open source technologies and libraries, VLC has been +ported to most computing platforms, including GNU/Linux, Windows, Mac OS X, +BSD, iOS and Android. +VLC can play most multimedia files, discs, streams, allows playback from +devices, and is able to convert to or stream in various formats. +The VideoLAN project was started at the university École Centrale Paris who +relicensed VLC under the GPLv2 license in February 2001. Since then, VLC has +been downloaded close to one billion times. + +Links: +====== + +The VLC web site . . . . . http://www.videolan.org/ +Support . . . . . . . . . . http://www.videolan.org/support/ +Forums . . . . . . . . . . http://forum.videolan.org/ +Wiki . . . . . . . . . . . http://wiki.videolan.org/ +The Developers site . . . . http://wiki.videolan.org/Developers_Corner +VLC hacking guide . . . . . http://wiki.videolan.org/Hacker_Guide +Bugtracker . . . . . . . . http://trac.videolan.org/vlc/ +The VideoLAN web site . . . http://www.videolan.org/ + +Source Code Content: +=================== +ABOUT-NLS - Notes on the Free Translation Project. +AUTHORS - VLC authors. +COPYING - The GPL license. +COPYING.LIB - The LGPL license. +INSTALL - Installation and building instructions. +NEWS - Important modifications between the releases. +README - This file. +THANKS - VLC contributors. + +bin/ - VLC binaries. +bindings/ - libVLC bindings to other languages. +compat/ - compatibility library for operating systems missing + essential functionalities. +contrib/ - Facilities for retrieving external libraries and building + them for systems that don't have the right versions. +doc/ - Miscellaneous documentation. +extras/analyser - Code analyser and editor specific files. +extras/buildsystem - different buildsystems specific files. +extras/misc - Files that don't fit in the other extras/ categories. +extras/package - VLC packaging specific files such as spec files. +extras/tools/ - Facilities for retrieving external building tools needed + for systems that don't have the right versions. +include/ - Header files. +lib/ - libVLC source code. +modules/ - VLC plugins and modules. Most of the code is here. +po/ - VLC translations. +share/ - Common Resources files. +src/ - libvlccore source code. +test/ - testing system. diff --git a/Plugins/VlcMedia-master/ThirdParty/vlc/THANKS b/Plugins/VlcMedia-master/ThirdParty/vlc/THANKS new file mode 100644 index 0000000..fa7b6c5 --- /dev/null +++ b/Plugins/VlcMedia-master/ThirdParty/vlc/THANKS @@ -0,0 +1,106 @@ +Some VLC plugins use external libraries and make extensive use of the +following persons' or companies' code: + +FAAD2 - Copyright (c) Nero AG, www.nero.com" - GPLv2 or later +FFmpeg - Copyright (c) 2000-2017 the FFmpeg developers - LGPLv2.1 or later +FluidLite - Copyright (c) 2016 Robin Lobel - LGPLv2.1 or later +FluidSynth - Copyright (c) 2003-2010 Peter Hanappe, Conrad Berhörster, Antoine + Schmitt, Pedro López-Cabanillas, Josh Green, David Henningsson - LGPLv2.1 or + later +Fontconfig - Copyright (c) 2000,2001,2002,2003,2004,2006,2007 Keith Packard, + (c) 2005 Patrick Lam, (c) 2009 Roozbeh Pournader, (c) 2008,2009 Red Hat, + Inc., (c) 2008 Danilo Šegan, (c) 2012 Google, Inc. - MIT License +freetype - David Turner, Robert Wilhelm, and Werner Lemberg - FreeType License +GSM - Copyright (c) 1992 - 1994, 2009 Jutta Degener & Carsten Bormann - GSM + permissive license +GNU FriBidi - Copyright (c) 2004-2012 Behdad Esfahbod, Dov Grobgeld, Roozbeh + Pournader - LGPLv2.1 or later +GnuTLS - Copyright (C) 2000-2012 Free Software Foundation, Inc. - LGPLv2.1 or + later +harfbuzz - Copyright (c) 2010, 2011, 2012 Google, Inc., (c) 2012 Mozilla + Foundation, (c) 2011 Codethink Limited, (c) 2008, 2010 Nokia Corporation + and/or its subsidiary(-ies), (c) 2009 Keith Stribley, (c) 2009 Martin Hosken + and SIL International, (c) 2007 Chris Wilson, (c) 2006 Behdad Esfahbod, + (c) 2005 David Turner, (c) 2004, 2007, 2008, 2009, 2010 Red Hat, Inc., + (c) 1998-2004 David Turner and Werner Lemberg - Old MIT License +liba52 - Aaron Holtzman & Michel Lespinasse, et al. - GPLv2 or later +libav - Copyright (c) 2000 - 2015 the libav developers - LGPLv2.1 or later +libass - Copyright (c) 2006-2015 Grigori Goronzy et al. - ISC License +libbluray - Copyright (c) 2009-2015 VideoLAN and authors - LGPLv2.1 or later +libcaca - Copyright (c) 2004 Sam Hocevar - WTFPL / LGPLv2.1 or later / + GPLv2 or later / ISC +libdca - Copyright (c) 2004-2007 VideoLAN and authors - GPLv2 or later +libdvbpsi - Copyright (c) 2001-2017 VideoLAN and authors - LGPLv2.1 or later +libdvdcss - Copyright (c) 2001-2017 VideoLAN and authors - GPLv2 or later +libdvdread - GPLv2 or later +libdvdnav - GPLv2 or later +libebml - Copyright (c) 2002-2015 Steve Lhomme - LGPLv2.1 or later +libFLAC - Copyright (c) 2001 - 2014 Josh Coalson et al. - Xiph.org BSD license +libgme - LGPLv2.1 or later +libgpg-error - Copyright 2003, 2004, 2005, 2006, 2007, 2013 g10 Code GmbH + - LGPLv2.1 or later +libkate - Copyright (c) 2008-2011 Vincent Penquerc'h - 3-clause BSD License +liblive555 - Copyright (c) 1996-2015 Live Networks, Inc. - LGPLv2.1 or later +libmad - Copyright (c) 2000-2004 Robert Leslie, et al. - GPLv2 or later +libmatroska - Copyright (c) 2002-2015 Steve Lhomme - LGPLv2.1 or later +libmpeg2 - Aaron Holtzman & Michel Lespinasse, et al. - GPLv2 or later +libmodplug - Oliver Lapicque, Konstanty - Public domain +libogg, libvorbis - Copyright (c) 2002-2015 Xiph.org Foundation - Xiph.org BSD + license +libpostproc - Copyright (C) 2001-2015 Michael Niedermayer, et al. - GPLv2 or + later +libpng - Copyright (c) 2004, 2006-2014 Glenn Randers-Perhson, et al. - libpng + license +libsamplerate - Copyright (c) 2002-2011 Erik de Castro Lopo - GPLv2 or later +libschroedinger - Copyright (c) 2006 BBC and Fluendo - MIT License +libsdl - Copyright (c) 1997-2014 Sam Lantinga et al. - LGPLv2.1 or later +libshout - Copyright (c) 2012 - LGPLv2.1 or later +libtheora - Copyright (c) Xiph.org Foundation - Xiph.org BSD license +libtiff - Copyright (c) 1988-1997 Sam Leffler, (c) 1991-1997 Silicon Graphics, + Inc. - BSD-like +libtwolame - Copyright (c) 2001-2004 Michael Cheng, (c) 2004-2006 The TwoLAME + Project - LGPLv2.1 or later +libupnp - Copyright (c) 2000-2003 Intel Corporation - 3-clause BSD License +libvpx - Copyright (c) 2010-2015, Google Inc. - 3-clause BSD License +libxml2 - Copyright (c) 1998-2014 Daniel Veillard - MIT License +lua - Copyright (c) 1994-2008 Lua.org, PUC-Rio. - MIT License +Musepack decoder library - Copyright (c) 2005-2011, The Musepack Development + Team - 3-clause BSD License +OpenJPEG - Copyright (c) 2002-2014, Communcations and Remote Sensing + Laboratory, UCL, Belgium - ISC License +Opus - Copyright 2001-2013 Xiph.Org, Skype Limited, Octasic, Jean-Marc Valin, + Timothy B. Terriberry, CSIRO, Gregory Maxwell, Mark Borgerding, + Erik de Castro Lopo - Xiph.org BSD License +Sparkle — Andy Matuschak et al. - MIT License +Speex, Speexdsp - Copyright (c) 1992-2015 Xiph.org Foundation, Jean-Marc Valin, + Analog Devices Inc. Commonwealth Scientific and Industrial Research + Organisation, David Row, Jutta Degener, Carsten Bormann - 3-clause BSD + License +taglib - Copyright (c) 2004-2016 Scott Wheeler, et al. - LGPLv2.1 or later +x264 - Copyright (c) 2004-2017 VideoLAN and authors - GPLv2 or later +x265 - Copyright (c) 2004-2015 x265 project - GPLv2 or later +Zapping VBI library - Copyright (c) 2000-2003 Michael H. Schimek, Iñaki García + Etxebarria - LGPLv2.1 or later +zlib - Copyright (c) 1995-2017 Jean-loup Gailly and Mark Adler - zlib license + +The VideoLAN team would like to thank the following donators: + +Julian Cain, who made a $1000 donation +The French website MacBidouille gave €500 to help us buy a PowerMac G5 +The French magazine à vos MAC gave €500 to help us buy a PowerMac G5 +Laurent Dupuy, who made a €540 donation +The French company Cybervia (Actech) gave €2000 to pay for webserver hosting +Dennis Perov - Hardware donation + +...the following active members of our user community: + +Alan Wright +David J LaBarre "DJ" +Eric Adler +Julien Bouquillon + +...and code auditors and testers: + +David Thiel +Philippe A. aka "Lotesdelère" +Sebastien Chaumat diff --git a/Plugins/VlcMedia-master/ThirdParty/vlc/Win32/plugins/access/libbluray-j2se-1.0.2.jar b/Plugins/VlcMedia-master/ThirdParty/vlc/Win32/plugins/access/libbluray-j2se-1.0.2.jar new file mode 100644 index 0000000..c63931b Binary files /dev/null and b/Plugins/VlcMedia-master/ThirdParty/vlc/Win32/plugins/access/libbluray-j2se-1.0.2.jar differ diff --git a/Plugins/VlcMedia-master/ThirdParty/vlc/Win64/plugins/access/libbluray-j2se-1.0.2.jar b/Plugins/VlcMedia-master/ThirdParty/vlc/Win64/plugins/access/libbluray-j2se-1.0.2.jar new file mode 100644 index 0000000..94c13a8 Binary files /dev/null and b/Plugins/VlcMedia-master/ThirdParty/vlc/Win64/plugins/access/libbluray-j2se-1.0.2.jar differ diff --git a/Plugins/VlcMedia-master/VlcMedia.uplugin b/Plugins/VlcMedia-master/VlcMedia.uplugin new file mode 100644 index 0000000..1860d81 --- /dev/null +++ b/Plugins/VlcMedia-master/VlcMedia.uplugin @@ -0,0 +1,42 @@ +{ + "FileVersion" : 3, + + "FriendlyName" : "VLC Media Player", + "Version" : 14, + "VersionName" : "14.0", + "CreatedBy" : "Epic Games Inc", + "CreatedByURL" : "http://epicgames.com", + "DocsURL" : "https://github.com/ue4plugins/VlcMedia", + "Description" : "Implements a media player using the Video LAN Codec (libvlc).", + "Category" : "Media Players", + "EnabledByDefault" : true, + "IsBetaVersion": true, + + "Modules" : + [ + { + "Name" : "VlcMedia", + "Type" : "RuntimeNoCommandlet", + "LoadingPhase" : "PreLoadingScreen", + "WhitelistPlatforms" : [ "Linux", "Mac", "Win32", "Win64" ] + }, + { + "Name" : "VlcMediaEditor", + "Type" : "Editor", + "LoadingPhase" : "PostEngineInit" + }, + { + "Name" : "VlcMediaFactory", + "Type" : "Editor", + "LoadingPhase" : "PostEngineInit" + }, + { + "Name": "VlcMediaFactory", + "Type": "RuntimeNoCommandlet", + "LoadingPhase" : "PostEngineInit", + "WhitelistPlatforms" : [ "Linux", "Mac", "Win32", "Win64" ] + } + ], + + "CanContainContent" : false +}