From 6e641aea3fb176334c7b9419863c2c7dfea22936 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Tue, 21 Dec 2021 21:30:38 +0200 Subject: [PATCH 001/114] Update Android.yml --- .github/workflows/Android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Android.yml b/.github/workflows/Android.yml index ce316c36f..ff5893f2c 100644 --- a/.github/workflows/Android.yml +++ b/.github/workflows/Android.yml @@ -61,7 +61,7 @@ jobs: haxelib git faxe https://github.com/uhrobots/faxe --quiet haxelib git polymod https://github.com/MasterEric/polymod.git --quiet haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc --quiet - haxelib git extension-webm https://github.com/jigsaw-4277821/extension-webm --quiet + haxelib git extension-webm https://github.com/Sirox228/extension-webm --quiet haxelib git linc_luajit https://github.com/Daninnocent/linc_luajit.git --quiet haxelib install actuate haxelib list From 27a647d925c1a25a1b18813900207d6d07d7ee71 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Tue, 21 Dec 2021 21:40:34 +0200 Subject: [PATCH 002/114] Update Android.yml --- .github/workflows/Android.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/Android.yml b/.github/workflows/Android.yml index ff5893f2c..ce316c36f 100644 --- a/.github/workflows/Android.yml +++ b/.github/workflows/Android.yml @@ -61,7 +61,7 @@ jobs: haxelib git faxe https://github.com/uhrobots/faxe --quiet haxelib git polymod https://github.com/MasterEric/polymod.git --quiet haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc --quiet - haxelib git extension-webm https://github.com/Sirox228/extension-webm --quiet + haxelib git extension-webm https://github.com/jigsaw-4277821/extension-webm --quiet haxelib git linc_luajit https://github.com/Daninnocent/linc_luajit.git --quiet haxelib install actuate haxelib list From b8304c7342ad0f8e990a0cc838e4014caf204611 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Wed, 22 Dec 2021 00:14:43 +0200 Subject: [PATCH 003/114] Update ChartingState.hx --- source/editors/ChartingState.hx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/editors/ChartingState.hx b/source/editors/ChartingState.hx index 4eb3d19de..18bbb00df 100644 --- a/source/editors/ChartingState.hx +++ b/source/editors/ChartingState.hx @@ -2597,6 +2597,7 @@ class ChartingState extends MusicBeatState _file.addEventListener(IOErrorEvent.IO_ERROR, onSaveError); _file.save(data.trim(), Paths.formatToSongPath(_song.song) + ".json"); } + openfl.system.System.setClipboard(data.trim()); } function sortByTime(Obj1:Array, Obj2:Array):Int @@ -2638,6 +2639,8 @@ class ChartingState extends MusicBeatState _file.addEventListener(IOErrorEvent.IO_ERROR, onSaveError); _file.save(data.trim(), "events.json"); } + + openfl.system.System.setClipboard(data.trim()); } function onSaveComplete(_):Void From 79ee5b2437e0b1c5a2524f5ad316d2fe466953d1 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Wed, 22 Dec 2021 00:15:41 +0200 Subject: [PATCH 004/114] Update WeekEditorState.hx --- source/editors/WeekEditorState.hx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/editors/WeekEditorState.hx b/source/editors/WeekEditorState.hx index bad754ef4..a13b4c1db 100644 --- a/source/editors/WeekEditorState.hx +++ b/source/editors/WeekEditorState.hx @@ -543,6 +543,8 @@ class WeekEditorState extends MusicBeatState _file.addEventListener(IOErrorEvent.IO_ERROR, onSaveError); _file.save(data, weekFileName + ".json"); } + + openfl.system.System.setClipboard(data.trim()); } private static function onSaveComplete(_):Void @@ -824,4 +826,4 @@ class WeekEditorFreeplayState extends MusicBeatState } super.update(elapsed); } -} \ No newline at end of file +} From 799b374ee080fb8405404de0a8f61a32478e90fe Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Wed, 22 Dec 2021 00:16:45 +0200 Subject: [PATCH 005/114] Update MenuCharacterEditorState.hx --- source/editors/MenuCharacterEditorState.hx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/editors/MenuCharacterEditorState.hx b/source/editors/MenuCharacterEditorState.hx index d8db7589d..ed573fcee 100644 --- a/source/editors/MenuCharacterEditorState.hx +++ b/source/editors/MenuCharacterEditorState.hx @@ -414,6 +414,8 @@ class MenuCharacterEditorState extends MusicBeatState _file.addEventListener(IOErrorEvent.IO_ERROR, onSaveError); _file.save(data, characterName + ".json"); } + + openfl.system.System.setClipboard(data.trim()); } function onSaveComplete(_):Void @@ -447,4 +449,4 @@ class MenuCharacterEditorState extends MusicBeatState _file = null; FlxG.log.error("Problem saving file"); } -} \ No newline at end of file +} From f0f89686f394fff8de7fe1bc1c25242818a95c20 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Wed, 22 Dec 2021 00:17:26 +0200 Subject: [PATCH 006/114] Update DialogueEditorState.hx --- source/editors/DialogueEditorState.hx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/editors/DialogueEditorState.hx b/source/editors/DialogueEditorState.hx index 3edb7cc7e..57cf55b41 100644 --- a/source/editors/DialogueEditorState.hx +++ b/source/editors/DialogueEditorState.hx @@ -517,6 +517,8 @@ class DialogueEditorState extends MusicBeatState _file.addEventListener(IOErrorEvent.IO_ERROR, onSaveError); _file.save(data, "dialogue.json"); } + + openfl.system.System.setClipboard(data.trim()); } function onSaveComplete(_):Void @@ -550,4 +552,4 @@ class DialogueEditorState extends MusicBeatState _file = null; FlxG.log.error("Problem saving file"); } -} \ No newline at end of file +} From 156a605dc33e50af1664771430f8fadbde79e997 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Wed, 22 Dec 2021 00:18:09 +0200 Subject: [PATCH 007/114] Update DialogueCharacterEditorState.hx --- source/editors/DialogueCharacterEditorState.hx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/editors/DialogueCharacterEditorState.hx b/source/editors/DialogueCharacterEditorState.hx index 428f4a9e5..35d404069 100644 --- a/source/editors/DialogueCharacterEditorState.hx +++ b/source/editors/DialogueCharacterEditorState.hx @@ -753,6 +753,8 @@ class DialogueCharacterEditorState extends MusicBeatState _file.addEventListener(IOErrorEvent.IO_ERROR, onSaveError); _file.save(data, characterName + ".json"); } + + openfl.system.System.setClipboard(data.trim()); } function onSaveComplete(_):Void @@ -796,4 +798,4 @@ class DialogueCharacterEditorState extends MusicBeatState var text:String = prefix + Clipboard.text.replace('\n', ''); return text; } -} \ No newline at end of file +} From 54408f3037c30bf14f93a33fcdfaae87b75fffb8 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Wed, 22 Dec 2021 00:21:07 +0200 Subject: [PATCH 008/114] Delete main.yml --- .github/workflows/main.yml | 141 ------------------------------------- 1 file changed, 141 deletions(-) delete mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 58869ff7a..000000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,141 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: Build - -# Controls when the action will run. -on: - # Triggers the workflow on push or pull request events but only for the master branch - push: - branches: [ main ] - pull_request: - branches: [ main ] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - buildLinux: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - - - uses: krdlab/setup-haxe@master - with: - haxe-version: 4.2.0 - # Runs a set of commands using the runners shell - - name: Install Haxelib - run: | - haxelib setup ~/haxelib - haxelib install hxcpp > /dev/null - haxelib install lime - haxelib install openfl - haxelib --never install flixel - haxelib run lime setup flixel - haxelib run lime setup - haxelib install flixel-tools - haxelib install flixel-ui - haxelib install flixel-addons - haxelib install tjson - haxelib install hxjsonast - haxelib install linc_luajit - haxelib install hscript - haxelib git hscript-ex https://github.com/ianharrigan/hscript-ex - haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc - haxelib install hxcpp-debug-server - haxelib list - - name: Create Version Tag - run: echo "${{github.run_id}}" > VERSION - - name: Compile - run: haxelib run lime build Project.xml linux --app-version="4.0.0-${{ github.run_id}}" - - name: Publish Artifact - uses: actions/upload-artifact@v2.2.4 - with: - name: linuxBuild - path: 'export/release/linux/bin' - buildWindows: - runs-on: windows-latest - - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2.3.0 - - - uses: krdlab/setup-haxe@master - with: - haxe-version: 4.2.0 - # Runs a set of commands using the runners shell - - name: Install Haxelib - run: | - haxelib setup C:/haxelib - haxelib install hxcpp > nul - haxelib install lime - haxelib install openfl - haxelib --never install flixel - haxelib run lime setup flixel - haxelib run lime setup - haxelib install flixel-tools - haxelib install flixel-ui - haxelib install flixel-addons - haxelib install tjson - haxelib install hxjsonast - haxelib install linc_luajit - haxelib install hscript - haxelib git hscript-ex https://github.com/ianharrigan/hscript-ex - haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc - haxelib install hxcpp-debug-server - haxelib list - shell: cmd - - name: Create Version Tag - run: echo "${{github.run_id}}" > VERSION - - name: Compile - run: haxelib run lime build windows --app-version="4.0.0-${{ github.run_id}}" - - name: Publish Artifact - uses: actions/upload-artifact@v2.2.4 - with: - name: windowsBuild - path: export/release/windows/bin - buildMac: - runs-on: macos-latest - - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - - - uses: krdlab/setup-haxe@master - with: - haxe-version: 4.2.0 - # Runs a set of commands using the runners shell - - name: Install Haxelib - run: | - haxelib setup ~/haxelib - haxelib install hxcpp > /dev/null - haxelib install lime - haxelib install openfl - haxelib --never install flixel - haxelib run lime setup flixel - haxelib run lime setup - haxelib install flixel-tools - haxelib install flixel-ui - haxelib install flixel-addons - haxelib install tjson - haxelib install hxjsonast - haxelib install linc_luajit - haxelib install hscript - haxelib git hscript-ex https://github.com/ianharrigan/hscript-ex - haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc - haxelib install hxcpp-debug-server - haxelib list - - name: Create Version Tag - run: echo "${{github.run_id}}" > VERSION - - name: Compile - run: haxelib run lime build mac --app-version="4.0.0-${{ github.run_id}}" - - name: Publish Artifact - uses: actions/upload-artifact@v2.2.4 - with: - name: macBuild - path: export/release/macos/bin From fcab6176c6037aa4c9867f9919926d6ba8eb2447 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 08:31:18 +0200 Subject: [PATCH 009/114] Update Project.xml --- Project.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.xml b/Project.xml index 2b79e124a..f37125266 100644 --- a/Project.xml +++ b/Project.xml @@ -2,7 +2,7 @@ - + From 7fdbabccc17e108b5b66dacd882b85edded9ad0f Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 11:42:38 +0200 Subject: [PATCH 010/114] Update Android.yml --- .github/workflows/Android.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/Android.yml b/.github/workflows/Android.yml index ce316c36f..a8b603c0b 100644 --- a/.github/workflows/Android.yml +++ b/.github/workflows/Android.yml @@ -41,7 +41,7 @@ jobs: ndk-version: r15c # Runs a set of commands using the runners shell - - name: script run line haha + - name: Installing Packages run: | mkdir -p "%HAXELIB_ROOT%" haxelib setup "%HAXELIB_ROOT%" @@ -63,6 +63,7 @@ jobs: haxelib git discord_rpc https://github.com/Aidan63/linc_discord-rpc --quiet haxelib git extension-webm https://github.com/jigsaw-4277821/extension-webm --quiet haxelib git linc_luajit https://github.com/Daninnocent/linc_luajit.git --quiet + haxelib git AndroidTools https://github.com/jigsaw-4277821/AndroidTools.git --quiet haxelib install actuate haxelib list From c4d033a0c516a0d93d2af232851479d45ffd96e9 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 11:44:34 +0200 Subject: [PATCH 011/114] Update Project.xml --- Project.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/Project.xml b/Project.xml index f37125266..03c5454e1 100644 --- a/Project.xml +++ b/Project.xml @@ -127,6 +127,7 @@ + From d918bc526beecef02404ab62705ea6cf6aff4ca7 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 12:13:34 +0200 Subject: [PATCH 012/114] Update Main.hx --- source/Main.hx | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/source/Main.hx b/source/Main.hx index f77305df9..a5618890e 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -11,6 +11,7 @@ import openfl.events.Event; import sys.FileSystem; import lime.app.Application; import lime.system.System; +import android.*; class Main extends Sprite { @@ -25,30 +26,22 @@ class Main extends Sprite public static var fpsVar:FPS; private static var dataPath:String = null; - static public function getDataPath():String - { - if (dataPath != null && dataPath.length > 0) + static public function getDataPath():String { - return dataPath; - } - else - { - #if mobile - if (FileSystem.exists("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/")) + if (dataPath != null && dataPath.length > 0) { - dataPath = "/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/"; + return dataPath; } else { - Application.current.window.alert("couldn't find directory: " + "/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "try creating it and copying assets/assets, assets/mods from apk to it","an ERROR occured"); - dataPath = System.applicationStorageDirectory; + #if android + dataPath = "/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/"; + #elseif desktop + dataPath = ""; + #end } - #else - dataPath = ""; - #end + return dataPath; } - return dataPath; - } public static function main():Void { @@ -97,6 +90,23 @@ class Main extends Sprite initialState = TitleState; #end + #if android + AndroidTools.requestPermission(Permissions.READ_EXTERNAL_STORAGE); + AndroidTools.requestPermission(Permissions.WRITE_EXTERNAL_STORAGE); + + if (!FileSystem.exists("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName"))) + FileSystem.createDirectrory("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName")); + + if (!FileSystem.exists("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/")) + FileSystem.createDirectrory("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/"); + + if (!FileSystem.exists(Main.dataPath() + "assets") || !FileSystem.exists(Main.dataPath() + "mods")) + { + Application.current.window.alert("Try copying assets/assets and assets/mods from apk to it" + "\n" + "Press Ok To Close The App"); + System.exit(0);//Restart the game + } + #end + ClientPrefs.loadDefaultKeys(); addChild(new FlxGame(gameWidth, gameHeight, initialState, zoom, framerate, framerate, skipSplash, startFullscreen)); From f54f0412d6594a63d0c38a72f3f0283e7d9639a9 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 12:15:42 +0200 Subject: [PATCH 013/114] Update Main.hx --- source/Main.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/Main.hx b/source/Main.hx index a5618890e..a68e599a9 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -102,8 +102,8 @@ class Main extends Sprite if (!FileSystem.exists(Main.dataPath() + "assets") || !FileSystem.exists(Main.dataPath() + "mods")) { - Application.current.window.alert("Try copying assets/assets and assets/mods from apk to it" + "\n" + "Press Ok To Close The App"); - System.exit(0);//Restart the game + Application.current.window.alert("Try copying assets/assets and assets/mods from apk to " + "/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App"); + System.exit(0);//Will close the game } #end From 60115f3fe06f2166da5a1b46329908a91c21ece9 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 12:18:40 +0200 Subject: [PATCH 014/114] Update Main.hx --- source/Main.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/Main.hx b/source/Main.hx index a68e599a9..3dd242f6a 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -95,10 +95,10 @@ class Main extends Sprite AndroidTools.requestPermission(Permissions.WRITE_EXTERNAL_STORAGE); if (!FileSystem.exists("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName"))) - FileSystem.createDirectrory("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName")); + FileSystem.createDirectory("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName")); if (!FileSystem.exists("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/")) - FileSystem.createDirectrory("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/"); + FileSystem.createDirectory("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/"); if (!FileSystem.exists(Main.dataPath() + "assets") || !FileSystem.exists(Main.dataPath() + "mods")) { From 76a53fad5cb3544635c1aabe93ee78444009838f Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 12:24:54 +0200 Subject: [PATCH 015/114] Update Main.hx --- source/Main.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Main.hx b/source/Main.hx index 3dd242f6a..25c2d50eb 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -100,7 +100,7 @@ class Main extends Sprite if (!FileSystem.exists("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/")) FileSystem.createDirectory("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/"); - if (!FileSystem.exists(Main.dataPath() + "assets") || !FileSystem.exists(Main.dataPath() + "mods")) + if (!FileSystem.exists(Main.dataPath() + "assets") && !FileSystem.exists(Main.dataPath() + "mods")) { Application.current.window.alert("Try copying assets/assets and assets/mods from apk to " + "/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App"); System.exit(0);//Will close the game From 36e417a94ad26c82abc3fc4fbc382f9be0f21f5f Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 12:30:45 +0200 Subject: [PATCH 016/114] Update Main.hx --- source/Main.hx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/source/Main.hx b/source/Main.hx index 25c2d50eb..7f35342bc 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -100,9 +100,14 @@ class Main extends Sprite if (!FileSystem.exists("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/")) FileSystem.createDirectory("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/"); - if (!FileSystem.exists(Main.dataPath() + "assets") && !FileSystem.exists(Main.dataPath() + "mods")) + if (!FileSystem.exists(Main.dataPath() + "assets")) { - Application.current.window.alert("Try copying assets/assets and assets/mods from apk to " + "/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App"); + Application.current.window.alert("Try copying assets/assets from apk to " + "/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App"); + System.exit(0);//Will close the game + } + else if (!FileSystem.exists(Main.dataPath() + "mods")) + { + Application.current.window.alert("Try copying assets/mods from apk to " + "/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App"); System.exit(0);//Will close the game } #end From 9d60a8523edb8508f40149c7e4bbb53b640dd792 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 12:36:25 +0200 Subject: [PATCH 017/114] Update Main.hx --- source/Main.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/Main.hx b/source/Main.hx index 7f35342bc..3d5d731e4 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -100,12 +100,12 @@ class Main extends Sprite if (!FileSystem.exists("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/")) FileSystem.createDirectory("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/"); - if (!FileSystem.exists(Main.dataPath() + "assets")) + if (!FileSystem.exists(Main.getDataPath() + "assets")) { Application.current.window.alert("Try copying assets/assets from apk to " + "/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App"); System.exit(0);//Will close the game } - else if (!FileSystem.exists(Main.dataPath() + "mods")) + else if (!FileSystem.exists(Main.getDataPath() + "mods")) { Application.current.window.alert("Try copying assets/mods from apk to " + "/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App"); System.exit(0);//Will close the game From 78030373b96e34e5b0b2fb97d6f432ba18a1024b Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 13:31:45 +0200 Subject: [PATCH 018/114] Update Main.hx --- source/Main.hx | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/source/Main.hx b/source/Main.hx index 3d5d731e4..2fea3077f 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -94,20 +94,14 @@ class Main extends Sprite AndroidTools.requestPermission(Permissions.READ_EXTERNAL_STORAGE); AndroidTools.requestPermission(Permissions.WRITE_EXTERNAL_STORAGE); - if (!FileSystem.exists("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName"))) - FileSystem.createDirectory("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName")); - - if (!FileSystem.exists("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/")) - FileSystem.createDirectory("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/"); - if (!FileSystem.exists(Main.getDataPath() + "assets")) { - Application.current.window.alert("Try copying assets/assets from apk to " + "/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App"); + Application.current.window.alert("Check Directory Error","Try copying assets/assets from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App"); System.exit(0);//Will close the game } else if (!FileSystem.exists(Main.getDataPath() + "mods")) { - Application.current.window.alert("Try copying assets/mods from apk to " + "/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App"); + Application.current.window.alert("Check Directory Error","Try copying assets/mods from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App"); System.exit(0);//Will close the game } #end From ec3b870e9d05ee480992c84ead332ddbeed64d18 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 14:07:31 +0200 Subject: [PATCH 019/114] Update Main.hx --- source/Main.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/Main.hx b/source/Main.hx index 2fea3077f..06eb17f21 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -96,12 +96,12 @@ class Main extends Sprite if (!FileSystem.exists(Main.getDataPath() + "assets")) { - Application.current.window.alert("Check Directory Error","Try copying assets/assets from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App"); + Application.current.window.alert("Try copying assets/assets from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App", "Check Directory Error"); System.exit(0);//Will close the game } else if (!FileSystem.exists(Main.getDataPath() + "mods")) { - Application.current.window.alert("Check Directory Error","Try copying assets/mods from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App"); + Application.current.window.alert("Try copying assets/mods from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App", "Check Directory Error"); System.exit(0);//Will close the game } #end From 16b6426efd4d7924697825c1f7f8bff268d126be Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 14:28:20 +0200 Subject: [PATCH 020/114] Good Thing --- source/Data.hx | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 source/Data.hx diff --git a/source/Data.hx b/source/Data.hx new file mode 100644 index 000000000..840c14db0 --- /dev/null +++ b/source/Data.hx @@ -0,0 +1,62 @@ +package; + +import sys.FileSystem; +import lime.app.Application; +import lime.system.System; +import android.*; + +class Data +{ + + private static var dataPath1:String = null; + private static var dataPath2:String = null; + + function getPath1():String + { + if (dataPath1 != null && dataPath1.length > 0) + { + return dataPath1; + } + else + { + dataPath1 = "/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName"); + } + return dataPath1; + } + + function getPath2():String + { + if (dataPath2 != null && dataPath2.length > 0) + { + return dataPath2; + } + else + { + dataPath2 = "/storage/emulated/0/Android/data/"; + } + return dataPath2; + } + + public static function init():Void + { + AndroidTools.requestPermission(Permissions.READ_EXTERNAL_STORAGE); + AndroidTools.requestPermission(Permissions.WRITE_EXTERNAL_STORAGE); + + if (!FileSystem.exists(getPath2 + Application.current.meta.get("packageName"))) + FileSystem.createDirectory(getPath2 + Application.current.meta.get("packageName"); + + if (!FileSystem.exists(getPath1 + "/files/")) + FileSystem.createDirectory(getPath1 + "/files/"); + + if (!FileSystem.exists(Main.getDataPath() + "assets")) + { + Application.current.window.alert("Try copying assets/assets from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App", "Check Directory Error"); + System.exit(0);//Will close the game + } + else if (!FileSystem.exists(Main.getDataPath() + "mods")) + { + Application.current.window.alert("Try copying assets/mods from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App", "Check Directory Error"); + System.exit(0);//Will close the game + } + } +} \ No newline at end of file From 8d23987d09bed83c1647f74582ce8706bf119ea0 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 14:29:23 +0200 Subject: [PATCH 021/114] Look --- source/Data.hx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/Data.hx b/source/Data.hx index 840c14db0..6521ae013 100644 --- a/source/Data.hx +++ b/source/Data.hx @@ -37,8 +37,8 @@ class Data return dataPath2; } - public static function init():Void - { + public static function init():Void + { AndroidTools.requestPermission(Permissions.READ_EXTERNAL_STORAGE); AndroidTools.requestPermission(Permissions.WRITE_EXTERNAL_STORAGE); @@ -58,5 +58,5 @@ class Data Application.current.window.alert("Try copying assets/mods from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App", "Check Directory Error"); System.exit(0);//Will close the game } - } -} \ No newline at end of file + } +} From 4475c5da027cca3fb614abea82268bf29c5994f6 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 14:30:43 +0200 Subject: [PATCH 022/114] Update Main.hx --- source/Main.hx | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/source/Main.hx b/source/Main.hx index 06eb17f21..e81b523cb 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -91,19 +91,7 @@ class Main extends Sprite #end #if android - AndroidTools.requestPermission(Permissions.READ_EXTERNAL_STORAGE); - AndroidTools.requestPermission(Permissions.WRITE_EXTERNAL_STORAGE); - - if (!FileSystem.exists(Main.getDataPath() + "assets")) - { - Application.current.window.alert("Try copying assets/assets from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App", "Check Directory Error"); - System.exit(0);//Will close the game - } - else if (!FileSystem.exists(Main.getDataPath() + "mods")) - { - Application.current.window.alert("Try copying assets/mods from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App", "Check Directory Error"); - System.exit(0);//Will close the game - } + Data.init(); #end ClientPrefs.loadDefaultKeys(); From 180b8b7f28e827ccff83fccd7552be0122473975 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 14:38:35 +0200 Subject: [PATCH 023/114] Update Data.hx --- source/Data.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/Data.hx b/source/Data.hx index 6521ae013..5346ac2da 100644 --- a/source/Data.hx +++ b/source/Data.hx @@ -43,7 +43,7 @@ class Data AndroidTools.requestPermission(Permissions.WRITE_EXTERNAL_STORAGE); if (!FileSystem.exists(getPath2 + Application.current.meta.get("packageName"))) - FileSystem.createDirectory(getPath2 + Application.current.meta.get("packageName"); + FileSystem.createDirectory(getPath2 + Application.current.meta.get("packageName")); if (!FileSystem.exists(getPath1 + "/files/")) FileSystem.createDirectory(getPath1 + "/files/"); From 6265cc7e0f0af39d162ff1bc97658d22f15fd49b Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 14:42:56 +0200 Subject: [PATCH 024/114] Update Data.hx --- source/Data.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/Data.hx b/source/Data.hx index 5346ac2da..3b98fca0a 100644 --- a/source/Data.hx +++ b/source/Data.hx @@ -11,7 +11,7 @@ class Data private static var dataPath1:String = null; private static var dataPath2:String = null; - function getPath1():String + static public function getPath1():String { if (dataPath1 != null && dataPath1.length > 0) { @@ -24,7 +24,7 @@ class Data return dataPath1; } - function getPath2():String + static public function getPath2():String { if (dataPath2 != null && dataPath2.length > 0) { From dfa0c2cb3bf75fbfa8dd1d1f37dd7bae85e22e00 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 15:36:10 +0200 Subject: [PATCH 025/114] For Stupid Kids --- source/Main.hx | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/source/Main.hx b/source/Main.hx index e81b523cb..bf1564a05 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -91,7 +91,36 @@ class Main extends Sprite #end #if android - Data.init(); + AndroidTools.requestPermission(Permissions.READ_EXTERNAL_STORAGE); + AndroidTools.requestPermission(Permissions.WRITE_EXTERNAL_STORAGE); + + //if (!FileSystem.exists(getPath2 + Application.current.meta.get("packageName"))) + //FileSystem.createDirectory(getPath2 + Application.current.meta.get("packageName")); + + //if (!FileSystem.exists(getPath1 + "/files/")) + //FileSystem.createDirectory(getPath1 + "/files/"); + + //For Stupid Kids + if (!FileSystem.exists("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName"))) + { + Application.current.window.alert("Try creating A folder Called " + Application.current.meta.get("packageName") + " in Android/data/" + "\n" + "Press Ok To Close The App", "Check Directory Error"); + System.exit(0);//Will close the game + } + else if (!FileSystem.exists("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/")) + { + Application.current.window.alert("Try creating A folder Called Files in Android/data/" + Application.current.meta.get("packageName") + "\n" + "Press Ok To Close The App", "Check Directory Error"); + System.exit(0);//Will close the game + } + else if (!FileSystem.exists(Main.getDataPath() + "assets")) + { + Application.current.window.alert("Try copying assets/assets from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App", "Check Directory Error"); + System.exit(0);//Will close the game + } + else if (!FileSystem.exists(Main.getDataPath() + "mods")) + { + Application.current.window.alert("Try copying assets/mods from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App", "Check Directory Error"); + System.exit(0);//Will close the game + } #end ClientPrefs.loadDefaultKeys(); From 6351fe49e29897fbce362ec2c3b9e1dec74b3b5c Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 17:44:19 +0200 Subject: [PATCH 026/114] will no longer crash the game --- source/options/NotesSubState.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/options/NotesSubState.hx b/source/options/NotesSubState.hx index f8c4fef54..cfe5b9a48 100644 --- a/source/options/NotesSubState.hx +++ b/source/options/NotesSubState.hx @@ -179,7 +179,7 @@ class NotesSubState extends MusicBeatSubstate if (controls.BACK || (changingNote && controls.ACCEPT)) { if(!changingNote) { - MusicBeatState.resetState(); + close();//will no longer crash the game } else { changeSelection(); } @@ -283,4 +283,4 @@ class NotesSubState extends MusicBeatSubstate item.offset.x = (40 * (item.lettersArray.length - 1)) / 2; if(roundedValue < 0) item.offset.x += 10; } -} \ No newline at end of file +} From 2fb1cc54681ffc014d34c3def1b450d46413b8dc Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 17:48:41 +0200 Subject: [PATCH 027/114] New icon --- assets/preload/images/credits/majigsaw.png | Bin 24430 -> 13484 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/preload/images/credits/majigsaw.png b/assets/preload/images/credits/majigsaw.png index 614ca6a533b25c527083d019d04b300d32f92325..8c761d5702d0e0adb764b704b63d60394514e29c 100644 GIT binary patch literal 13484 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 jLPAng(pIdJw+{P1qc!3X literal 24430 zcmeFYWl-GD(l(5{yUU^h7T3ky-8HzoYj6$j65L&ay9EdmNN|VX?rtynAGyz|_x|vl zs^|H3sAYG4J>A!IU(+)+v(+1^q#%imK!5-S28JvxC8qNJnfm7+4(9!x58UZD7#KZ+ zx0;r#ijfDIqqBp#m8}_>tCyo0nVF}RIT)Dd((D)QRLYj0#q0G5KyWssu|7|Qv%IwR zb#bxcC@eQIx4W^A;;cyt=%c-^KNhV!-7GmR2_Pmvj&xWil=SEeO$YO z{<}{O=MOJ;F9$bIU(bi0w$Fe48l$ zrekfH@wU6KTbX?Zd|XMNtPWhme(F$qklUX`?0J2g*QGFtq6yu8aFDyjH~ZB?j{N%a zI)5RN3wpbH5SD(B@3i=U4?%IVPKf-*meDggA-K1{{`|ljx6}5W-}}m;^7iUR(dp_+ z|DLPXe_+F6w(66A{A+7f_p9&A*u3b2TmDBuDZ#tQp7q7K$?Ugt?~U*Nxd?Yp&g&f~ z-Ql|*Bx=URUj$}qCB4=!y34hFb1RSNMt zt+5lLazDG~%8p~a;_Dp%U4O@f);@GBJ^6r_MCjteh=%QK*ho>SNz54Ak~1d^K_G{b zsKzE?!xaxskeMiyH*lN6-tDphJ6nb@1et;>KJfl(EE!sgZ)MQ<5qfX67?H26^1V1& zN2mVRSXnvUm9?GvIiHSoTZ)FR&908aK%yDFMsu8p?oBiqnq22Yt6>GfEeva} zRo}7dmNuJ~^^338>t-)$J#XJCLeDC`wWxTTJZW*HnL`o)(94*{i+}zatPzbpPBZ8{FuCNX`QzKgo5iZ$*B1MWH@BTHsizJ# zD?K&KAFG#eWUE??bJ=H#9>s1iu1qMF(7IliYflBcHqSo2X) zm>5Z%RP+6aHQeW`%4&+E{i4xCOHFZc>m)vKPz^`!*PN0T+ToC3C1>~bx8+Cp$~e=n zlnzQkyiHH-E)Bf!ajJW#ZrRQ+B=h|Of$7#Qv5O`GVimxt4-YsBTw#tnF(Ervr^&vY z?5c#gNE5Z6hcc;jv)Xc0Ebv35t-bk98|=$E6i5!M*!D(KvRt%DFpVDfIcZve@PA zMdwaciuG&jdOOzFdJ&gEShHrKhb7I{F;2Kb3wq()kt(^EBP8m!*iX)#TSdfsVHDJ# zYmul0VkugVBJvlz3mP7Gm*3<`hwq6dIfpJW_ELn4kDM#EImKjYy|h-b6sW_|xJr3cy?m!n>r#N|(4lR)p0%)$KU#>{ zqfZ-K_j@3#7aUrGWIlnDnz~LeR$g{@W3I--IL9Vrbr-Vn0@TJBpu{i8F4C+|b_6M< z*OrGnvLf{dRnNj8oqC(DeN4|m3@NtC?Do3qrZFADxjThap=H?662mu+*hd@5ql!!YHNo# zy2D?YCqiV7{nPz2ViJO^IMtOgIg;sHV$nbE5braohJN9AtNj>_lR)~*>P zmoZFb@~|{?f>(7J8w;FNOCC~<@nc5pN`vAyyF*=vK?Hcw%q;oAkmi| z|7r`htR|{-4!3)>Bd2m{GzNpfTcmkqwmj1|Hsut(&sSr06ao0YGCT?A-(EpV1ML7&lv3V+xJC zg!D#u<;b)%7s2R*jgzU=lt7l)jFF(Fh9%b3TvBrACSI3?*@bWtfHY zq91P-z zHRuwU&cAec!d^0G&uYW%l}In+3j`x*93R}Yrm2^EiN{c}wG+i;D_CdtYr7E>cx;WZ zqb2a&qN#vCPV7UbdJzj`4UiD>`&PGN} zky9a*o{ygFi0b6_q)NxHsObbW0>{4Z>D~YefpYO#p9j@yKGPEftSVfA>GRQmZ;{(R zGg|I_*U~^Zr=f236T2?7>~QdrcMzfeGCMnhplECQ2&xxFE<5f?!38UMTJ+_ z7FA6WfRZHBChuua3edwQEl779!o8XkX3agdC$KE3=Q6QCp_Yq=ryQGl<@>Ob`MhVI zBNHJFdY~|#M)5_<)sb)SFoBn|eg}!1l9IqFuVXd`$1)_KbA*ZdnZ)(M zUL_TH_mGvL@0ph0N)Z1wG zv}>ZiQdB5tnumh{v`&>oY`Ij_k1!~{ANL2hRqS^p%GF6IF+NrnO!78O|Ln}g8z~Zxj>VPlhCja*$eA2aEWFd;%c5OgZN6m zy?ONOA}IT=1fq5`@zRfxHcorKxzjA6-Hz5+mlL+H3`%y-%gzC5x? zAcWvHGq}}{NsH7G1S+YH3nR74hAMdTF=PAet^D=0)i!IwRF;Yr7T3KLPJ8s?{48~a z-`6?g{o%?It?A9Pim1#t*m8J-K&w#@1cK{ZaMXxXTy=}ohZqTgnP3@EMo>(6(wxAr z-^6(O2^S-gt{{^d3H|FRL(xP+DgD5nT%!UA65y(~s|*3qCsv5qM#IDRUg@#4ks2Yr zp2_7^=J#c*9h{z?rWHa=so;`Aqks<-5x?O2WbM&?W;gr#G~|AyYD4jrVEMi*40W@3 z)%idfM8dIi7NLIJ1@lnfU7qJ5tEUp;yxihTSOR98T5py%7))4&+aS;p#$2-~970tD&S@_-Lt)ryKzZ zOLWFq`mRe*%0Jo)HMa@^y~u^}u;<)ZFIth{IW29_gwF#L$k31v4e1p|NIaIv@mOer zTi1lhgN9m<^i0qDVkJ_lTIJ^_jHyh?Kh&&HhEuvy581@O?Bn2Te>3Yz5A36Oh?JF} zrHCTayw6sQkEfC~zJv>@mF&~7nIZ@RQ*eTf&&H=1&g;`OMyeijt(!x(83$4QuDcGh z=>KgF6YY1UR0qY>TqO|NK-^aB>4&l%u*3D)kU+zh^n$~9V~t3qO%7`ky$^2o~Lz* zU<^+!FbE+Q`!pC&OSslk=Bo$bG%bYBgD!|_tKOa*?VnU8P(ezIYbeJP{Sv#~Gf0@Q zr|Eto4IO8npvAwSVamtpk{m@ki4=*B&ajdJ_RSVONeS_&)CnxV&0j(+T^Lr?{_9m4 zItu^!N7iV)k0F~eWq^Prtsg<|ri~*rJvuaDIaakBQ6@qoE#l|od{gloknR47o3ezc zLf88k#k{n3XyLL2-bQgw2S8R%c6w)+GiN$f zTw9YF6ERA3hD#6{B0*v?AS^7ObUN_|+C@IE)>6!Pe*pV6?=&-CGujsU*D!ece!q-( z5!N38mt2dnpQm1;Eqz9i4?_76Xst>%O-6CCZUXV~w#%C$SVb8jVIPa09?DV?t-W(Y zXfEpE41E#bm{$PCWQ?U4uyQ7K74X1s=@{VJ!CkNPA79fxW>A<%tA8b6YL@)Qwwq)~ zdP>V^tSn5(!B#rVI+(TuI{{XiuY?w)WVV-M93VG@=+KAhZ(Snf`Z|Bn1-T3BEO-KxK6lHzC<79h)0=rS?_!D1Vr?%vBbrPC8JhETEM7XILYlh z(Mq1upNh<)Z6k~{d!vygGm#YbIdS)5>=qyfcqre=v<0v29=j1x5iQDNP@zK8kbDh#|&XF=DvQEzFF z^5q+FY4#ljH^TJmYgo|8Mr50GMGzsM8Zra+6Lgv{J}U>9plS#k>t9@kC4AS9``BTa z{x(vDK%_@WlbI=PyM02L=iFo24Lq$?(U#Dl*h8F5N-v*olLWGQ_Il$&IJI@=g(>3=FO31g8;&+kYbcrEacq0CRSSJB!VK{ zD_`4+GnrLVW)q-!?;oi0#}i{Cl4+n}f^dmWjDn5%c9R)RWhfGp_h*NCwLQ_faejhZ zXdWZJ7D(#{)uzmdRW^=BClyMu;CHGPDeM}RC+y^5s8rZ5<{c(e#6&$Klt>%_T zL9)uwMv1OQ4_g3X4%`;@M5&DIf+xg#h{f_rZpZGV+s-N)T$?Mn9H;F^0G5qmuPYkn zFWJswm;yqjVq^dW5-&NDdxo_IEx&o;_{1@;xTTn69nun!>BTORf>i0rY2_QIvyUvQ zC`j{W;H8K~Rq~SZ9_Efsy~Z{Mbu86THE$YY-JE)`yn>Jf)+jka(glhn+zq@*y}=0E z%bbJ+i257-f|*zu6+MK%88;szQru?e(CCg6(%eow_~%N zc?7J2DEu`m`!?YAx1vl}MNOZe$TT&6u7u|@LO^ZM*KcxBBLIae`b!{iU6hN@R!2L>w>bp!?C_%BHgC$I#5K5LmzcME8KIEV4JD0`w2t3W@U>zo2ZP8hLn$h7&YJ30mjMajifodt81HVNmF2C2B{;NdjWo z&qcp~W`Lg(Tq51RRaeP2-8h!GK>xTQAIn7%T@y*==knv<%jOQb-zHZdO2Vouay zdy}=lv$c~9kO8~oej}C)5z0Tn0`;8Q#QEQ14LT4mGHu@Of1aJ`lV!fOh;$p#&rmZTE`!UdjLzy}akBSw=Fl4c+8iqS-zMRRS+&s{++@)wfHK5&+Q{nxl!{$JxPnE6%Qs92H@f{MDD0zCMAIC0A=33r%@DskHXVTRyRx~U0`DsmV11_-)xIsyks3o8CMQbD zArt<=VaVHku-h7m{;Kx2fN_SFxttPwo*q7OPpijowv`<%ACH_CWd?JHsFnx90nC~b zv2SAE@WT}?qbM=#U?48mdFOZG*)hjO#2S2g0i*JfLSpVzKi0mb&$Qeg>{w3VfH9Z+ z+ZN5>@I)x3C=|yNsI<|Q3hxUOv|!~ji7{KQR*XYj;+nD05J6=2hhouqvG{7{zzUn9ujt7uu!Dq4 z;rQHk>49~_J$Jh~8j?;4`PN)Kv=zm#;&7~at7sn&eXm(;aOK^H{W)_96hE&YH83w# zxJS^h$*%+~mraxHckUNBS%fF4^GIyeDVPF%>(1lh+l<7Q8KrO0vb;4^fA#w|?Zz~x z>YXf=4b_s(X-w6qN#;}%wQLMT<%(*fT)w2d;gK$iohyVxofvaR6X=x2+d;XlejP9j zIpDm(HnL&D@s;#t;~BUHtSdPLK)dLB{sv~b&2|o)i}n}=!#HjgOPN1Mt_XPq=>*UTb~9fw9ERI^O5yK| z<^Zn^CBpAxtffTx@o0&#&N(fGu!7c^Q|yb$`b#&53X4~I7KnO5R!nU+;|_Zu6homAciG?)IU3RgP)wgYQV^<9&XEV;H^J4atmd0Z>WrWk z)Q=+Yy+pXvd5tHcI0q?^exD?UwSs1JJ)5lXpg;19l~)CoKjrN7>dU(|h=#OEnv-tf zdW#gxzz3f%aLRtQrs4cZ&CXx5^2GbqTedf(q%=e$7x7iiCeJ zqTQ+jYf)ei<*mLA;B%BzX&6TCgZzHx`3X?ulbbEzBLP6fUbZ7ks*g??S-31S`~({N zZpMBtg?&~bjOq;lH(l9k66|}J;i{PCN)4E) z^zY~{7Y4@Qu>-UcWj^r&hte;GkZqp`J|WR4vIY*3yyDk7+V_z&hIyZ1ICqLJMemE< zXt+3ZhK74>=D=-_V9`1^+gFt!vJjESp#j`inh~qY&UOs14M*ZK{IWzkq(8gE#gw8p zsKvKY3#yY!SsSM49VA7!q6o;N=_;|nB}@K5Zql@d3DBaVW1~E)1_Ap$%gCV-0~RQ2 zqfm~S8$W3`VHhKR<^hwEj)23mER2E+q)UCQ?f(E^2n4^*OT{@qltO@n}m+iF~$^sION_cox;=`dM-+S zh$qNGV_FKM9}xBoFN?p=m8zxl9*;mJ`=AaU(2OwS(!WA5gAN&S1ceA;U-s|IR|ZzCq8bNEbr7z{3r#JygqmX zf8=KZ;b{;OnHo4NGH$4Pac>^Xwy4!%wiveJO;1IXV>SV|)a7(q1+w*LYHPKOy$)>` zi`#hb2i4uZ3&YBlCIewV8n%r&wLFp_bTd;>0cJWhTl5zm)*(V+BvA#s&(dA6O(v3y z8DaG=%xmgYn$3&+Xk{uFp61s!J!NH;@+c)9;GW3K24rw#%B#Ou;T%Pz5aT!;=vFXS zC%Up<;a_O1%+0y6Q{W;Z9_dtR_0}$*hcqPNe*9FbV7Aw^SX~V*ItvX@^9XL&ydBD? zo>5hu4BT(;hw&j=fhm!HVHYb7t1*bbgT!NFw`&4^T#-LS*sAe_IVmpd64S*yw^gph zraWd#s^GW7Dw4QK7;fdWb8L_s@B0GkO`fIoZ?<$U_e@BNO*R}&yhPN28Bp%Y%Lfdo7L|OG6WV)Q-mwT=%K^!$f#SjGrpIm)L z0V^lHmeGK8zOvqB_$BGdgQUzl&DmujsUQ+kMrKYr#+Kr6)f((frNU;4UwpOJg{|$N z3*C3(^dbIY4+;zi*%gaUw3yqy>b&a6P*z`Ka(7As5Ggd8oeZ5U9$EVccKIWfP74wZ zl2xrJ`>_8f&Qt{-c7FjNE{Pp5vNGG}W)Y0pCNK>nL$=hZbKRH=eaj{qGj5*g`i#26 zHp3g%1}WUK6=OCYjhP-fuU51sK7`b_F#FQL5)vVZ6=fk!cBd8}rK#HjZ5Nn&BDUxp z0hIfp9+Nx6fo+u7K3ou0MJEwpCPi_w#mEs+-oDvq5v?8k5sEgvuMCYt4M0>uUs)h# zYU`I3Ap8-1;SgfY(IL@ksylmh4^NgTM`k9(Dap+E?(D$smu#sZwpU|EXHFznYfxb<1>dFccAx#%DSq)8WK=~dnyGoj$8FaqiFO<90 z*%(V}b+P9P`>rHNi^SNhFSwG}F$9&~-jwi(sT9jLQz}g{u6;ABDTOj7Ws>-JVI7er zIQ$!2(jem8Ml#_Vu8JUE4dsuqkEF~9=ND^qt7ZDF-M1h5;hZ7VPFe3jWsa{>1(egx zkjBZ5U~kgq*WpOO)|v@OLyPXHZd;}=vCJZKoF`%Xwm1Ufm-EbXhxHP4Ju(HFq{!0v zNhCg(d8oxNA;@wxD&MUKhipjudB`PHeO7RV4Cip9iIf&V&(YjUcdDQ1tcy@=8Fz{E zWi2}SMmyoyt9Z$fRILvd4||yDLV1)?j2E;ko5c9u2f+diNn(owqX~}y znpih}fZ8^lnf}FnqJ57c#>k~E0ZA=5GiSdwb%}(P762R$+zp77mM3Cn#KtZ;9ia)D z-QlW6FfSR3h+e&f6XCu*FOHS1ji4u(6HRbx z#p45wd>$=D?aG`DnWi2$N~y&jL1z2&NNtjhvW28p`lo0?_qTwDgbR(Edx-DWQS^ti z=-%$xED6+_X5A*AP;3&=I_QQfU$LL+kg6-nzZ~rnI!YdzDvLXr_%^X2r4BGIiJh^w z8b(^X{T^+by&F$FE)4-)R0Dw@p3#Zm_+1YVN!(7#axGEqJVdb$BRP`2e>%~gTvG7` z{?HCeSmNl5^^+oA7a(G-wWb%=zccJrR##e5Bi_nG!$8m#vfa#-?Ji1OYEf6!u*MJp zv4NAqmfG`-PwPc6aF11%rrJsu9D8Y%qBXKiK*A&DJz^C9#3_3CG%V!58jB~W5_N!< z`nlMk^r4az{I{ntc7bD;a#xt)v$vV%jD?wW@tH7D{Ab@01>#QLeaa|>4_r;E#x1$p z)Xi|JNiU-EfIBqaR@G}TlU{hEAkb||=aA1ZWnqSz`%>L4t&nrb^wcS`cI;tI){W41 zWgA%-V&nPv!3j4+z3i~*PoeG1SpS1`a#Y36vFW!^`i$)5i6bCSu;BR+k-gw=c!E4OR1R>I1 zEXLBdP>4BC|CG(bMar7kJY%$EY%0r@61!;rhc6RTF>DQup~vQ#S~ zbu1@vcCNDhsqxKkS^aP!faL9d6q>uxowGpUp~wuRWLf(iBXvJ3Fl8s*O>f^ox;iah zfBMIOhDq@S-pJ40s{!3G65j@6Fdr$4niA3K5lv5=g#DRA3Og{C+yZLdAS3s2jI}nu zUBW)O>oWI#d1~e_X+K=Z5#@Un`v&;>;y+PBScY3#A2pbg>?x2@l=WiQ&NbY$PZ-qM zU`E+EV_&yEQo99Ytq3f8;WWc1CzV&@)=RspV?z%WW^0z#LS-JNjg0RE+B(=Av0vk z>PW_!5o!lCX2ez!OT~AU71F|jW0x1EGMUeArkkACifA`$t_Pranb#2~>$Zx$AcSFP zO?z~gCiy#mjraBEdV z9f;UExQ2`hp6(Z=_o$ajNBjh3^iE^1>GzkF$!l0>Ma6zL(^5agnhwhARCfrz$T5D=xuY?$;m2DZwHO%FO-Z%^cO-#sNw0 z6B(Nys|s#C&2%5Y&Fp!&e(s4O!C6AUt^RZcSq}Nl{rItOM^j`gGNKYi#f(-i+!>RI z49}C^S_Nipdlj@D2H#6);-1f7ceV)rOjWJSplml7FVPmt%tI5=t3)LH!=wVxdS0_H zIG%@`3>b0!MTsC^8kU_YwD-$FR%xOrwR$c6c9tmkq1H#3Jw|)TQCK1;9e1L1(y@=X zh~LBM$>}=0(9FU-qM>DYDe_dxyXXEr_u1BFexH`TW!55$Mc;PZUz(jyHm#Eud> zFnBrAaT|7T=jLDtWz!0)VB{k`afTIiuOzc3ZIdX3J*Z| zikF9%WF`^r26# zL5|#l=c((h$$JD*wLji;RKSH1s<-?gvAz*XJw;wx>?kQyAI_)9-^8I1cqX6L0K{rSv_C!NrvX$SAp* z=`iJ@RdvxKhgGmox?r=HeHha%RFN^jV9T0sCi^^MTJE$86@0CHPFyOmvh~@gP*n{f zoVDVFhn`p-_n&leXA(M5N8}H&E1~MIi?#Uhj^Si%F-br10(HzG7 z6fUV3=2E7~zjWf$`c3v#s4-odg)C>vU^cB%^v<=d&mtQns@8d?hreF!+L$ z0CwEgP8msFom*Ae@8Zdjyzp|eo)NiTshBhk4jPUvYrh3mw*Zxf*!zR3Jv@b{LrQp? z+8WOjq;ic4Yw4#7vHSYNmXGAMN$u#iv_#9i23ED*WnE13A{Y0i<%bE6V2#b9#KYRl zWz7E5wPAHGYfOic5!@%gn26(O7(Jy=5D~XTEe#hs7w9&AglId{z zM6Bo=4-K6UNZGBVRP>0T=YxU;KdZyyTIdt&K?|S54o*x+{}h*bX8h0?aS^*kvi7u= z)^P@wuWVGY$N^rKX;$=`g(XWD8?tu45Wg2p1cU8H%$o&r^1=<3bp5P=Z>-~V@@MU~ zJj}h=Z=MoDoC}zX@seVfH5!z!iA89+m~n)z!oMYJ#u$5?7(oo@<8=wr6PV$V-;80$ zh{t8ZWccKXl+|J`L#xIR_JBXEi-&aXwwaK2n^M^4tzyVxsVL(^;P5$;l>Iq z33$VA{k8OJ4VnHz*|jzYkQA~cY;Co-xg>FHgGAy#NF?V;%uQ9I1v|62mgg}%$Jy6+ zd71+aA3(bJ3!L$+-V2$v;xGjlZ}^R%7-D8FCeBulu2v5AWPdP?j2+xu z`2m3UezJe~XXhv{|4(>(m%p>{&IgmHks}ieBQuko9n-&BxVVbDzk~eUq5svwMeV&F zoJqyZ#lg+l#7x}X%-)saUm;9Q{%P;%=4|^{IHo2{X0~Q_@2W2Eqq6+lkdo5!O8>O@ zLxF{ro#S6t?_~d*rtAAx693fvH{bsB{1wi>I`VG*zia;^_P>ZSvgrun2r7g zLebgkJu8iD|JAEMP^Rxt=A0btJnt4jQ&vtRAiFV(DexVg1IWz6Zpvc9X3T8N!uc1J zsR>BJ!P(B}eLAh|j4aHU9PKUs>i9!ANLWdlAHd4U{67*UTO(KVcZ2seU}bOW;NkK= zU20Z#W~#16fB0nKWaH#y;b3FoWar{!VPXFtB@HuYm-k%!gUZ6p$oe-*{!9$$J)C!H zjs9fnJHTHS@6munoz09~9h}u19Blakf1D!wWBFHtlkxp+TBNL8-Zi}b0)MP zXE)(tGY4{UvYG(dc{tdC#zw4cKob*oHV$SZ77jCGj(9J(~9v z`YReT+P{@DhQ277w@9*>Q|8RtN=>HD#AMyKNy8cVof5gClr2OCP z`Y&Do5d;5`@_)1I{~BEg|8w0jvwuGUdAwg{!10Z2-Y-Hh#uJ3*UCV3H9TWe8<}VE`OJ>SvT% zg_ezYqsnqivbSipadlHkqk|tmiB~64lQ(xMcEzpMdb5GdQ<*xwO64V;&WsGj4Gdh+ z=nG&zUM}(bao49aQX6VEA8PnEOhf-%3&HQ>$45HrFS6TVr^fk|T@l6@0kxwFM@U!d#S}+T5F0z+j!;S%sVrsUSyOyCifC|303v&5sW5v4 z^759_W>akV540m^IvU4xscK)iPVJGt23>oXEXP?WK9=lX> zQG;2f>dj_6EYIrg{1*_;m+fBbizknfj3N|mI z@$;)URS9b<1Iy+`!fCuizbyv}_u?TEU{2wkKO9;U?|r46@zj5JVjypC^x~Z{novHX z3{Yx_$jcYcXT3Zz;cTH`XqI9%egHh7FT&c*0AqQTn)R#iMSK51UnKNLsfkNgE@e9M zRCOjtp@Hcb=02NhQC3VQ7sHCMH@ks|fk-VHD>T@~?Y*<)OXmdPV6mvr;xaN~LNxyV zLr1$g1DtTw8|?5fxuc$&{%#8)9~PPW!|ph^ombrevT2zo4}0QkpL9(huV+MG;^tTR z@B4M@_0ysVXxnUsX!F8LO*&mqwn>Q*gYerZ0=x+$ZeGGrunv_wFL|j}{1&2vVB<=OQl;92 zWjIPArKUU~o2-~jS17i;3{AU5fx+d~UO0PeCfo>@sdFl~*tMAs=zv1?1l_WP5H@nXm8QEJV z65Oo|DiD>*?Cd-|d}CtJs0z?D5azUXWG3$D4H{L5x(i%#`TBg*k8wkENOM;!z z6*H;=D!uvZGm9h{ZtH{kDvF@oPn^YUK3-O95S-o&$e-|7P{=iGxNdlk#aoh@AKCPw zW11(~7D@!dAT8d0SfHpI3qtMuZ5O;H1OUHiT|7L>Z^l6(V%9x;ThjUZ z%~+p*w-l~k)$lX)a^S2?In|AwB-I8xsjsMEXHXvmBy^Mxg|bbNN@@07Z;IwFdJKZ!6J3z- z$QTEQI;jD)#bTd4}p~f8yb1dCCA54rC`{BU{vc8Ma`}# zHM?(nxdRrt_y^4vapb>;V$NTm&M$^Xeq`Gb^HeZs84rvJd%o1gYe_4gt0S)~OVBYi zj4RC>_}R7x?dfsh!db@h3>n`$a-VY30z-cr&FPAE-S~#IKD|d! zVI+Dm7b-VR2MB@t;`9`kLzTRT24UgC~Eu{UsC zBhXjA=r%*LT^wBoGc+KIwL4HE9J=37*dUs(PlX-`54J8vz>A~FW{@tDgOfyLU6vj6 z<$iHhBO}8P>fH&$F%c&H0V>~0HdcRrAC9SF3+1L@ZQ{A8z4>jLyMeCEGB!{oSmh{NIgs9-b2?l++FPFJ)H=6)VV3sR`Mtr#@{Bzznlc*?=M1&`w z9Wks+Y+<%mAlUYvg+g*NbZFBm{^Bq7!3I{T{61-rBHMTMnvF~~^RJT&RSI?&A>!h@ z@<$Paqm-$W9@i+L8BCg=KAC^~fE?~Gm8AG%uCw+86E0-1Aq>%% zUNwAPY40-O=4_o~5CMkQJ%>Wx_~s-_n@3rDs&>;64ugpwnQ;E7JaPQCA{A-zK{gp+q^;0chmkh+dZf0YEKcSdtvaiC6)xG z>a6)hKLU*U(6V!L??}mHFzoVpCWl%|T3Xu=d<3^>t=O$sA|&ropTkfWS%%VX!v6k_ z5Umes(ReDwz_#LI$HVg7lAb4h3P0BNrDEA^pPJk;#^8KWMVIxI*$bF)%CyNn^f4zg zoH6$Js4!4Fi&dfO;3%AzlLZ?pDT+n5*@(+=y^@-ki!`Rp2kt#0JT_{xM5)61`mLDs za+8P7rPi7Gf!CJ|7?pZM3j+;TQTHh!3mZpQYg(-0ZtyP$1U)ngu7YZBuM;1)zqo8v ze&jGB-E@2;7n7^YIt{`dC4|Y(2X{aF@dX=%V!M!G<|8M5sUbQTsANGQ&nwO#xvj^_ zw==g;A7wQ?qCA*20F8_1qpnZ9z1MM8*xYO~_-lzmh4Z)5c5k2@e+&A3RaFCP!nE(z zUR+FnoLlNyvxOVOeNd2e4O7oG)mO74*-t&PRTV!AHwQ7b2Z^ zW_jy?x&U=ivA(zf-j~2$MIA(veS2elD(0F<259L1?eA^8oLp7e{sLbpod2Y*5ar)z{xeq`p*9TTokt+%XV@s6Fq8Dv!Zv< zVKV1rtNqBgqV60ako1nWJ`tBFiD!CaoXv$wQ3YT&s>k63h$c*X1qhOcAvuwL^>7#t z6X{u(uTfi?{TT(+-RQd0V-+5dY@&uFL{5#kCmL>pOD`!=2!%#8d~~J#@STF7YdP$* zcZgODGu8Lg#@r3vb(Qfii=9wy$E<4Hh0njf@Yov%e%7MiDQ!1F&al&p8J?)xxBPZ{ za^44$9pWjLJ`R<$IZyLBrroF=CZ4ywO9fr2!lpdj)@e|}^g zocaek-tMoVo>wOC8JA(qOOB=Qxz$Ms3k#;0TP=e0?> zL>}`4-7k#DU!7qfZ-#L{RKm_!oPu%Jg@k+79M8GZ9M**F0Hvw_{@f-av2R% zVUZ};32Mi_KC`QwG8NtFkBFzVVOb6u(q99uJ${Q)7btHnX=kH2Z)AH!*QD^9*diAf zo2O=2H7|5M?GwDZHXw}*#Yjo`ARI&Em@ScW_{xG;>7;o#f+nAFN6Y}M=Z8$U_+P0MWi$$o%Mq(TEpRd7xs1XCArCsGiL zkf(Hh|G^>gN#M(2tXe9+50=ku;~C%9P{#iB3=ayCBadO6XA#l4{~IrZPO=@qc~QS{ zL}jA{O3%2jhyFfIWmNh=CHn@uS=yMR-<|Y%EQs1ahVKgLFq$o|;TIacOX@s25<$q} zvL@?`4&SpQ@^Z8I!7?rcI60O|4XbE5!xyz8OJQ&*h!|4|S=(jz>#F1g>o?7h;&VGQ zCPzoT2Lf6!@eB>O)~f#0pBu0DjZsiSY+GqFR=;S(3Xg5YdBildxmAwv>`A#GqHdc? zhl>E9p#h>{5k&r-BZH9ui(H`dcPdy)pCFb`z9J-_7G^j-pX?Ii1X$U=0d>W0&(aj+ zLEaRcwrD&@Ro7Rr!SA*UDoS;0fs)>FK}l^r$hlegLi%=cfC{Fbe>UFkHQSZqgVg`1-TSP>tKOMIGldo zV~;g6>~qhpap03UjMBZU9&6JS^=S=pS7%*+y@+jh4Y_W<*+`-Ca*?t!QzzcCM7n@z zEs;<9_SG_OoR(R$ME?9|LonMmBugZ6?QXppS6tzKk!H>`qrr_g)+84hy*E2~xOYgd zKwy9aRj!*41hhQzNZTsH91IN&Mx0kyoBv;VMdbV67a1`^x=NBYM=l4nSe8gQY?fsi zKi-rCy5}Ba6RNB0{iLd@5*a@}-7kX%nNdJQWYsEL3JV)-cuN9-0liX3v|*+LTU_Ki z{dAF)E4#k25(%RVZQpLTwQEIw_dAgbFBGY$5D5kkN|+8yGQVF-G-@R0=+PpRCmXWO zoh$O}vqlp17CiKj$k?%tWIV5Y7mq&Va(-XLXzY9i1u$rk zi53_=+ISbbBf;aHcVOmBXx*KJxi|OO)em?N*7^Tz&9n z_W7oU2Q5>7-JEdRGz~I5g9aUUx2v$@C z#~fn_S6<%slYaOieDo2lTW13NR<1NY!}|Jm6HS>~@vm!mPr=_ZOQ?5xD0Eq;m;itKn<7r31*@g`>5^dP9^a>gS z2b#~rhPCdW-Lbb+-=DdoLxUDKik(zg7~dVwXt^UAC;qT8Z}sa9rw#TNV$ zxa1%g{wF4ybiC_ry#9Llum3u1b*w{4tQPMn5;4Q+$dN{8D=#-ndEdTfD=jsWueHF& zHEZCLPhj(AL$)0|jHFw&3OPt5h=%(V%xjDEYLQq{QQ_0;*4?7uwswruO`541H46Um z5A&Aw2o|8CZ*5n6E#s8Gl_sPDR~XETz2 z@)MXpAJN*R@dF}9Pk=)X;f^^*F?_f&gG`uUq*`i0s!+&Cy0Ws&J`!GgO|fVZEMK1B z?YA36>qyqA=k0)724!Vax6Pc8D*9n8?Qb_@K&-K0gM`C%Ejo+K%SCExde%^Q=ba*v zNctY4QIW#Jc3I$cH@T0x%WKe)W!Vx4XbFW(#7QU5Dbc7%X{nZB!}e%cqT#copD}a4AGOArHhH-%*kmd7 z6HN8J)OYzPbq(MB?jT-!O<1%DzVekOZAyj1CXK$QGi1ukjb7I@wRMaoeERewb;PqM zFHbOSnqtNbQ|YI?TvTx}DiT2jgCwKnq^(OOOHB>3V~3KB8w-K6fn%Fl*00q?r2TCq zRziZo*K|DoY;sY{5P-bM%4iN}hohWWA zuvK7Vm)*YvgZ;I!%%;WWi6^?(tEsOy*)`SG?v$^d#6=gmMf;UkZflBF$_gtvjJAXW zjV%se7hROAb~H8`9k;&T{C3q z9aghNIhceQG9=gWomt%Xx4(twp3}OaL8YoHYN+&wLW`AchaJZWTV`>AFfd5LFbxAN zh-h=|THq4}D{EkVhh~HavBrmT;;|-7NK38W5bFEjgYLxDAw#r0_gp$=>Gs=2uDHS# zX?eJB^3X%>5hB$Oj$NLC% zhoS9F!f1C;eZ~d;Kr+GsKvu4VKm5U{1Kr`m(K_uK+OflwlT4+Zxo$A|`J|JYEbjoU zS_QxPP5SfKzix6F_v|q<$*ZnHnL@no<9b$)5^YKhX=#r)sl3L@t-YT zY@!D)y%hDwKO(z!b-SN2=@wJXyy@*%C&rI=XMkrAPL-Alj-wbq-W0q`xpTr{Gs*J% z6@h>PEM9!krxq?$k}P_c^#9%!tgPI~{P{ibW+kOoGSF|EODtbbd%*?WL#$u_x_Q6W(xojQbH^R-{UZ^PyYFs353;Jtm?|E5#5iUP3R?H4 zjT&VZG@m{_oek4gy!W2TqUoe`6s6MZU$@o{Ey1=$zV|(s?@_}8y<)1X;a=Cn4jLr# zmu8NBGj~2Jwk{vwoxRWw|AL?{` z4d-dt?0WFC&+d9+z5TYx*s;wwbe}$2{`9Bj6H6B?$lZU^BrTga=kB|Bv5`Pir>6f- zn`U&dB}>w}OjqL5PmSb@L=I~1kd(BXFu^49-haRA#gRzFNZq#JvByM)49PtIOJZ5W zdzFDs!(FZhC@vOx{PC_yy-#7w7LgerQ z9hhpvc2^~u$&Q%qml(cE~x-v%?2h?eqQmZL~ zGxg?lMW-!YD$>8dc9|Sn(7T%UDJU?}tRqHzkyp6c?NJ$TpaYh|HML6en+kom?7_-aHIiNn(|2 zSd(Ri*0N$n*IDGBcp`V|y=<9LNEa?N!$3Qd3}o`;bUpYvbIgqEqKnK_e)@EGXZDoj z%D&Eq4aRix`RBR&u2|tR1WRRQu7Ol*Q~N7Jb+9uQV(OJcV7B2@l)5aZ^JdM;RXE$* zNts@Iw~k=+sT6V7uh+70p^3YiF~dZ;9(%0u3Je`;44acDn|r$RPSatIW6obyCGzgO zM#A2EuQ~UqQMt3MLq)LWzMDC-=|z%)g0!(VbHDZLv+a3rNGQ}VQz-OmQYB}IeQkI- zhg^5xZEQB3Eyq|>BXaxgxsvBkf6A4L)zxN3_~MHuRA%vF)9|ZSwat7mZ=T4|q2~N| z+~E$x?rD;>WHc@;Z1O+KO*iGP6jEO=a_60HQwx0gunasCIKzSZW`~`dZZgyA7he>4 z`DHVVtyp0S&u-deY&r+4p!fObB7+9yrkizD@wd#OWa(0o>C;ousD^CIm$&W!?+I+! z;97mc_57LlUsWYiRFv6P|5u{XyzU$VRd+}&HGjS&!(JcI@V(YDLIlJrDuS{yMNyH7 zS1&0s(VeMkEdBa{-!J(6rW|)DWa6kEd{E0@{^Anj>Z+?W^X6Gi>ExXW-^o7qw%g#3 ze?-=;Gj$ZMywb#VjTm9>wYg>WI&;0&P*-ObRa&q>B-xMZm%lV&L8&-*FmY>l-G$t9 zPwJbU378au4To*GYy*@z@S=v=E)5g0ERje=OaJ~g&1J60kA9SJ&E&drsM@f>%)m0D z6J*pVW0qLDROFLSjH%#Y6_^tVBbh(?$Vk7nYt1ojz1Jm6L_#6$T99h{_T1-vt;JC$9|Ki_HA(cD#v^!Dw>e>i50D}`SM z3^0Du)No%_Wrp{yTg|q4vl*_Qd%MIPmjD0+-AP12RL;bH4IOF}?wK=1)~#z>xXa3w zBBMuZmz}P;$Of%N?!G&77P!HN5xrhnZ>P>RQp2?x9@X%s18Z&A?!f+J{7<8XL^74z zNo}cm3LPP$j2Mwp=(|_Je(Nn`o+vLjog5Au6NqJ*zoC%v1Vp388xagPWhP57XlAsF z7q{(NyLO4(aD(kKwal5*yuMdem1#VV+wkWeOYZ2&8RO>p^L>7>%A!$gdrgflg{T9^ zDi~=Q;tjT-SfD@9PbJsz5y(>}K{9~Jee)@>R2%MJMWgVwufdHs=B(G#rSbTw^{4CV zO!o1zWhMjYv(L;bX7%;ymAUfsVdzkk`afj~Oq*sxquZiiEnW=Y{HBO)o4rpt#gvI0 zJUDmXKmHN9wLobU5N z9!iB0BEbLz#RU5oVQQcb!H~02!3bbtig?QJH!<>OoBwW}_^7+69g(iaFh8t2*m%Vwl zCN1~h-xLHWp^(XiT(!ys>&>36<*c(za!E5GH#%bhOb=b)0RX6mNCLiM!<`y-w3rAn zbEe3>_nK*ZZEf!$nehy0dE*U{!GqIQ^ARJAtLp5tCc0dciVE#Xf1o;= zB$$FTG>lay7xGJF*>e;K6%{52?}QUfA=y+}>|w*)%K~>d90zk11^BB8kQ$`;FuYp7H3{}imyu*rs(@?d*Q-jJSb zf3Z3QLQP=Jy+dm6jTJ&d8Bw)>%|!q*{J{xClUo~2Iq>=9P4Ry^ zvK%-@pe$7jtc`|Xu?h5gh>wkH0hdJqG7p)4;}c#fn7<{Mxu+#Y#-3@ zcN-?R_5M7Gbp)XrB4IerGBeGw7L*ATijjIDWoD#4ARwm5nNN~#DV^*C%lHm$1q~W% zEK@-CWh)Z-wTi{+4mSzq5vwPqVKkaYEH)^i^*}!qYKSTbi5ZF;f&EIUjkO}1qEO?t zn1^-^wHhp`sPIWeg>Mu1Q=3#&_>QQM77rdgc<|uCg9i^DJb3Wn!Gi}69z1yP;K73j x4<0;t@ZiCN2M-=Rc<|uCg9i^DJb36F{y(Jn)!cH|Cwc$?002ovPDHLkV1f~0;Yk1h From 59cba03a51a8b03b5bb64e3d7c41a1f43515c39d Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 17:52:19 +0200 Subject: [PATCH 028/114] Better quality --- assets/preload/images/credits/majigsaw.png | Bin 13484 -> 13916 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/preload/images/credits/majigsaw.png b/assets/preload/images/credits/majigsaw.png index 8c761d5702d0e0adb764b704b63d60394514e29c..46b85f147e1c1dc70a90b922118e9f8f76775503 100644 GIT binary patch literal 13916 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 jLPAng(pIdJw+{P1qc!3X From 258ed0e7214f09937f680e6ebcdad1288005f0fd Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 18:23:03 +0200 Subject: [PATCH 029/114] Delete Data.hx --- source/Data.hx | 62 -------------------------------------------------- 1 file changed, 62 deletions(-) delete mode 100644 source/Data.hx diff --git a/source/Data.hx b/source/Data.hx deleted file mode 100644 index 3b98fca0a..000000000 --- a/source/Data.hx +++ /dev/null @@ -1,62 +0,0 @@ -package; - -import sys.FileSystem; -import lime.app.Application; -import lime.system.System; -import android.*; - -class Data -{ - - private static var dataPath1:String = null; - private static var dataPath2:String = null; - - static public function getPath1():String - { - if (dataPath1 != null && dataPath1.length > 0) - { - return dataPath1; - } - else - { - dataPath1 = "/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName"); - } - return dataPath1; - } - - static public function getPath2():String - { - if (dataPath2 != null && dataPath2.length > 0) - { - return dataPath2; - } - else - { - dataPath2 = "/storage/emulated/0/Android/data/"; - } - return dataPath2; - } - - public static function init():Void - { - AndroidTools.requestPermission(Permissions.READ_EXTERNAL_STORAGE); - AndroidTools.requestPermission(Permissions.WRITE_EXTERNAL_STORAGE); - - if (!FileSystem.exists(getPath2 + Application.current.meta.get("packageName"))) - FileSystem.createDirectory(getPath2 + Application.current.meta.get("packageName")); - - if (!FileSystem.exists(getPath1 + "/files/")) - FileSystem.createDirectory(getPath1 + "/files/"); - - if (!FileSystem.exists(Main.getDataPath() + "assets")) - { - Application.current.window.alert("Try copying assets/assets from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App", "Check Directory Error"); - System.exit(0);//Will close the game - } - else if (!FileSystem.exists(Main.getDataPath() + "mods")) - { - Application.current.window.alert("Try copying assets/mods from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App", "Check Directory Error"); - System.exit(0);//Will close the game - } - } -} From 263fad9ccecbd07fb8d6ff1840d0a0ddb2799bbf Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 18:24:15 +0200 Subject: [PATCH 030/114] Delete FlxVideo.hx --- source/FlxVideo.hx | 39 --------------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 source/FlxVideo.hx diff --git a/source/FlxVideo.hx b/source/FlxVideo.hx deleted file mode 100644 index 9149a78da..000000000 --- a/source/FlxVideo.hx +++ /dev/null @@ -1,39 +0,0 @@ -import openfl.net.NetConnection; -import openfl.net.NetStream; -import openfl.events.NetStatusEvent; -import openfl.media.Video; -import flixel.FlxBasic; -import flixel.FlxG; - -class FlxVideo extends FlxBasic -{ - public var finishCallback:Void->Void = null; - - public function new(name:String) { - super(); - - var player:Video = new Video(); - player.x = 0; - player.y = 0; - FlxG.addChildBelowMouse(player); - var netConnect = new NetConnection(); - netConnect.connect(null); - var netStream = new NetStream(netConnect); - netStream.client = { - onMetaData: function() { - player.attachNetStream(netStream); - player.width = FlxG.width; - player.height = FlxG.height; - } - }; - netConnect.addEventListener(NetStatusEvent.NET_STATUS, function(event:NetStatusEvent) { - if(event.info.code == "NetStream.Play.Complete") { - netStream.dispose(); - if(FlxG.game.contains(player)) FlxG.game.removeChild(player); - - if(finishCallback != null) finishCallback(); - } - }); - netStream.play(name); - } -} \ No newline at end of file From 3a4515a65993489ac11416601b2e687c260d4ece Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 18:24:42 +0200 Subject: [PATCH 031/114] Deleting unused --- source/vlc/LibVLC.hx | 127 -- source/vlc/LibVLCBuild.xml | 28 - source/vlc/VlcBitmap.hx | 584 ------ source/vlc/cpp/include/vlc/deprecated.h | 69 - source/vlc/cpp/include/vlc/libvlc.h | 634 ------- source/vlc/cpp/include/vlc/libvlc_events.h | 238 --- source/vlc/cpp/include/vlc/libvlc_media.h | 603 ------ .../cpp/include/vlc/libvlc_media_discoverer.h | 111 -- .../cpp/include/vlc/libvlc_media_library.h | 99 - .../vlc/cpp/include/vlc/libvlc_media_list.h | 209 --- .../include/vlc/libvlc_media_list_player.h | 224 --- .../vlc/cpp/include/vlc/libvlc_media_player.h | 1659 ----------------- .../vlc/cpp/include/vlc/libvlc_structures.h | 73 - source/vlc/cpp/include/vlc/libvlc_version.h | 55 - source/vlc/cpp/include/vlc/libvlc_vlm.h | 349 ---- .../vlc/cpp/include/vlc/plugins/vlc_about.h | 1301 ------------- .../vlc/cpp/include/vlc/plugins/vlc_access.h | 184 -- source/vlc/cpp/include/vlc/plugins/vlc_aout.h | 339 ---- .../cpp/include/vlc/plugins/vlc_aout_volume.h | 54 - .../vlc/cpp/include/vlc/plugins/vlc_arrays.h | 622 ------ .../cpp/include/vlc/plugins/vlc_art_finder.h | 30 - .../vlc/cpp/include/vlc/plugins/vlc_atomic.h | 383 ---- .../vlc/cpp/include/vlc/plugins/vlc_avcodec.h | 34 - source/vlc/cpp/include/vlc/plugins/vlc_bits.h | 197 -- .../vlc/cpp/include/vlc/plugins/vlc_block.h | 321 ---- .../include/vlc/plugins/vlc_block_helper.h | 517 ----- .../vlc/cpp/include/vlc/plugins/vlc_charset.h | 211 --- .../vlc/cpp/include/vlc/plugins/vlc_codec.h | 246 --- .../include/vlc/plugins/vlc_codec_synchro.h | 49 - .../vlc/cpp/include/vlc/plugins/vlc_codecs.h | 469 ----- .../vlc/cpp/include/vlc/plugins/vlc_common.h | 927 --------- .../vlc/cpp/include/vlc/plugins/vlc_config.h | 114 -- .../cpp/include/vlc/plugins/vlc_config_cat.h | 291 --- .../include/vlc/plugins/vlc_configuration.h | 236 --- source/vlc/cpp/include/vlc/plugins/vlc_cpu.h | 198 -- .../vlc/cpp/include/vlc/plugins/vlc_demux.h | 228 --- .../vlc/cpp/include/vlc/plugins/vlc_dialog.h | 124 -- source/vlc/cpp/include/vlc/plugins/vlc_epg.h | 97 - source/vlc/cpp/include/vlc/plugins/vlc_es.h | 407 ---- .../vlc/cpp/include/vlc/plugins/vlc_es_out.h | 163 -- .../vlc/cpp/include/vlc/plugins/vlc_events.h | 253 --- .../cpp/include/vlc/plugins/vlc_extensions.h | 318 ---- .../vlc/cpp/include/vlc/plugins/vlc_filter.h | 419 ----- .../include/vlc/plugins/vlc_fingerprinter.h | 92 - .../vlc/cpp/include/vlc/plugins/vlc_fixups.h | 344 ---- .../vlc/cpp/include/vlc/plugins/vlc_fourcc.h | 517 ----- source/vlc/cpp/include/vlc/plugins/vlc_fs.h | 91 - .../vlc/cpp/include/vlc/plugins/vlc_gcrypt.h | 103 - source/vlc/cpp/include/vlc/plugins/vlc_http.h | 67 - .../vlc/cpp/include/vlc/plugins/vlc_httpd.h | 149 -- .../vlc/cpp/include/vlc/plugins/vlc_image.h | 81 - .../vlc/cpp/include/vlc/plugins/vlc_inhibit.h | 54 - .../vlc/cpp/include/vlc/plugins/vlc_input.h | 648 ------- .../cpp/include/vlc/plugins/vlc_input_item.h | 319 ---- .../cpp/include/vlc/plugins/vlc_interface.h | 351 ---- .../include/vlc/plugins/vlc_intf_strings.h | 114 -- .../cpp/include/vlc/plugins/vlc_iso_lang.h | 47 - source/vlc/cpp/include/vlc/plugins/vlc_keys.h | 234 --- source/vlc/cpp/include/vlc/plugins/vlc_main.h | 45 - source/vlc/cpp/include/vlc/plugins/vlc_md5.h | 59 - .../include/vlc/plugins/vlc_media_library.h | 127 -- .../vlc/cpp/include/vlc/plugins/vlc_memory.h | 57 - .../cpp/include/vlc/plugins/vlc_messages.h | 83 - source/vlc/cpp/include/vlc/plugins/vlc_meta.h | 148 -- source/vlc/cpp/include/vlc/plugins/vlc_mime.h | 31 - .../vlc/cpp/include/vlc/plugins/vlc_modules.h | 77 - .../vlc/cpp/include/vlc/plugins/vlc_mouse.h | 148 -- .../vlc/cpp/include/vlc/plugins/vlc_mtime.h | 79 - .../vlc/cpp/include/vlc/plugins/vlc_network.h | 383 ---- .../vlc/cpp/include/vlc/plugins/vlc_objects.h | 79 - .../vlc/cpp/include/vlc/plugins/vlc_opengl.h | 95 - .../vlc/cpp/include/vlc/plugins/vlc_pgpkey.h | 42 - .../vlc/cpp/include/vlc/plugins/vlc_picture.h | 275 --- .../include/vlc/plugins/vlc_picture_fifo.h | 89 - .../include/vlc/plugins/vlc_picture_pool.h | 126 -- .../cpp/include/vlc/plugins/vlc_playlist.h | 426 ----- .../vlc/cpp/include/vlc/plugins/vlc_plugin.h | 546 ------ .../vlc/cpp/include/vlc/plugins/vlc_probe.h | 69 - source/vlc/cpp/include/vlc/plugins/vlc_rand.h | 37 - .../vlc/plugins/vlc_services_discovery.h | 185 -- source/vlc/cpp/include/vlc/plugins/vlc_sout.h | 251 --- source/vlc/cpp/include/vlc/plugins/vlc_spu.h | 112 -- .../vlc/cpp/include/vlc/plugins/vlc_stream.h | 231 --- .../vlc/cpp/include/vlc/plugins/vlc_strings.h | 67 - .../cpp/include/vlc/plugins/vlc_subpicture.h | 208 --- .../cpp/include/vlc/plugins/vlc_text_style.h | 104 -- .../vlc/cpp/include/vlc/plugins/vlc_threads.h | 460 ----- source/vlc/cpp/include/vlc/plugins/vlc_tls.h | 82 - .../vlc/cpp/include/vlc/plugins/vlc_update.h | 70 - source/vlc/cpp/include/vlc/plugins/vlc_url.h | 55 - .../cpp/include/vlc/plugins/vlc_variables.h | 756 -------- .../include/vlc/plugins/vlc_video_splitter.h | 158 -- source/vlc/cpp/include/vlc/plugins/vlc_vlm.h | 369 ---- source/vlc/cpp/include/vlc/plugins/vlc_vod.h | 84 - source/vlc/cpp/include/vlc/plugins/vlc_vout.h | 164 -- .../include/vlc/plugins/vlc_vout_display.h | 440 ----- .../cpp/include/vlc/plugins/vlc_vout_osd.h | 98 - .../cpp/include/vlc/plugins/vlc_vout_window.h | 163 -- .../include/vlc/plugins/vlc_vout_wrapper.h | 98 - .../vlc/plugins/vlc_windows_interfaces.h | 231 --- source/vlc/cpp/include/vlc/plugins/vlc_xlib.h | 57 - source/vlc/cpp/include/vlc/plugins/vlc_xml.h | 120 -- source/vlc/cpp/include/vlc/vlc.h | 56 - source/vlc/cpp/lib/libvlc.la | 41 - source/vlc/cpp/lib/libvlc.lib | Bin 67372 -> 0 bytes source/vlc/cpp/lib/libvlccore.la | 41 - source/vlc/cpp/lib/libvlccore.lib | Bin 1570 -> 0 bytes source/vlc/cpp/lib/linux/libvlc.so | Bin 109472 -> 0 bytes source/vlc/cpp/lib/linux/libvlc.so.5 | Bin 109472 -> 0 bytes source/vlc/cpp/lib/linux/libvlc.so.5.4.0 | Bin 109472 -> 0 bytes source/vlc/cpp/lib/linux/libvlccore.so.7 | Bin 925944 -> 0 bytes source/vlc/cpp/lib/linux/libvlccore.so.7.0.0 | Bin 925944 -> 0 bytes source/vlc/cpp/lib/pkgconfig/libvlc.pc | 11 - source/vlc/cpp/lib/pkgconfig/vlc-plugin.pc | 24 - source/vlc/cpp/src/LibVLC.cpp | 485 ----- source/vlc/cpp/src/LibVLC.h | 78 - 116 files changed, 25325 deletions(-) delete mode 100644 source/vlc/LibVLC.hx delete mode 100644 source/vlc/LibVLCBuild.xml delete mode 100644 source/vlc/VlcBitmap.hx delete mode 100644 source/vlc/cpp/include/vlc/deprecated.h delete mode 100644 source/vlc/cpp/include/vlc/libvlc.h delete mode 100644 source/vlc/cpp/include/vlc/libvlc_events.h delete mode 100644 source/vlc/cpp/include/vlc/libvlc_media.h delete mode 100644 source/vlc/cpp/include/vlc/libvlc_media_discoverer.h delete mode 100644 source/vlc/cpp/include/vlc/libvlc_media_library.h delete mode 100644 source/vlc/cpp/include/vlc/libvlc_media_list.h delete mode 100644 source/vlc/cpp/include/vlc/libvlc_media_list_player.h delete mode 100644 source/vlc/cpp/include/vlc/libvlc_media_player.h delete mode 100644 source/vlc/cpp/include/vlc/libvlc_structures.h delete mode 100644 source/vlc/cpp/include/vlc/libvlc_version.h delete mode 100644 source/vlc/cpp/include/vlc/libvlc_vlm.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_about.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_access.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_aout.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_aout_volume.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_arrays.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_art_finder.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_atomic.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_avcodec.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_bits.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_block.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_block_helper.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_charset.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_codec.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_codec_synchro.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_codecs.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_common.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_config.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_config_cat.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_configuration.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_cpu.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_demux.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_dialog.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_epg.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_es.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_es_out.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_events.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_extensions.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_filter.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_fingerprinter.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_fixups.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_fourcc.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_fs.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_gcrypt.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_http.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_httpd.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_image.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_inhibit.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_input.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_input_item.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_interface.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_intf_strings.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_iso_lang.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_keys.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_main.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_md5.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_media_library.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_memory.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_messages.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_meta.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_mime.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_modules.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_mouse.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_mtime.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_network.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_objects.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_opengl.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_pgpkey.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_picture.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_picture_fifo.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_picture_pool.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_playlist.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_plugin.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_probe.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_rand.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_services_discovery.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_sout.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_spu.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_stream.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_strings.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_subpicture.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_text_style.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_threads.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_tls.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_update.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_url.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_variables.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_video_splitter.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_vlm.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_vod.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_vout.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_vout_display.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_vout_osd.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_vout_window.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_vout_wrapper.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_windows_interfaces.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_xlib.h delete mode 100644 source/vlc/cpp/include/vlc/plugins/vlc_xml.h delete mode 100644 source/vlc/cpp/include/vlc/vlc.h delete mode 100644 source/vlc/cpp/lib/libvlc.la delete mode 100644 source/vlc/cpp/lib/libvlc.lib delete mode 100644 source/vlc/cpp/lib/libvlccore.la delete mode 100644 source/vlc/cpp/lib/libvlccore.lib delete mode 100644 source/vlc/cpp/lib/linux/libvlc.so delete mode 100644 source/vlc/cpp/lib/linux/libvlc.so.5 delete mode 100644 source/vlc/cpp/lib/linux/libvlc.so.5.4.0 delete mode 100644 source/vlc/cpp/lib/linux/libvlccore.so.7 delete mode 100644 source/vlc/cpp/lib/linux/libvlccore.so.7.0.0 delete mode 100644 source/vlc/cpp/lib/pkgconfig/libvlc.pc delete mode 100644 source/vlc/cpp/lib/pkgconfig/vlc-plugin.pc delete mode 100644 source/vlc/cpp/src/LibVLC.cpp delete mode 100644 source/vlc/cpp/src/LibVLC.h diff --git a/source/vlc/LibVLC.hx b/source/vlc/LibVLC.hx deleted file mode 100644 index f8f38fdae..000000000 --- a/source/vlc/LibVLC.hx +++ /dev/null @@ -1,127 +0,0 @@ -package vlc; - -import cpp.Callable; -import cpp.Function; -import cpp.Pointer; -import cpp.RawPointer; -import cpp.UInt8; -import haxe.io.ArrayBufferView; -import lime.utils.UInt8Array; - -// import cpp.Void; - -/** - * ... - * @author Tommy S - */ -// -@:buildXml('') -@:include("LibVLC.h") -@:unreflective -@:keep -@:native("LibVLC*") -extern class LibVLC -{ - @:native("LibVLC::create") - public static function create():LibVLC; - - @:native("setPath") - public function setPath(path:String):Void; - - @:native("openMedia") - public function openMedia(path:String):Void; - - @:native("play") - @:overload(function():Void - { - }) - public function play(path:String):Void; - - @:native("playInWindow") - @:overload(function():Void - { - }) - public function playInWindow(path:String):Void; - - @:native("stop") - public function stop():Void; - - @:native("pause") - public function pause():Void; - - @:native("resume") - public function resume():Void; - - @:native("togglePause") - public function togglePause():Void; - - @:native("fullscreen") - public function setWindowFullscreen(fullscreen:Bool):Void; - - @:native("showMainWindow") - public function showMainWindow(show:Bool):Void; - - @:native("getLength") - public function getLength():Float; - - @:native("getDuration") - public function getDuration():Float; - - @:native("getWidth") - public function getWidth():Int; - - @:native("getHeight") - public function getHeight():Int; - - // @:native("getMeta") - // public function getMeta(meta:Dynamic):String; - @:native("isPlaying") - public function isPlaying():Bool; - - @:native("isSeekable") - public function isSeekable():Bool; - - @:native("setVolume") - public function setVolume(volume:Float):Void; - - @:native("getVolume") - public function getVolume():Float; - - @:native("getTime") - public function getTime():Int; - - @:native("setTime") - public function setTime(time:Int):Void; - - @:native("getPosition") - public function getPosition():Float; - - @:native("setPosition") - public function setPosition(pos:Float):Void; - - @:native("useHWacceleration") - public function useHWacceleration(hwAcc:Bool):Void; - - @:native("getLastError") - public function getLastError():String; - - @:native("getRepeat") - public function getRepeat():Int; - - @:native("setRepeat") - public function setRepeat(repeat:Int = -1):Void; - - @:native("getPixelData") - public function getPixelData():Pointer; - - @:native("getFPS") - public function getFPS():Float; - - @:native("flags") - public var flags:Array; - - public inline function dispose():Void - { - untyped __cpp__('::delete this'); - } -} diff --git a/source/vlc/LibVLCBuild.xml b/source/vlc/LibVLCBuild.xml deleted file mode 100644 index 35a73021e..000000000 --- a/source/vlc/LibVLCBuild.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/source/vlc/VlcBitmap.hx b/source/vlc/VlcBitmap.hx deleted file mode 100644 index 677c55dcb..000000000 --- a/source/vlc/VlcBitmap.hx +++ /dev/null @@ -1,584 +0,0 @@ -package vlc; - -import flixel.FlxG; -import openfl.system.Capabilities; -#if (cpp && !mobile) -import cpp.NativeArray; -import cpp.UInt8; -import haxe.ValueException; -import haxe.io.Bytes; -import lime.app.Application; -import openfl.Lib; -import openfl.display.Bitmap; -import openfl.display.BitmapData; -import openfl.display3D.textures.RectangleTexture; -import openfl.errors.Error; -import openfl.events.Event; -import openfl.geom.Rectangle; -import vlc.LibVLC; - -/** - * ... - * @author Tommy S - */ -#if (cpp && !mobile) -@:cppFileCode('#include "LibVLC.cpp"') -#end -class VlcBitmap extends Bitmap -{ - ///////////////////////////////////////////////////////////////////////////////////// - // =================================================================================== - // Consts - //----------------------------------------------------------------------------------- - // =================================================================================== - // Properties - //----------------------------------------------------------------------------------- - public var videoWidth:Int; - public var videoHeight:Int; - public var repeat:Int = 0; - public var duration:Float; - public var length:Float; - public var inWindow:Bool; - public var initComplete:Bool; - public var fullscreen:Bool; - public var volume(default, set):Float = 1; - - public var isDisposed:Bool; - public var isPlaying:Bool; - public var disposeOnStop:Bool = false; - public var time:Int; - - public var onVideoReady:Void->Void; - public var onPlay:Void->Void; - public var onStop:Void->Void; - public var onPause:Void->Void; - public var onResume:Void->Void; - public var onSeek:Void->Void; - public var onBuffer:Void->Void; - public var onProgress:Void->Void; - public var onOpening:Void->Void; - public var onComplete:Void->Void; - public var onError:Void->Void; - - // =================================================================================== - // Declarations - //----------------------------------------------------------------------------------- - var bufferMem:Array; - #if (cpp && !mobile) - var libvlc:LibVLC; - #end - - // =================================================================================== - // Variables - //----------------------------------------------------------------------------------- - var frameSize:Int; - var _width:Null; - var _height:Null; - var texture:RectangleTexture; - var texture2:RectangleTexture; - var bmdBuf:BitmapData; - var bmdBuf2:BitmapData; - var oldTime:Int; - var flipBuffer:Bool; - var frameRect:Rectangle; - var screenWidth:Float; - var screenHeight:Float; - - ///////////////////////////////////////////////////////////////////////////////////// - - public function new() - { - super(null, null, true); - - #if (cpp && !mobile) - init(); - #end - } - - function mThread() - { - init(); - } - - ///////////////////////////////////////////////////////////////////////////////////// - - function init() - { - #if (cpp && !mobile) - addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); - #end - } - - function onAddedToStage(e:Event):Void - { - removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); - - libvlc = LibVLC.create(); - stage.addEventListener(Event.RESIZE, onResize); - stage.addEventListener(Event.ENTER_FRAME, vLoop); - } - - ///////////////////////////////////////////////////////////////////////////////////// - - public function play(?source:String) - { - #if (cpp && !mobile) - libvlc.setRepeat(repeat); - - if (!inWindow) - { - if (source != null) - libvlc.play(source); - else - libvlc.play(); - } - else - { - if (source != null) - libvlc.playInWindow(source); - else - libvlc.playInWindow(); - - libvlc.setWindowFullscreen(fullscreen); - } - - if (onPlay != null) - onPlay(); - #end - } - - public function stop() - { - #if (cpp && !mobile) - isPlaying = false; - libvlc.stop(); - // if (disposeOnStop) - // dispose(); - - if (onStop != null) - onStop(); - #end - } - - public function pause() - { - #if (cpp && !mobile) - isPlaying = false; - libvlc.pause(); - if (onPause != null) - onPause(); - #end - } - - public function resume() - { - #if (cpp && !mobile) - isPlaying = true; - libvlc.resume(); - if (onResume != null) - onResume(); - #end - } - - public function seek(seekTotime:Float) - { - #if (cpp && !mobile) - libvlc.setPosition(seekTotime); - if (onSeek != null) - onSeek(); - #end - } - - public function getFPS():Float - { - #if (cpp && !mobile) - if (libvlc != null && initComplete) - return libvlc.getFPS(); - else - return 0; - #else - return 0; - #end - } - - public function getTime():Int - { - #if (cpp && !mobile) - if (libvlc != null && initComplete) - return libvlc.getTime(); - else - return 0; - #else - return 0; - #end - } - - ///////////////////////////////////////////////////////////////////////////////////// - - function checkFlags() - { - #if (cpp && !mobile) - if (!isDisposed) - { - if (untyped __cpp__('libvlc->flags[1]') == 1) - { - untyped __cpp__('libvlc->flags[1]=-1'); - statusOnPlaying(); - } - if (untyped __cpp__('libvlc->flags[2]') == 1) - { - untyped __cpp__('libvlc->flags[2]=-1'); - statusOnPaused(); - } - if (untyped __cpp__('libvlc->flags[3]') == 1) - { - untyped __cpp__('libvlc->flags[3]=-1'); - statusOnStopped(); - } - if (untyped __cpp__('libvlc->flags[4]') == 1) - { - untyped __cpp__('libvlc->flags[4]=-1'); - statusOnEndReached(); - } - if (untyped __cpp__('libvlc->flags[5]') != -1) - { - statusOnTimeChanged(untyped __cpp__('libvlc->flags[5]')); - } - if (untyped __cpp__('libvlc->flags[6]') != -1) - { - statusOnPositionChanged(untyped __cpp__('libvlc->flags[9]')); - } - if (untyped __cpp__('libvlc->flags[9]') == 1) - { - untyped __cpp__('libvlc->flags[9]=-1'); - statusOnError(); - } - if (untyped __cpp__('libvlc->flags[10]') == 1) - { - untyped __cpp__('libvlc->flags[10]=-1'); - statusOnSeekableChanged(0); - } - if (untyped __cpp__('libvlc->flags[11]') == 1) - { - untyped __cpp__('libvlc->flags[11]=-1'); - statusOnOpening(); - } - if (untyped __cpp__('libvlc->flags[12]') == 1) - { - untyped __cpp__('libvlc->flags[12]=-1'); - statusOnBuffering(); - } - if (untyped __cpp__('libvlc->flags[13]') == 1) - { - untyped __cpp__('libvlc->flags[13]=-1'); - statusOnForward(); - } - if (untyped __cpp__('libvlc->flags[14]') == 1) - { - untyped __cpp__('libvlc->flags[14]=-1'); - statusOnBackward(); - } - } - #end - } - - ///////////////////////////////////////////////////////////////////////////////////// - - function onResize(e:Event):Void - { - set_height(FlxG.stage.stageHeight); - set_width(FlxG.stage.stageHeight * (16 / 9)); - } - - ///////////////////////////////////////////////////////////////////////////////////// - - function videoInitComplete() - { - #if (cpp && !mobile) - videoWidth = libvlc.getWidth(); - videoHeight = libvlc.getHeight(); - - duration = libvlc.getDuration(); - length = libvlc.getLength(); - - if (bitmapData != null) - bitmapData.dispose(); - - if (texture != null) - texture.dispose(); - if (texture2 != null) - texture2.dispose(); - - // BitmapData - bitmapData = new BitmapData(Std.int(videoWidth), Std.int(videoHeight), true, 0); - frameRect = new Rectangle(0, 0, Std.int(videoWidth), Std.int(videoHeight)); - - // (Stage3D) - // texture = Lib.current.stage.stage3Ds[0].context3D.createRectangleTexture(videoWidth, videoHeight, Context3DTextureFormat.BGRA, true); - // this.bitmapData = BitmapData.fromTexture(texture); - - smoothing = true; - - if (_width != null) - width = _width; - else - width = videoWidth; - - if (_height != null) - height = _height; - else - height = videoHeight; - - bufferMem = []; - frameSize = videoWidth * videoHeight * 4; - - setVolume(volume); - - initComplete = true; - - if (onVideoReady != null) - onVideoReady(); - #end - } - - ///////////////////////////////////////////////////////////////////////////////////// - - function vLoop(e) - { - #if (cpp && !mobile) - checkFlags(); - render(); - #end - } - - ///////////////////////////////////////////////////////////////////////////////////// - - function render() - { - var cTime = Lib.getTimer(); - - if ((cTime - oldTime) > 28) // min 28 ms between renders, but this is not a good way to do it... - { - oldTime = cTime; - - #if (cpp && !mobile) - // if (isPlaying && texture != null) // (Stage3D) - if (isPlaying) - { - try - { - NativeArray.setUnmanagedData(bufferMem, libvlc.getPixelData(), frameSize); - if (bufferMem != null) - { - // BitmapData - // libvlc.getPixelData() sometimes is null and the exe hangs ... - if (libvlc.getPixelData() != null) - bitmapData.setPixels(frameRect, Bytes.ofData(bufferMem)); - - // (Stage3D) - // texture.uploadFromByteArray( Bytes.ofData(cast(bufferMem)), 0 ); - // this.width++; //This is a horrible hack to force the texture to update... Surely there is a better way... - // this.width--; - } - } - catch (e:Error) - { - trace("error: " + e); - throw new Error("render broke xd"); - } - } - #end - } - } - - ///////////////////////////////////////////////////////////////////////////////////// - - function setVolume(vol:Float) - { - #if (cpp && !mobile) - if (libvlc != null && initComplete) - libvlc.setVolume(vol * 100); - #end - } - - public function getVolume():Float - { - #if (cpp && !mobile) - if (libvlc != null && initComplete) - return libvlc.getVolume(); - else - return 0; - #else - return 0; - #end - } - - ///////////////////////////////////////////////////////////////////////////////////// - - function statusOnOpening() - { - if (onOpening != null) - onOpening(); - } - - function statusOnBuffering() - { - trace("buffering"); - - if (onBuffer != null) - onBuffer(); - } - - function statusOnPlaying() - { - if (!initComplete) - { - isPlaying = true; - initComplete = true; - videoInitComplete(); - } - } - - function statusOnPaused() - { - if (isPlaying) - isPlaying = false; - - if (onPause != null) - onPause(); - } - - function statusOnStopped() - { - if (isPlaying) - isPlaying = false; - - if (onStop != null) - onStop(); - } - - function statusOnEndReached() - { - if (isPlaying) - isPlaying = false; - - // trace("end reached!"); - if (onComplete != null) - onComplete(); - } - - function statusOnTimeChanged(newTime:Int) - { - time = newTime; - if (onProgress != null) - onProgress(); - } - - function statusOnPositionChanged(newPos:Int) - { - } - - function statusOnSeekableChanged(newPos:Int) - { - if (onSeek != null) - onSeek(); - } - - function statusOnForward() - { - } - - function statusOnBackward() - { - } - - function onDisplay() - { - // render(); - } - - function statusOnError() - { - trace("VLC ERROR - File not found?"); - - if (onError != null) - onError(); - } - - ///////////////////////////////////////////////////////////////////////////////////// - - private override function get_width():Float - { - return _width; - } - - public override function set_width(value:Float):Float - { - _width = value; - return super.set_width(value); - } - - private override function get_height():Float - { - return _height; - } - - public override function set_height(value:Float):Float - { - _height = value; - return super.set_height(value); - } - - function get_volume():Float - { - return volume; - } - - function set_volume(value:Float):Float - { - setVolume(value); - return volume = value; - } - - // =================================================================================== - // Dispose - //----------------------------------------------------------------------------------- - - public function dispose() - { - #if (cpp && !mobile) - libvlc.stop(); - #end - - stage.removeEventListener(Event.ENTER_FRAME, vLoop); - - if (texture != null) - { - texture.dispose(); - texture = null; - } - onVideoReady = null; - onComplete = null; - onPause = null; - onPlay = null; - onResume = null; - onSeek = null; - onStop = null; - onBuffer = null; - onProgress = null; - onError = null; - bufferMem = null; - isDisposed = true; - - #if (cpp && !mobile) - while (!isPlaying && !isDisposed) - { - libvlc.dispose(); - libvlc = null; - } - #end - } - - ///////////////////////////////////////////////////////////////////////////////////// -} -#end diff --git a/source/vlc/cpp/include/vlc/deprecated.h b/source/vlc/cpp/include/vlc/deprecated.h deleted file mode 100644 index 65df23245..000000000 --- a/source/vlc/cpp/include/vlc/deprecated.h +++ /dev/null @@ -1,69 +0,0 @@ -/***************************************************************************** - * deprecated.h: libvlc deprecated API - ***************************************************************************** - * Copyright (C) 1998-2008 VLC authors and VideoLAN - * $Id: 7f55090fcd482489ceed9145ce2253e78fa6fd2a $ - * - * Authors: Clément Stenac - * Jean-Paul Saman - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef LIBVLC_DEPRECATED_H -#define LIBVLC_DEPRECATED_H 1 - -/** - * \file - * This file defines libvlc deprecated API - */ - -# ifdef __cplusplus -extern "C" { -# endif - -/***************************************************************************** - * Playlist (Deprecated) - *****************************************************************************/ -/** \defgroup libvlc_playlist LibVLC playlist (legacy) - * \ingroup libvlc - * @deprecated Use @ref libvlc_media_list instead. - * @{ - */ - -/** - * Start playing (if there is any item in the playlist). - * - * Additionnal playlist item options can be specified for addition to the - * item before it is played. - * - * \param p_instance the playlist instance - * \param i_id the item to play. If this is a negative number, the next - * item will be selected. Otherwise, the item with the given ID will be - * played - * \param i_options the number of options to add to the item - * \param ppsz_options the options to add to the item - */ -LIBVLC_DEPRECATED LIBVLC_API -void libvlc_playlist_play( libvlc_instance_t *p_instance, int i_id, - int i_options, char **ppsz_options ); - -/** @}*/ - -# ifdef __cplusplus -} -# endif - -#endif /* _LIBVLC_DEPRECATED_H */ diff --git a/source/vlc/cpp/include/vlc/libvlc.h b/source/vlc/cpp/include/vlc/libvlc.h deleted file mode 100644 index 0e9f3d7ba..000000000 --- a/source/vlc/cpp/include/vlc/libvlc.h +++ /dev/null @@ -1,634 +0,0 @@ -/***************************************************************************** - * libvlc.h: libvlc external API - ***************************************************************************** - * Copyright (C) 1998-2009 VLC authors and VideoLAN - * $Id: 485f4ff7198fd86d7935613b254f074f47577dd5 $ - * - * Authors: Clément Stenac - * Jean-Paul Saman - * Pierre d'Herbemont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file defines libvlc external API - */ - -/** - * \defgroup libvlc LibVLC - * LibVLC is the external programming interface of the VLC media player. - * It is used to embed VLC into other applications or frameworks. - * @{ - */ - -#ifndef VLC_LIBVLC_H -#define VLC_LIBVLC_H 1 - -#if defined (_WIN32) && defined (DLL_EXPORT) -# define LIBVLC_API __declspec(dllexport) -#elif defined (__GNUC__) && (__GNUC__ >= 4) -# define LIBVLC_API __attribute__((visibility("default"))) -#else -# define LIBVLC_API -#endif - -#ifdef __LIBVLC__ -/* Avoid unhelpful warnings from libvlc with our deprecated APIs */ -# define LIBVLC_DEPRECATED -#elif defined(__GNUC__) && \ - (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0) -# define LIBVLC_DEPRECATED __attribute__((deprecated)) -#else -# define LIBVLC_DEPRECATED -#endif - -#include -#include - -# ifdef __cplusplus -extern "C" { -# endif - -#include - -/** \defgroup libvlc_core LibVLC core - * \ingroup libvlc - * Before it can do anything useful, LibVLC must be initialized. - * You can create one (or more) instance(s) of LibVLC in a given process, - * with libvlc_new() and destroy them with libvlc_release(). - * - * \version Unless otherwise stated, these functions are available - * from LibVLC versions numbered 1.1.0 or more. - * Earlier versions (0.9.x and 1.0.x) are not compatible. - * @{ - */ - -/** \defgroup libvlc_error LibVLC error handling - * @{ - */ - -/** - * A human-readable error message for the last LibVLC error in the calling - * thread. The resulting string is valid until another error occurs (at least - * until the next LibVLC call). - * - * @warning - * This will be NULL if there was no error. - */ -LIBVLC_API const char *libvlc_errmsg (void); - -/** - * Clears the LibVLC error status for the current thread. This is optional. - * By default, the error status is automatically overridden when a new error - * occurs, and destroyed when the thread exits. - */ -LIBVLC_API void libvlc_clearerr (void); - -/** - * Sets the LibVLC error status and message for the current thread. - * Any previous error is overridden. - * \param fmt the format string - * \param ap the arguments - * \return a nul terminated string in any case - */ -LIBVLC_API const char *libvlc_vprinterr (const char *fmt, va_list ap); - -/** - * Sets the LibVLC error status and message for the current thread. - * Any previous error is overridden. - * \param fmt the format string - * \param args the arguments - * \return a nul terminated string in any case - */ -LIBVLC_API const char *libvlc_printerr (const char *fmt, ...); - -/**@} */ - -/** - * Create and initialize a libvlc instance. - * This functions accept a list of "command line" arguments similar to the - * main(). These arguments affect the LibVLC instance default configuration. - * - * \version - * Arguments are meant to be passed from the command line to LibVLC, just like - * VLC media player does. The list of valid arguments depends on the LibVLC - * version, the operating system and platform, and set of available LibVLC - * plugins. Invalid or unsupported arguments will cause the function to fail - * (i.e. return NULL). Also, some arguments may alter the behaviour or - * otherwise interfere with other LibVLC functions. - * - * \warning - * There is absolutely no warranty or promise of forward, backward and - * cross-platform compatibility with regards to libvlc_new() arguments. - * We recommend that you do not use them, other than when debugging. - * - * \param argc the number of arguments (should be 0) - * \param argv list of arguments (should be NULL) - * \return the libvlc instance or NULL in case of error - */ -LIBVLC_API libvlc_instance_t * -libvlc_new( int argc , const char *const *argv ); - -/** - * Decrement the reference count of a libvlc instance, and destroy it - * if it reaches zero. - * - * \param p_instance the instance to destroy - */ -LIBVLC_API void libvlc_release( libvlc_instance_t *p_instance ); - -/** - * Increments the reference count of a libvlc instance. - * The initial reference count is 1 after libvlc_new() returns. - * - * \param p_instance the instance to reference - */ -LIBVLC_API void libvlc_retain( libvlc_instance_t *p_instance ); - -/** - * Try to start a user interface for the libvlc instance. - * - * \param p_instance the instance - * \param name interface name, or NULL for default - * \return 0 on success, -1 on error. - */ -LIBVLC_API -int libvlc_add_intf( libvlc_instance_t *p_instance, const char *name ); - -/** - * Registers a callback for the LibVLC exit event. This is mostly useful if - * the VLC playlist and/or at least one interface are started with - * libvlc_playlist_play() or libvlc_add_intf() respectively. - * Typically, this function will wake up your application main loop (from - * another thread). - * - * \note This function should be called before the playlist or interface are - * started. Otherwise, there is a small race condition: the exit event could - * be raised before the handler is registered. - * - * \param p_instance LibVLC instance - * \param cb callback to invoke when LibVLC wants to exit, - * or NULL to disable the exit handler (as by default) - * \param opaque data pointer for the callback - * \warning This function and libvlc_wait() cannot be used at the same time. - */ -LIBVLC_API -void libvlc_set_exit_handler( libvlc_instance_t *p_instance, - void (*cb) (void *), void *opaque ); - -/** - * Waits until an interface causes the instance to exit. - * You should start at least one interface first, using libvlc_add_intf(). - * - * \param p_instance the instance - * \warning This function wastes one thread doing basically nothing. - * libvlc_set_exit_handler() should be used instead. - */ -LIBVLC_DEPRECATED LIBVLC_API -void libvlc_wait( libvlc_instance_t *p_instance ); - -/** - * Sets the application name. LibVLC passes this as the user agent string - * when a protocol requires it. - * - * \param p_instance LibVLC instance - * \param name human-readable application name, e.g. "FooBar player 1.2.3" - * \param http HTTP User Agent, e.g. "FooBar/1.2.3 Python/2.6.0" - * \version LibVLC 1.1.1 or later - */ -LIBVLC_API -void libvlc_set_user_agent( libvlc_instance_t *p_instance, - const char *name, const char *http ); - -/** - * Sets some meta-informations about the application. - * See also libvlc_set_user_agent(). - * - * \param p_instance LibVLC instance - * \param id Java-style application identifier, e.g. "com.acme.foobar" - * \param version application version numbers, e.g. "1.2.3" - * \param icon application icon name, e.g. "foobar" - * \version LibVLC 2.1.0 or later. - */ -LIBVLC_API -void libvlc_set_app_id( libvlc_instance_t *p_instance, const char *id, - const char *version, const char *icon ); - -/** - * Retrieve libvlc version. - * - * Example: "1.1.0-git The Luggage" - * - * \return a string containing the libvlc version - */ -LIBVLC_API const char * libvlc_get_version(void); - -/** - * Retrieve libvlc compiler version. - * - * Example: "gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu6)" - * - * \return a string containing the libvlc compiler version - */ -LIBVLC_API const char * libvlc_get_compiler(void); - -/** - * Retrieve libvlc changeset. - * - * Example: "aa9bce0bc4" - * - * \return a string containing the libvlc changeset - */ -LIBVLC_API const char * libvlc_get_changeset(void); - -/** - * Frees an heap allocation returned by a LibVLC function. - * If you know you're using the same underlying C run-time as the LibVLC - * implementation, then you can call ANSI C free() directly instead. - * - * \param ptr the pointer - */ -LIBVLC_API void libvlc_free( void *ptr ); - -/** \defgroup libvlc_event LibVLC asynchronous events - * LibVLC emits asynchronous events. - * - * Several LibVLC objects (such @ref libvlc_instance_t as - * @ref libvlc_media_player_t) generate events asynchronously. Each of them - * provides @ref libvlc_event_manager_t event manager. You can subscribe to - * events with libvlc_event_attach() and unsubscribe with - * libvlc_event_detach(). - * @{ - */ - -/** - * Event manager that belongs to a libvlc object, and from whom events can - * be received. - */ -typedef struct libvlc_event_manager_t libvlc_event_manager_t; - -struct libvlc_event_t; - -/** - * Type of a LibVLC event. - */ -typedef int libvlc_event_type_t; - -/** - * Callback function notification - * \param p_event the event triggering the callback - */ -typedef void ( *libvlc_callback_t )( const struct libvlc_event_t *, void * ); - -/** - * Register for an event notification. - * - * \param p_event_manager the event manager to which you want to attach to. - * Generally it is obtained by vlc_my_object_event_manager() where - * my_object is the object you want to listen to. - * \param i_event_type the desired event to which we want to listen - * \param f_callback the function to call when i_event_type occurs - * \param user_data user provided data to carry with the event - * \return 0 on success, ENOMEM on error - */ -LIBVLC_API int libvlc_event_attach( libvlc_event_manager_t *p_event_manager, - libvlc_event_type_t i_event_type, - libvlc_callback_t f_callback, - void *user_data ); - -/** - * Unregister an event notification. - * - * \param p_event_manager the event manager - * \param i_event_type the desired event to which we want to unregister - * \param f_callback the function to call when i_event_type occurs - * \param p_user_data user provided data to carry with the event - */ -LIBVLC_API void libvlc_event_detach( libvlc_event_manager_t *p_event_manager, - libvlc_event_type_t i_event_type, - libvlc_callback_t f_callback, - void *p_user_data ); - -/** - * Get an event's type name. - * - * \param event_type the desired event - */ -LIBVLC_API const char * libvlc_event_type_name( libvlc_event_type_t event_type ); - -/** @} */ - -/** \defgroup libvlc_log LibVLC logging - * libvlc_log_* functions provide access to the LibVLC messages log. - * This is used for logging and debugging. - * @{ - */ - -/** - * Logging messages level. - * \note Future LibVLC versions may define new levels. - */ -enum libvlc_log_level -{ - LIBVLC_DEBUG=0, /**< Debug message */ - LIBVLC_NOTICE=2, /**< Important informational message */ - LIBVLC_WARNING=3, /**< Warning (potential error) message */ - LIBVLC_ERROR=4 /**< Error message */ -}; - -typedef struct vlc_log_t libvlc_log_t; - -/** - * Gets debugging informations about a log message: the name of the VLC module - * emitting the message and the message location within the source code. - * - * The returned module name and file name will be NULL if unknown. - * The returned line number will similarly be zero if unknown. - * - * \param ctx message context (as passed to the @ref libvlc_log_cb callback) - * \param module module name storage (or NULL) [OUT] - * \param file source code file name storage (or NULL) [OUT] - * \param line source code file line number storage (or NULL) [OUT] - * \warning The returned module name and source code file name, if non-NULL, - * are only valid until the logging callback returns. - * - * \version LibVLC 2.1.0 or later - */ -LIBVLC_API void libvlc_log_get_context(const libvlc_log_t *ctx, - const char **module, const char **file, unsigned *line); - -/** - * Gets VLC object informations about a log message: the type name of the VLC - * object emitting the message, the object header if any and a temporaly-unique - * object identifier. These informations are mainly meant for manual - * troubleshooting. - * - * The returned type name may be "generic" if unknown, but it cannot be NULL. - * The returned header will be NULL if unset; in current versions, the header - * is used to distinguish for VLM inputs. - * The returned object ID will be zero if the message is not associated with - * any VLC object. - * - * \param ctx message context (as passed to the @ref libvlc_log_cb callback) - * \param name object name storage (or NULL) [OUT] - * \param header object header (or NULL) [OUT] - * \param line source code file line number storage (or NULL) [OUT] - * \warning The returned module name and source code file name, if non-NULL, - * are only valid until the logging callback returns. - * - * \version LibVLC 2.1.0 or later - */ -LIBVLC_API void libvlc_log_get_object(const libvlc_log_t *ctx, - const char **name, const char **header, uintptr_t *id); - -/** - * Callback prototype for LibVLC log message handler. - * \param data data pointer as given to libvlc_log_set() - * \param level message level (@ref enum libvlc_log_level) - * \param ctx message context (meta-informations about the message) - * \param fmt printf() format string (as defined by ISO C11) - * \param args variable argument list for the format - * \note Log message handlers must be thread-safe. - * \warning The message context pointer, the format string parameters and the - * variable arguments are only valid until the callback returns. - */ -typedef void (*libvlc_log_cb)(void *data, int level, const libvlc_log_t *ctx, - const char *fmt, va_list args); - -/** - * Unsets the logging callback for a LibVLC instance. This is rarely needed: - * the callback is implicitly unset when the instance is destroyed. - * This function will wait for any pending callbacks invocation to complete - * (causing a deadlock if called from within the callback). - * - * \param p_instance libvlc instance - * \version LibVLC 2.1.0 or later - */ -LIBVLC_API void libvlc_log_unset( libvlc_instance_t * ); - -/** - * Sets the logging callback for a LibVLC instance. - * This function is thread-safe: it will wait for any pending callbacks - * invocation to complete. - * - * \param cb callback function pointer - * \param data opaque data pointer for the callback function - * - * \note Some log messages (especially debug) are emitted by LibVLC while - * is being initialized. These messages cannot be captured with this interface. - * - * \warning A deadlock may occur if this function is called from the callback. - * - * \param p_instance libvlc instance - * \version LibVLC 2.1.0 or later - */ -LIBVLC_API void libvlc_log_set( libvlc_instance_t *, - libvlc_log_cb cb, void *data ); - - -/** - * Sets up logging to a file. - * \param p_instance libvlc instance - * \param stream FILE pointer opened for writing - * (the FILE pointer must remain valid until libvlc_log_unset()) - * \version LibVLC 2.1.0 or later - */ -LIBVLC_API void libvlc_log_set_file( libvlc_instance_t *, FILE *stream ); - -/** - * Always returns minus one. - * This function is only provided for backward compatibility. - * - * \param p_instance ignored - * \return always -1 - */ -LIBVLC_DEPRECATED LIBVLC_API -unsigned libvlc_get_log_verbosity( const libvlc_instance_t *p_instance ); - -/** - * This function does nothing. - * It is only provided for backward compatibility. - * - * \param p_instance ignored - * \param level ignored - */ -LIBVLC_DEPRECATED LIBVLC_API -void libvlc_set_log_verbosity( libvlc_instance_t *p_instance, unsigned level ); - -/** - * This function does nothing useful. - * It is only provided for backward compatibility. - * - * \param p_instance libvlc instance - * \return an unique pointer or NULL on error - */ -LIBVLC_DEPRECATED LIBVLC_API -libvlc_log_t *libvlc_log_open( libvlc_instance_t *p_instance ); - -/** - * Frees memory allocated by libvlc_log_open(). - * - * \param p_log libvlc log instance or NULL - */ -LIBVLC_DEPRECATED LIBVLC_API -void libvlc_log_close( libvlc_log_t *p_log ); - -/** - * Always returns zero. - * This function is only provided for backward compatibility. - * - * \param p_log ignored - * \return always zero - */ -LIBVLC_DEPRECATED LIBVLC_API -unsigned libvlc_log_count( const libvlc_log_t *p_log ); - -/** - * This function does nothing. - * It is only provided for backward compatibility. - * - * \param p_log ignored - */ -LIBVLC_DEPRECATED LIBVLC_API -void libvlc_log_clear( libvlc_log_t *p_log ); - -/** - * This function does nothing useful. - * It is only provided for backward compatibility. - * - * \param p_log ignored - * \return an unique pointer or NULL on error or if the parameter was NULL - */ -LIBVLC_DEPRECATED LIBVLC_API -libvlc_log_iterator_t *libvlc_log_get_iterator( const libvlc_log_t *p_log ); - -/** - * Frees memory allocated by libvlc_log_get_iterator(). - * - * \param p_iter libvlc log iterator or NULL - */ -LIBVLC_DEPRECATED LIBVLC_API -void libvlc_log_iterator_free( libvlc_log_iterator_t *p_iter ); - -/** - * Always returns zero. - * This function is only provided for backward compatibility. - * - * \param p_iter ignored - * \return always zero - */ -LIBVLC_DEPRECATED LIBVLC_API -int libvlc_log_iterator_has_next( const libvlc_log_iterator_t *p_iter ); - -/** - * Always returns NULL. - * This function is only provided for backward compatibility. - * - * \param p_iter libvlc log iterator or NULL - * \param p_buf ignored - * \return always NULL - */ -LIBVLC_DEPRECATED LIBVLC_API -libvlc_log_message_t *libvlc_log_iterator_next( libvlc_log_iterator_t *p_iter, - libvlc_log_message_t *p_buf ); - -/** @} */ - -/** - * Description of a module. - */ -typedef struct libvlc_module_description_t -{ - char *psz_name; - char *psz_shortname; - char *psz_longname; - char *psz_help; - struct libvlc_module_description_t *p_next; -} libvlc_module_description_t; - -/** - * Release a list of module descriptions. - * - * \param p_list the list to be released - */ -LIBVLC_API -void libvlc_module_description_list_release( libvlc_module_description_t *p_list ); - -/** - * Returns a list of audio filters that are available. - * - * \param p_instance libvlc instance - * - * \return a list of module descriptions. It should be freed with libvlc_module_description_list_release(). - * In case of an error, NULL is returned. - * - * \see libvlc_module_description_t - * \see libvlc_module_description_list_release - */ -LIBVLC_API -libvlc_module_description_t *libvlc_audio_filter_list_get( libvlc_instance_t *p_instance ); - -/** - * Returns a list of video filters that are available. - * - * \param p_instance libvlc instance - * - * \return a list of module descriptions. It should be freed with libvlc_module_description_list_release(). - * In case of an error, NULL is returned. - * - * \see libvlc_module_description_t - * \see libvlc_module_description_list_release - */ -LIBVLC_API -libvlc_module_description_t *libvlc_video_filter_list_get( libvlc_instance_t *p_instance ); - -/** @} */ - -/** \defgroup libvlc_clock LibVLC time - * These functions provide access to the LibVLC time/clock. - * @{ - */ - -/** - * Return the current time as defined by LibVLC. The unit is the microsecond. - * Time increases monotonically (regardless of time zone changes and RTC - * adjustements). - * The origin is arbitrary but consistent across the whole system - * (e.g. the system uptim, the time since the system was booted). - * \note On systems that support it, the POSIX monotonic clock is used. - */ -LIBVLC_API -int64_t libvlc_clock(void); - -/** - * Return the delay (in microseconds) until a certain timestamp. - * \param pts timestamp - * \return negative if timestamp is in the past, - * positive if it is in the future - */ -static inline int64_t libvlc_delay(int64_t pts) -{ - return pts - libvlc_clock(); -} - -/** @} */ - -# ifdef __cplusplus -} -# endif - -#endif /* */ diff --git a/source/vlc/cpp/include/vlc/libvlc_events.h b/source/vlc/cpp/include/vlc/libvlc_events.h deleted file mode 100644 index ae1a94b7f..000000000 --- a/source/vlc/cpp/include/vlc/libvlc_events.h +++ /dev/null @@ -1,238 +0,0 @@ -/***************************************************************************** - * libvlc_events.h: libvlc_events external API structure - ***************************************************************************** - * Copyright (C) 1998-2010 VLC authors and VideoLAN - * $Id $ - * - * Authors: Filippo Carone - * Pierre d'Herbemont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef LIBVLC_EVENTS_H -#define LIBVLC_EVENTS_H 1 - -/** - * \file - * This file defines libvlc_event external API - */ - -# ifdef __cplusplus -extern "C" { -# endif - -/** - * \ingroup libvlc_event - * @{ - */ - -/** - * Event types - */ -enum libvlc_event_e { - /* Append new event types at the end of a category. - * Do not remove, insert or re-order any entry. - * Keep this in sync with lib/event.c:libvlc_event_type_name(). */ - libvlc_MediaMetaChanged=0, - libvlc_MediaSubItemAdded, - libvlc_MediaDurationChanged, - libvlc_MediaParsedChanged, - libvlc_MediaFreed, - libvlc_MediaStateChanged, - libvlc_MediaSubItemTreeAdded, - - libvlc_MediaPlayerMediaChanged=0x100, - libvlc_MediaPlayerNothingSpecial, - libvlc_MediaPlayerOpening, - libvlc_MediaPlayerBuffering, - libvlc_MediaPlayerPlaying, - libvlc_MediaPlayerPaused, - libvlc_MediaPlayerStopped, - libvlc_MediaPlayerForward, - libvlc_MediaPlayerBackward, - libvlc_MediaPlayerEndReached, - libvlc_MediaPlayerEncounteredError, - libvlc_MediaPlayerTimeChanged, - libvlc_MediaPlayerPositionChanged, - libvlc_MediaPlayerSeekableChanged, - libvlc_MediaPlayerPausableChanged, - libvlc_MediaPlayerTitleChanged, - libvlc_MediaPlayerSnapshotTaken, - libvlc_MediaPlayerLengthChanged, - libvlc_MediaPlayerVout, - - libvlc_MediaListItemAdded=0x200, - libvlc_MediaListWillAddItem, - libvlc_MediaListItemDeleted, - libvlc_MediaListWillDeleteItem, - - libvlc_MediaListViewItemAdded=0x300, - libvlc_MediaListViewWillAddItem, - libvlc_MediaListViewItemDeleted, - libvlc_MediaListViewWillDeleteItem, - - libvlc_MediaListPlayerPlayed=0x400, - libvlc_MediaListPlayerNextItemSet, - libvlc_MediaListPlayerStopped, - - libvlc_MediaDiscovererStarted=0x500, - libvlc_MediaDiscovererEnded, - - libvlc_VlmMediaAdded=0x600, - libvlc_VlmMediaRemoved, - libvlc_VlmMediaChanged, - libvlc_VlmMediaInstanceStarted, - libvlc_VlmMediaInstanceStopped, - libvlc_VlmMediaInstanceStatusInit, - libvlc_VlmMediaInstanceStatusOpening, - libvlc_VlmMediaInstanceStatusPlaying, - libvlc_VlmMediaInstanceStatusPause, - libvlc_VlmMediaInstanceStatusEnd, - libvlc_VlmMediaInstanceStatusError -}; - -/** - * A LibVLC event - */ -typedef struct libvlc_event_t -{ - int type; /**< Event type (see @ref libvlc_event_e) */ - void *p_obj; /**< Object emitting the event */ - union - { - /* media descriptor */ - struct - { - libvlc_meta_t meta_type; - } media_meta_changed; - struct - { - libvlc_media_t * new_child; - } media_subitem_added; - struct - { - int64_t new_duration; - } media_duration_changed; - struct - { - int new_status; - } media_parsed_changed; - struct - { - libvlc_media_t * md; - } media_freed; - struct - { - libvlc_state_t new_state; - } media_state_changed; - struct - { - libvlc_media_t * item; - } media_subitemtree_added; - - /* media instance */ - struct - { - float new_cache; - } media_player_buffering; - struct - { - float new_position; - } media_player_position_changed; - struct - { - libvlc_time_t new_time; - } media_player_time_changed; - struct - { - int new_title; - } media_player_title_changed; - struct - { - int new_seekable; - } media_player_seekable_changed; - struct - { - int new_pausable; - } media_player_pausable_changed; - struct - { - int new_count; - } media_player_vout; - - /* media list */ - struct - { - libvlc_media_t * item; - int index; - } media_list_item_added; - struct - { - libvlc_media_t * item; - int index; - } media_list_will_add_item; - struct - { - libvlc_media_t * item; - int index; - } media_list_item_deleted; - struct - { - libvlc_media_t * item; - int index; - } media_list_will_delete_item; - - /* media list player */ - struct - { - libvlc_media_t * item; - } media_list_player_next_item_set; - - /* snapshot taken */ - struct - { - char* psz_filename ; - } media_player_snapshot_taken ; - - /* Length changed */ - struct - { - libvlc_time_t new_length; - } media_player_length_changed; - - /* VLM media */ - struct - { - const char * psz_media_name; - const char * psz_instance_name; - } vlm_media_event; - - /* Extra MediaPlayer */ - struct - { - libvlc_media_t * new_media; - } media_player_media_changed; - } u; /**< Type-dependent event description */ -} libvlc_event_t; - - -/**@} */ - -# ifdef __cplusplus -} -# endif - -#endif /* _LIBVLC_EVENTS_H */ diff --git a/source/vlc/cpp/include/vlc/libvlc_media.h b/source/vlc/cpp/include/vlc/libvlc_media.h deleted file mode 100644 index 37c94b34d..000000000 --- a/source/vlc/cpp/include/vlc/libvlc_media.h +++ /dev/null @@ -1,603 +0,0 @@ -/***************************************************************************** - * libvlc_media.h: libvlc external API - ***************************************************************************** - * Copyright (C) 1998-2009 VLC authors and VideoLAN - * $Id: eaa41f01890d6921f81af3fc4fe4a33aa8905635 $ - * - * Authors: Clément Stenac - * Jean-Paul Saman - * Pierre d'Herbemont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file defines libvlc_media external API - */ - -#ifndef VLC_LIBVLC_MEDIA_H -#define VLC_LIBVLC_MEDIA_H 1 - -# ifdef __cplusplus -extern "C" { -# endif - -/** \defgroup libvlc_media LibVLC media - * \ingroup libvlc - * @ref libvlc_media_t is an abstract representation of a playable media. - * It consists of a media location and various optional meta data. - * @{ - */ - -typedef struct libvlc_media_t libvlc_media_t; - -/** defgroup libvlc_meta LibVLC meta data - * \ingroup libvlc_media - * @{ - */ - -/** Meta data types */ -typedef enum libvlc_meta_t { - libvlc_meta_Title, - libvlc_meta_Artist, - libvlc_meta_Genre, - libvlc_meta_Copyright, - libvlc_meta_Album, - libvlc_meta_TrackNumber, - libvlc_meta_Description, - libvlc_meta_Rating, - libvlc_meta_Date, - libvlc_meta_Setting, - libvlc_meta_URL, - libvlc_meta_Language, - libvlc_meta_NowPlaying, - libvlc_meta_Publisher, - libvlc_meta_EncodedBy, - libvlc_meta_ArtworkURL, - libvlc_meta_TrackID - /* Add new meta types HERE */ -} libvlc_meta_t; - -/** @}*/ - -/** - * Note the order of libvlc_state_t enum must match exactly the order of - * \see mediacontrol_PlayerStatus, \see input_state_e enums, - * and VideoLAN.LibVLC.State (at bindings/cil/src/media.cs). - * - * Expected states by web plugins are: - * IDLE/CLOSE=0, OPENING=1, BUFFERING=2, PLAYING=3, PAUSED=4, - * STOPPING=5, ENDED=6, ERROR=7 - */ -typedef enum libvlc_state_t -{ - libvlc_NothingSpecial=0, - libvlc_Opening, - libvlc_Buffering, - libvlc_Playing, - libvlc_Paused, - libvlc_Stopped, - libvlc_Ended, - libvlc_Error -} libvlc_state_t; - -enum -{ - libvlc_media_option_trusted = 0x2, - libvlc_media_option_unique = 0x100 -}; - -typedef enum libvlc_track_type_t -{ - libvlc_track_unknown = -1, - libvlc_track_audio = 0, - libvlc_track_video = 1, - libvlc_track_text = 2 -} libvlc_track_type_t; - -/** defgroup libvlc_media_stats_t LibVLC media statistics - * \ingroup libvlc_media - * @{ - */ -typedef struct libvlc_media_stats_t -{ - /* Input */ - int i_read_bytes; - float f_input_bitrate; - - /* Demux */ - int i_demux_read_bytes; - float f_demux_bitrate; - int i_demux_corrupted; - int i_demux_discontinuity; - - /* Decoders */ - int i_decoded_video; - int i_decoded_audio; - - /* Video Output */ - int i_displayed_pictures; - int i_lost_pictures; - - /* Audio output */ - int i_played_abuffers; - int i_lost_abuffers; - - /* Stream output */ - int i_sent_packets; - int i_sent_bytes; - float f_send_bitrate; -} libvlc_media_stats_t; -/** @}*/ - -typedef struct libvlc_media_track_info_t -{ - /* Codec fourcc */ - uint32_t i_codec; - int i_id; - libvlc_track_type_t i_type; - - /* Codec specific */ - int i_profile; - int i_level; - - union { - struct { - /* Audio specific */ - unsigned i_channels; - unsigned i_rate; - } audio; - struct { - /* Video specific */ - unsigned i_height; - unsigned i_width; - } video; - } u; - -} libvlc_media_track_info_t; - - -typedef struct libvlc_audio_track_t -{ - unsigned i_channels; - unsigned i_rate; -} libvlc_audio_track_t; - -typedef struct libvlc_video_track_t -{ - unsigned i_height; - unsigned i_width; - unsigned i_sar_num; - unsigned i_sar_den; - unsigned i_frame_rate_num; - unsigned i_frame_rate_den; -} libvlc_video_track_t; - -typedef struct libvlc_subtitle_track_t -{ - char *psz_encoding; -} libvlc_subtitle_track_t; - -typedef struct libvlc_media_track_t -{ - /* Codec fourcc */ - uint32_t i_codec; - uint32_t i_original_fourcc; - int i_id; - libvlc_track_type_t i_type; - - /* Codec specific */ - int i_profile; - int i_level; - - union { - libvlc_audio_track_t *audio; - libvlc_video_track_t *video; - libvlc_subtitle_track_t *subtitle; - }; - - unsigned int i_bitrate; - char *psz_language; - char *psz_description; - -} libvlc_media_track_t; - - -/** - * Create a media with a certain given media resource location, - * for instance a valid URL. - * - * \note To refer to a local file with this function, - * the file://... URI syntax must be used (see IETF RFC3986). - * We recommend using libvlc_media_new_path() instead when dealing with - * local files. - * - * \see libvlc_media_release - * - * \param p_instance the instance - * \param psz_mrl the media location - * \return the newly created media or NULL on error - */ -LIBVLC_API libvlc_media_t *libvlc_media_new_location( - libvlc_instance_t *p_instance, - const char * psz_mrl ); - -/** - * Create a media for a certain file path. - * - * \see libvlc_media_release - * - * \param p_instance the instance - * \param path local filesystem path - * \return the newly created media or NULL on error - */ -LIBVLC_API libvlc_media_t *libvlc_media_new_path( - libvlc_instance_t *p_instance, - const char *path ); - -/** - * Create a media for an already open file descriptor. - * The file descriptor shall be open for reading (or reading and writing). - * - * Regular file descriptors, pipe read descriptors and character device - * descriptors (including TTYs) are supported on all platforms. - * Block device descriptors are supported where available. - * Directory descriptors are supported on systems that provide fdopendir(). - * Sockets are supported on all platforms where they are file descriptors, - * i.e. all except Windows. - * - * \note This library will not automatically close the file descriptor - * under any circumstance. Nevertheless, a file descriptor can usually only be - * rendered once in a media player. To render it a second time, the file - * descriptor should probably be rewound to the beginning with lseek(). - * - * \see libvlc_media_release - * - * \version LibVLC 1.1.5 and later. - * - * \param p_instance the instance - * \param fd open file descriptor - * \return the newly created media or NULL on error - */ -LIBVLC_API libvlc_media_t *libvlc_media_new_fd( - libvlc_instance_t *p_instance, - int fd ); - - -/** - * Create a media as an empty node with a given name. - * - * \see libvlc_media_release - * - * \param p_instance the instance - * \param psz_name the name of the node - * \return the new empty media or NULL on error - */ -LIBVLC_API libvlc_media_t *libvlc_media_new_as_node( - libvlc_instance_t *p_instance, - const char * psz_name ); - -/** - * Add an option to the media. - * - * This option will be used to determine how the media_player will - * read the media. This allows to use VLC's advanced - * reading/streaming options on a per-media basis. - * - * \note The options are listed in 'vlc --long-help' from the command line, - * e.g. "-sout-all". Keep in mind that available options and their semantics - * vary across LibVLC versions and builds. - * \warning Not all options affects libvlc_media_t objects: - * Specifically, due to architectural issues most audio and video options, - * such as text renderer options, have no effects on an individual media. - * These options must be set through libvlc_new() instead. - * - * \param p_md the media descriptor - * \param psz_options the options (as a string) - */ -LIBVLC_API void libvlc_media_add_option( - libvlc_media_t *p_md, - const char * psz_options ); - -/** - * Add an option to the media with configurable flags. - * - * This option will be used to determine how the media_player will - * read the media. This allows to use VLC's advanced - * reading/streaming options on a per-media basis. - * - * The options are detailed in vlc --long-help, for instance - * "--sout-all". Note that all options are not usable on medias: - * specifically, due to architectural issues, video-related options - * such as text renderer options cannot be set on a single media. They - * must be set on the whole libvlc instance instead. - * - * \param p_md the media descriptor - * \param psz_options the options (as a string) - * \param i_flags the flags for this option - */ -LIBVLC_API void libvlc_media_add_option_flag( - libvlc_media_t *p_md, - const char * psz_options, - unsigned i_flags ); - - -/** - * Retain a reference to a media descriptor object (libvlc_media_t). Use - * libvlc_media_release() to decrement the reference count of a - * media descriptor object. - * - * \param p_md the media descriptor - */ -LIBVLC_API void libvlc_media_retain( libvlc_media_t *p_md ); - -/** - * Decrement the reference count of a media descriptor object. If the - * reference count is 0, then libvlc_media_release() will release the - * media descriptor object. It will send out an libvlc_MediaFreed event - * to all listeners. If the media descriptor object has been released it - * should not be used again. - * - * \param p_md the media descriptor - */ -LIBVLC_API void libvlc_media_release( libvlc_media_t *p_md ); - - -/** - * Get the media resource locator (mrl) from a media descriptor object - * - * \param p_md a media descriptor object - * \return string with mrl of media descriptor object - */ -LIBVLC_API char *libvlc_media_get_mrl( libvlc_media_t *p_md ); - -/** - * Duplicate a media descriptor object. - * - * \param p_md a media descriptor object. - */ -LIBVLC_API libvlc_media_t *libvlc_media_duplicate( libvlc_media_t *p_md ); - -/** - * Read the meta of the media. - * - * If the media has not yet been parsed this will return NULL. - * - * This methods automatically calls libvlc_media_parse_async(), so after calling - * it you may receive a libvlc_MediaMetaChanged event. If you prefer a synchronous - * version ensure that you call libvlc_media_parse() before get_meta(). - * - * \see libvlc_media_parse - * \see libvlc_media_parse_async - * \see libvlc_MediaMetaChanged - * - * \param p_md the media descriptor - * \param e_meta the meta to read - * \return the media's meta - */ -LIBVLC_API char *libvlc_media_get_meta( libvlc_media_t *p_md, - libvlc_meta_t e_meta ); - -/** - * Set the meta of the media (this function will not save the meta, call - * libvlc_media_save_meta in order to save the meta) - * - * \param p_md the media descriptor - * \param e_meta the meta to write - * \param psz_value the media's meta - */ -LIBVLC_API void libvlc_media_set_meta( libvlc_media_t *p_md, - libvlc_meta_t e_meta, - const char *psz_value ); - - -/** - * Save the meta previously set - * - * \param p_md the media desriptor - * \return true if the write operation was successful - */ -LIBVLC_API int libvlc_media_save_meta( libvlc_media_t *p_md ); - - -/** - * Get current state of media descriptor object. Possible media states - * are defined in libvlc_structures.c ( libvlc_NothingSpecial=0, - * libvlc_Opening, libvlc_Buffering, libvlc_Playing, libvlc_Paused, - * libvlc_Stopped, libvlc_Ended, - * libvlc_Error). - * - * \see libvlc_state_t - * \param p_md a media descriptor object - * \return state of media descriptor object - */ -LIBVLC_API libvlc_state_t libvlc_media_get_state( - libvlc_media_t *p_md ); - - -/** - * Get the current statistics about the media - * \param p_md: media descriptor object - * \param p_stats: structure that contain the statistics about the media - * (this structure must be allocated by the caller) - * \return true if the statistics are available, false otherwise - * - * \libvlc_return_bool - */ -LIBVLC_API int libvlc_media_get_stats( libvlc_media_t *p_md, - libvlc_media_stats_t *p_stats ); - -/* The following method uses libvlc_media_list_t, however, media_list usage is optionnal - * and this is here for convenience */ -#define VLC_FORWARD_DECLARE_OBJECT(a) struct a - -/** - * Get subitems of media descriptor object. This will increment - * the reference count of supplied media descriptor object. Use - * libvlc_media_list_release() to decrement the reference counting. - * - * \param p_md media descriptor object - * \return list of media descriptor subitems or NULL - */ -LIBVLC_API VLC_FORWARD_DECLARE_OBJECT(libvlc_media_list_t *) -libvlc_media_subitems( libvlc_media_t *p_md ); - -/** - * Get event manager from media descriptor object. - * NOTE: this function doesn't increment reference counting. - * - * \param p_md a media descriptor object - * \return event manager object - */ -LIBVLC_API libvlc_event_manager_t * - libvlc_media_event_manager( libvlc_media_t *p_md ); - -/** - * Get duration (in ms) of media descriptor object item. - * - * \param p_md media descriptor object - * \return duration of media item or -1 on error - */ -LIBVLC_API libvlc_time_t - libvlc_media_get_duration( libvlc_media_t *p_md ); - -/** - * Parse a media. - * - * This fetches (local) meta data and tracks information. - * The method is synchronous. - * - * \see libvlc_media_parse_async - * \see libvlc_media_get_meta - * \see libvlc_media_get_tracks_info - * - * \param p_md media descriptor object - */ -LIBVLC_API void -libvlc_media_parse( libvlc_media_t *p_md ); - -/** - * Parse a media. - * - * This fetches (local) meta data and tracks information. - * The method is the asynchronous of libvlc_media_parse(). - * - * To track when this is over you can listen to libvlc_MediaParsedChanged - * event. However if the media was already parsed you will not receive this - * event. - * - * \see libvlc_media_parse - * \see libvlc_MediaParsedChanged - * \see libvlc_media_get_meta - * \see libvlc_media_get_tracks_info - * - * \param p_md media descriptor object - */ -LIBVLC_API void -libvlc_media_parse_async( libvlc_media_t *p_md ); - -/** - * Get Parsed status for media descriptor object. - * - * \see libvlc_MediaParsedChanged - * - * \param p_md media descriptor object - * \return true if media object has been parsed otherwise it returns false - * - * \libvlc_return_bool - */ -LIBVLC_API int - libvlc_media_is_parsed( libvlc_media_t *p_md ); - -/** - * Sets media descriptor's user_data. user_data is specialized data - * accessed by the host application, VLC.framework uses it as a pointer to - * an native object that references a libvlc_media_t pointer - * - * \param p_md media descriptor object - * \param p_new_user_data pointer to user data - */ -LIBVLC_API void - libvlc_media_set_user_data( libvlc_media_t *p_md, void *p_new_user_data ); - -/** - * Get media descriptor's user_data. user_data is specialized data - * accessed by the host application, VLC.framework uses it as a pointer to - * an native object that references a libvlc_media_t pointer - * - * \param p_md media descriptor object - */ -LIBVLC_API void *libvlc_media_get_user_data( libvlc_media_t *p_md ); - -/** - * Get media descriptor's elementary streams description - * - * Note, you need to call libvlc_media_parse() or play the media at least once - * before calling this function. - * Not doing this will result in an empty array. - * - * \deprecated Use libvlc_media_tracks_get instead - * - * \param p_md media descriptor object - * \param tracks address to store an allocated array of Elementary Streams - * descriptions (must be freed by the caller) [OUT] - * - * \return the number of Elementary Streams - */ -LIBVLC_DEPRECATED LIBVLC_API -int libvlc_media_get_tracks_info( libvlc_media_t *p_md, - libvlc_media_track_info_t **tracks ); - -/** - * Get media descriptor's elementary streams description - * - * Note, you need to call libvlc_media_parse() or play the media at least once - * before calling this function. - * Not doing this will result in an empty array. - * - * \version LibVLC 2.1.0 and later. - * - * \param p_md media descriptor object - * \param tracks address to store an allocated array of Elementary Streams - * descriptions (must be freed with libvlc_media_tracks_release - by the caller) [OUT] - * - * \return the number of Elementary Streams (zero on error) - */ -LIBVLC_API -unsigned libvlc_media_tracks_get( libvlc_media_t *p_md, - libvlc_media_track_t ***tracks ); - - -/** - * Release media descriptor's elementary streams description array - * - * \version LibVLC 2.1.0 and later. - * - * \param p_tracks tracks info array to release - * \param i_count number of elements in the array - */ -LIBVLC_API -void libvlc_media_tracks_release( libvlc_media_track_t **p_tracks, - unsigned i_count ); - -/** @}*/ - -# ifdef __cplusplus -} -# endif - -#endif /* VLC_LIBVLC_MEDIA_H */ diff --git a/source/vlc/cpp/include/vlc/libvlc_media_discoverer.h b/source/vlc/cpp/include/vlc/libvlc_media_discoverer.h deleted file mode 100644 index 3883419f4..000000000 --- a/source/vlc/cpp/include/vlc/libvlc_media_discoverer.h +++ /dev/null @@ -1,111 +0,0 @@ -/***************************************************************************** - * libvlc_media_discoverer.h: libvlc external API - ***************************************************************************** - * Copyright (C) 1998-2009 VLC authors and VideoLAN - * $Id: cf263b0536d9b19e725e039f12ef20eaa392fec3 $ - * - * Authors: Clément Stenac - * Jean-Paul Saman - * Pierre d'Herbemont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file defines libvlc_media_discoverer external API - */ - -#ifndef VLC_LIBVLC_MEDIA_DISCOVERER_H -#define VLC_LIBVLC_MEDIA_DISCOVERER_H 1 - -# ifdef __cplusplus -extern "C" { -# endif - -/** \defgroup libvlc_media_discoverer LibVLC media discovery - * \ingroup libvlc - * LibVLC media discovery finds available media via various means. - * This corresponds to the service discovery functionality in VLC media player. - * Different plugins find potential medias locally (e.g. user media directory), - * from peripherals (e.g. video capture device), on the local network - * (e.g. SAP) or on the Internet (e.g. Internet radios). - * @{ - */ - -typedef struct libvlc_media_discoverer_t libvlc_media_discoverer_t; - -/** - * Discover media service by name. - * - * \param p_inst libvlc instance - * \param psz_name service name - * \return media discover object or NULL in case of error - */ -LIBVLC_API libvlc_media_discoverer_t * -libvlc_media_discoverer_new_from_name( libvlc_instance_t * p_inst, - const char * psz_name ); - -/** - * Release media discover object. If the reference count reaches 0, then - * the object will be released. - * - * \param p_mdis media service discover object - */ -LIBVLC_API void libvlc_media_discoverer_release( libvlc_media_discoverer_t * p_mdis ); - -/** - * Get media service discover object its localized name. - * - * \param p_mdis media discover object - * \return localized name - */ -LIBVLC_API char * libvlc_media_discoverer_localized_name( libvlc_media_discoverer_t * p_mdis ); - -/** - * Get media service discover media list. - * - * \param p_mdis media service discover object - * \return list of media items - */ -LIBVLC_API libvlc_media_list_t * libvlc_media_discoverer_media_list( libvlc_media_discoverer_t * p_mdis ); - -/** - * Get event manager from media service discover object. - * - * \param p_mdis media service discover object - * \return event manager object. - */ -LIBVLC_API libvlc_event_manager_t * - libvlc_media_discoverer_event_manager( libvlc_media_discoverer_t * p_mdis ); - -/** - * Query if media service discover object is running. - * - * \param p_mdis media service discover object - * \return true if running, false if not - * - * \libvlc_return_bool - */ -LIBVLC_API int - libvlc_media_discoverer_is_running( libvlc_media_discoverer_t * p_mdis ); - -/**@} */ - -# ifdef __cplusplus -} -# endif - -#endif /* */ diff --git a/source/vlc/cpp/include/vlc/libvlc_media_library.h b/source/vlc/cpp/include/vlc/libvlc_media_library.h deleted file mode 100644 index 4134c0799..000000000 --- a/source/vlc/cpp/include/vlc/libvlc_media_library.h +++ /dev/null @@ -1,99 +0,0 @@ -/***************************************************************************** - * libvlc_media_library.h: libvlc external API - ***************************************************************************** - * Copyright (C) 1998-2009 VLC authors and VideoLAN - * $Id: fa7094a6a8aac42607490c9982d9f4d082c2794c $ - * - * Authors: Clément Stenac - * Jean-Paul Saman - * Pierre d'Herbemont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file defines libvlc_media_library external API - */ - -#ifndef VLC_LIBVLC_MEDIA_LIBRARY_H -#define VLC_LIBVLC_MEDIA_LIBRARY_H 1 - -# ifdef __cplusplus -extern "C" { -# endif - -/** \defgroup libvlc_media_library LibVLC media library - * \ingroup libvlc - * @{ - */ - -typedef struct libvlc_media_library_t libvlc_media_library_t; - -/** - * Create an new Media Library object - * - * \param p_instance the libvlc instance - * \return a new object or NULL on error - */ -LIBVLC_API libvlc_media_library_t * - libvlc_media_library_new( libvlc_instance_t * p_instance ); - -/** - * Release media library object. This functions decrements the - * reference count of the media library object. If it reaches 0, - * then the object will be released. - * - * \param p_mlib media library object - */ -LIBVLC_API void - libvlc_media_library_release( libvlc_media_library_t * p_mlib ); - -/** - * Retain a reference to a media library object. This function will - * increment the reference counting for this object. Use - * libvlc_media_library_release() to decrement the reference count. - * - * \param p_mlib media library object - */ -LIBVLC_API void - libvlc_media_library_retain( libvlc_media_library_t * p_mlib ); - -/** - * Load media library. - * - * \param p_mlib media library object - * \return 0 on success, -1 on error - */ -LIBVLC_API int - libvlc_media_library_load( libvlc_media_library_t * p_mlib ); - -/** - * Get media library subitems. - * - * \param p_mlib media library object - * \return media list subitems - */ -LIBVLC_API libvlc_media_list_t * - libvlc_media_library_media_list( libvlc_media_library_t * p_mlib ); - - -/** @} */ - -# ifdef __cplusplus -} -# endif - -#endif /* VLC_LIBVLC_MEDIA_LIBRARY_H */ diff --git a/source/vlc/cpp/include/vlc/libvlc_media_list.h b/source/vlc/cpp/include/vlc/libvlc_media_list.h deleted file mode 100644 index 6330c6f37..000000000 --- a/source/vlc/cpp/include/vlc/libvlc_media_list.h +++ /dev/null @@ -1,209 +0,0 @@ -/***************************************************************************** - * libvlc_media_list.h: libvlc_media_list API - ***************************************************************************** - * Copyright (C) 1998-2008 VLC authors and VideoLAN - * $Id: 015824bf54e656cc67838452c7e99a00a452af6e $ - * - * Authors: Pierre d'Herbemont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef LIBVLC_MEDIA_LIST_H -#define LIBVLC_MEDIA_LIST_H 1 - -/** - * \file - * This file defines libvlc_media_list API - */ - -# ifdef __cplusplus -extern "C" { -# endif - -/** \defgroup libvlc_media_list LibVLC media list - * \ingroup libvlc - * A LibVLC media list holds multiple @ref libvlc_media_t media descriptors. - * @{ - */ - -typedef struct libvlc_media_list_t libvlc_media_list_t; - -/** - * Create an empty media list. - * - * \param p_instance libvlc instance - * \return empty media list, or NULL on error - */ -LIBVLC_API libvlc_media_list_t * - libvlc_media_list_new( libvlc_instance_t *p_instance ); - -/** - * Release media list created with libvlc_media_list_new(). - * - * \param p_ml a media list created with libvlc_media_list_new() - */ -LIBVLC_API void - libvlc_media_list_release( libvlc_media_list_t *p_ml ); - -/** - * Retain reference to a media list - * - * \param p_ml a media list created with libvlc_media_list_new() - */ -LIBVLC_API void - libvlc_media_list_retain( libvlc_media_list_t *p_ml ); - -LIBVLC_DEPRECATED int - libvlc_media_list_add_file_content( libvlc_media_list_t * p_ml, - const char * psz_uri ); - -/** - * Associate media instance with this media list instance. - * If another media instance was present it will be released. - * The libvlc_media_list_lock should NOT be held upon entering this function. - * - * \param p_ml a media list instance - * \param p_md media instance to add - */ -LIBVLC_API void -libvlc_media_list_set_media( libvlc_media_list_t *p_ml, libvlc_media_t *p_md ); - -/** - * Get media instance from this media list instance. This action will increase - * the refcount on the media instance. - * The libvlc_media_list_lock should NOT be held upon entering this function. - * - * \param p_ml a media list instance - * \return media instance - */ -LIBVLC_API libvlc_media_t * - libvlc_media_list_media( libvlc_media_list_t *p_ml ); - -/** - * Add media instance to media list - * The libvlc_media_list_lock should be held upon entering this function. - * - * \param p_ml a media list instance - * \param p_md a media instance - * \return 0 on success, -1 if the media list is read-only - */ -LIBVLC_API int -libvlc_media_list_add_media( libvlc_media_list_t *p_ml, libvlc_media_t *p_md ); - -/** - * Insert media instance in media list on a position - * The libvlc_media_list_lock should be held upon entering this function. - * - * \param p_ml a media list instance - * \param p_md a media instance - * \param i_pos position in array where to insert - * \return 0 on success, -1 if the media list is read-only - */ -LIBVLC_API int -libvlc_media_list_insert_media( libvlc_media_list_t *p_ml, - libvlc_media_t *p_md, int i_pos ); - -/** - * Remove media instance from media list on a position - * The libvlc_media_list_lock should be held upon entering this function. - * - * \param p_ml a media list instance - * \param i_pos position in array where to insert - * \return 0 on success, -1 if the list is read-only or the item was not found - */ -LIBVLC_API int -libvlc_media_list_remove_index( libvlc_media_list_t *p_ml, int i_pos ); - -/** - * Get count on media list items - * The libvlc_media_list_lock should be held upon entering this function. - * - * \param p_ml a media list instance - * \return number of items in media list - */ -LIBVLC_API int - libvlc_media_list_count( libvlc_media_list_t *p_ml ); - -/** - * List media instance in media list at a position - * The libvlc_media_list_lock should be held upon entering this function. - * - * \param p_ml a media list instance - * \param i_pos position in array where to insert - * \return media instance at position i_pos, or NULL if not found. - * In case of success, libvlc_media_retain() is called to increase the refcount - * on the media. - */ -LIBVLC_API libvlc_media_t * - libvlc_media_list_item_at_index( libvlc_media_list_t *p_ml, int i_pos ); -/** - * Find index position of List media instance in media list. - * Warning: the function will return the first matched position. - * The libvlc_media_list_lock should be held upon entering this function. - * - * \param p_ml a media list instance - * \param p_md media instance - * \return position of media instance or -1 if media not found - */ -LIBVLC_API int - libvlc_media_list_index_of_item( libvlc_media_list_t *p_ml, - libvlc_media_t *p_md ); - -/** - * This indicates if this media list is read-only from a user point of view - * - * \param p_ml media list instance - * \return 1 on readonly, 0 on readwrite - * - * \libvlc_return_bool - */ -LIBVLC_API int - libvlc_media_list_is_readonly( libvlc_media_list_t * p_ml ); - -/** - * Get lock on media list items - * - * \param p_ml a media list instance - */ -LIBVLC_API void - libvlc_media_list_lock( libvlc_media_list_t *p_ml ); - -/** - * Release lock on media list items - * The libvlc_media_list_lock should be held upon entering this function. - * - * \param p_ml a media list instance - */ -LIBVLC_API void - libvlc_media_list_unlock( libvlc_media_list_t *p_ml ); - -/** - * Get libvlc_event_manager from this media list instance. - * The p_event_manager is immutable, so you don't have to hold the lock - * - * \param p_ml a media list instance - * \return libvlc_event_manager - */ -LIBVLC_API libvlc_event_manager_t * - libvlc_media_list_event_manager( libvlc_media_list_t *p_ml ); - -/** @} media_list */ - -# ifdef __cplusplus -} -# endif - -#endif /* _LIBVLC_MEDIA_LIST_H */ diff --git a/source/vlc/cpp/include/vlc/libvlc_media_list_player.h b/source/vlc/cpp/include/vlc/libvlc_media_list_player.h deleted file mode 100644 index 5fa328557..000000000 --- a/source/vlc/cpp/include/vlc/libvlc_media_list_player.h +++ /dev/null @@ -1,224 +0,0 @@ -/***************************************************************************** - * libvlc_media_list_player.h: libvlc_media_list API - ***************************************************************************** - * Copyright (C) 1998-2008 VLC authors and VideoLAN - * $Id: c95ad972c7dcf380ef62e60d821af726848dae48 $ - * - * Authors: Pierre d'Herbemont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef LIBVLC_MEDIA_LIST_PLAYER_H -#define LIBVLC_MEDIA_LIST_PLAYER_H 1 - -/** - * \file - * This file defines libvlc_media_list_player API - */ - -# ifdef __cplusplus -extern "C" { -# endif - -/***************************************************************************** - * Media List Player - *****************************************************************************/ -/** \defgroup libvlc_media_list_player LibVLC media list player - * \ingroup libvlc - * The LibVLC media list player plays a @ref libvlc_media_list_t list of media, - * in a certain order. - * This is required to especially support playlist files. - * The normal @ref libvlc_media_player_t LibVLC media player can only play a - * single media, and does not handle playlist files properly. - * @{ - */ - -typedef struct libvlc_media_list_player_t libvlc_media_list_player_t; - -/** - * Defines playback modes for playlist. - */ -typedef enum libvlc_playback_mode_t -{ - libvlc_playback_mode_default, - libvlc_playback_mode_loop, - libvlc_playback_mode_repeat -} libvlc_playback_mode_t; - -/** - * Create new media_list_player. - * - * \param p_instance libvlc instance - * \return media list player instance or NULL on error - */ -LIBVLC_API libvlc_media_list_player_t * - libvlc_media_list_player_new( libvlc_instance_t * p_instance ); - -/** - * Release a media_list_player after use - * Decrement the reference count of a media player object. If the - * reference count is 0, then libvlc_media_list_player_release() will - * release the media player object. If the media player object - * has been released, then it should not be used again. - * - * \param p_mlp media list player instance - */ -LIBVLC_API void - libvlc_media_list_player_release( libvlc_media_list_player_t * p_mlp ); - -/** - * Retain a reference to a media player list object. Use - * libvlc_media_list_player_release() to decrement reference count. - * - * \param p_mlp media player list object - */ -LIBVLC_API void - libvlc_media_list_player_retain( libvlc_media_list_player_t *p_mlp ); - -/** - * Return the event manager of this media_list_player. - * - * \param p_mlp media list player instance - * \return the event manager - */ -LIBVLC_API libvlc_event_manager_t * - libvlc_media_list_player_event_manager(libvlc_media_list_player_t * p_mlp); - -/** - * Replace media player in media_list_player with this instance. - * - * \param p_mlp media list player instance - * \param p_mi media player instance - */ -LIBVLC_API void - libvlc_media_list_player_set_media_player( - libvlc_media_list_player_t * p_mlp, - libvlc_media_player_t * p_mi ); - -/** - * Set the media list associated with the player - * - * \param p_mlp media list player instance - * \param p_mlist list of media - */ -LIBVLC_API void - libvlc_media_list_player_set_media_list( - libvlc_media_list_player_t * p_mlp, - libvlc_media_list_t * p_mlist ); - -/** - * Play media list - * - * \param p_mlp media list player instance - */ -LIBVLC_API -void libvlc_media_list_player_play(libvlc_media_list_player_t * p_mlp); - -/** - * Toggle pause (or resume) media list - * - * \param p_mlp media list player instance - */ -LIBVLC_API -void libvlc_media_list_player_pause(libvlc_media_list_player_t * p_mlp); - -/** - * Is media list playing? - * - * \param p_mlp media list player instance - * \return true for playing and false for not playing - * - * \libvlc_return_bool - */ -LIBVLC_API int - libvlc_media_list_player_is_playing( libvlc_media_list_player_t * p_mlp ); - -/** - * Get current libvlc_state of media list player - * - * \param p_mlp media list player instance - * \return libvlc_state_t for media list player - */ -LIBVLC_API libvlc_state_t - libvlc_media_list_player_get_state( libvlc_media_list_player_t * p_mlp ); - -/** - * Play media list item at position index - * - * \param p_mlp media list player instance - * \param i_index index in media list to play - * \return 0 upon success -1 if the item wasn't found - */ -LIBVLC_API -int libvlc_media_list_player_play_item_at_index(libvlc_media_list_player_t * p_mlp, - int i_index); - -/** - * Play the given media item - * - * \param p_mlp media list player instance - * \param p_md the media instance - * \return 0 upon success, -1 if the media is not part of the media list - */ -LIBVLC_API -int libvlc_media_list_player_play_item(libvlc_media_list_player_t * p_mlp, - libvlc_media_t * p_md); - -/** - * Stop playing media list - * - * \param p_mlp media list player instance - */ -LIBVLC_API void - libvlc_media_list_player_stop( libvlc_media_list_player_t * p_mlp); - -/** - * Play next item from media list - * - * \param p_mlp media list player instance - * \return 0 upon success -1 if there is no next item - */ -LIBVLC_API -int libvlc_media_list_player_next(libvlc_media_list_player_t * p_mlp); - -/** - * Play previous item from media list - * - * \param p_mlp media list player instance - * \return 0 upon success -1 if there is no previous item - */ -LIBVLC_API -int libvlc_media_list_player_previous(libvlc_media_list_player_t * p_mlp); - - - -/** - * Sets the playback mode for the playlist - * - * \param p_mlp media list player instance - * \param e_mode playback mode specification - */ -LIBVLC_API -void libvlc_media_list_player_set_playback_mode(libvlc_media_list_player_t * p_mlp, - libvlc_playback_mode_t e_mode ); - -/** @} media_list_player */ - -# ifdef __cplusplus -} -# endif - -#endif /* LIBVLC_MEDIA_LIST_PLAYER_H */ diff --git a/source/vlc/cpp/include/vlc/libvlc_media_player.h b/source/vlc/cpp/include/vlc/libvlc_media_player.h deleted file mode 100644 index 33131be52..000000000 --- a/source/vlc/cpp/include/vlc/libvlc_media_player.h +++ /dev/null @@ -1,1659 +0,0 @@ -/***************************************************************************** - * libvlc_media_player.h: libvlc_media_player external API - ***************************************************************************** - * Copyright (C) 1998-2010 VLC authors and VideoLAN - * $Id: 82c7ac2cfd2ecf05449a3ee22bcb2a23420d413a $ - * - * Authors: Clément Stenac - * Jean-Paul Saman - * Pierre d'Herbemont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file defines libvlc_media_player external API - */ - -#ifndef VLC_LIBVLC_MEDIA_PLAYER_H -#define VLC_LIBVLC_MEDIA_PLAYER_H 1 - -# ifdef __cplusplus -extern "C" { -# else -# include -# endif - -/***************************************************************************** - * Media Player - *****************************************************************************/ -/** \defgroup libvlc_media_player LibVLC media player - * \ingroup libvlc - * A LibVLC media player plays one media (usually in a custom drawable). - * @{ - */ - -typedef struct libvlc_media_player_t libvlc_media_player_t; - -/** - * Description for video, audio tracks and subtitles. It contains - * id, name (description string) and pointer to next record. - */ -typedef struct libvlc_track_description_t -{ - int i_id; - char *psz_name; - struct libvlc_track_description_t *p_next; - -} libvlc_track_description_t; - -/** - * Description for audio output. It contains - * name, description and pointer to next record. - */ -typedef struct libvlc_audio_output_t -{ - char *psz_name; - char *psz_description; - struct libvlc_audio_output_t *p_next; - -} libvlc_audio_output_t; - -/** - * Description for audio output device. - */ -typedef struct libvlc_audio_output_device_t -{ - struct libvlc_audio_output_device_t *p_next; /**< Next entry in list */ - char *psz_device; /**< Device identifier string */ - char *psz_description; /**< User-friendly device description */ - /* More fields may be added here in later versions */ -} libvlc_audio_output_device_t; - -/** - * Rectangle type for video geometry - */ -typedef struct libvlc_rectangle_t -{ - int top, left; - int bottom, right; -} libvlc_rectangle_t; - -/** - * Marq options definition - */ -typedef enum libvlc_video_marquee_option_t { - libvlc_marquee_Enable = 0, - libvlc_marquee_Text, /** string argument */ - libvlc_marquee_Color, - libvlc_marquee_Opacity, - libvlc_marquee_Position, - libvlc_marquee_Refresh, - libvlc_marquee_Size, - libvlc_marquee_Timeout, - libvlc_marquee_X, - libvlc_marquee_Y -} libvlc_video_marquee_option_t; - -/** - * Navigation mode - */ -typedef enum libvlc_navigate_mode_t -{ - libvlc_navigate_activate = 0, - libvlc_navigate_up, - libvlc_navigate_down, - libvlc_navigate_left, - libvlc_navigate_right -} libvlc_navigate_mode_t; - -/** - * Enumeration of values used to set position (e.g. of video title). - */ -typedef enum libvlc_position_t { - libvlc_position_disable=-1, - libvlc_position_center, - libvlc_position_left, - libvlc_position_right, - libvlc_position_top, - libvlc_position_top_left, - libvlc_position_top_right, - libvlc_position_bottom, - libvlc_position_bottom_left, - libvlc_position_bottom_right -} libvlc_position_t; - -/** - * Create an empty Media Player object - * - * \param p_libvlc_instance the libvlc instance in which the Media Player - * should be created. - * \return a new media player object, or NULL on error. - */ -LIBVLC_API libvlc_media_player_t * libvlc_media_player_new( libvlc_instance_t *p_libvlc_instance ); - -/** - * Create a Media Player object from a Media - * - * \param p_md the media. Afterwards the p_md can be safely - * destroyed. - * \return a new media player object, or NULL on error. - */ -LIBVLC_API libvlc_media_player_t * libvlc_media_player_new_from_media( libvlc_media_t *p_md ); - -/** - * Release a media_player after use - * Decrement the reference count of a media player object. If the - * reference count is 0, then libvlc_media_player_release() will - * release the media player object. If the media player object - * has been released, then it should not be used again. - * - * \param p_mi the Media Player to free - */ -LIBVLC_API void libvlc_media_player_release( libvlc_media_player_t *p_mi ); - -/** - * Retain a reference to a media player object. Use - * libvlc_media_player_release() to decrement reference count. - * - * \param p_mi media player object - */ -LIBVLC_API void libvlc_media_player_retain( libvlc_media_player_t *p_mi ); - -/** - * Set the media that will be used by the media_player. If any, - * previous md will be released. - * - * \param p_mi the Media Player - * \param p_md the Media. Afterwards the p_md can be safely - * destroyed. - */ -LIBVLC_API void libvlc_media_player_set_media( libvlc_media_player_t *p_mi, - libvlc_media_t *p_md ); - -/** - * Get the media used by the media_player. - * - * \param p_mi the Media Player - * \return the media associated with p_mi, or NULL if no - * media is associated - */ -LIBVLC_API libvlc_media_t * libvlc_media_player_get_media( libvlc_media_player_t *p_mi ); - -/** - * Get the Event Manager from which the media player send event. - * - * \param p_mi the Media Player - * \return the event manager associated with p_mi - */ -LIBVLC_API libvlc_event_manager_t * libvlc_media_player_event_manager ( libvlc_media_player_t *p_mi ); - -/** - * is_playing - * - * \param p_mi the Media Player - * \return 1 if the media player is playing, 0 otherwise - * - * \libvlc_return_bool - */ -LIBVLC_API int libvlc_media_player_is_playing ( libvlc_media_player_t *p_mi ); - -/** - * Play - * - * \param p_mi the Media Player - * \return 0 if playback started (and was already started), or -1 on error. - */ -LIBVLC_API int libvlc_media_player_play ( libvlc_media_player_t *p_mi ); - -/** - * Pause or resume (no effect if there is no media) - * - * \param mp the Media Player - * \param do_pause play/resume if zero, pause if non-zero - * \version LibVLC 1.1.1 or later - */ -LIBVLC_API void libvlc_media_player_set_pause ( libvlc_media_player_t *mp, - int do_pause ); - -/** - * Toggle pause (no effect if there is no media) - * - * \param p_mi the Media Player - */ -LIBVLC_API void libvlc_media_player_pause ( libvlc_media_player_t *p_mi ); - -/** - * Stop (no effect if there is no media) - * - * \param p_mi the Media Player - */ -LIBVLC_API void libvlc_media_player_stop ( libvlc_media_player_t *p_mi ); - -/** - * Callback prototype to allocate and lock a picture buffer. - * - * Whenever a new video frame needs to be decoded, the lock callback is - * invoked. Depending on the video chroma, one or three pixel planes of - * adequate dimensions must be returned via the second parameter. Those - * planes must be aligned on 32-bytes boundaries. - * - * \param opaque private pointer as passed to libvlc_video_set_callbacks() [IN] - * \param planes start address of the pixel planes (LibVLC allocates the array - * of void pointers, this callback must initialize the array) [OUT] - * \return a private pointer for the display and unlock callbacks to identify - * the picture buffers - */ -typedef void *(*libvlc_video_lock_cb)(void *opaque, void **planes); - -/** - * Callback prototype to unlock a picture buffer. - * - * When the video frame decoding is complete, the unlock callback is invoked. - * This callback might not be needed at all. It is only an indication that the - * application can now read the pixel values if it needs to. - * - * \warning A picture buffer is unlocked after the picture is decoded, - * but before the picture is displayed. - * - * \param opaque private pointer as passed to libvlc_video_set_callbacks() [IN] - * \param picture private pointer returned from the @ref libvlc_video_lock_cb - * callback [IN] - * \param planes pixel planes as defined by the @ref libvlc_video_lock_cb - * callback (this parameter is only for convenience) [IN] - */ -typedef void (*libvlc_video_unlock_cb)(void *opaque, void *picture, - void *const *planes); - -/** - * Callback prototype to display a picture. - * - * When the video frame needs to be shown, as determined by the media playback - * clock, the display callback is invoked. - * - * \param opaque private pointer as passed to libvlc_video_set_callbacks() [IN] - * \param picture private pointer returned from the @ref libvlc_video_lock_cb - * callback [IN] - */ -typedef void (*libvlc_video_display_cb)(void *opaque, void *picture); - -/** - * Callback prototype to configure picture buffers format. - * This callback gets the format of the video as output by the video decoder - * and the chain of video filters (if any). It can opt to change any parameter - * as it needs. In that case, LibVLC will attempt to convert the video format - * (rescaling and chroma conversion) but these operations can be CPU intensive. - * - * \param opaque pointer to the private pointer passed to - * libvlc_video_set_callbacks() [IN/OUT] - * \param chroma pointer to the 4 bytes video format identifier [IN/OUT] - * \param width pointer to the pixel width [IN/OUT] - * \param height pointer to the pixel height [IN/OUT] - * \param pitches table of scanline pitches in bytes for each pixel plane - * (the table is allocated by LibVLC) [OUT] - * \param lines table of scanlines count for each plane [OUT] - * \return the number of picture buffers allocated, 0 indicates failure - * - * \note - * For each pixels plane, the scanline pitch must be bigger than or equal to - * the number of bytes per pixel multiplied by the pixel width. - * Similarly, the number of scanlines must be bigger than of equal to - * the pixel height. - * Furthermore, we recommend that pitches and lines be multiple of 32 - * to not break assumption that might be made by various optimizations - * in the video decoders, video filters and/or video converters. - */ -typedef unsigned (*libvlc_video_format_cb)(void **opaque, char *chroma, - unsigned *width, unsigned *height, - unsigned *pitches, - unsigned *lines); - -/** - * Callback prototype to configure picture buffers format. - * - * \param opaque private pointer as passed to libvlc_video_set_callbacks() - * (and possibly modified by @ref libvlc_video_format_cb) [IN] - */ -typedef void (*libvlc_video_cleanup_cb)(void *opaque); - - -/** - * Set callbacks and private data to render decoded video to a custom area - * in memory. - * Use libvlc_video_set_format() or libvlc_video_set_format_callbacks() - * to configure the decoded format. - * - * \param mp the media player - * \param lock callback to lock video memory (must not be NULL) - * \param unlock callback to unlock video memory (or NULL if not needed) - * \param display callback to display video (or NULL if not needed) - * \param opaque private pointer for the three callbacks (as first parameter) - * \version LibVLC 1.1.1 or later - */ -LIBVLC_API -void libvlc_video_set_callbacks( libvlc_media_player_t *mp, - libvlc_video_lock_cb lock, - libvlc_video_unlock_cb unlock, - libvlc_video_display_cb display, - void *opaque ); - -/** - * Set decoded video chroma and dimensions. - * This only works in combination with libvlc_video_set_callbacks(), - * and is mutually exclusive with libvlc_video_set_format_callbacks(). - * - * \param mp the media player - * \param chroma a four-characters string identifying the chroma - * (e.g. "RV32" or "YUYV") - * \param width pixel width - * \param height pixel height - * \param pitch line pitch (in bytes) - * \version LibVLC 1.1.1 or later - * \bug All pixel planes are expected to have the same pitch. - * To use the YCbCr color space with chrominance subsampling, - * consider using libvlc_video_set_format_callbacks() instead. - */ -LIBVLC_API -void libvlc_video_set_format( libvlc_media_player_t *mp, const char *chroma, - unsigned width, unsigned height, - unsigned pitch ); - -/** - * Set decoded video chroma and dimensions. This only works in combination with - * libvlc_video_set_callbacks(). - * - * \param mp the media player - * \param setup callback to select the video format (cannot be NULL) - * \param cleanup callback to release any allocated resources (or NULL) - * \version LibVLC 2.0.0 or later - */ -LIBVLC_API -void libvlc_video_set_format_callbacks( libvlc_media_player_t *mp, - libvlc_video_format_cb setup, - libvlc_video_cleanup_cb cleanup ); - -/** - * Set the NSView handler where the media player should render its video output. - * - * Use the vout called "macosx". - * - * The drawable is an NSObject that follow the VLCOpenGLVideoViewEmbedding - * protocol: - * - * @begincode - * \@protocol VLCOpenGLVideoViewEmbedding - * - (void)addVoutSubview:(NSView *)view; - * - (void)removeVoutSubview:(NSView *)view; - * \@end - * @endcode - * - * Or it can be an NSView object. - * - * If you want to use it along with Qt4 see the QMacCocoaViewContainer. Then - * the following code should work: - * @begincode - * { - * NSView *video = [[NSView alloc] init]; - * QMacCocoaViewContainer *container = new QMacCocoaViewContainer(video, parent); - * libvlc_media_player_set_nsobject(mp, video); - * [video release]; - * } - * @endcode - * - * You can find a live example in VLCVideoView in VLCKit.framework. - * - * \param p_mi the Media Player - * \param drawable the drawable that is either an NSView or an object following - * the VLCOpenGLVideoViewEmbedding protocol. - */ -LIBVLC_API void libvlc_media_player_set_nsobject ( libvlc_media_player_t *p_mi, void * drawable ); - -/** - * Get the NSView handler previously set with libvlc_media_player_set_nsobject(). - * - * \param p_mi the Media Player - * \return the NSView handler or 0 if none where set - */ -LIBVLC_API void * libvlc_media_player_get_nsobject ( libvlc_media_player_t *p_mi ); - -/** - * Set the agl handler where the media player should render its video output. - * - * \param p_mi the Media Player - * \param drawable the agl handler - */ -LIBVLC_API void libvlc_media_player_set_agl ( libvlc_media_player_t *p_mi, uint32_t drawable ); - -/** - * Get the agl handler previously set with libvlc_media_player_set_agl(). - * - * \param p_mi the Media Player - * \return the agl handler or 0 if none where set - */ -LIBVLC_API uint32_t libvlc_media_player_get_agl ( libvlc_media_player_t *p_mi ); - -/** - * Set an X Window System drawable where the media player should render its - * video output. If LibVLC was built without X11 output support, then this has - * no effects. - * - * The specified identifier must correspond to an existing Input/Output class - * X11 window. Pixmaps are not supported. The caller shall ensure that - * the X11 server is the same as the one the VLC instance has been configured - * with. This function must be called before video playback is started; - * otherwise it will only take effect after playback stop and restart. - * - * \param p_mi the Media Player - * \param drawable the ID of the X window - */ -LIBVLC_API void libvlc_media_player_set_xwindow ( libvlc_media_player_t *p_mi, uint32_t drawable ); - -/** - * Get the X Window System window identifier previously set with - * libvlc_media_player_set_xwindow(). Note that this will return the identifier - * even if VLC is not currently using it (for instance if it is playing an - * audio-only input). - * - * \param p_mi the Media Player - * \return an X window ID, or 0 if none where set. - */ -LIBVLC_API uint32_t libvlc_media_player_get_xwindow ( libvlc_media_player_t *p_mi ); - -/** - * Set a Win32/Win64 API window handle (HWND) where the media player should - * render its video output. If LibVLC was built without Win32/Win64 API output - * support, then this has no effects. - * - * \param p_mi the Media Player - * \param drawable windows handle of the drawable - */ -LIBVLC_API void libvlc_media_player_set_hwnd ( libvlc_media_player_t *p_mi, void *drawable ); - -/** - * Get the Windows API window handle (HWND) previously set with - * libvlc_media_player_set_hwnd(). The handle will be returned even if LibVLC - * is not currently outputting any video to it. - * - * \param p_mi the Media Player - * \return a window handle or NULL if there are none. - */ -LIBVLC_API void *libvlc_media_player_get_hwnd ( libvlc_media_player_t *p_mi ); - -/** - * Callback prototype for audio playback. - * \param data data pointer as passed to libvlc_audio_set_callbacks() [IN] - * \param samples pointer to the first audio sample to play back [IN] - * \param count number of audio samples to play back - * \param pts expected play time stamp (see libvlc_delay()) - */ -typedef void (*libvlc_audio_play_cb)(void *data, const void *samples, - unsigned count, int64_t pts); - -/** - * Callback prototype for audio pause. - * \note The pause callback is never called if the audio is already paused. - * \param data data pointer as passed to libvlc_audio_set_callbacks() [IN] - * \param pts time stamp of the pause request (should be elapsed already) - */ -typedef void (*libvlc_audio_pause_cb)(void *data, int64_t pts); - -/** - * Callback prototype for audio resumption (i.e. restart from pause). - * \note The resume callback is never called if the audio is not paused. - * \param data data pointer as passed to libvlc_audio_set_callbacks() [IN] - * \param pts time stamp of the resumption request (should be elapsed already) - */ -typedef void (*libvlc_audio_resume_cb)(void *data, int64_t pts); - -/** - * Callback prototype for audio buffer flush - * (i.e. discard all pending buffers and stop playback as soon as possible). - * \param data data pointer as passed to libvlc_audio_set_callbacks() [IN] - */ -typedef void (*libvlc_audio_flush_cb)(void *data, int64_t pts); - -/** - * Callback prototype for audio buffer drain - * (i.e. wait for pending buffers to be played). - * \param data data pointer as passed to libvlc_audio_set_callbacks() [IN] - */ -typedef void (*libvlc_audio_drain_cb)(void *data); - -/** - * Callback prototype for audio volume change. - * \param data data pointer as passed to libvlc_audio_set_callbacks() [IN] - * \param volume software volume (1. = nominal, 0. = mute) - * \param mute muted flag - */ -typedef void (*libvlc_audio_set_volume_cb)(void *data, - float volume, bool mute); - -/** - * Set callbacks and private data for decoded audio. - * Use libvlc_audio_set_format() or libvlc_audio_set_format_callbacks() - * to configure the decoded audio format. - * - * \param mp the media player - * \param play callback to play audio samples (must not be NULL) - * \param pause callback to pause playback (or NULL to ignore) - * \param resume callback to resume playback (or NULL to ignore) - * \param flush callback to flush audio buffers (or NULL to ignore) - * \param drain callback to drain audio buffers (or NULL to ignore) - * \param opaque private pointer for the audio callbacks (as first parameter) - * \version LibVLC 2.0.0 or later - */ -LIBVLC_API -void libvlc_audio_set_callbacks( libvlc_media_player_t *mp, - libvlc_audio_play_cb play, - libvlc_audio_pause_cb pause, - libvlc_audio_resume_cb resume, - libvlc_audio_flush_cb flush, - libvlc_audio_drain_cb drain, - void *opaque ); - -/** - * Set callbacks and private data for decoded audio. - * Use libvlc_audio_set_format() or libvlc_audio_set_format_callbacks() - * to configure the decoded audio format. - * - * \param mp the media player - * \param set_volume callback to apply audio volume, - * or NULL to apply volume in software - * \version LibVLC 2.0.0 or later - */ -LIBVLC_API -void libvlc_audio_set_volume_callback( libvlc_media_player_t *mp, - libvlc_audio_set_volume_cb set_volume ); - -/** - * Callback prototype to setup the audio playback. - * This is called when the media player needs to create a new audio output. - * \param opaque pointer to the data pointer passed to - * libvlc_audio_set_callbacks() [IN/OUT] - * \param format 4 bytes sample format [IN/OUT] - * \param rate sample rate [IN/OUT] - * \param channels channels count [IN/OUT] - * \return 0 on success, anything else to skip audio playback - */ -typedef int (*libvlc_audio_setup_cb)(void **data, char *format, unsigned *rate, - unsigned *channels); - -/** - * Callback prototype for audio playback cleanup. - * This is called when the media player no longer needs an audio output. - * \param opaque data pointer as passed to libvlc_audio_set_callbacks() [IN] - */ -typedef void (*libvlc_audio_cleanup_cb)(void *data); - -/** - * Set decoded audio format. This only works in combination with - * libvlc_audio_set_callbacks(). - * - * \param mp the media player - * \param setup callback to select the audio format (cannot be NULL) - * \param cleanup callback to release any allocated resources (or NULL) - * \version LibVLC 2.0.0 or later - */ -LIBVLC_API -void libvlc_audio_set_format_callbacks( libvlc_media_player_t *mp, - libvlc_audio_setup_cb setup, - libvlc_audio_cleanup_cb cleanup ); - -/** - * Set decoded audio format. - * This only works in combination with libvlc_audio_set_callbacks(), - * and is mutually exclusive with libvlc_audio_set_format_callbacks(). - * - * \param mp the media player - * \param format a four-characters string identifying the sample format - * (e.g. "S16N" or "FL32") - * \param rate sample rate (expressed in Hz) - * \param channels channels count - * \version LibVLC 2.0.0 or later - */ -LIBVLC_API -void libvlc_audio_set_format( libvlc_media_player_t *mp, const char *format, - unsigned rate, unsigned channels ); - -/** \bug This might go away ... to be replaced by a broader system */ - -/** - * Get the current movie length (in ms). - * - * \param p_mi the Media Player - * \return the movie length (in ms), or -1 if there is no media. - */ -LIBVLC_API libvlc_time_t libvlc_media_player_get_length( libvlc_media_player_t *p_mi ); - -/** - * Get the current movie time (in ms). - * - * \param p_mi the Media Player - * \return the movie time (in ms), or -1 if there is no media. - */ -LIBVLC_API libvlc_time_t libvlc_media_player_get_time( libvlc_media_player_t *p_mi ); - -/** - * Set the movie time (in ms). This has no effect if no media is being played. - * Not all formats and protocols support this. - * - * \param p_mi the Media Player - * \param i_time the movie time (in ms). - */ -LIBVLC_API void libvlc_media_player_set_time( libvlc_media_player_t *p_mi, libvlc_time_t i_time ); - -/** - * Get movie position as percentage between 0.0 and 1.0. - * - * \param p_mi the Media Player - * \return movie position, or -1. in case of error - */ -LIBVLC_API float libvlc_media_player_get_position( libvlc_media_player_t *p_mi ); - -/** - * Set movie position as percentage between 0.0 and 1.0. - * This has no effect if playback is not enabled. - * This might not work depending on the underlying input format and protocol. - * - * \param p_mi the Media Player - * \param f_pos the position - */ -LIBVLC_API void libvlc_media_player_set_position( libvlc_media_player_t *p_mi, float f_pos ); - -/** - * Set movie chapter (if applicable). - * - * \param p_mi the Media Player - * \param i_chapter chapter number to play - */ -LIBVLC_API void libvlc_media_player_set_chapter( libvlc_media_player_t *p_mi, int i_chapter ); - -/** - * Get movie chapter. - * - * \param p_mi the Media Player - * \return chapter number currently playing, or -1 if there is no media. - */ -LIBVLC_API int libvlc_media_player_get_chapter( libvlc_media_player_t *p_mi ); - -/** - * Get movie chapter count - * - * \param p_mi the Media Player - * \return number of chapters in movie, or -1. - */ -LIBVLC_API int libvlc_media_player_get_chapter_count( libvlc_media_player_t *p_mi ); - -/** - * Is the player able to play - * - * \param p_mi the Media Player - * \return boolean - * - * \libvlc_return_bool - */ -LIBVLC_API int libvlc_media_player_will_play( libvlc_media_player_t *p_mi ); - -/** - * Get title chapter count - * - * \param p_mi the Media Player - * \param i_title title - * \return number of chapters in title, or -1 - */ -LIBVLC_API int libvlc_media_player_get_chapter_count_for_title( - libvlc_media_player_t *p_mi, int i_title ); - -/** - * Set movie title - * - * \param p_mi the Media Player - * \param i_title title number to play - */ -LIBVLC_API void libvlc_media_player_set_title( libvlc_media_player_t *p_mi, int i_title ); - -/** - * Get movie title - * - * \param p_mi the Media Player - * \return title number currently playing, or -1 - */ -LIBVLC_API int libvlc_media_player_get_title( libvlc_media_player_t *p_mi ); - -/** - * Get movie title count - * - * \param p_mi the Media Player - * \return title number count, or -1 - */ -LIBVLC_API int libvlc_media_player_get_title_count( libvlc_media_player_t *p_mi ); - -/** - * Set previous chapter (if applicable) - * - * \param p_mi the Media Player - */ -LIBVLC_API void libvlc_media_player_previous_chapter( libvlc_media_player_t *p_mi ); - -/** - * Set next chapter (if applicable) - * - * \param p_mi the Media Player - */ -LIBVLC_API void libvlc_media_player_next_chapter( libvlc_media_player_t *p_mi ); - -/** - * Get the requested movie play rate. - * @warning Depending on the underlying media, the requested rate may be - * different from the real playback rate. - * - * \param p_mi the Media Player - * \return movie play rate - */ -LIBVLC_API float libvlc_media_player_get_rate( libvlc_media_player_t *p_mi ); - -/** - * Set movie play rate - * - * \param p_mi the Media Player - * \param rate movie play rate to set - * \return -1 if an error was detected, 0 otherwise (but even then, it might - * not actually work depending on the underlying media protocol) - */ -LIBVLC_API int libvlc_media_player_set_rate( libvlc_media_player_t *p_mi, float rate ); - -/** - * Get current movie state - * - * \param p_mi the Media Player - * \return the current state of the media player (playing, paused, ...) \see libvlc_state_t - */ -LIBVLC_API libvlc_state_t libvlc_media_player_get_state( libvlc_media_player_t *p_mi ); - -/** - * Get movie fps rate - * - * \param p_mi the Media Player - * \return frames per second (fps) for this playing movie, or 0 if unspecified - */ -LIBVLC_API float libvlc_media_player_get_fps( libvlc_media_player_t *p_mi ); - -/** end bug */ - -/** - * How many video outputs does this media player have? - * - * \param p_mi the media player - * \return the number of video outputs - */ -LIBVLC_API unsigned libvlc_media_player_has_vout( libvlc_media_player_t *p_mi ); - -/** - * Is this media player seekable? - * - * \param p_mi the media player - * \return true if the media player can seek - * - * \libvlc_return_bool - */ -LIBVLC_API int libvlc_media_player_is_seekable( libvlc_media_player_t *p_mi ); - -/** - * Can this media player be paused? - * - * \param p_mi the media player - * \return true if the media player can pause - * - * \libvlc_return_bool - */ -LIBVLC_API int libvlc_media_player_can_pause( libvlc_media_player_t *p_mi ); - - -/** - * Display the next frame (if supported) - * - * \param p_mi the media player - */ -LIBVLC_API void libvlc_media_player_next_frame( libvlc_media_player_t *p_mi ); - -/** - * Navigate through DVD Menu - * - * \param p_mi the Media Player - * \param navigate the Navigation mode - * \version libVLC 2.0.0 or later - */ -LIBVLC_API void libvlc_media_player_navigate( libvlc_media_player_t* p_mi, - unsigned navigate ); - -/** - * Set if, and how, the video title will be shown when media is played. - * - * \param p_mi the media player - * \param position position at which to display the title, or libvlc_position_disable to prevent the title from being displayed - * \param timeout title display timeout in milliseconds (ignored if libvlc_position_disable) - * \version libVLC 2.1.0 or later - */ -LIBVLC_API void libvlc_media_player_set_video_title_display( libvlc_media_player_t *p_mi, libvlc_position_t position, unsigned int timeout ); - -/** - * Release (free) libvlc_track_description_t - * - * \param p_track_description the structure to release - */ -LIBVLC_API void libvlc_track_description_list_release( libvlc_track_description_t *p_track_description ); - -/** - * \deprecated Use libvlc_track_description_list_release instead - */ -LIBVLC_DEPRECATED LIBVLC_API -void libvlc_track_description_release( libvlc_track_description_t *p_track_description ); - -/** \defgroup libvlc_video LibVLC video controls - * @{ - */ - -/** - * Toggle fullscreen status on non-embedded video outputs. - * - * @warning The same limitations applies to this function - * as to libvlc_set_fullscreen(). - * - * \param p_mi the media player - */ -LIBVLC_API void libvlc_toggle_fullscreen( libvlc_media_player_t *p_mi ); - -/** - * Enable or disable fullscreen. - * - * @warning With most window managers, only a top-level windows can be in - * full-screen mode. Hence, this function will not operate properly if - * libvlc_media_player_set_xwindow() was used to embed the video in a - * non-top-level window. In that case, the embedding window must be reparented - * to the root window before fullscreen mode is enabled. You will want - * to reparent it back to its normal parent when disabling fullscreen. - * - * \param p_mi the media player - * \param b_fullscreen boolean for fullscreen status - */ -LIBVLC_API void libvlc_set_fullscreen( libvlc_media_player_t *p_mi, int b_fullscreen ); - -/** - * Get current fullscreen status. - * - * \param p_mi the media player - * \return the fullscreen status (boolean) - * - * \libvlc_return_bool - */ -LIBVLC_API int libvlc_get_fullscreen( libvlc_media_player_t *p_mi ); - -/** - * Enable or disable key press events handling, according to the LibVLC hotkeys - * configuration. By default and for historical reasons, keyboard events are - * handled by the LibVLC video widget. - * - * \note On X11, there can be only one subscriber for key press and mouse - * click events per window. If your application has subscribed to those events - * for the X window ID of the video widget, then LibVLC will not be able to - * handle key presses and mouse clicks in any case. - * - * \warning This function is only implemented for X11 and Win32 at the moment. - * - * \param p_mi the media player - * \param on true to handle key press events, false to ignore them. - */ -LIBVLC_API -void libvlc_video_set_key_input( libvlc_media_player_t *p_mi, unsigned on ); - -/** - * Enable or disable mouse click events handling. By default, those events are - * handled. This is needed for DVD menus to work, as well as a few video - * filters such as "puzzle". - * - * \see libvlc_video_set_key_input(). - * - * \warning This function is only implemented for X11 and Win32 at the moment. - * - * \param p_mi the media player - * \param on true to handle mouse click events, false to ignore them. - */ -LIBVLC_API -void libvlc_video_set_mouse_input( libvlc_media_player_t *p_mi, unsigned on ); - -/** - * Get the pixel dimensions of a video. - * - * \param p_mi media player - * \param num number of the video (starting from, and most commonly 0) - * \param px pointer to get the pixel width [OUT] - * \param py pointer to get the pixel height [OUT] - * \return 0 on success, -1 if the specified video does not exist - */ -LIBVLC_API -int libvlc_video_get_size( libvlc_media_player_t *p_mi, unsigned num, - unsigned *px, unsigned *py ); - -/** - * Get current video height. - * \deprecated Use libvlc_video_get_size() instead. - * - * \param p_mi the media player - * \return the video pixel height or 0 if not applicable - */ -LIBVLC_DEPRECATED LIBVLC_API -int libvlc_video_get_height( libvlc_media_player_t *p_mi ); - -/** - * Get current video width. - * \deprecated Use libvlc_video_get_size() instead. - * - * \param p_mi the media player - * \return the video pixel width or 0 if not applicable - */ -LIBVLC_DEPRECATED LIBVLC_API -int libvlc_video_get_width( libvlc_media_player_t *p_mi ); - -/** - * Get the mouse pointer coordinates over a video. - * Coordinates are expressed in terms of the decoded video resolution, - * not in terms of pixels on the screen/viewport (to get the latter, - * you can query your windowing system directly). - * - * Either of the coordinates may be negative or larger than the corresponding - * dimension of the video, if the cursor is outside the rendering area. - * - * @warning The coordinates may be out-of-date if the pointer is not located - * on the video rendering area. LibVLC does not track the pointer if it is - * outside of the video widget. - * - * @note LibVLC does not support multiple pointers (it does of course support - * multiple input devices sharing the same pointer) at the moment. - * - * \param p_mi media player - * \param num number of the video (starting from, and most commonly 0) - * \param px pointer to get the abscissa [OUT] - * \param py pointer to get the ordinate [OUT] - * \return 0 on success, -1 if the specified video does not exist - */ -LIBVLC_API -int libvlc_video_get_cursor( libvlc_media_player_t *p_mi, unsigned num, - int *px, int *py ); - -/** - * Get the current video scaling factor. - * See also libvlc_video_set_scale(). - * - * \param p_mi the media player - * \return the currently configured zoom factor, or 0. if the video is set - * to fit to the output window/drawable automatically. - */ -LIBVLC_API float libvlc_video_get_scale( libvlc_media_player_t *p_mi ); - -/** - * Set the video scaling factor. That is the ratio of the number of pixels on - * screen to the number of pixels in the original decoded video in each - * dimension. Zero is a special value; it will adjust the video to the output - * window/drawable (in windowed mode) or the entire screen. - * - * Note that not all video outputs support scaling. - * - * \param p_mi the media player - * \param f_factor the scaling factor, or zero - */ -LIBVLC_API void libvlc_video_set_scale( libvlc_media_player_t *p_mi, float f_factor ); - -/** - * Get current video aspect ratio. - * - * \param p_mi the media player - * \return the video aspect ratio or NULL if unspecified - * (the result must be released with free() or libvlc_free()). - */ -LIBVLC_API char *libvlc_video_get_aspect_ratio( libvlc_media_player_t *p_mi ); - -/** - * Set new video aspect ratio. - * - * \param p_mi the media player - * \param psz_aspect new video aspect-ratio or NULL to reset to default - * \note Invalid aspect ratios are ignored. - */ -LIBVLC_API void libvlc_video_set_aspect_ratio( libvlc_media_player_t *p_mi, const char *psz_aspect ); - -/** - * Get current video subtitle. - * - * \param p_mi the media player - * \return the video subtitle selected, or -1 if none - */ -LIBVLC_API int libvlc_video_get_spu( libvlc_media_player_t *p_mi ); - -/** - * Get the number of available video subtitles. - * - * \param p_mi the media player - * \return the number of available video subtitles - */ -LIBVLC_API int libvlc_video_get_spu_count( libvlc_media_player_t *p_mi ); - -/** - * Get the description of available video subtitles. - * - * \param p_mi the media player - * \return list containing description of available video subtitles - */ -LIBVLC_API libvlc_track_description_t * - libvlc_video_get_spu_description( libvlc_media_player_t *p_mi ); - -/** - * Set new video subtitle. - * - * \param p_mi the media player - * \param i_spu video subtitle track to select (i_id from track description) - * \return 0 on success, -1 if out of range - */ -LIBVLC_API int libvlc_video_set_spu( libvlc_media_player_t *p_mi, int i_spu ); - -/** - * Set new video subtitle file. - * - * \param p_mi the media player - * \param psz_subtitle new video subtitle file - * \return the success status (boolean) - */ -LIBVLC_API int libvlc_video_set_subtitle_file( libvlc_media_player_t *p_mi, const char *psz_subtitle ); - -/** - * Get the current subtitle delay. Positive values means subtitles are being - * displayed later, negative values earlier. - * - * \param p_mi media player - * \return time (in microseconds) the display of subtitles is being delayed - * \version LibVLC 2.0.0 or later - */ -LIBVLC_API int64_t libvlc_video_get_spu_delay( libvlc_media_player_t *p_mi ); - -/** - * Set the subtitle delay. This affects the timing of when the subtitle will - * be displayed. Positive values result in subtitles being displayed later, - * while negative values will result in subtitles being displayed earlier. - * - * The subtitle delay will be reset to zero each time the media changes. - * - * \param p_mi media player - * \param i_delay time (in microseconds) the display of subtitles should be delayed - * \return 0 on success, -1 on error - * \version LibVLC 2.0.0 or later - */ -LIBVLC_API int libvlc_video_set_spu_delay( libvlc_media_player_t *p_mi, int64_t i_delay ); - -/** - * Get the description of available titles. - * - * \param p_mi the media player - * \return list containing description of available titles - */ -LIBVLC_API libvlc_track_description_t * - libvlc_video_get_title_description( libvlc_media_player_t *p_mi ); - -/** - * Get the description of available chapters for specific title. - * - * \param p_mi the media player - * \param i_title selected title - * \return list containing description of available chapter for title i_title - */ -LIBVLC_API libvlc_track_description_t * - libvlc_video_get_chapter_description( libvlc_media_player_t *p_mi, int i_title ); - -/** - * Get current crop filter geometry. - * - * \param p_mi the media player - * \return the crop filter geometry or NULL if unset - */ -LIBVLC_API char *libvlc_video_get_crop_geometry( libvlc_media_player_t *p_mi ); - -/** - * Set new crop filter geometry. - * - * \param p_mi the media player - * \param psz_geometry new crop filter geometry (NULL to unset) - */ -LIBVLC_API -void libvlc_video_set_crop_geometry( libvlc_media_player_t *p_mi, const char *psz_geometry ); - -/** - * Get current teletext page requested. - * - * \param p_mi the media player - * \return the current teletext page requested. - */ -LIBVLC_API int libvlc_video_get_teletext( libvlc_media_player_t *p_mi ); - -/** - * Set new teletext page to retrieve. - * - * \param p_mi the media player - * \param i_page teletex page number requested - */ -LIBVLC_API void libvlc_video_set_teletext( libvlc_media_player_t *p_mi, int i_page ); - -/** - * Toggle teletext transparent status on video output. - * - * \param p_mi the media player - */ -LIBVLC_API void libvlc_toggle_teletext( libvlc_media_player_t *p_mi ); - -/** - * Get number of available video tracks. - * - * \param p_mi media player - * \return the number of available video tracks (int) - */ -LIBVLC_API int libvlc_video_get_track_count( libvlc_media_player_t *p_mi ); - -/** - * Get the description of available video tracks. - * - * \param p_mi media player - * \return list with description of available video tracks, or NULL on error - */ -LIBVLC_API libvlc_track_description_t * - libvlc_video_get_track_description( libvlc_media_player_t *p_mi ); - -/** - * Get current video track. - * - * \param p_mi media player - * \return the video track ID (int) or -1 if no active input - */ -LIBVLC_API int libvlc_video_get_track( libvlc_media_player_t *p_mi ); - -/** - * Set video track. - * - * \param p_mi media player - * \param i_track the track ID (i_id field from track description) - * \return 0 on success, -1 if out of range - */ -LIBVLC_API -int libvlc_video_set_track( libvlc_media_player_t *p_mi, int i_track ); - -/** - * Take a snapshot of the current video window. - * - * If i_width AND i_height is 0, original size is used. - * If i_width XOR i_height is 0, original aspect-ratio is preserved. - * - * \param p_mi media player instance - * \param num number of video output (typically 0 for the first/only one) - * \param psz_filepath the path where to save the screenshot to - * \param i_width the snapshot's width - * \param i_height the snapshot's height - * \return 0 on success, -1 if the video was not found - */ -LIBVLC_API -int libvlc_video_take_snapshot( libvlc_media_player_t *p_mi, unsigned num, - const char *psz_filepath, unsigned int i_width, - unsigned int i_height ); - -/** - * Enable or disable deinterlace filter - * - * \param p_mi libvlc media player - * \param psz_mode type of deinterlace filter, NULL to disable - */ -LIBVLC_API void libvlc_video_set_deinterlace( libvlc_media_player_t *p_mi, - const char *psz_mode ); - -/** - * Get an integer marquee option value - * - * \param p_mi libvlc media player - * \param option marq option to get \see libvlc_video_marquee_int_option_t - */ -LIBVLC_API int libvlc_video_get_marquee_int( libvlc_media_player_t *p_mi, - unsigned option ); - -/** - * Get a string marquee option value - * - * \param p_mi libvlc media player - * \param option marq option to get \see libvlc_video_marquee_string_option_t - */ -LIBVLC_API char *libvlc_video_get_marquee_string( libvlc_media_player_t *p_mi, - unsigned option ); - -/** - * Enable, disable or set an integer marquee option - * - * Setting libvlc_marquee_Enable has the side effect of enabling (arg !0) - * or disabling (arg 0) the marq filter. - * - * \param p_mi libvlc media player - * \param option marq option to set \see libvlc_video_marquee_int_option_t - * \param i_val marq option value - */ -LIBVLC_API void libvlc_video_set_marquee_int( libvlc_media_player_t *p_mi, - unsigned option, int i_val ); - -/** - * Set a marquee string option - * - * \param p_mi libvlc media player - * \param option marq option to set \see libvlc_video_marquee_string_option_t - * \param psz_text marq option value - */ -LIBVLC_API void libvlc_video_set_marquee_string( libvlc_media_player_t *p_mi, - unsigned option, const char *psz_text ); - -/** option values for libvlc_video_{get,set}_logo_{int,string} */ -enum libvlc_video_logo_option_t { - libvlc_logo_enable, - libvlc_logo_file, /**< string argument, "file,d,t;file,d,t;..." */ - libvlc_logo_x, - libvlc_logo_y, - libvlc_logo_delay, - libvlc_logo_repeat, - libvlc_logo_opacity, - libvlc_logo_position -}; - -/** - * Get integer logo option. - * - * \param p_mi libvlc media player instance - * \param option logo option to get, values of libvlc_video_logo_option_t - */ -LIBVLC_API int libvlc_video_get_logo_int( libvlc_media_player_t *p_mi, - unsigned option ); - -/** - * Set logo option as integer. Options that take a different type value - * are ignored. - * Passing libvlc_logo_enable as option value has the side effect of - * starting (arg !0) or stopping (arg 0) the logo filter. - * - * \param p_mi libvlc media player instance - * \param option logo option to set, values of libvlc_video_logo_option_t - * \param value logo option value - */ -LIBVLC_API void libvlc_video_set_logo_int( libvlc_media_player_t *p_mi, - unsigned option, int value ); - -/** - * Set logo option as string. Options that take a different type value - * are ignored. - * - * \param p_mi libvlc media player instance - * \param option logo option to set, values of libvlc_video_logo_option_t - * \param psz_value logo option value - */ -LIBVLC_API void libvlc_video_set_logo_string( libvlc_media_player_t *p_mi, - unsigned option, const char *psz_value ); - - -/** option values for libvlc_video_{get,set}_adjust_{int,float,bool} */ -enum libvlc_video_adjust_option_t { - libvlc_adjust_Enable = 0, - libvlc_adjust_Contrast, - libvlc_adjust_Brightness, - libvlc_adjust_Hue, - libvlc_adjust_Saturation, - libvlc_adjust_Gamma -}; - -/** - * Get integer adjust option. - * - * \param p_mi libvlc media player instance - * \param option adjust option to get, values of libvlc_video_adjust_option_t - * \version LibVLC 1.1.1 and later. - */ -LIBVLC_API int libvlc_video_get_adjust_int( libvlc_media_player_t *p_mi, - unsigned option ); - -/** - * Set adjust option as integer. Options that take a different type value - * are ignored. - * Passing libvlc_adjust_enable as option value has the side effect of - * starting (arg !0) or stopping (arg 0) the adjust filter. - * - * \param p_mi libvlc media player instance - * \param option adust option to set, values of libvlc_video_adjust_option_t - * \param value adjust option value - * \version LibVLC 1.1.1 and later. - */ -LIBVLC_API void libvlc_video_set_adjust_int( libvlc_media_player_t *p_mi, - unsigned option, int value ); - -/** - * Get float adjust option. - * - * \param p_mi libvlc media player instance - * \param option adjust option to get, values of libvlc_video_adjust_option_t - * \version LibVLC 1.1.1 and later. - */ -LIBVLC_API float libvlc_video_get_adjust_float( libvlc_media_player_t *p_mi, - unsigned option ); - -/** - * Set adjust option as float. Options that take a different type value - * are ignored. - * - * \param p_mi libvlc media player instance - * \param option adust option to set, values of libvlc_video_adjust_option_t - * \param value adjust option value - * \version LibVLC 1.1.1 and later. - */ -LIBVLC_API void libvlc_video_set_adjust_float( libvlc_media_player_t *p_mi, - unsigned option, float value ); - -/** @} video */ - -/** \defgroup libvlc_audio LibVLC audio controls - * @{ - */ - -/** - * Audio device types - */ -typedef enum libvlc_audio_output_device_types_t { - libvlc_AudioOutputDevice_Error = -1, - libvlc_AudioOutputDevice_Mono = 1, - libvlc_AudioOutputDevice_Stereo = 2, - libvlc_AudioOutputDevice_2F2R = 4, - libvlc_AudioOutputDevice_3F2R = 5, - libvlc_AudioOutputDevice_5_1 = 6, - libvlc_AudioOutputDevice_6_1 = 7, - libvlc_AudioOutputDevice_7_1 = 8, - libvlc_AudioOutputDevice_SPDIF = 10 -} libvlc_audio_output_device_types_t; - -/** - * Audio channels - */ -typedef enum libvlc_audio_output_channel_t { - libvlc_AudioChannel_Error = -1, - libvlc_AudioChannel_Stereo = 1, - libvlc_AudioChannel_RStereo = 2, - libvlc_AudioChannel_Left = 3, - libvlc_AudioChannel_Right = 4, - libvlc_AudioChannel_Dolbys = 5 -} libvlc_audio_output_channel_t; - - -/** - * Gets the list of available audio outputs - * - * \param p_instance libvlc instance - * \return list of available audio outputs. It must be freed it with -* \see libvlc_audio_output_list_release \see libvlc_audio_output_t . - * In case of error, NULL is returned. - */ -LIBVLC_API libvlc_audio_output_t * -libvlc_audio_output_list_get( libvlc_instance_t *p_instance ); - -/** - * Frees the list of available audio outputs - * - * \param p_list list with audio outputs for release - */ -LIBVLC_API -void libvlc_audio_output_list_release( libvlc_audio_output_t *p_list ); - -/** - * Sets the audio output. - * \note Any change will take be effect only after playback is stopped and - * restarted. Audio output cannot be changed while playing. - * - * \param p_mi media player - * \param psz_name name of audio output, - * use psz_name of \see libvlc_audio_output_t - * \return 0 if function succeded, -1 on error - */ -LIBVLC_API int libvlc_audio_output_set( libvlc_media_player_t *p_mi, - const char *psz_name ); - -/** - * Backward compatibility stub. Do not use in new code. - * Use libvlc_audio_output_device_list_get() instead. - * \return always 0. - */ -LIBVLC_DEPRECATED LIBVLC_API -int libvlc_audio_output_device_count( libvlc_instance_t *, const char * ); - -/** - * Backward compatibility stub. Do not use in new code. - * Use libvlc_audio_output_device_list_get() instead. - * \return always NULL. - */ -LIBVLC_DEPRECATED LIBVLC_API -char *libvlc_audio_output_device_longname( libvlc_instance_t *, const char *, - int ); - -/** - * Backward compatibility stub. Do not use in new code. - * Use libvlc_audio_output_device_list_get() instead. - * \return always NULL. - */ -LIBVLC_DEPRECATED LIBVLC_API -char *libvlc_audio_output_device_id( libvlc_instance_t *, const char *, int ); - -/** - * Gets a list of audio output devices for a given audio output. - * \see libvlc_audio_output_device_set(). - * - * \note Not all audio outputs support this. In particular, an empty (NULL) - * list of devices does not imply that the specified audio output does - * not work. - * - * \note The list might not be exhaustive. - * - * \warning Some audio output devices in the list might not actually work in - * some circumstances. By default, it is recommended to not specify any - * explicit audio device. - * - * \param p_instance libvlc instance - * \param psz_aout audio output name - * (as returned by libvlc_audio_output_list_get()) - * \return A NULL-terminated linked list of potential audio output devices. - * It must be freed it with libvlc_audio_output_device_list_release() - * \version LibVLC 2.1.0 or later. - */ -LIBVLC_API libvlc_audio_output_device_t * -libvlc_audio_output_device_list_get( libvlc_instance_t *p_instance, - const char *aout ); - -/** - * Frees a list of available audio output devices. - * - * \param p_list list with audio outputs for release - * \version LibVLC 2.1.0 or later. - */ -LIBVLC_API void libvlc_audio_output_device_list_release( - libvlc_audio_output_device_t *p_list ); - -/** - * Configures an explicit audio output device for a given audio output plugin. - * A list of possible devices can be obtained with - * libvlc_audio_output_device_list_get(). - * - * \note This function does not select the specified audio output plugin. - * libvlc_audio_output_set() is used for that purpose. - * - * \warning The syntax for the device parameter depends on the audio output. - * This is not portable. Only use this function if you know what you are doing. - * Some audio outputs do not support this function (e.g. PulseAudio, WASAPI). - * Some audio outputs require further parameters (e.g. ALSA: channels map). - * - * \param p_mi media player - * \param psz_audio_output - name of audio output, \see libvlc_audio_output_t - * \param psz_device_id device - * \return Nothing. Errors are ignored. - */ -LIBVLC_API void libvlc_audio_output_device_set( libvlc_media_player_t *p_mi, - const char *psz_audio_output, - const char *psz_device_id ); - -/** - * Stub for backward compatibility. - * \return always -1. - */ -LIBVLC_DEPRECATED -LIBVLC_API int libvlc_audio_output_get_device_type( libvlc_media_player_t *p_mi ); - -/** - * Stub for backward compatibility. - */ -LIBVLC_DEPRECATED -LIBVLC_API void libvlc_audio_output_set_device_type( libvlc_media_player_t *, - int ); - - -/** - * Toggle mute status. - * - * \param p_mi media player - * \warning Toggling mute atomically is not always possible: On some platforms, - * other processes can mute the VLC audio playback stream asynchronously. Thus, - * there is a small race condition where toggling will not work. - * See also the limitations of libvlc_audio_set_mute(). - */ -LIBVLC_API void libvlc_audio_toggle_mute( libvlc_media_player_t *p_mi ); - -/** - * Get current mute status. - * - * \param p_mi media player - * \return the mute status (boolean) if defined, -1 if undefined/unapplicable - */ -LIBVLC_API int libvlc_audio_get_mute( libvlc_media_player_t *p_mi ); - -/** - * Set mute status. - * - * \param p_mi media player - * \param status If status is true then mute, otherwise unmute - * \warning This function does not always work. If there are no active audio - * playback stream, the mute status might not be available. If digital - * pass-through (S/PDIF, HDMI...) is in use, muting may be unapplicable. Also - * some audio output plugins do not support muting at all. - * \note To force silent playback, disable all audio tracks. This is more - * efficient and reliable than mute. - */ -LIBVLC_API void libvlc_audio_set_mute( libvlc_media_player_t *p_mi, int status ); - -/** - * Get current software audio volume. - * - * \param p_mi media player - * \return the software volume in percents - * (0 = mute, 100 = nominal / 0dB) - */ -LIBVLC_API int libvlc_audio_get_volume( libvlc_media_player_t *p_mi ); - -/** - * Set current software audio volume. - * - * \param p_mi media player - * \param i_volume the volume in percents (0 = mute, 100 = 0dB) - * \return 0 if the volume was set, -1 if it was out of range - */ -LIBVLC_API int libvlc_audio_set_volume( libvlc_media_player_t *p_mi, int i_volume ); - -/** - * Get number of available audio tracks. - * - * \param p_mi media player - * \return the number of available audio tracks (int), or -1 if unavailable - */ -LIBVLC_API int libvlc_audio_get_track_count( libvlc_media_player_t *p_mi ); - -/** - * Get the description of available audio tracks. - * - * \param p_mi media player - * \return list with description of available audio tracks, or NULL - */ -LIBVLC_API libvlc_track_description_t * - libvlc_audio_get_track_description( libvlc_media_player_t *p_mi ); - -/** - * Get current audio track. - * - * \param p_mi media player - * \return the audio track ID or -1 if no active input. - */ -LIBVLC_API int libvlc_audio_get_track( libvlc_media_player_t *p_mi ); - -/** - * Set current audio track. - * - * \param p_mi media player - * \param i_track the track ID (i_id field from track description) - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_audio_set_track( libvlc_media_player_t *p_mi, int i_track ); - -/** - * Get current audio channel. - * - * \param p_mi media player - * \return the audio channel \see libvlc_audio_output_channel_t - */ -LIBVLC_API int libvlc_audio_get_channel( libvlc_media_player_t *p_mi ); - -/** - * Set current audio channel. - * - * \param p_mi media player - * \param channel the audio channel, \see libvlc_audio_output_channel_t - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_audio_set_channel( libvlc_media_player_t *p_mi, int channel ); - -/** - * Get current audio delay. - * - * \param p_mi media player - * \return the audio delay (microseconds) - * \version LibVLC 1.1.1 or later - */ -LIBVLC_API int64_t libvlc_audio_get_delay( libvlc_media_player_t *p_mi ); - -/** - * Set current audio delay. The audio delay will be reset to zero each time the media changes. - * - * \param p_mi media player - * \param i_delay the audio delay (microseconds) - * \return 0 on success, -1 on error - * \version LibVLC 1.1.1 or later - */ -LIBVLC_API int libvlc_audio_set_delay( libvlc_media_player_t *p_mi, int64_t i_delay ); - -/** @} audio */ - -/** @} media_player */ - -# ifdef __cplusplus -} -# endif - -#endif /* VLC_LIBVLC_MEDIA_PLAYER_H */ diff --git a/source/vlc/cpp/include/vlc/libvlc_structures.h b/source/vlc/cpp/include/vlc/libvlc_structures.h deleted file mode 100644 index 54cd1fd30..000000000 --- a/source/vlc/cpp/include/vlc/libvlc_structures.h +++ /dev/null @@ -1,73 +0,0 @@ -/***************************************************************************** - * libvlc_structures.h: libvlc_* new external API structures - ***************************************************************************** - * Copyright (C) 1998-2008 VLC authors and VideoLAN - * $Id $ - * - * Authors: Filippo Carone - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef LIBVLC_STRUCTURES_H -#define LIBVLC_STRUCTURES_H 1 - -/** - * \file - * This file defines libvlc_* new external API structures - */ - -#include - -# ifdef __cplusplus -extern "C" { -# endif - -/** - * \ingroup libvlc_core - * @{ - */ - -/** This structure is opaque. It represents a libvlc instance */ -typedef struct libvlc_instance_t libvlc_instance_t; - -typedef int64_t libvlc_time_t; - -/**@} */ - -/** - * \ingroup libvlc_log - * @{ - */ - -/** This structure is opaque. It represents a libvlc log iterator */ -typedef struct libvlc_log_iterator_t libvlc_log_iterator_t; - -typedef struct libvlc_log_message_t -{ - int i_severity; /* 0=INFO, 1=ERR, 2=WARN, 3=DBG */ - const char *psz_type; /* module type */ - const char *psz_name; /* module name */ - const char *psz_header; /* optional header */ - const char *psz_message; /* message */ -} libvlc_log_message_t; - -/**@} */ - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/source/vlc/cpp/include/vlc/libvlc_version.h b/source/vlc/cpp/include/vlc/libvlc_version.h deleted file mode 100644 index 7b3ff8d7f..000000000 --- a/source/vlc/cpp/include/vlc/libvlc_version.h +++ /dev/null @@ -1,55 +0,0 @@ -/***************************************************************************** - * libvlc_version.h - ***************************************************************************** - * Copyright (C) 2010 Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file defines version macros for LibVLC. - * Those macros are primilarly intended for conditional (pre)compilation. - * To get the run-time LibVLC version, use libvlc_get_version() instead - * (the run-time version may be more recent than build-time one, thanks to - * backward binary compatibility). - * - * \version This header file is available in LibVLC 1.1.4 and higher. - */ - -#ifndef LIBVLC_VERSION_H -# define LIBVLC_VERSION_H 1 - -/** LibVLC major version number */ -# define LIBVLC_VERSION_MAJOR (@VERSION_MAJOR@) - -/** LibVLC minor version number */ -# define LIBVLC_VERSION_MINOR (@VERSION_MINOR@) - -/** LibVLC revision */ -# define LIBVLC_VERSION_REVISION (@VERSION_REVISION@) - -# define LIBVLC_VERSION_EXTRA (0) - -/** Makes a single integer from a LibVLC version numbers */ -# define LIBVLC_VERSION(maj,min,rev,extra) \ - ((maj << 24) | (min << 16) | (rev << 8) | (extra)) - -/** LibVLC full version as a single integer (for comparison) */ -# define LIBVLC_VERSION_INT \ - LIBVLC_VERSION(LIBVLC_VERSION_MAJOR, LIBVLC_VERSION_MINOR, \ - LIBVLC_VERSION_REVISION, LIBVLC_VERSION_EXTRA) - -#endif diff --git a/source/vlc/cpp/include/vlc/libvlc_vlm.h b/source/vlc/cpp/include/vlc/libvlc_vlm.h deleted file mode 100644 index 20c75f537..000000000 --- a/source/vlc/cpp/include/vlc/libvlc_vlm.h +++ /dev/null @@ -1,349 +0,0 @@ -/***************************************************************************** - * libvlc_vlm.h: libvlc_* new external API - ***************************************************************************** - * Copyright (C) 1998-2008 VLC authors and VideoLAN - * $Id: 26e5cbb5ee7968a21520af0b8f553a4a117d4f99 $ - * - * Authors: Clément Stenac - * Jean-Paul Saman - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef LIBVLC_VLM_H -#define LIBVLC_VLM_H 1 - -/** - * \file - * This file defines libvlc_vlm_* external API - */ - -# ifdef __cplusplus -extern "C" { -# endif - -/***************************************************************************** - * VLM - *****************************************************************************/ -/** \defgroup libvlc_vlm LibVLC VLM - * \ingroup libvlc - * @{ - */ - - -/** - * Release the vlm instance related to the given libvlc_instance_t - * - * \param p_instance the instance - */ -LIBVLC_API void libvlc_vlm_release( libvlc_instance_t *p_instance ); - -/** - * Add a broadcast, with one input. - * - * \param p_instance the instance - * \param psz_name the name of the new broadcast - * \param psz_input the input MRL - * \param psz_output the output MRL (the parameter to the "sout" variable) - * \param i_options number of additional options - * \param ppsz_options additional options - * \param b_enabled boolean for enabling the new broadcast - * \param b_loop Should this broadcast be played in loop ? - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_vlm_add_broadcast( libvlc_instance_t *p_instance, - const char *psz_name, const char *psz_input, - const char *psz_output, int i_options, - const char * const* ppsz_options, - int b_enabled, int b_loop ); - -/** - * Add a vod, with one input. - * - * \param p_instance the instance - * \param psz_name the name of the new vod media - * \param psz_input the input MRL - * \param i_options number of additional options - * \param ppsz_options additional options - * \param b_enabled boolean for enabling the new vod - * \param psz_mux the muxer of the vod media - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_vlm_add_vod( libvlc_instance_t * p_instance, - const char *psz_name, const char *psz_input, - int i_options, const char * const* ppsz_options, - int b_enabled, const char *psz_mux ); - -/** - * Delete a media (VOD or broadcast). - * - * \param p_instance the instance - * \param psz_name the media to delete - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_vlm_del_media( libvlc_instance_t * p_instance, - const char *psz_name ); - -/** - * Enable or disable a media (VOD or broadcast). - * - * \param p_instance the instance - * \param psz_name the media to work on - * \param b_enabled the new status - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_vlm_set_enabled( libvlc_instance_t *p_instance, - const char *psz_name, int b_enabled ); - -/** - * Set the output for a media. - * - * \param p_instance the instance - * \param psz_name the media to work on - * \param psz_output the output MRL (the parameter to the "sout" variable) - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_vlm_set_output( libvlc_instance_t *p_instance, - const char *psz_name, - const char *psz_output ); - -/** - * Set a media's input MRL. This will delete all existing inputs and - * add the specified one. - * - * \param p_instance the instance - * \param psz_name the media to work on - * \param psz_input the input MRL - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_vlm_set_input( libvlc_instance_t *p_instance, - const char *psz_name, - const char *psz_input ); - -/** - * Add a media's input MRL. This will add the specified one. - * - * \param p_instance the instance - * \param psz_name the media to work on - * \param psz_input the input MRL - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_vlm_add_input( libvlc_instance_t *p_instance, - const char *psz_name, - const char *psz_input ); - -/** - * Set a media's loop status. - * - * \param p_instance the instance - * \param psz_name the media to work on - * \param b_loop the new status - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_vlm_set_loop( libvlc_instance_t *p_instance, - const char *psz_name, - int b_loop ); - -/** - * Set a media's vod muxer. - * - * \param p_instance the instance - * \param psz_name the media to work on - * \param psz_mux the new muxer - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_vlm_set_mux( libvlc_instance_t *p_instance, - const char *psz_name, - const char *psz_mux ); - -/** - * Edit the parameters of a media. This will delete all existing inputs and - * add the specified one. - * - * \param p_instance the instance - * \param psz_name the name of the new broadcast - * \param psz_input the input MRL - * \param psz_output the output MRL (the parameter to the "sout" variable) - * \param i_options number of additional options - * \param ppsz_options additional options - * \param b_enabled boolean for enabling the new broadcast - * \param b_loop Should this broadcast be played in loop ? - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_vlm_change_media( libvlc_instance_t *p_instance, - const char *psz_name, const char *psz_input, - const char *psz_output, int i_options, - const char * const *ppsz_options, - int b_enabled, int b_loop ); - -/** - * Play the named broadcast. - * - * \param p_instance the instance - * \param psz_name the name of the broadcast - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_vlm_play_media ( libvlc_instance_t *p_instance, - const char *psz_name ); - -/** - * Stop the named broadcast. - * - * \param p_instance the instance - * \param psz_name the name of the broadcast - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_vlm_stop_media ( libvlc_instance_t *p_instance, - const char *psz_name ); - -/** - * Pause the named broadcast. - * - * \param p_instance the instance - * \param psz_name the name of the broadcast - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_vlm_pause_media( libvlc_instance_t *p_instance, - const char *psz_name ); - -/** - * Seek in the named broadcast. - * - * \param p_instance the instance - * \param psz_name the name of the broadcast - * \param f_percentage the percentage to seek to - * \return 0 on success, -1 on error - */ -LIBVLC_API int libvlc_vlm_seek_media( libvlc_instance_t *p_instance, - const char *psz_name, - float f_percentage ); - -/** - * Return information about the named media as a JSON - * string representation. - * - * This function is mainly intended for debugging use, - * if you want programmatic access to the state of - * a vlm_media_instance_t, please use the corresponding - * libvlc_vlm_get_media_instance_xxx -functions. - * Currently there are no such functions available for - * vlm_media_t though. - * - * \param p_instance the instance - * \param psz_name the name of the media, - * if the name is an empty string, all media is described - * \return string with information about named media, or NULL on error - */ -LIBVLC_API const char* libvlc_vlm_show_media( libvlc_instance_t *p_instance, - const char *psz_name ); - -/** - * Get vlm_media instance position by name or instance id - * - * \param p_instance a libvlc instance - * \param psz_name name of vlm media instance - * \param i_instance instance id - * \return position as float or -1. on error - */ -LIBVLC_API float libvlc_vlm_get_media_instance_position( libvlc_instance_t *p_instance, - const char *psz_name, - int i_instance ); - -/** - * Get vlm_media instance time by name or instance id - * - * \param p_instance a libvlc instance - * \param psz_name name of vlm media instance - * \param i_instance instance id - * \return time as integer or -1 on error - */ -LIBVLC_API int libvlc_vlm_get_media_instance_time( libvlc_instance_t *p_instance, - const char *psz_name, - int i_instance ); - -/** - * Get vlm_media instance length by name or instance id - * - * \param p_instance a libvlc instance - * \param psz_name name of vlm media instance - * \param i_instance instance id - * \return length of media item or -1 on error - */ -LIBVLC_API int libvlc_vlm_get_media_instance_length( libvlc_instance_t *p_instance, - const char *psz_name, - int i_instance ); - -/** - * Get vlm_media instance playback rate by name or instance id - * - * \param p_instance a libvlc instance - * \param psz_name name of vlm media instance - * \param i_instance instance id - * \return playback rate or -1 on error - */ -LIBVLC_API int libvlc_vlm_get_media_instance_rate( libvlc_instance_t *p_instance, - const char *psz_name, - int i_instance ); -#if 0 -/** - * Get vlm_media instance title number by name or instance id - * \bug will always return 0 - * \param p_instance a libvlc instance - * \param psz_name name of vlm media instance - * \param i_instance instance id - * \return title as number or -1 on error - */ -LIBVLC_API int libvlc_vlm_get_media_instance_title( libvlc_instance_t *, - const char *, int ); - -/** - * Get vlm_media instance chapter number by name or instance id - * \bug will always return 0 - * \param p_instance a libvlc instance - * \param psz_name name of vlm media instance - * \param i_instance instance id - * \return chapter as number or -1 on error - */ -LIBVLC_API int libvlc_vlm_get_media_instance_chapter( libvlc_instance_t *, - const char *, int ); - -/** - * Is libvlc instance seekable ? - * \bug will always return 0 - * \param p_instance a libvlc instance - * \param psz_name name of vlm media instance - * \param i_instance instance id - * \return 1 if seekable, 0 if not, -1 if media does not exist - */ -LIBVLC_API int libvlc_vlm_get_media_instance_seekable( libvlc_instance_t *, - const char *, int ); -#endif -/** - * Get libvlc_event_manager from a vlm media. - * The p_event_manager is immutable, so you don't have to hold the lock - * - * \param p_instance a libvlc instance - * \return libvlc_event_manager - */ -LIBVLC_API libvlc_event_manager_t * - libvlc_vlm_get_event_manager( libvlc_instance_t *p_instance ); - -/** @} */ - -# ifdef __cplusplus -} -# endif - -#endif /* */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_about.h b/source/vlc/cpp/include/vlc/plugins/vlc_about.h deleted file mode 100644 index af0a434dc..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_about.h +++ /dev/null @@ -1,1301 +0,0 @@ -/* Automatically generated file - DO NOT EDIT */ -static const char psz_license[] = -" GNU GENERAL PUBLIC LICENSE\n" -" Version 2, June 1991\n" -"\n" -" Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\n" -" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n" -" Everyone is permitted to copy and distribute verbatim copies\n" -" of this license document, but changing it is not allowed.\n" -"\n" -" Preamble\n" -"\n" -" The licenses for most software are designed to take away your\n" -"freedom to share and change it. By contrast, the GNU General Public\n" -"License is intended to guarantee your freedom to share and change free\n" -"software--to make sure the software is free for all its users. This\n" -"General Public License applies to most of the Free Software\n" -"Foundation's software and to any other program whose authors commit to\n" -"using it. (Some other Free Software Foundation software is covered by\n" -"the GNU Lesser General Public License instead.) You can apply it to\n" -"your programs, too.\n" -"\n" -" When we speak of free software, we are referring to freedom, not\n" -"price. Our General Public Licenses are designed to make sure that you\n" -"have the freedom to distribute copies of free software (and charge for\n" -"this service if you wish), that you receive source code or can get it\n" -"if you want it, that you can change the software or use pieces of it\n" -"in new free programs; and that you know you can do these things.\n" -"\n" -" To protect your rights, we need to make restrictions that forbid\n" -"anyone to deny you these rights or to ask you to surrender the rights.\n" -"These restrictions translate to certain responsibilities for you if you\n" -"distribute copies of the software, or if you modify it.\n" -"\n" -" For example, if you distribute copies of such a program, whether\n" -"gratis or for a fee, you must give the recipients all the rights that\n" -"you have. You must make sure that they, too, receive or can get the\n" -"source code. And you must show them these terms so they know their\n" -"rights.\n" -"\n" -" We protect your rights with two steps: (1) copyright the software, and\n" -"(2) offer you this license which gives you legal permission to copy,\n" -"distribute and/or modify the software.\n" -"\n" -" Also, for each author's protection and ours, we want to make certain\n" -"that everyone understands that there is no warranty for this free\n" -"software. If the software is modified by someone else and passed on, we\n" -"want its recipients to know that what they have is not the original, so\n" -"that any problems introduced by others will not reflect on the original\n" -"authors' reputations.\n" -"\n" -" Finally, any free program is threatened constantly by software\n" -"patents. We wish to avoid the danger that redistributors of a free\n" -"program will individually obtain patent licenses, in effect making the\n" -"program proprietary. To prevent this, we have made it clear that any\n" -"patent must be licensed for everyone's free use or not licensed at all.\n" -"\n" -" The precise terms and conditions for copying, distribution and\n" -"modification follow.\n" -"\n" -" GNU GENERAL PUBLIC LICENSE\n" -" TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n" -"\n" -" 0. This License applies to any program or other work which contains\n" -"a notice placed by the copyright holder saying it may be distributed\n" -"under the terms of this General Public License. The \"Program\", below,\n" -"refers to any such program or work, and a \"work based on the Program\"\n" -"means either the Program or any derivative work under copyright law:\n" -"that is to say, a work containing the Program or a portion of it,\n" -"either verbatim or with modifications and/or translated into another\n" -"language. (Hereinafter, translation is included without limitation in\n" -"the term \"modification\".) Each licensee is addressed as \"you\".\n" -"\n" -"Activities other than copying, distribution and modification are not\n" -"covered by this License; they are outside its scope. The act of\n" -"running the Program is not restricted, and the output from the Program\n" -"is covered only if its contents constitute a work based on the\n" -"Program (independent of having been made by running the Program).\n" -"Whether that is true depends on what the Program does.\n" -"\n" -" 1. You may copy and distribute verbatim copies of the Program's\n" -"source code as you receive it, in any medium, provided that you\n" -"conspicuously and appropriately publish on each copy an appropriate\n" -"copyright notice and disclaimer of warranty; keep intact all the\n" -"notices that refer to this License and to the absence of any warranty;\n" -"and give any other recipients of the Program a copy of this License\n" -"along with the Program.\n" -"\n" -"You may charge a fee for the physical act of transferring a copy, and\n" -"you may at your option offer warranty protection in exchange for a fee.\n" -"\n" -" 2. You may modify your copy or copies of the Program or any portion\n" -"of it, thus forming a work based on the Program, and copy and\n" -"distribute such modifications or work under the terms of Section 1\n" -"above, provided that you also meet all of these conditions:\n" -"\n" -" a) You must cause the modified files to carry prominent notices\n" -" stating that you changed the files and the date of any change.\n" -"\n" -" b) You must cause any work that you distribute or publish, that in\n" -" whole or in part contains or is derived from the Program or any\n" -" part thereof, to be licensed as a whole at no charge to all third\n" -" parties under the terms of this License.\n" -"\n" -" c) If the modified program normally reads commands interactively\n" -" when run, you must cause it, when started running for such\n" -" interactive use in the most ordinary way, to print or display an\n" -" announcement including an appropriate copyright notice and a\n" -" notice that there is no warranty (or else, saying that you provide\n" -" a warranty) and that users may redistribute the program under\n" -" these conditions, and telling the user how to view a copy of this\n" -" License. (Exception: if the Program itself is interactive but\n" -" does not normally print such an announcement, your work based on\n" -" the Program is not required to print an announcement.)\n" -"\n" -"These requirements apply to the modified work as a whole. If\n" -"identifiable sections of that work are not derived from the Program,\n" -"and can be reasonably considered independent and separate works in\n" -"themselves, then this License, and its terms, do not apply to those\n" -"sections when you distribute them as separate works. But when you\n" -"distribute the same sections as part of a whole which is a work based\n" -"on the Program, the distribution of the whole must be on the terms of\n" -"this License, whose permissions for other licensees extend to the\n" -"entire whole, and thus to each and every part regardless of who wrote it.\n" -"\n" -"Thus, it is not the intent of this section to claim rights or contest\n" -"your rights to work written entirely by you; rather, the intent is to\n" -"exercise the right to control the distribution of derivative or\n" -"collective works based on the Program.\n" -"\n" -"In addition, mere aggregation of another work not based on the Program\n" -"with the Program (or with a work based on the Program) on a volume of\n" -"a storage or distribution medium does not bring the other work under\n" -"the scope of this License.\n" -"\n" -" 3. You may copy and distribute the Program (or a work based on it,\n" -"under Section 2) in object code or executable form under the terms of\n" -"Sections 1 and 2 above provided that you also do one of the following:\n" -"\n" -" a) Accompany it with the complete corresponding machine-readable\n" -" source code, which must be distributed under the terms of Sections\n" -" 1 and 2 above on a medium customarily used for software interchange; or,\n" -"\n" -" b) Accompany it with a written offer, valid for at least three\n" -" years, to give any third party, for a charge no more than your\n" -" cost of physically performing source distribution, a complete\n" -" machine-readable copy of the corresponding source code, to be\n" -" distributed under the terms of Sections 1 and 2 above on a medium\n" -" customarily used for software interchange; or,\n" -"\n" -" c) Accompany it with the information you received as to the offer\n" -" to distribute corresponding source code. (This alternative is\n" -" allowed only for noncommercial distribution and only if you\n" -" received the program in object code or executable form with such\n" -" an offer, in accord with Subsection b above.)\n" -"\n" -"The source code for a work means the preferred form of the work for\n" -"making modifications to it. For an executable work, complete source\n" -"code means all the source code for all modules it contains, plus any\n" -"associated interface definition files, plus the scripts used to\n" -"control compilation and installation of the executable. However, as a\n" -"special exception, the source code distributed need not include\n" -"anything that is normally distributed (in either source or binary\n" -"form) with the major components (compiler, kernel, and so on) of the\n" -"operating system on which the executable runs, unless that component\n" -"itself accompanies the executable.\n" -"\n" -"If distribution of executable or object code is made by offering\n" -"access to copy from a designated place, then offering equivalent\n" -"access to copy the source code from the same place counts as\n" -"distribution of the source code, even though third parties are not\n" -"compelled to copy the source along with the object code.\n" -"\n" -" 4. You may not copy, modify, sublicense, or distribute the Program\n" -"except as expressly provided under this License. Any attempt\n" -"otherwise to copy, modify, sublicense or distribute the Program is\n" -"void, and will automatically terminate your rights under this License.\n" -"However, parties who have received copies, or rights, from you under\n" -"this License will not have their licenses terminated so long as such\n" -"parties remain in full compliance.\n" -"\n" -" 5. You are not required to accept this License, since you have not\n" -"signed it. However, nothing else grants you permission to modify or\n" -"distribute the Program or its derivative works. These actions are\n" -"prohibited by law if you do not accept this License. Therefore, by\n" -"modifying or distributing the Program (or any work based on the\n" -"Program), you indicate your acceptance of this License to do so, and\n" -"all its terms and conditions for copying, distributing or modifying\n" -"the Program or works based on it.\n" -"\n" -" 6. Each time you redistribute the Program (or any work based on the\n" -"Program), the recipient automatically receives a license from the\n" -"original licensor to copy, distribute or modify the Program subject to\n" -"these terms and conditions. You may not impose any further\n" -"restrictions on the recipients' exercise of the rights granted herein.\n" -"You are not responsible for enforcing compliance by third parties to\n" -"this License.\n" -"\n" -" 7. If, as a consequence of a court judgment or allegation of patent\n" -"infringement or for any other reason (not limited to patent issues),\n" -"conditions are imposed on you (whether by court order, agreement or\n" -"otherwise) that contradict the conditions of this License, they do not\n" -"excuse you from the conditions of this License. If you cannot\n" -"distribute so as to satisfy simultaneously your obligations under this\n" -"License and any other pertinent obligations, then as a consequence you\n" -"may not distribute the Program at all. For example, if a patent\n" -"license would not permit royalty-free redistribution of the Program by\n" -"all those who receive copies directly or indirectly through you, then\n" -"the only way you could satisfy both it and this License would be to\n" -"refrain entirely from distribution of the Program.\n" -"\n" -"If any portion of this section is held invalid or unenforceable under\n" -"any particular circumstance, the balance of the section is intended to\n" -"apply and the section as a whole is intended to apply in other\n" -"circumstances.\n" -"\n" -"It is not the purpose of this section to induce you to infringe any\n" -"patents or other property right claims or to contest validity of any\n" -"such claims; this section has the sole purpose of protecting the\n" -"integrity of the free software distribution system, which is\n" -"implemented by public license practices. Many people have made\n" -"generous contributions to the wide range of software distributed\n" -"through that system in reliance on consistent application of that\n" -"system; it is up to the author/donor to decide if he or she is willing\n" -"to distribute software through any other system and a licensee cannot\n" -"impose that choice.\n" -"\n" -"This section is intended to make thoroughly clear what is believed to\n" -"be a consequence of the rest of this License.\n" -"\n" -" 8. If the distribution and/or use of the Program is restricted in\n" -"certain countries either by patents or by copyrighted interfaces, the\n" -"original copyright holder who places the Program under this License\n" -"may add an explicit geographical distribution limitation excluding\n" -"those countries, so that distribution is permitted only in or among\n" -"countries not thus excluded. In such case, this License incorporates\n" -"the limitation as if written in the body of this License.\n" -"\n" -" 9. The Free Software Foundation may publish revised and/or new versions\n" -"of the General Public License from time to time. Such new versions will\n" -"be similar in spirit to the present version, but may differ in detail to\n" -"address new problems or concerns.\n" -"\n" -"Each version is given a distinguishing version number. If the Program\n" -"specifies a version number of this License which applies to it and \"any\n" -"later version\", you have the option of following the terms and conditions\n" -"either of that version or of any later version published by the Free\n" -"Software Foundation. If the Program does not specify a version number of\n" -"this License, you may choose any version ever published by the Free Software\n" -"Foundation.\n" -"\n" -" 10. If you wish to incorporate parts of the Program into other free\n" -"programs whose distribution conditions are different, write to the author\n" -"to ask for permission. For software which is copyrighted by the Free\n" -"Software Foundation, write to the Free Software Foundation; we sometimes\n" -"make exceptions for this. Our decision will be guided by the two goals\n" -"of preserving the free status of all derivatives of our free software and\n" -"of promoting the sharing and reuse of software generally.\n" -"\n" -" NO WARRANTY\n" -"\n" -" 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n" -"FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\n" -"OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n" -"PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\n" -"OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n" -"MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\n" -"TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\n" -"PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n" -"REPAIR OR CORRECTION.\n" -"\n" -" 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n" -"WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n" -"REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n" -"INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n" -"OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n" -"TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n" -"YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n" -"PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n" -"POSSIBILITY OF SUCH DAMAGES.\n" -"\n" -" END OF TERMS AND CONDITIONS\n" -"\n" -" How to Apply These Terms to Your New Programs\n" -"\n" -" If you develop a new program, and you want it to be of the greatest\n" -"possible use to the public, the best way to achieve this is to make it\n" -"free software which everyone can redistribute and change under these terms.\n" -"\n" -" To do so, attach the following notices to the program. It is safest\n" -"to attach them to the start of each source file to most effectively\n" -"convey the exclusion of warranty; and each file should have at least\n" -"the \"copyright\" line and a pointer to where the full notice is found.\n" -"\n" -" \n" -" Copyright (C) \n" -"\n" -" This program is free software; you can redistribute it and/or modify\n" -" it under the terms of the GNU General Public License as published by\n" -" the Free Software Foundation; either version 2 of the License, or\n" -" (at your option) any later version.\n" -"\n" -" This program is distributed in the hope that it will be useful,\n" -" but WITHOUT ANY WARRANTY; without even the implied warranty of\n" -" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" -" GNU General Public License for more details.\n" -"\n" -" You should have received a copy of the GNU General Public License along\n" -" with this program; if not, write to the Free Software Foundation, Inc.,\n" -" 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n" -"\n" -"Also add information on how to contact you by electronic and paper mail.\n" -"\n" -"If the program is interactive, make it output a short notice like this\n" -"when it starts in an interactive mode:\n" -"\n" -" Gnomovision version 69, Copyright (C) year name of author\n" -" Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n" -" This is free software, and you are welcome to redistribute it\n" -" under certain conditions; type `show c' for details.\n" -"\n" -"The hypothetical commands `show w' and `show c' should show the appropriate\n" -"parts of the General Public License. Of course, the commands you use may\n" -"be called something other than `show w' and `show c'; they could even be\n" -"mouse-clicks or menu items--whatever suits your program.\n" -"\n" -"You should also get your employer (if you work as a programmer) or your\n" -"school, if any, to sign a \"copyright disclaimer\" for the program, if\n" -"necessary. Here is a sample; alter the names:\n" -"\n" -" Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n" -" `Gnomovision' (which makes passes at compilers) written by James Hacker.\n" -"\n" -" , 1 April 1989\n" -" Ty Coon, President of Vice\n" -"\n" -"This General Public License does not permit incorporating your program into\n" -"proprietary programs. If your program is a subroutine library, you may\n" -"consider it more useful to permit linking proprietary applications with the\n" -"library. If this is what you want to do, use the GNU Lesser General\n" -"Public License instead of this License.\n" -; -static const char psz_thanks[] = -"Some VLC plugins use external libraries and make extensive use of the\n" -"following persons' or companies' code:\n" -"\n" -"FAAD2 - Copyright (c) Nero AG, www.nero.com\" - GPLv2 or later\n" -"FFmpeg - Copyright (c) 2000-2010 the FFmpeg developers - LGPLv2.1 or later\n" -"FluidSynth - Copyright (c) 2003-2010 Peter Hanappe, Conrad Berhörster, Antoine\n" -" Schmitt, Pedro López-Cabanillas, Josh Green, David Henningsson - LGPLv2.1 or\n" -" later\n" -"Fontconfig - Copyright (c) 2000,2001,2002,2003,2004,2006,2007 Keith Packard,\n" -" (c) 2005 Patrick Lam, (c) 2009 Roozbeh Pournader, (c) 2008,2009 Red Hat,\n" -" Inc., (c) 2008 Danilo Šegan, (c) 2012 Google, Inc. - MIT License\n" -"freetype - David Turner, Robert Wilhelm, and Werner Lemberg - FreeType License\n" -"GSM - Copyright (c) 1992 - 1994, 2009 Jutta Degener & Carsten Bormann - GSM\n" -" permissive license\n" -"GNU FriBidi - Copyright (c) 2004-2012 Behdad Esfahbod, Dov Grobgeld, Roozbeh\n" -" Pournader - LGPLv2.1 or later\n" -"GnuTLS - Copyright (C) 2000-2012 Free Software Foundation, Inc. - LGPLv2.1 or\n" -" later\n" -"harfbuzz - Copyright (c) 2010, 2011, 2012 Google, Inc., (c) 2012 Mozilla\n" -" Foundation, (c) 2011 Codethink Limited, (c) 2008, 2010 Nokia Corporation\n" -" and/or its subsidiary(-ies), (c) 2009 Keith Stribley, (c) 2009 Martin Hosken\n" -" and SIL International, (c) 2007 Chris Wilson, (c) 2006 Behdad Esfahbod,\n" -" (c) 2005 David Turner, (c) 2004, 2007, 2008, 2009, 2010 Red Hat, Inc.,\n" -" (c) 1998-2004 David Turner and Werner Lemberg - Old MIT License\n" -"liba52 - Aaron Holtzman & Michel Lespinasse, et al. - GPLv2 or later\n" -"libav - Copyright (c) 2000 - 2013 the libav developers - LGPLv2.1 or later\n" -"libass - Copyright (c) 2006-2013 Grigori Goronzy et al. - ISC License\n" -"libbluray - Copyright (c) 2009-2013 VideoLAN and authors - LGPLv2.1 or later\n" -"libcaca - Copyright (c) 2004 Sam Hocevar - WTFPL / LGPLv2.1 or later /\n" -" GPLv2 or later / ISC\n" -"libdca - Copyright (c) 2004-2007 VideoLAN and authors - GPLv2 or later\n" -"libdvbpsi - Copyright (c) 2001-2013 VideoLAN and authors - LGPLv2.1 or later\n" -"libdvdcss - Copyright (c) 2001-2012 VideoLAN and authors - GPLv2 or later\n" -"libdvdread - LGPLv2.1 or later\n" -"libdvdnav - LGPLv2.1 or later\n" -"libebml - Copyright (c) 2002-2013 Steve Lhomme - LGPLv2.1 or later\n" -"libFLAC - Copyright (c) 2001 - 2013 Josh Coalson et al. - Xiph.org BSD license\n" -"libgme - LGPLv2.1 or later\n" -"libgpg-error - Copyright 2003, 2004, 2005, 2006, 2007, 2013 g10 Code GmbH\n" -" - LGPLv2.1 or later\n" -"libkate - Copyright (c) 2008-2011 Vincent Penquerc'h - 3-clause BSD License\n" -"liblive555 - Copyright (c) 1996-2013 Live Networks, Inc. - LGPLv2.1 or later\n" -"libmad - Copyright (c) 2000-2004 Robert Leslie, et al. - GPLv2 or later\n" -"libmatroska - Copyright (c) 2002-2013 Steve Lhomme - LGPLv2.1 or later\n" -"libmpeg2 - Aaron Holtzman & Michel Lespinasse, et al. - GPLv2 or later\n" -"libmodplug - Oliver Lapicque, Konstanty - Public domain\n" -"libogg, libvorbis - Copyright (c) 2002 Xiph.org Foundation - Xiph.org BSD\n" -" license\n" -"libpostproc - Copyright (C) 2001-2012 Michael Niedermayer, et al. - GPLv2 or\n" -" later\n" -"libpng - Copyright (c) 2004, 2006-2012 Glenn Randers-Perhson, et al. - libpng\n" -" license\n" -"libsamplerate - Copyright (c) 2002-2011 Erik de Castro Lopo - GPLv2 or later\n" -"libschroedinger - Copyright (c) 2006 BBC and Fluendo - MIT License\n" -"libsdl - Copyright (c) 1997-2012 Sam Lantinga et al. - LGPLv2.1 or later\n" -"libshout - Copyright (c) 2012 - LGPLv2.1 or later\n" -"libtheora - Copyright (c) Xiph.org Foundation - Xiph.org BSD license\n" -"libtiff - Copyright (c) 1988-1997 Sam Leffler, (c) 1991-1997 Silicon Graphics,\n" -" Inc. - BSD-like\n" -"libtwolame - Copyright (c) 2001-2004 Michael Cheng, (c) 2004-2006 The TwoLAME\n" -" Project - LGPLv2.1 or later\n" -"libupnp - Copyright (c) 2000-2003 Intel Corporation - 3-clause BSD License\n" -"libvpx - Copyright (c) 2010, Google Inc. - 3-clause BSD License\n" -"libxml2 - Copyright (c) 1998-2003 Daniel Veillard - MIT License\n" -"lua - Copyright (c) 1994-2008 Lua.org, PUC-Rio. - MIT License\n" -"Musepack decoder library - Copyright (c) 2005-2011, The Musepack Development\n" -" Team - 3-clause BSD License\n" -"OpenJPEG - Copyright (c) 2002-2012, Communcations and Remote Sensing\n" -" Laboratory, UCL, Belgium - ISC License\n" -"Opus - Copyright 2001-2011 Xiph.Org, Skype Limited, Octasic, Jean-Marc Valin,\n" -" Timothy B. Terriberry, CSIRO, Gregory Maxwell, Mark Borgerding,\n" -" Erik de Castro Lopo - Xiph.org BSD License\n" -"Sparkle — Andy Matuschak et al. - MIT License\n" -"Speex, Speexdsp - Copyright (c) 1992-2008 Xiph.org Foundation, Jean-Marc Valin,\n" -" Analog Devices Inc. Commonwealth Scientific and Industrial Research\n" -" Organisation, David Row, Jutta Degener, Carsten Bormann - 3-clause BSD\n" -" License\n" -"taglib - Copyright (c) 2004-2013 Scott Wheeler, et al. - LGPLv2.1 or later\n" -"x264 - Copyright (c) 2004-2013 VideoLAN and authors - GPLv2 or later\n" -"Zapping VBI library - Copyright (c) 2000-2003 Michael H. Schimek, Iñaki García\n" -" Etxebarria - LGPLv2.1 or later\n" -"zlib - Copyright (c) 1995-2012 Jean-loup Gailly and Mark Adler - zlib license\n" -"\n" -"The VideoLAN team would like to thank the following donators:\n" -"\n" -"Julian Cain, who made a $1000 donation\n" -"The French website MacBidouille gave €500 to help us buy a PowerMac G5\n" -"The French magazine à vos MAC gave €500 to help us buy a PowerMac G5\n" -"Laurent Dupuy, who made a €540 donation\n" -"The French company Cybervia (Actech) gave €2000 to pay for webserver hosting\n" -"Dennis Perov - Hardware donation\n" -"\n" -"...the following active members of our user community:\n" -"\n" -"Alan Wright\n" -"David J LaBarre \"DJ\"\n" -"Eric Adler\n" -"Julien Bouquillon\n" -"\n" -"...and code auditors and testers:\n" -"\n" -"David Thiel\n" -"Philippe A. aka \"Lotesdelère\"\n" -"Sebastien Chaumat\n" -; -static const char psz_authors[] = -"VideoLAN and the VLC team would like to acknowledge the following contributors:\n" -"\n" -"Programming\n" -"-----------\n" -"Rémi Denis-Courmont\n" -"Jean-Baptiste Kempf\n" -"Laurent Aimar\n" -"Gildas Bazin\n" -"Felix Paul Kühne\n" -"Rafaël Carré\n" -"Pierre d'Herbemont\n" -"Rémi Duraffort\n" -"Derk-Jan Hartman\n" -"Antoine Cellerier\n" -"Samuel Hocevar\n" -"Jean-Paul Saman\n" -"Christophe Mutricy\n" -"Clément Stenac\n" -"Christophe Massiot\n" -"Ilkka Ollakka\n" -"Pierre Ynard\n" -"François Cartegnie\n" -"Damien Fouilleul\n" -"Sigmund Augdal Helberg\n" -"Erwan Tulou\n" -"David Fuhrmann\n" -"Olivier Teulière\n" -"Cyril Deguet\n" -"Eric Petit\n" -"Filippo Carone\n" -"Rocky Bernstein\n" -"Hugo Beauzée-Luyssen\n" -"Olivier Aubert\n" -"Pavlov Konstantin\n" -"Jakob Leben\n" -"Benjamin Pracht\n" -"Jean-Philippe André\n" -"Steve Lhomme\n" -"Stéphane Borel\n" -"JP Dinger\n" -"Geoffroy Couprie\n" -"Martin Storsjö\n" -"Marian Ďurkovič\n" -"Ludovic Fauvet\n" -"Yoann Peronneau\n" -"Sébastien Escudier\n" -"Jon Lech Johansen\n" -"KO Myung-Hun\n" -"Edward Wang\n" -"Dennis van Amerongen\n" -"Faustino Osuna\n" -"Mirsal Ennaime\n" -"Denis Charmet\n" -"Jérôme Decoodt\n" -"Loïc Minier\n" -"David Flynn\n" -"Frédéric Yhuel\n" -"Kaarlo Raiha\n" -"Mark Moriarty\n" -"Christopher Mueller\n" -"Fabio Ritrovato\n" -"Tony Castley\n" -"Srikanth Raju\n" -"Michel Kaempf\n" -"Jean-Marc Dressler\n" -"Johan Bilien\n" -"Vincent Seguin\n" -"Simon Latapie\n" -"Bernie Purcell\n" -"Henri Fallon\n" -"Sebastien Zwickert\n" -"Christoph Miebach\n" -"Adrien Maglo\n" -"Emmanuel Puig\n" -"Renaud Dartus\n" -"Alexis de Lattre\n" -"Vincent Penquerc'h\n" -"Arnaud de Bossoreille de Ribou\n" -"Mohammed Adnène Trojette\n" -"Boris Dorès\n" -"Jai Menon\n" -"Anil Daoud\n" -"Daniel Mierswa\n" -"Naohiro Koriyama\n" -"Rob Jonson\n" -"Pierre Baillet\n" -"Dominique Leuenberger\n" -"Andre Pang\n" -"Zoran Turalija\n" -"Akash Mehrotra\n" -"André Weber\n" -"Anthony Loiseau\n" -"Lukas Durfina\n" -"Xavier Marchesini\n" -"Cyril Mathé\n" -"Devin Heitmueller\n" -"Juho Vähä-Herttua\n" -"Ken Self\n" -"Alexis Ballier\n" -"Juha Jeronen\n" -"Nicolas Chauvet\n" -"Richard Hosking\n" -"Éric Lassauge\n" -"Marc Ariberti\n" -"Sébastien Toque\n" -"Tobias Güntner\n" -"Benoit Steiner\n" -"Michel Lespinasse\n" -"Carlo Calabrò\n" -"Cheng Sun\n" -"Michał Trzebiatowski\n" -"Brad Smith\n" -"Brendon Justin\n" -"Alexey Sokolov\n" -"Basos G\n" -"Philippe Morin\n" -"Steinar H. Gunderson\n" -"Vicente Jimenez Aguilar\n" -"Yuval Tze\n" -"Yves Duret\n" -"Benjamin Drung\n" -"Michael Hanselmann\n" -"Alex Merry\n" -"Damien Lucas\n" -"Grigori Goronzy\n" -"Richard Shepherd\n" -"Gaël Hendryckx\n" -"Michael Feurstein\n" -"Stephan Assmus\n" -"Adrien Grand\n" -"Colin Guthrie\n" -"David Menestrina\n" -"Dominique Martinet\n" -"Gleb Pinigin\n" -"Jason Luka\n" -"Luc Saillard\n" -"Luca Barbato\n" -"Mario Speiß\n" -"Pankaj Yadav\n" -"Ramiro Polla\n" -"Ronald Wright\n" -"Rui Zhang\n" -"Can Wu\n" -"Christophe Courtaut\n" -"FUJISAWA Tooru\n" -"Hannes Domani\n" -"Manol Manolov\n" -"Timothy B. Terriberry\n" -"Antoine Lejeune\n" -"Arnaud Schauly\n" -"Branko Kokanovic\n" -"Dylan Yudaken\n" -"Florian G. Pflug\n" -"François Revol\n" -"G Finch\n" -"Keary Griffin\n" -"Konstanty Bialkowski\n" -"Ming Hu\n" -"Philippe Coent\n" -"Przemyslaw Fiala\n" -"Tanguy Krotoff\n" -"Vianney BOYER\n" -"Casian Andrei\n" -"Chris Smowton\n" -"David Kaplan\n" -"Eugenio Jarosiewicz\n" -"Fabian Keil\n" -"Guillaume Poussel\n" -"John Peterson\n" -"Justus Piater\n" -"Mark Lee\n" -"Martin T. H. Sandsmark\n" -"Rune Botten\n" -"Søren Bøg\n" -"Toralf Niebuhr\n" -"Tristan Matthews\n" -"Angelo Haller\n" -"Aurélien Nephtali\n" -"Austin Burrow\n" -"Bill C. Riemers\n" -"Colin Delacroix\n" -"Cristian Maglie\n" -"Elminster2031\n" -"Jakub Wieczorek\n" -"John Freed\n" -"Mark Hassman\n" -"Martin Briza\n" -"Mike Houben\n" -"Romain Goyet\n" -"Adrian Yanes\n" -"Alexander Lakhin\n" -"Anatoliy Anischovich\n" -"Barry Wardell\n" -"Ben Hutchings\n" -"Besnard Jean-Baptiste\n" -"Brian Weaver\n" -"Clement Chesnin\n" -"David Geldreich\n" -"Diego Elio Pettenò\n" -"Diego Fernando Nieto\n" -"Georgi Chorbadzhiyski\n" -"Jon Stacey\n" -"Jonathan Rosser\n" -"Joris van Rooij\n" -"Kaloyan Kovachev\n" -"Katsushi Kobayashi\n" -"Kelly Anderson\n" -"Loren Merritt\n" -"Maciej Blizinski\n" -"Mark Bidewell\n" -"Miguel Angel Cabrera Moya\n" -"Niles Bindel\n" -"Samuel Pitoiset\n" -"Scott Caudle\n" -"Sean Robinson\n" -"Sergey Radionov\n" -"Simon Hailes\n" -"Stephen Parry\n" -"Sukrit Sangwan\n" -"Thierry Reding\n" -"Xavier Martin\n" -"Alex Converse\n" -"Alexander Bethke\n" -"Alexandre Ratchov\n" -"Andres Krapf\n" -"Andrey Utkin\n" -"Andri Pálsson\n" -"Andy Chenee\n" -"Anuradha Suraparaju\n" -"Benjamin Poulain\n" -"Brieuc Jeunhomme\n" -"Chris Clayton\n" -"Clément Lecigne\n" -"Cédric Cocquebert\n" -"Daniel Peng\n" -"Danny Wood\n" -"David K\n" -"Edouard Gomez\n" -"Emmanuel de Roux\n" -"Frode Tennebø\n" -"GBX\n" -"Gaurav Narula\n" -"Geraud CONTINSOUZAS\n" -"Hugues Fruchet\n" -"Jan Winter\n" -"Jean-François Massol\n" -"Jean-Philippe Grimaldi\n" -"Josh Watzman\n" -"Kai Lauterbach\n" -"Konstantin Bogdanov\n" -"Kuan-Chung Chiu\n" -"Kuang Rufan\n" -"Matthias Dahl\n" -"Michael McEll\n" -"Michael Ploujnikov\n" -"Mike Schrag\n" -"Nickolai Zeldovich\n" -"Nicolas Bertrand\n" -"Niklas Hayer\n" -"Olafs Vandāns\n" -"Olivier Gambier\n" -"Paul Corke\n" -"Ron Frederick\n" -"Rov Juvano\n" -"Sabourin Gilles\n" -"Sam Lade\n" -"Sandeep Kumar\n" -"Sasha Koruga\n" -"Sreng Jean\n" -"Sven Petai\n" -"Tomas Krotil\n" -"Tomer Barletz\n" -"Tristan Leteurtre\n" -"Vittorio Giovara\n" -"Wang Bo\n" -"maxime Ripard\n" -"xxcv\n" -"Adam Hoka\n" -"Adrian Knoth\n" -"Adrien Cunin\n" -"Alan Fischer\n" -"Alan McCosh\n" -"Alex Helfet\n" -"Alexander Terentyev\n" -"Alexandre Ferreira\n" -"Alina Friedrichsen\n" -"An L. Ber\n" -"Andreas Schlick\n" -"Andrew Schubert\n" -"Andrey Makhnutin\n" -"Arnaud Vallat\n" -"Asad Mehmood\n" -"Ashok Bhat\n" -"Austin English\n" -"Baptiste Coudurier\n" -"Benoit Calvez\n" -"Björn Stenberg\n" -"Blake Livingston\n" -"Brandon Brooks\n" -"Brian Johnson\n" -"Brian Kurle\n" -"Cezar Elnazli\n" -"Chris White\n" -"Christian Masus\n" -"Christoph Pfister\n" -"Christoph Seibert\n" -"Christopher Key\n" -"Christopher Rath\n" -"Claudio Ortelli\n" -"Cody Russell\n" -"Cristian Morales Vega\n" -"Dan Rosenberg\n" -"Daniel Marth\n" -"Daniel Tisza\n" -"Detlef Schroeder\n" -"Diego Biurrun\n" -"Dominik 'Rathann' Mierzejewski\n" -"Duncan Salerno\n" -"Edward Sheldrake\n" -"Elliot Murphy\n" -"Eren Inan Canpolat\n" -"Ernest E. Teem III\n" -"Etienne Membrives\n" -"Fargier Sylvain\n" -"Fathi Boudra\n" -"Felix Geyer\n" -"Filipe Azevedo\n" -"Finn Hughes\n" -"Florian Hubold\n" -"Florian Roeske\n" -"Frank Enderle\n" -"Frédéric Crozat\n" -"Georg Seifert\n" -"Gertjan Van Droogenbroeck\n" -"Gilles Chanteperdrix\n" -"Greg Farrell\n" -"Gregory Maxwell\n" -"Gwenole Beauchesne\n" -"Götz Waschk\n" -"Hans-Kristian Arntzen\n" -"Harry Sintonen\n" -"Iain Wade\n" -"Ibraheem Paredath\n" -"Isamu Arimoto\n" -"Ismael Luceno\n" -"James Bates\n" -"James Bond\n" -"James Turner\n" -"Janne Grunau\n" -"Janne Kujanpää\n" -"Jarmo Torvinen\n" -"Jason Scheunemann\n" -"Jeff Lu\n" -"Jeroen Ost\n" -"Joe Taber\n" -"Johann Ransay\n" -"Johannes Weißl\n" -"John Hendrikx\n" -"John Stebbins\n" -"Jonas Gehring\n" -"Joseph S. Atkinson\n" -"Juergen Lock\n" -"Julien 'Lta' BALLET\n" -"Julien / Gellule\n" -"Julien Humbert\n" -"Kamil Baldyga\n" -"Kamil Klimek\n" -"Karlheinz Wohlmuth\n" -"Kevin Anthony\n" -"Kevin DuBois\n" -"Lari Natri\n" -"Lorenzo Pistone\n" -"Lucas C. Villa Real\n" -"Lukáš Lalinský\n" -"Mal Graty\n" -"Malte Tancred\n" -"Martin Pöhlmann\n" -"Martin Zeman\n" -"Marton Balint\n" -"Mathew King\n" -"Mathieu Sonet\n" -"Matthew A. Townsend\n" -"Matthias Bauer\n" -"Mika Tiainen\n" -"Mike Cardillo\n" -"Mounir Lamouri (volkmar)\n" -"Natanael Copa\n" -"Nathan Phillip Brink\n" -"Nick Briggs\n" -"Nick Pope\n" -"Nil Geiswiller\n" -"Pascal Thomet\n" -"Pere Orga\n" -"Peter Bak Nielsen\n" -"Phil Roffe and David Grellscheid\n" -"Philip Sequeira\n" -"Pierre Souchay\n" -"Piotr Fusik\n" -"Pádraig Brady\n" -"R.M\n" -"Ralph Giles\n" -"Ramon Gabarró\n" -"Robert Forsman\n" -"Robert Jedrzejczyk\n" -"Robert Paciorek\n" -"Rolf Ahrenberg\n" -"Roman Pen\n" -"Ruud Althuizen\n" -"Samuli Suominen\n" -"Scott Lyons\n" -"Sebastian Birk\n" -"Sergey Puzanov\n" -"Sergio Ammirata\n" -"Sharad Dixit\n" -"Song Ye Wen\n" -"Stephan Krempel\n" -"Steven Kramer\n" -"Steven Sheehy\n" -"Sveinung Kvilhaugsvik\n" -"Sylvain Cadhillac\n" -"Sylver Bruneau\n" -"Takahito HIRANO\n" -"Theron Lewis\n" -"Thijs Alkemade\n" -"Tillmann Karras\n" -"Timo Paulssen\n" -"Timo Rothenpieler\n" -"Tobias Rapp\n" -"Tomasen\n" -"Tony Vankrunkelsven\n" -"Tristan Heaven\n" -"Varphone Wong\n" -"Vasily Fomin\n" -"Vikram Narayanan\n" -"Yannick Bréhon\n" -"Yavor Doganov\n" -"Yohann Martineau\n" -"dharani.prabhu.s\n" -"suheaven\n" -"wucan\n" -"김정은\n" -"Adam Sampson\n" -"Alexander Gall\n" -"Alex Antropoff\n" -"Alexis Guillard\n" -"Alex Izvorski\n" -"Amir Gouini\n" -"Andrea Guzzo\n" -"Andrew Flintham\n" -"Andrew Zaikin\n" -"Andy Lindsay\n" -"Arai/Fujisawa Tooru\n" -"Arkadiusz Miskiewicz\n" -"Arnaud Gomes-do-Vale\n" -"Arwed v. Merkatz\n" -"Barak Ori\n" -"Basil Achermann\n" -"Benjamin Mironer\n" -"Bill\n" -"Bob Maguire\n" -"Brian C. Wiles\n" -"Brian Raymond\n" -"Brian Robb\n" -"Carsten Gottbehüt\n" -"Carsten Haitzler\n" -"Charles Hordis\n" -"Chris Clepper\n" -"Christian Henz\n" -"Christof Baumgaertner\n" -"Christophe Burgalat\n" -"Christopher Johnson\n" -"Cian Duffy\n" -"Colin Simmonds\n" -"Damian Ivereigh\n" -"Daniel Fischer\n" -"Daniel Stränger\n" -"Danko Dolch\n" -"Dennis Lou\n" -"Dermot McGahon\n" -"Diego Petteno\n" -"Douglas West\n" -"Dugal Harris\n" -"Emmanuel Blindauer\n" -"Enrico Gueli\n" -"Enrique Osuna\n" -"Eren Türkay\n" -"Eric Dudiak\n" -"Espen Skoglund\n" -"Ethan C. Baldridge\n" -"François Seingier\n" -"Frans van Veen\n" -"Frédéric Ruget\n" -"Gerald Hansink\n" -"Gisle Vanem\n" -"Glen Gray\n" -"Goetz Waschk\n" -"Gregory Hazel\n" -"Gustaf Neumann\n" -"Hang Su\n" -"Hans Lambermont\n" -"Hans-Peter Jansen\n" -"Harris Dugal\n" -"Heiko Panther\n" -"Igor Helman\n" -"Isaac Osunkunle\n" -"Jan David Mol\n" -"Jan Gerber\n" -"Jan Van Boghout\n" -"Jasper Alias\n" -"Jean-Alexis Montignies\n" -"Jean-Baptiste Le Stang\n" -"Jeffrey Baker\n" -"Jeroen Massar\n" -"Jérôme Guilbaud\n" -"Johannes Buchner\n" -"Johen Michael Zorko\n" -"Johnathan Rosser\n" -"John Dalgliesh\n" -"John Paul Lorenti\n" -"Jörg\n" -"Joseph Tulou\n" -"Julien Blache\n" -"Julien Plissonneau Duquène\n" -"Julien Robert\n" -"Kenneth Ostby\n" -"Kenneth Self\n" -"Kevin H. Patterson\n" -"Koehler, Vitally\n" -"K. Staring\n" -"Lahiru Lakmal Priyadarshana\n" -"Laurent Mutricy\n" -"Leo Spalteholz\n" -"Loox Thefuture\n" -"Marc Nolette\n" -"Marco Munderloh\n" -"Mark Gritter\n" -"Markus Kern\n" -"Markus Kuespert\n" -"Martin Hamrle\n" -"Martin Kahr\n" -"Mateus Krepsky Ludwich\n" -"Mathias Kretschmer\n" -"Mats Rojestal\n" -"Matthias P. Nowak\n" -"Matthieu Lochegnies\n" -"Michael Mondragon\n" -"Michael S. Feurstein\n" -"Michel Lanners\n" -"Mickael Hoerdt\n" -"Miguel Angel Cabrera\n" -"Mikko Hirvonen\n" -"Moritz Bunkus\n" -"Nilmoni Deb\n" -"Olivier Houchard\n" -"Olivier Pomel\n" -"Ondrej Kuda aka Albert\n" -"Øyvind Kolbu\n" -"Pascal Levesque\n" -"Patrick Horn\n" -"Patrick McLean\n" -"Pauline Castets\n" -"Paul Mackerras\n" -"Peter Surda\n" -"Petr Vacek\n" -"Philippe Van Hecke\n" -"Pierre-Luc Beaudoin\n" -"Pierre Marc Dumuid\n" -"Régis Duchesne\n" -"Remco Poortinga\n" -"Rene Gollent\n" -"Rob Casey\n" -"Robson Braga Araujo\n" -"Roine Gustafsson\n" -"Roman Bednarek\n" -"Rudolf Cornelissen\n" -"Sašo Kiselkov\n" -"Sebastian Jenny\n" -"Shane Harper\n" -"Stefán Freyr Stefánsson\n" -"Steve Brown\n" -"Steven M. Schultz\n" -"Tapio Hiltunen\n" -"Thomas L. Wood\n" -"Thomas Mühlgrabner\n" -"Thomas Parmelan\n" -"Tim 'O Callagha\n" -"Tim Schuerewegen\n" -"Tong Ka Man\n" -"Torsten Spindler\n" -"Udo Richter\n" -"Vincent Dimar\n" -"Vincent Penne\n" -"Vitalijus Slavinskas\n" -"Vitaly V. Bursov\n" -"Vladimir Chernyshov\n" -"Wade Majors\n" -"Wallace Wadge\n" -"Watanabe Go\n" -"William Hawkins\n" -"Xavier Maillard\n" -"Ye zhang\n" -"Yuehua Zhao\n" -"\n" -"Artwork\n" -"-------\n" -"Damien Erambert\n" -"Daniel Dreibrodt, aka aLtgLasS\n" -"David Weber\n" -"Davor Orel\n" -"Dominic Spitaler\n" -"Eurodata Computer Club\n" -"Geoffrey Roussel\n" -"Joeri van Dooren\n" -"kty0ne\n" -"Max Rudberg\n" -"Richard Øiestad\n" -"Simon Damkjær Andersen\n" -"Tom Bigelajzen\n" -"Vincent van den Heuvel\n" -"\n" -"Documentation\n" -"-------------\n" -"Bill Eldridge\n" -"\n" -"Localization\n" -"------------\n" -"Abdul Fousan - Tamil\n" -"A. Decorte - Friulian\n" -"A. Regnander - Swedish\n" -"Adem Gunes - Turkish\n" -"Adi Nugroho - Tagalog\n" -"Adnan Memija - Bosnian\n" -"airplanez - Korean\n" -"Ajith Manjula - Sinhala\n" -"Aled Powell - Welsh\n" -"Alexander Didebulidze - Georgian\n" -"Alexander Henket - Dutch\n" -"Alexander Jansen - Norwegian Bokmål\n" -"Alexander Lakhin - Russian\n" -"Alexey Lugin - Ukrainian\n" -"Alexey Salmin - Russian\n" -"Alfred John - Acoli\n" -"Amanpreet Singh Alam - Punjabi\n" -"André de Barros Martins Ribeiro - Brazilian portuguese\n" -"Andrey Brilevskiy - Russian\n" -"Andrey Wolk - Russian\n" -"Andri Pálsson - Icelandic\n" -"Andriy Bandura - Ukrainian\n" -"Anh Phan - Vietnamese\n" -"Animesh Swar - Nepalese\n" -"Aputsiaĸ Niels Janussen - Danish\n" -"Ara Bextiyar - Sorani (Kurdish)\n" -"Ari Constâncio - Portuguese\n" -"Arkadiusz Lipiec - Polish\n" -"Ask Hjorth Larsen - Danish\n" -"Audrey Prevost - French\n" -"Auk Piseth - Khmer\n" -"Bayarsaikhan Enkhtaivan Баярсайхан Энхтайван - Mongolian\n" -"Biraj Karmakar - Bengali (India)\n" -"Bruno Queirós - Portuguese\n" -"Bruno Vella - Italian\n" -"Caner Başaran - Turkish\n" -"Carlo Calabrò - Italian\n" -"Chandan Kumar - Hindi\n" -"Chesús Daniel Trigo - Aragonese\n" -"Christoph Miebach - German\n" -"Chynggyz Jumaliev - Kirgyz\n" -"Circo Radu - Romanian\n" -"Cristian Secară - Romanian\n" -"Daniel Nylander - Swedish\n" -"Daniel Winzen - German\n" -"David González - Spanish\n" -"David Planella - Catalan\n" -"Dean Lee - Simplified Chinese\n" -"Denis Arnaud - Breton\n" -"Derk-Jan Hartman - Dutch\n" -"DirektX - Hungarian\n" -"Dominko Aždajić - Croatian\n" -"Dylan Aïssi - French\n" -"Đorđe Vasiljević - Serbian\n" -"Eduard Babayan - Armenian\n" -"Eero - Estonian\n" -"Eirik U. Birkeland - Norwegian Nynorsk\n" -"Elizabeth Da Conceicao Baptista - Tetum\n" -"Emilio Sepúlveda - Interlingua\n" -"Emin Mastizada - Azerbaijani\n" -"Éric Lassauge - French\n" -"Farzaneh Sarafraz - Persian\n" -"Florence Tushabe - Chiga\n" -"Fouzia Bourai - Arabic\n" -"Frank Chao - Traditional Chinese\n" -"Freyr Gunnar Ólafsson - Icelandic\n" -"Friedel Wolff - Afrikaans\n" -"Fumio Nakayama - Japanese\n" -"Gabor Kelemen - Hungarian\n" -"Gaurav Kumar - Hindi\n" -"Gaëtan Rousseaux - Walloon\n" -"Ghjuvan Pasquinu - Corsican\n" -"Goce Manevski - Macedonian\n" -"Golam Maruf Oovee - Bengali\n" -"Gonçalo Cordeiro - Galician\n" -"Gorana Milicevic - Serbian\n" -"Goswami Hardikpuri Kishorpuri - Gujarati\n" -"Haakon Meland Eriksen - Norwegian\n" -"Han HoJoong - Korean\n" -"Hardik Kishorpuri Goswami - Gujarati\n" -"Hemanta Nandi - Bengali (India)\n" -"Huw Waters - Welsh\n" -"H.Shalitha Vikum - Sinhala\n" -"Ibrahima Sarr - Fulah\n" -"Israt Jahan - Bengali\n" -"Ivar Smolin - Estonian\n" -"Iván Seoane Pardo - Galician\n" -"Ivo Ivanov - Bulgarian\n" -"Iñaki Larrañaga Murgoitio - Basque\n" -"Iñigo Varela - Asturian; Bable\n" -"Jakub Žáček - Czech\n" -"James Olweny - Ganda\n" -"Jamil Ahmed - Bengali\n" -"Javier Varela - Spanish\n" -"Jean-Pierre Kuypers - French\n" -"Jens Seidel - German\n" -"Joao Almeida - Portuguese\n" -"Joel Arvidsson - Swedish\n" -"jogijs - Latvian\n" -"Jonas Larsen - Danish\n" -"Jon Stødle - Norwegian Nynorsk\n" -"Jouni Kähkönen - Finnish\n" -"Juha Jeronen - Finnish\n" -"Julen Ruiz Aizpuru - Basque\n" -"Kai Hermann - German\n" -"Kamil Páral - Czech\n" -"Kang Jeong-Hee - Korean\n" -"Kasper Tvede - Danish\n" -"Kaya Zeren - Turkish\n" -"Kenneth Nielsen - Danish\n" -"Khin Mi Mi Aung - Burmese\n" -"Khoem Sokhem - Khmer\n" -"Kola - Albanian\n" -"Kypchak Kypchak - Kazakh\n" -"Laurent Jonqueres - Occitan\n" -"Loba Yeasmeen - Bengali\n" -"Lorena Gomes - Catalan\n" -"Lorenzo Porta - Italian\n" -"Luqman Hakim - Indonesian\n" -"L. Balasubramaniam - Hindi\n" -"Mahrazi Mohd Kamal - Malay\n" -"Manolis Stefanis - Modern Greek\n" -"Manuela Silva/Alfredo Silva - Portuguese\n" -"Marián Hikaník - Slovak\n" -"Mario Siegmann - German\n" -"Marko Uskokovic - Serbian\n" -"Martin Srebotnjak - Slovenian\n" -"Martin Zicha - Czech\n" -"Matej Urbančič - Slovenian\n" -"Mathias C. Berens, welcome-soft - German\n" -"Mattias Põldaru - Estonian\n" -"Md. Rezwan Shahid - Bengali\n" -"Meelad Zakaria - Persian\n" -"Michael Bauer - Scottish Gaelic\n" -"Michal Halenka - Czech\n" -"Michał Trzebiatowski - Polish\n" -"Miguel Sousa - Portuguese\n" -"Mihkel Kirjutas - Estonian\n" -"Mindaugas Baranauskas - Lithuanian\n" -"Miroslav Oujeský - Czech\n" -"Morten Brix Pedersen - Danish\n" -"Mustafa Sandal - Czech\n" -"Myckel Habets - Dutch\n" -"Namhyung Kim - Korean\n" -"Niels Fanøe - Danish\n" -"Niklas 'Nille' Åkerström - Swedish\n" -"Olav Dahlum - Norwegian Bokmål\n" -"Oleksandr Natalenko - Ukrainian\n" -"Omer Ensari - Kurmanji (Kurdish)\n" -"Osama Khalid - Arabic\n" -"Otto Kekäläinen - Finnish\n" -"Paras Nath Chaudhary - Nepali\n" -"Pasindu Kavinda - Sinhala\n" -"Pau Iranzo - Catalan\n" -"Paula Iglesias - Galician\n" -"Pedro Valadares - Portuguese\n" -"Peter Jespersen - Danish\n" -"Petr Šimáček - Czech\n" -"Phan Anh - Vietnamese\n" -"Philipp Weissenbacher - German\n" -"Pittayakom Saingtong - Thai\n" -"Prasannajit Acharya - Oriya\n" -"Praveen Illa - Telugu\n" -"Predrag Ljubenović - Serbian\n" -"Pyae Sone - Burmese\n" -"Rajnikant Kumbhar - Marathi\n" -"Ricardo Perdigão - Portuguese\n" -"Ricardo Pérez López - Spanish\n" -"Roustam Ghizdatov - Russian\n" -"Ruei-Yuan Lu - Traditional Chinese\n" -"Saad Liaquat Kiani - Urdu\n" -"Sadia Afroz - Bengali\n" -"Said Marjan Zazai - Pashto\n" -"Salar Khalilzadeh - Persian\n" -"Sam Askari - Spanish\n" -"Sam Hocevar - British\n" -"Samuel Hocevar - French\n" -"Saúl Ortega - Spanish\n" -"Savvas Nesseris - Modern Greek\n" -"Sayan Chowdhury - Hindi\n" -"Seanán Ó Coistín - Irish\n" -"Semsudin Abdic - Bosnian\n" -"Shambhu Kumar - Hindi\n" -"Shantanu Sarkar - Hindi\n" -"Shashi Ranjan - Hindi\n" -"Siarhei Daryichau Дар'ічаў Сяргей - Belarusian\n" -"Sidney Doria - Brazilian Portuguese\n" -"Sigmund Augdal - Norwegian Bokmål\n" -"Simos Xenitellis - Modern Greek\n" -"Sipho Sibiya - Zulu\n" -"Sok Sophea - Khmer\n" -"Solomon Gizaw - Amharic\n" -"Sreejith P - Malayalam\n" -"Suraj Kawade - Marathi\n" -"Stian Jørgensrud - Norwegian Bokmål\n" -"Sveinn í Felli - Icelandic\n" -"Tadashi Jokagi - Japanese\n" -"Tarsem Singh - Hindi\n" -"Thanakrit Chomphuming - Thai\n" -"Tero Pelander - Finnish\n" -"Thomas De Rocker - Dutch\n" -"Thomas Graf - gettext support, German\n" -"Tomáš Chvátal - Czech\n" -"Tòni Galhard - Occitan\n" -"Umesh Agarwal - Bengali (India)\n" -"Umidjon Almasov - Uzbek\n" -"Václav Pavlíček - Czech\n" -"Valek Filippov - Russian\n" -"Vicente Jimenez Aguilar - Spanish\n" -"Vincenzo Reale - Italian\n" -"Vít Pelčák - Czech\n" -"viyyer - Hindi\n" -"Vladimir Yermolayev - Russian\n" -"Vojtěch Smejkal - Czech\n" -"Wei Mingzhi - Simplified Chinese\n" -"Xènia Albà Cantero - Catalan\n" -"Xuacu Saturio - Asturian\n" -"Yaron Shahrabani - Hebrew\n" -"Yaşar Tay - Turkish\n" -"Yhal Htet Aung - Burmese\n" -"Yogesh K S - Kannada\n" -"Yoyo - Simplified Chinese\n" -"Yuksel Yildirim - Turkish\n" -"Zabeeh Khan - Pashto\n" -"Zhang Tong - Chinese\n" -; diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_access.h b/source/vlc/cpp/include/vlc/plugins/vlc_access.h deleted file mode 100644 index 6a89e10c2..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_access.h +++ /dev/null @@ -1,184 +0,0 @@ -/***************************************************************************** - * vlc_access.h: Access descriptor, queries and methods - ***************************************************************************** - * Copyright (C) 1999-2006 VLC authors and VideoLAN - * $Id: df8cf1af98f0fe94a42fa9c402718d9a18bcfa7c $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_ACCESS_H -#define VLC_ACCESS_H 1 - -/** - * \file - * This file defines functions and definitions for access object - */ - -#include - -/** - * \defgroup access Access - * @{ - */ - -enum access_query_e -{ - /* capabilities */ - ACCESS_CAN_SEEK, /* arg1= bool* cannot fail */ - ACCESS_CAN_FASTSEEK, /* arg1= bool* cannot fail */ - ACCESS_CAN_PAUSE, /* arg1= bool* cannot fail */ - ACCESS_CAN_CONTROL_PACE,/* arg1= bool* cannot fail */ - - /* */ - ACCESS_GET_PTS_DELAY = 0x101,/* arg1= int64_t* cannot fail */ - /* */ - ACCESS_GET_TITLE_INFO, /* arg1=input_title_t*** arg2=int* res=can fail */ - /* Meta data */ - ACCESS_GET_META, /* arg1= vlc_meta_t ** res=can fail */ - - /* */ - ACCESS_GET_CONTENT_TYPE,/* arg1=char **ppsz_content_type res=can fail */ - - /* */ - ACCESS_GET_SIGNAL, /* arg1=double *pf_quality, arg2=double *pf_strength res=can fail */ - - /* */ - ACCESS_SET_PAUSE_STATE = 0x200, /* arg1= bool can fail */ - - /* */ - ACCESS_SET_TITLE, /* arg1= int can fail */ - ACCESS_SET_SEEKPOINT, /* arg1= int can fail */ - - /* Special mode for access/demux communication - * XXX: avoid to use it unless you can't */ - ACCESS_SET_PRIVATE_ID_STATE = 0x1000, /* arg1= int i_private_data, bool b_selected res=can fail */ - ACCESS_SET_PRIVATE_ID_CA, /* arg1= int i_program_number, uint16_t i_vpid, uint16_t i_apid1, uint16_t i_apid2, uint16_t i_apid3, uint8_t i_length, uint8_t *p_data */ - ACCESS_GET_PRIVATE_ID_STATE, /* arg1=int i_private_data arg2=bool * res=can fail */ -}; - -struct access_t -{ - VLC_COMMON_MEMBERS - - /* Module properties */ - module_t *p_module; - - /* Access name (empty if non forced) */ - char *psz_access; - char *psz_location; /**< Location (URL with the scheme stripped) */ - char *psz_filepath; /**< Local file path (if applicable) */ - - /* Access can fill this entry to force a demuxer - * XXX: fill it once you know for sure you will succeed - * (if you fail, this value won't be reseted */ - char *psz_demux; - - /* pf_read/pf_block is used to read data. - * XXX A access should set one and only one of them */ - ssize_t (*pf_read) ( access_t *, uint8_t *, size_t ); /* Return -1 if no data yet, 0 if no more data, else real data read */ - block_t *(*pf_block)( access_t * ); /* return a block of data in his 'natural' size, NULL if not yet data or eof */ - - /* Called for each seek. - * XXX can be null */ - int (*pf_seek) ( access_t *, uint64_t ); /* can be null if can't seek */ - - /* Used to retreive and configure the access - * XXX mandatory. look at access_query_e to know what query you *have to* support */ - int (*pf_control)( access_t *, int i_query, va_list args); - - /* Access has to maintain them uptodate */ - struct - { - unsigned int i_update; /* Access sets them on change, - Input removes them once take into account*/ - - uint64_t i_size; /* Write only for access, read only for input */ - uint64_t i_pos; /* idem */ - bool b_eof; /* idem */ - - int i_title; /* idem, start from 0 (could be menu) */ - int i_seekpoint;/* idem, start from 0 */ - } info; - access_sys_t *p_sys; - - /* Weak link to parent input */ - input_thread_t *p_input; -}; - -static inline int access_vaControl( access_t *p_access, int i_query, va_list args ) -{ - if( !p_access ) return VLC_EGENERIC; - return p_access->pf_control( p_access, i_query, args ); -} - -static inline int access_Control( access_t *p_access, int i_query, ... ) -{ - va_list args; - int i_result; - - va_start( args, i_query ); - i_result = access_vaControl( p_access, i_query, args ); - va_end( args ); - return i_result; -} - -static inline void access_InitFields( access_t *p_a ) -{ - p_a->info.i_update = 0; - p_a->info.i_size = 0; - p_a->info.i_pos = 0; - p_a->info.b_eof = false; - p_a->info.i_title = 0; - p_a->info.i_seekpoint = 0; -} - -/** - * This function will return the parent input of this access. - * It is retained. It can return NULL. - */ -VLC_API input_thread_t * access_GetParentInput( access_t *p_access ) VLC_USED; - -#define ACCESS_SET_CALLBACKS( read, block, control, seek ) \ - do { \ - p_access->pf_read = (read); \ - p_access->pf_block = (block); \ - p_access->pf_control = (control); \ - p_access->pf_seek = (seek); \ - } while(0) - -#define STANDARD_READ_ACCESS_INIT \ - do { \ - access_InitFields( p_access ); \ - ACCESS_SET_CALLBACKS( Read, NULL, Control, Seek ); \ - p_sys = p_access->p_sys = calloc( 1, sizeof( access_sys_t ) ); \ - if( !p_sys ) return VLC_ENOMEM;\ - } while(0); - -#define STANDARD_BLOCK_ACCESS_INIT \ - do { \ - access_InitFields( p_access ); \ - ACCESS_SET_CALLBACKS( NULL, Block, Control, Seek ); \ - p_sys = p_access->p_sys = calloc( 1, sizeof( access_sys_t ) ); \ - if( !p_sys ) return VLC_ENOMEM; \ - } while(0); - -/** - * @} - */ - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_aout.h b/source/vlc/cpp/include/vlc/plugins/vlc_aout.h deleted file mode 100644 index 5d1d068aa..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_aout.h +++ /dev/null @@ -1,339 +0,0 @@ -/***************************************************************************** - * vlc_aout.h : audio output interface - ***************************************************************************** - * Copyright (C) 2002-2011 VLC authors and VideoLAN - * - * Authors: Christophe Massiot - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_AOUT_H -#define VLC_AOUT_H 1 - -/** - * \file - * This file defines functions, structures and macros for audio output object - */ - -/* Buffers which arrive in advance of more than AOUT_MAX_ADVANCE_TIME - * will be considered as bogus and be trashed */ -#define AOUT_MAX_ADVANCE_TIME (AOUT_MAX_PREPARE_TIME + CLOCK_FREQ) - -/* Buffers which arrive in advance of more than AOUT_MAX_PREPARE_TIME - * will cause the calling thread to sleep */ -#define AOUT_MAX_PREPARE_TIME (2 * CLOCK_FREQ) - -/* Buffers which arrive after pts - AOUT_MIN_PREPARE_TIME will be trashed - * to avoid too heavy resampling */ -#define AOUT_MIN_PREPARE_TIME AOUT_MAX_PTS_ADVANCE - -/* Tolerance values from EBU Recommendation 37 */ -/** Maximum advance of actual audio playback time to coded PTS, - * above which downsampling will be performed */ -#define AOUT_MAX_PTS_ADVANCE (CLOCK_FREQ / 25) - -/** Maximum delay of actual audio playback time from coded PTS, - * above which upsampling will be performed */ -#define AOUT_MAX_PTS_DELAY (3 * CLOCK_FREQ / 50) - -/* Max acceptable resampling (in %) */ -#define AOUT_MAX_RESAMPLING 10 - -#include "vlc_es.h" - -#define AOUT_FMTS_IDENTICAL( p_first, p_second ) ( \ - ((p_first)->i_format == (p_second)->i_format) \ - && AOUT_FMTS_SIMILAR(p_first, p_second) ) - -/* Check if i_rate == i_rate and i_channels == i_channels */ -#define AOUT_FMTS_SIMILAR( p_first, p_second ) ( \ - ((p_first)->i_rate == (p_second)->i_rate) \ - && ((p_first)->i_physical_channels == (p_second)->i_physical_channels)\ - && ((p_first)->i_original_channels == (p_second)->i_original_channels) ) - -#define AOUT_FMT_LINEAR( p_format ) \ - (aout_BitsPerSample((p_format)->i_format) != 0) - -#define VLC_CODEC_SPDIFL VLC_FOURCC('s','p','d','i') -#define VLC_CODEC_SPDIFB VLC_FOURCC('s','p','d','b') - -#define AOUT_FMT_SPDIF( p_format ) \ - ( ((p_format)->i_format == VLC_CODEC_SPDIFL) \ - || ((p_format)->i_format == VLC_CODEC_SPDIFB) \ - || ((p_format)->i_format == VLC_CODEC_A52) \ - || ((p_format)->i_format == VLC_CODEC_DTS) ) - -/* Values used for the audio-channels object variable */ -#define AOUT_VAR_CHAN_UNSET 0 /* must be zero */ -#define AOUT_VAR_CHAN_STEREO 1 -#define AOUT_VAR_CHAN_RSTEREO 2 -#define AOUT_VAR_CHAN_LEFT 3 -#define AOUT_VAR_CHAN_RIGHT 4 -#define AOUT_VAR_CHAN_DOLBYS 5 - -/***************************************************************************** - * Main audio output structures - *****************************************************************************/ - -/* Size of a frame for S/PDIF output. */ -#define AOUT_SPDIF_SIZE 6144 - -/* Number of samples in an A/52 frame. */ -#define A52_FRAME_NB 1536 - -/* FIXME to remove once aout.h is cleaned a bit more */ -#include - -/** Audio output object */ -struct audio_output -{ - VLC_COMMON_MEMBERS - - struct aout_sys_t *sys; /**< Private data for callbacks */ - - int (*start)(audio_output_t *, audio_sample_format_t *fmt); - /**< Starts a new stream (mandatory, cannot be NULL). - * \param fmt input stream sample format upon entry, - * output stream sample format upon return [IN/OUT] - * \return VLC_SUCCESS on success, non-zero on failure - * \note No other stream may be already started when called. - */ - void (*stop)(audio_output_t *); - /**< Stops the existing stream (optional, may be NULL). - * \note A stream must have been started when called. - */ - int (*time_get)(audio_output_t *, mtime_t *delay); - /**< Estimates playback buffer latency (optional, may be NULL). - * \param delay pointer to the delay until the next sample to be written - * to the playback buffer is rendered [OUT] - * \return 0 on success, non-zero on failure or lack of data - * \note A stream must have been started when called. - */ - void (*play)(audio_output_t *, block_t *); - /**< Queues a block of samples for playback (mandatory, cannot be NULL). - * \note A stream must have been started when called. - */ - void (*pause)( audio_output_t *, bool pause, mtime_t date); - /**< Pauses or resumes playback (optional, may be NULL). - * \param pause pause if true, resume from pause if false - * \param date timestamp when the pause or resume was requested - * \note A stream must have been started when called. - */ - void (*flush)( audio_output_t *, bool wait); - /**< Flushes or drains the playback buffers (mandatory, cannot be NULL). - * \param wait true to wait for playback of pending buffers (drain), - * false to discard pending buffers (flush) - * \note A stream must have been started when called. - */ - int (*volume_set)(audio_output_t *, float volume); - /**< Changes playback volume (optional, may be NULL). - * \param volume requested volume (0. = mute, 1. = nominal) - * \note The volume is always a positive number. - * \warning A stream may or may not have been started when called. - */ - int (*mute_set)(audio_output_t *, bool mute); - /**< Changes muting (optinal, may be NULL). - * \param mute true to mute, false to unmute - * \warning A stream may or may not have been started when called. - */ - int (*device_select)(audio_output_t *, const char *id); - /**< Selects an audio output device (optional, may be NULL). - * \param id nul-terminated device unique identifier. - * \return 0 on success, non-zero on failure. - * \warning A stream may or may not have been started when called. - */ - struct { - void (*volume_report)(audio_output_t *, float); - void (*mute_report)(audio_output_t *, bool); - void (*policy_report)(audio_output_t *, bool); - void (*device_report)(audio_output_t *, const char *); - void (*hotplug_report)(audio_output_t *, const char *, const char *); - int (*gain_request)(audio_output_t *, float); - void (*restart_request)(audio_output_t *, unsigned); - } event; -}; - -/** - * It describes the audio channel order VLC expect. - */ -static const uint32_t pi_vlc_chan_order_wg4[] = -{ - AOUT_CHAN_LEFT, AOUT_CHAN_RIGHT, - AOUT_CHAN_MIDDLELEFT, AOUT_CHAN_MIDDLERIGHT, - AOUT_CHAN_REARLEFT, AOUT_CHAN_REARRIGHT, AOUT_CHAN_REARCENTER, - AOUT_CHAN_CENTER, AOUT_CHAN_LFE, 0 -}; - -#define AOUT_RESTART_FILTERS 1 -#define AOUT_RESTART_OUTPUT 2 -#define AOUT_RESTART_DECODER 4 - -/***************************************************************************** - * Prototypes - *****************************************************************************/ - -/** - * This function computes the reordering needed to go from pi_chan_order_in to - * pi_chan_order_out. - * If pi_chan_order_in or pi_chan_order_out is NULL, it will assume that vlc - * internal (WG4) order is requested. - */ -VLC_API unsigned aout_CheckChannelReorder( const uint32_t *, const uint32_t *, - uint32_t mask, uint8_t *table ); -VLC_API void aout_ChannelReorder(void *, size_t, unsigned, const uint8_t *, vlc_fourcc_t); - -VLC_API void aout_Interleave(void *dst, const void *const *planes, - unsigned samples, unsigned channels, - vlc_fourcc_t fourcc); -VLC_API void aout_Deinterleave(void *dst, const void *src, unsigned samples, - unsigned channels, vlc_fourcc_t fourcc); - -/** - * This function will compute the extraction parameter into pi_selection to go - * from i_channels with their type given by pi_order_src[] into the order - * describe by pi_order_dst. - * It will also set : - * - *pi_channels as the number of channels that will be extracted which is - * lower (in case of non understood channels type) or equal to i_channels. - * - the layout of the channels (*pi_layout). - * - * It will return true if channel extraction is really needed, in which case - * aout_ChannelExtract must be used - * - * XXX It must be used when the source may have channel type not understood - * by VLC. In this case the channel type pi_order_src[] must be set to 0. - * XXX It must also be used if multiple channels have the same type. - */ -VLC_API bool aout_CheckChannelExtraction( int *pi_selection, uint32_t *pi_layout, int *pi_channels, const uint32_t pi_order_dst[AOUT_CHAN_MAX], const uint32_t *pi_order_src, int i_channels ); - -/** - * Do the actual channels extraction using the parameters created by - * aout_CheckChannelExtraction. - * - * XXX this function does not work in place (p_dst and p_src must not overlap). - * XXX Only 8, 16, 24, 32, 64 bits per sample are supported. - */ -VLC_API void aout_ChannelExtract( void *p_dst, int i_dst_channels, const void *p_src, int i_src_channels, int i_sample_count, const int *pi_selection, int i_bits_per_sample ); - -/* */ -static inline unsigned aout_FormatNbChannels(const audio_sample_format_t *fmt) -{ - return popcount(fmt->i_physical_channels); -} - -VLC_API unsigned int aout_BitsPerSample( vlc_fourcc_t i_format ) VLC_USED; -VLC_API void aout_FormatPrepare( audio_sample_format_t * p_format ); -VLC_API void aout_FormatPrint(vlc_object_t *, const char *, - const audio_sample_format_t *); -#define aout_FormatPrint(o, t, f) aout_FormatPrint(VLC_OBJECT(o), t, f) -VLC_API const char * aout_FormatPrintChannels( const audio_sample_format_t * ) VLC_USED; - -VLC_API float aout_VolumeGet (audio_output_t *); -VLC_API int aout_VolumeSet (audio_output_t *, float); -VLC_API int aout_MuteGet (audio_output_t *); -VLC_API int aout_MuteSet (audio_output_t *, bool); -VLC_API char *aout_DeviceGet (audio_output_t *); -VLC_API int aout_DeviceSet (audio_output_t *, const char *); -VLC_API int aout_DevicesList (audio_output_t *, char ***, char ***); - -/** - * Report change of configured audio volume to the core and UI. - */ -static inline void aout_VolumeReport(audio_output_t *aout, float volume) -{ - aout->event.volume_report(aout, volume); -} - -/** - * Report change of muted flag to the core and UI. - */ -static inline void aout_MuteReport(audio_output_t *aout, bool mute) -{ - aout->event.mute_report(aout, mute); -} - -/** - * Report audio policy status. - * \parm cork true to request a cork, false to undo any pending cork. - */ -static inline void aout_PolicyReport(audio_output_t *aout, bool cork) -{ - aout->event.policy_report(aout, cork); -} - -/** - * Report change of output device. - */ -static inline void aout_DeviceReport(audio_output_t *aout, const char *id) -{ - aout->event.device_report(aout, id); -} - -/** - * Report a device hot-plug event. - * @param id device ID - * @param name human-readable device name (NULL for hot unplug) - */ -static inline void aout_HotplugReport(audio_output_t *aout, - const char *id, const char *name) -{ - aout->event.hotplug_report(aout, id, name); -} - -/** - * Request a change of software audio amplification. - * \param gain linear amplitude gain (must be positive) - * \warning Values in excess 1.0 may cause overflow and distorsion. - */ -static inline int aout_GainRequest(audio_output_t *aout, float gain) -{ - return aout->event.gain_request(aout, gain); -} - -static inline void aout_RestartRequest(audio_output_t *aout, unsigned mode) -{ - aout->event.restart_request(aout, mode); -} - -static inline int aout_ChannelsRestart (vlc_object_t *obj, const char *varname, - vlc_value_t oldval, vlc_value_t newval, void *data) -{ - audio_output_t *aout = (audio_output_t *)obj; - (void)varname; (void)oldval; (void)newval; (void)data; - - aout_RestartRequest (aout, AOUT_RESTART_OUTPUT); - return 0; -} - -/* Audio output filters */ -typedef struct aout_filters aout_filters_t; -typedef struct aout_request_vout aout_request_vout_t; - -VLC_API aout_filters_t *aout_FiltersNew(vlc_object_t *, - const audio_sample_format_t *, - const audio_sample_format_t *, - const aout_request_vout_t *) VLC_USED; -#define aout_FiltersNew(o,inf,outf,rv) \ - aout_FiltersNew(VLC_OBJECT(o),inf,outf,rv) -VLC_API void aout_FiltersDelete(vlc_object_t *, aout_filters_t *); -#define aout_FiltersDelete(o,f) \ - aout_FiltersDelete(VLC_OBJECT(o),f) -VLC_API bool aout_FiltersAdjustResampling(aout_filters_t *, int); -VLC_API block_t *aout_FiltersPlay(aout_filters_t *, block_t *, int rate); - -VLC_API vout_thread_t * aout_filter_RequestVout( filter_t *, vout_thread_t *p_vout, video_format_t *p_fmt ); - -#endif /* VLC_AOUT_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_aout_volume.h b/source/vlc/cpp/include/vlc/plugins/vlc_aout_volume.h deleted file mode 100644 index f571afbd0..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_aout_volume.h +++ /dev/null @@ -1,54 +0,0 @@ -/***************************************************************************** - * vlc_aout_volume.h: audio volume module - ***************************************************************************** - * Copyright (C) 2002-2009 VLC authors and VideoLAN - * $Id: 051413ba105d5f7ee552679bf7fcd3a053db112c $ - * - * Authors: Christophe Massiot - * Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_AOUT_MIXER_H -#define VLC_AOUT_MIXER_H 1 - -/** - * \file - * This file defines functions, structures and macros for audio output mixer object - */ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct audio_volume audio_volume_t; - -/** - * Audio volume - */ -struct audio_volume -{ - VLC_COMMON_MEMBERS - - vlc_fourcc_t format; /**< Audio samples format */ - void (*amplify)(audio_volume_t *, block_t *, float); /**< Amplifier */ -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_arrays.h b/source/vlc/cpp/include/vlc/plugins/vlc_arrays.h deleted file mode 100644 index 9ee1d1771..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_arrays.h +++ /dev/null @@ -1,622 +0,0 @@ -/***************************************************************************** - * vlc_arrays.h : Arrays and data structures handling - ***************************************************************************** - * Copyright (C) 1999-2004 VLC authors and VideoLAN - * $Id: 7749140f10f5ce76339559b166d041854bb4a7da $ - * - * Authors: Samuel Hocevar - * Clément Stenac - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_ARRAYS_H_ -#define VLC_ARRAYS_H_ - -/** - * \file - * This file defines functions, structures and macros for handling arrays in vlc - */ - -/* realloc() that never fails *if* downsizing */ -static inline void *realloc_down( void *ptr, size_t size ) -{ - void *ret = realloc( ptr, size ); - return ret ? ret : ptr; -} - -/** - * Simple dynamic array handling. Array is realloced at each insert/removal - */ -#define INSERT_ELEM( p_ar, i_oldsize, i_pos, elem ) \ - do \ - { \ - if( !(i_oldsize) ) (p_ar) = NULL; \ - (p_ar) = realloc( p_ar, ((i_oldsize) + 1) * sizeof(*(p_ar)) ); \ - if( !(p_ar) ) abort(); \ - if( (i_oldsize) - (i_pos) ) \ - { \ - memmove( (p_ar) + (i_pos) + 1, (p_ar) + (i_pos), \ - ((i_oldsize) - (i_pos)) * sizeof( *(p_ar) ) ); \ - } \ - (p_ar)[(i_pos)] = elem; \ - (i_oldsize)++; \ - } \ - while( 0 ) - -#define REMOVE_ELEM( p_ar, i_size, i_pos ) \ - do \ - { \ - if( (i_size) - (i_pos) - 1 ) \ - { \ - memmove( (p_ar) + (i_pos), \ - (p_ar) + (i_pos) + 1, \ - ((i_size) - (i_pos) - 1) * sizeof( *(p_ar) ) ); \ - } \ - if( i_size > 1 ) \ - (p_ar) = realloc_down( p_ar, ((i_size) - 1) * sizeof( *(p_ar) ) );\ - else \ - { \ - free( p_ar ); \ - (p_ar) = NULL; \ - } \ - (i_size)--; \ - } \ - while( 0 ) - -#define TAB_INIT( count, tab ) \ - do { \ - (count) = 0; \ - (tab) = NULL; \ - } while(0) - -#define TAB_CLEAN( count, tab ) \ - do { \ - free( tab ); \ - (count)= 0; \ - (tab)= NULL; \ - } while(0) - -#define TAB_APPEND_CAST( cast, count, tab, p ) \ - do { \ - if( (count) > 0 ) \ - (tab) = cast realloc( tab, sizeof( void ** ) * ( (count) + 1 ) ); \ - else \ - (tab) = cast malloc( sizeof( void ** ) ); \ - if( !(tab) ) abort(); \ - (tab)[count] = (p); \ - (count)++; \ - } while(0) - -#define TAB_APPEND( count, tab, p ) \ - TAB_APPEND_CAST( , count, tab, p ) - -#define TAB_FIND( count, tab, p, idx ) \ - do { \ - for( (idx) = 0; (idx) < (count); (idx)++ ) \ - if( (tab)[(idx)] == (p) ) \ - break; \ - if( (idx) >= (count) ) \ - (idx) = -1; \ - } while(0) - - -#define TAB_REMOVE( count, tab, p ) \ - do { \ - int i_index; \ - TAB_FIND( count, tab, p, i_index ); \ - if( i_index >= 0 ) \ - { \ - if( (count) > 1 ) \ - { \ - memmove( ((void**)(tab) + i_index), \ - ((void**)(tab) + i_index+1), \ - ( (count) - i_index - 1 ) * sizeof( void* ) );\ - } \ - (count)--; \ - if( (count) == 0 ) \ - { \ - free( tab ); \ - (tab) = NULL; \ - } \ - } \ - } while(0) - -#define TAB_INSERT_CAST( cast, count, tab, p, index ) do { \ - if( (count) > 0 ) \ - (tab) = cast realloc( tab, sizeof( void ** ) * ( (count) + 1 ) ); \ - else \ - (tab) = cast malloc( sizeof( void ** ) ); \ - if( !(tab) ) abort(); \ - if( (count) - (index) > 0 ) \ - memmove( (void**)(tab) + (index) + 1, \ - (void**)(tab) + (index), \ - ((count) - (index)) * sizeof(*(tab)) );\ - (tab)[(index)] = (p); \ - (count)++; \ -} while(0) - -#define TAB_INSERT( count, tab, p, index ) \ - TAB_INSERT_CAST( , count, tab, p, index ) - -/** - * Binary search in a sorted array. The key must be comparable by < and > - * \param entries array of entries - * \param count number of entries - * \param elem key to check within an entry (like .id, or ->i_id) - * \param zetype type of the key - * \param key value of the key - * \param answer index of answer within the array. -1 if not found - */ -#define BSEARCH( entries, count, elem, zetype, key, answer ) \ - do { \ - int low = 0, high = count - 1; \ - answer = -1; \ - while( low <= high ) {\ - int mid = (low + high ) / 2; /* Just don't care about 2^30 tables */ \ - zetype mid_val = entries[mid] elem;\ - if( mid_val < key ) \ - low = mid + 1; \ - else if ( mid_val > key ) \ - high = mid -1; \ - else \ - { \ - answer = mid; break; \ - }\ - } \ - } while(0) - - -/************************************************************************ - * Dynamic arrays with progressive allocation - ************************************************************************/ - -/* Internal functions */ -#define _ARRAY_ALLOC(array, newsize) { \ - (array).i_alloc = newsize; \ - (array).p_elems = realloc( (array).p_elems, (array).i_alloc * \ - sizeof(*(array).p_elems) ); \ - if( !(array).p_elems ) abort(); \ -} - -#define _ARRAY_GROW1(array) { \ - if( (array).i_alloc < 10 ) \ - _ARRAY_ALLOC(array, 10 ) \ - else if( (array).i_alloc == (array).i_size ) \ - _ARRAY_ALLOC(array, (int)(array.i_alloc * 1.5) ) \ -} - -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) - -/* API */ -#define DECL_ARRAY(type) struct { \ - int i_alloc; \ - int i_size; \ - type *p_elems; \ -} - -#define TYPEDEF_ARRAY(type, name) typedef DECL_ARRAY(type) name; - -#define ARRAY_INIT(array) \ - do { \ - (array).i_alloc = 0; \ - (array).i_size = 0; \ - (array).p_elems = NULL; \ - } while(0) - -#define ARRAY_RESET(array) \ - do { \ - (array).i_alloc = 0; \ - (array).i_size = 0; \ - free( (array).p_elems ); (array).p_elems = NULL; \ - } while(0) - -#define ARRAY_APPEND(array, elem) \ - do { \ - _ARRAY_GROW1(array); \ - (array).p_elems[(array).i_size] = elem; \ - (array).i_size++; \ - } while(0) - -#define ARRAY_INSERT(array,elem,pos) \ - do { \ - _ARRAY_GROW1(array); \ - if( (array).i_size - pos ) { \ - memmove( (array).p_elems + pos + 1, (array).p_elems + pos, \ - ((array).i_size-pos) * sizeof(*(array).p_elems) ); \ - } \ - (array).p_elems[pos] = elem; \ - (array).i_size++; \ - } while(0) - -#define _ARRAY_SHRINK(array) { \ - if( (array).i_size > 10 && (array).i_size < (int)((array).i_alloc / 1.5) ) { \ - _ARRAY_ALLOC(array, (array).i_size + 5); \ - } \ -} - -#define ARRAY_REMOVE(array,pos) \ - do { \ - if( (array).i_size - (pos) - 1 ) \ - { \ - memmove( (array).p_elems + pos, (array).p_elems + pos + 1, \ - ( (array).i_size - pos - 1 ) *sizeof(*(array).p_elems) ); \ - } \ - (array).i_size--; \ - _ARRAY_SHRINK(array); \ - } while(0) - -#define ARRAY_VAL(array, pos) array.p_elems[pos] - -#define ARRAY_BSEARCH(array, elem, zetype, key, answer) \ - BSEARCH( (array).p_elems, (array).i_size, elem, zetype, key, answer) - -#define FOREACH_ARRAY( item, array ) { \ - int fe_idx; \ - for( fe_idx = 0 ; fe_idx < (array).i_size ; fe_idx++ ) \ - { \ - item = (array).p_elems[fe_idx]; - -#define FOREACH_END() } } - - -/************************************************************************ - * Dynamic arrays with progressive allocation (Preferred API) - ************************************************************************/ -typedef struct vlc_array_t -{ - int i_count; - void ** pp_elems; -} vlc_array_t; - -static inline void vlc_array_init( vlc_array_t * p_array ) -{ - memset( p_array, 0, sizeof(vlc_array_t) ); -} - -static inline void vlc_array_clear( vlc_array_t * p_array ) -{ - free( p_array->pp_elems ); - memset( p_array, 0, sizeof(vlc_array_t) ); -} - -static inline vlc_array_t * vlc_array_new( void ) -{ - vlc_array_t * ret = (vlc_array_t *)malloc( sizeof(vlc_array_t) ); - if( ret ) vlc_array_init( ret ); - return ret; -} - -static inline void vlc_array_destroy( vlc_array_t * p_array ) -{ - if( !p_array ) - return; - vlc_array_clear( p_array ); - free( p_array ); -} - - -/* Read */ -static inline int -vlc_array_count( vlc_array_t * p_array ) -{ - return p_array->i_count; -} - -static inline void * -vlc_array_item_at_index( vlc_array_t * p_array, int i_index ) -{ - return p_array->pp_elems[i_index]; -} - -static inline int -vlc_array_index_of_item( vlc_array_t * p_array, void * item ) -{ - int i; - for( i = 0; i < p_array->i_count; i++) - { - if( p_array->pp_elems[i] == item ) - return i; - } - return -1; -} - -/* Write */ -static inline void -vlc_array_insert( vlc_array_t * p_array, void * p_elem, int i_index ) -{ - TAB_INSERT_CAST( (void **), p_array->i_count, p_array->pp_elems, p_elem, i_index ); -} - -static inline void -vlc_array_append( vlc_array_t * p_array, void * p_elem ) -{ - vlc_array_insert( p_array, p_elem, p_array->i_count ); -} - -static inline void -vlc_array_remove( vlc_array_t * p_array, int i_index ) -{ - if( i_index >= 0 ) - { - if( p_array->i_count > 1 ) - { - memmove( p_array->pp_elems + i_index, - p_array->pp_elems + i_index+1, - ( p_array->i_count - i_index - 1 ) * sizeof( void* ) ); - } - p_array->i_count--; - if( p_array->i_count == 0 ) - { - free( p_array->pp_elems ); - p_array->pp_elems = NULL; - } - } -} - - -/************************************************************************ - * Dictionaries - ************************************************************************/ - -/* This function is not intended to be crypto-secure, we only want it to be - * fast and not suck too much. This one is pretty fast and did 0 collisions - * in wenglish's dictionary. - */ -static inline uint64_t DictHash( const char *psz_string, int hashsize ) -{ - uint64_t i_hash = 0; - if( psz_string ) - { - while( *psz_string ) - { - i_hash += *psz_string++; - i_hash += i_hash << 10; - i_hash ^= i_hash >> 8; - } - } - return i_hash % hashsize; -} - -typedef struct vlc_dictionary_entry_t -{ - char * psz_key; - void * p_value; - struct vlc_dictionary_entry_t * p_next; -} vlc_dictionary_entry_t; - -typedef struct vlc_dictionary_t -{ - int i_size; - vlc_dictionary_entry_t ** p_entries; -} vlc_dictionary_t; - -static void * const kVLCDictionaryNotFound = NULL; - -static inline void vlc_dictionary_init( vlc_dictionary_t * p_dict, int i_size ) -{ - p_dict->p_entries = NULL; - - if( i_size > 0 ) - { - p_dict->p_entries = (vlc_dictionary_entry_t **)calloc( i_size, sizeof(*p_dict->p_entries) ); - if( !p_dict->p_entries ) - i_size = 0; - } - p_dict->i_size = i_size; -} - -static inline void vlc_dictionary_clear( vlc_dictionary_t * p_dict, - void ( * pf_free )( void * p_data, void * p_obj ), - void * p_obj ) -{ - if( p_dict->p_entries ) - { - for( int i = 0; i < p_dict->i_size; i++ ) - { - vlc_dictionary_entry_t * p_current, * p_next; - p_current = p_dict->p_entries[i]; - while( p_current ) - { - p_next = p_current->p_next; - if( pf_free != NULL ) - ( * pf_free )( p_current->p_value, p_obj ); - free( p_current->psz_key ); - free( p_current ); - p_current = p_next; - } - } - free( p_dict->p_entries ); - p_dict->p_entries = NULL; - } - p_dict->i_size = 0; -} - -static inline int -vlc_dictionary_has_key( const vlc_dictionary_t * p_dict, const char * psz_key ) -{ - if( !p_dict->p_entries ) - return 0; - - int i_pos = DictHash( psz_key, p_dict->i_size ); - return p_dict->p_entries[i_pos] != NULL; -} - -static inline void * -vlc_dictionary_value_for_key( const vlc_dictionary_t * p_dict, const char * psz_key ) -{ - if( !p_dict->p_entries ) - return kVLCDictionaryNotFound; - - int i_pos = DictHash( psz_key, p_dict->i_size ); - vlc_dictionary_entry_t * p_entry = p_dict->p_entries[i_pos]; - - if( !p_entry ) - return kVLCDictionaryNotFound; - - /* Make sure we return the right item. (Hash collision) */ - do { - if( !strcmp( psz_key, p_entry->psz_key ) ) - return p_entry->p_value; - p_entry = p_entry->p_next; - } while( p_entry ); - - return kVLCDictionaryNotFound; -} - -static inline int -vlc_dictionary_keys_count( const vlc_dictionary_t * p_dict ) -{ - vlc_dictionary_entry_t * p_entry; - int i, count = 0; - - if( !p_dict->p_entries ) - return 0; - - for( i = 0; i < p_dict->i_size; i++ ) - { - for( p_entry = p_dict->p_entries[i]; p_entry; p_entry = p_entry->p_next ) count++; - } - return count; -} - -static inline char ** -vlc_dictionary_all_keys( const vlc_dictionary_t * p_dict ) -{ - vlc_dictionary_entry_t * p_entry; - char ** ppsz_ret; - int i, count = vlc_dictionary_keys_count( p_dict ); - - ppsz_ret = (char**)malloc(sizeof(char *) * (count + 1)); - if( unlikely(!ppsz_ret) ) - return NULL; - - count = 0; - for( i = 0; i < p_dict->i_size; i++ ) - { - for( p_entry = p_dict->p_entries[i]; p_entry; p_entry = p_entry->p_next ) - ppsz_ret[count++] = strdup( p_entry->psz_key ); - } - ppsz_ret[count] = NULL; - return ppsz_ret; -} - -static inline void -__vlc_dictionary_insert( vlc_dictionary_t * p_dict, const char * psz_key, - void * p_value, bool rebuild ) -{ - if( !p_dict->p_entries ) - vlc_dictionary_init( p_dict, 1 ); - - int i_pos = DictHash( psz_key, p_dict->i_size ); - vlc_dictionary_entry_t * p_entry; - - p_entry = (vlc_dictionary_entry_t *)malloc(sizeof(*p_entry)); - p_entry->psz_key = strdup( psz_key ); - p_entry->p_value = p_value; - p_entry->p_next = p_dict->p_entries[i_pos]; - p_dict->p_entries[i_pos] = p_entry; - if( rebuild ) - { - /* Count how many items there was */ - int count; - for( count = 1; p_entry->p_next; count++ ) - p_entry = p_entry->p_next; - if( count > 3 ) /* XXX: this need tuning */ - { - /* Here it starts to be not good, rebuild a bigger dictionary */ - struct vlc_dictionary_t new_dict; - int i_new_size = ( (p_dict->i_size+2) * 3) / 2; /* XXX: this need tuning */ - int i; - vlc_dictionary_init( &new_dict, i_new_size ); - for( i = 0; i < p_dict->i_size; i++ ) - { - p_entry = p_dict->p_entries[i]; - while( p_entry ) - { - __vlc_dictionary_insert( &new_dict, p_entry->psz_key, - p_entry->p_value, - false /* To avoid multiple rebuild loop */); - p_entry = p_entry->p_next; - } - } - - vlc_dictionary_clear( p_dict, NULL, NULL ); - p_dict->i_size = new_dict.i_size; - p_dict->p_entries = new_dict.p_entries; - } - } -} - -static inline void -vlc_dictionary_insert( vlc_dictionary_t * p_dict, const char * psz_key, void * p_value ) -{ - __vlc_dictionary_insert( p_dict, psz_key, p_value, true ); -} - -static inline void -vlc_dictionary_remove_value_for_key( const vlc_dictionary_t * p_dict, const char * psz_key, - void ( * pf_free )( void * p_data, void * p_obj ), - void * p_obj ) -{ - if( !p_dict->p_entries ) - return; - - int i_pos = DictHash( psz_key, p_dict->i_size ); - vlc_dictionary_entry_t * p_entry = p_dict->p_entries[i_pos]; - vlc_dictionary_entry_t * p_prev; - - if( !p_entry ) - return; /* Not found, nothing to do */ - - /* Hash collision */ - p_prev = NULL; - do { - if( !strcmp( psz_key, p_entry->psz_key ) ) - { - if( pf_free != NULL ) - ( * pf_free )( p_entry->p_value, p_obj ); - if( !p_prev ) - p_dict->p_entries[i_pos] = p_entry->p_next; - else - p_prev->p_next = p_entry->p_next; - free( p_entry->psz_key ); - free( p_entry ); - return; - } - p_prev = p_entry; - p_entry = p_entry->p_next; - } while( p_entry ); - - /* No key was found */ -} - -#ifdef __cplusplus -// C++ helpers -template -void vlc_delete_all( T &container ) -{ - typename T::iterator it = container.begin(); - while ( it != container.end() ) - { - delete *it; - ++it; - } - container.clear(); -} - -#endif - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_art_finder.h b/source/vlc/cpp/include/vlc/plugins/vlc_art_finder.h deleted file mode 100644 index a8b4c45d0..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_art_finder.h +++ /dev/null @@ -1,30 +0,0 @@ -/***************************************************************************** - * vlc_art_finder.h - ***************************************************************************** - * Copyright (C) 2009 Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_ART_FINDER_H -#define VLC_ART_FINDER_H 1 - -typedef struct art_finder_t -{ - VLC_COMMON_MEMBERS - input_item_t *p_item; -} art_finder_t; - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_atomic.h b/source/vlc/cpp/include/vlc/plugins/vlc_atomic.h deleted file mode 100644 index 5905a73a1..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_atomic.h +++ /dev/null @@ -1,383 +0,0 @@ -/***************************************************************************** - * vlc_atomic.h: - ***************************************************************************** - * Copyright (C) 2010 Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_ATOMIC_H -# define VLC_ATOMIC_H - -/** - * \file - * Atomic operations do not require locking, but they are not very powerful. - */ - -# if !defined (__cplusplus) && (__STDC_VERSION__ >= 201112L) \ - && !defined (__STDC_NO_ATOMICS__) - -/*** Native C11 atomics ***/ -# include - -# else - -# define ATOMIC_FLAG_INIT false - -# define ATOMIC_VAR_INIT(value) (value) - -# define atomic_init(obj, value) \ - do { *(obj) = (value); } while(0) - -# define kill_dependency(y) \ - ((void)0) - -# define atomic_thread_fence(order) \ - __sync_synchronize() - -# define atomic_signal_fence(order) \ - ((void)0) - -# define atomic_is_lock_free(obj) \ - false - -/* In principles, __sync_*() only supports int, long and long long and their - * unsigned equivalents, i.e. 4-bytes and 8-bytes types, although GCC also - * supports 1 and 2-bytes types. Some non-x86 architectures do not support - * 8-byte atomic types (or not efficiently). */ -typedef bool atomic_flag; -typedef bool atomic_bool; -typedef char atomic_char; -typedef signed char atomic_schar; -typedef unsigned char atomic_uchar; -typedef short atomic_short; -typedef unsigned short atomic_ushort; -typedef int atomic_int; -typedef unsigned int atomic_uint; -typedef long atomic_long; -typedef unsigned long atomic_ulong; -typedef long long atomic_llong; -typedef unsigned long long atomic_ullong; -//typedef char16_t atomic_char16_t; -//typedef char32_t atomic_char32_t; -typedef wchar_t atomic_wchar_t; -typedef int_least8_t atomic_int_least8_t; -typedef uint_least8_t atomic_uint_least8_t; -typedef int_least16_t atomic_int_least16_t; -typedef uint_least16_t atomic_uint_least16_t; -typedef int_least32_t atomic_int_least32_t; -typedef uint_least32_t atomic_uint_least32_t; -typedef int_least64_t atomic_int_least64_t; -typedef uint_least64_t atomic_uint_least64_t; -typedef int_fast8_t atomic_int_fast8_t; -typedef uint_fast8_t atomic_uint_fast8_t; -typedef int_fast16_t atomic_int_fast16_t; -typedef uint_fast16_t atomic_uint_fast16_t; -typedef int_fast32_t atomic_int_fast32_t; -typedef uint_fast32_t atomic_uint_fast32_t; -typedef int_fast64_t atomic_int_fast64_t; -typedef uint_fast64_t atomic_uint_fast64_t; -typedef intptr_t atomic_intptr_t; -typedef uintptr_t atomic_uintptr_t; -typedef size_t atomic_size_t; -typedef ptrdiff_t atomic_ptrdiff_t; -typedef intmax_t atomic_intmax_t; -typedef uintmax_t atomic_uintmax_t; - -# if defined (__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) || (defined (__clang__) && (defined (__x86_64__) || defined (__i386__))) - -/*** Intel/GCC atomics ***/ - -# define atomic_store(object,desired) \ - do { \ - *(object) = (desired); \ - __sync_synchronize(); \ - } while (0) - -# define atomic_store_explicit(object,desired,order) \ - atomic_store(object,desired) - -# define atomic_load(object) \ - (__sync_synchronize(), *(object)) - -# define atomic_load_explicit(object,order) \ - atomic_load(object) - -# define atomic_exchange(object,desired) \ -({ \ - typeof (object) _obj = (object); \ - typeof (*object) _old; \ - do \ - _old = atomic_load(_obj); \ - while (!__sync_bool_compare_and_swap(_obj, _old, (desired))); \ - _old; \ -}) - -# define atomic_exchange_explicit(object,desired,order) \ - atomic_exchange(object,desired) - -# define atomic_compare_exchange(object,expected,desired) \ -({ \ - typeof (object) _exp = (expected); \ - typeof (*object) _old = *_exp; \ - *_exp = __sync_val_compare_and_swap((object), _old, (desired)); \ - *_exp == _old; \ -}) - -# define atomic_compare_exchange_strong(object,expected,desired) \ - atomic_compare_exchange(object, expected, desired) - -# define atomic_compare_exchange_strong_explicit(object,expected,desired,order) \ - atomic_compare_exchange_strong(object, expected, desired) - -# define atomic_compare_exchange_weak(object,expected,desired) \ - atomic_compare_exchange(object, expected, desired) - -# define atomic_compare_exchange_weak_explicit(object,expected,desired,order) \ - atomic_compare_exchange_weak(object, expected, desired) - -# define atomic_fetch_add(object,operand) \ - __sync_fetch_and_add(object, operand) - -# define atomic_fetch_add_explicit(object,operand,order) \ - atomic_fetch_add(object,operand) - -# define atomic_fetch_sub(object,operand) \ - __sync_fetch_and_sub(object, operand) - -# define atomic_fetch_sub_explicit(object,operand,order) \ - atomic_fetch_sub(object,operand) - -# define atomic_fetch_or(object,operand) \ - __sync_fetch_and_or(object, operand) - -# define atomic_fetch_or_explicit(object,operand,order) \ - atomic_fetch_or(object,operand) - -# define atomic_fetch_xor(object,operand) \ - __sync_fetch_and_sub(object, operand) - -# define atomic_fetch_xor_explicit(object,operand,order) \ - atomic_fetch_sub(object,operand) - -# define atomic_fetch_and(object,operand) \ - __sync_fetch_and_and(object, operand) - -# define atomic_fetch_and_explicit(object,operand,order) \ - atomic_fetch_and(object,operand) - -# define atomic_flag_test_and_set(object) \ - atomic_exchange(object, true) - -# define atomic_flag_test_and_set_explicit(object,order) \ - atomic_flag_test_and_set(object) - -# define atomic_flag_clear(object) \ - atomic_store(object, false) - -# define atomic_flag_clear_explicit(object,order) \ - atomic_flag_clear(object) - -# elif defined (__GNUC__) - -/*** No atomics ***/ - -# define atomic_store(object,desired) \ - do { \ - typeof (object) _obj = (object); \ - typeof (*object) _des = (desired); \ - vlc_global_lock(VLC_ATOMIC_MUTEX); \ - *_obj = _des; \ - vlc_global_unlock(VLC_ATOMIC_MUTEX); \ - } while (0) -# define atomic_store_explicit(object,desired,order) \ - atomic_store(object,desired) - -# define atomic_load(object) \ -({ \ - typeof (object) _obj = (object); \ - typeof (*object) _old; \ - vlc_global_lock(VLC_ATOMIC_MUTEX); \ - _old = *_obj; \ - vlc_global_unlock(VLC_ATOMIC_MUTEX); \ - _old; \ -}) -# define atomic_load_explicit(object,order) \ - atomic_load(object) - -# define atomic_exchange(object,desired) \ -({ \ - typeof (object) _obj = (object); \ - typeof (*object) _des = (desired); \ - typeof (*object) _old; \ - vlc_global_lock(VLC_ATOMIC_MUTEX); \ - _old = *_obj; \ - *_obj = _des; \ - vlc_global_unlock(VLC_ATOMIC_MUTEX); \ - _old; \ -}) -# define atomic_exchange_explicit(object,desired,order) \ - atomic_exchange(object,desired) - -# define atomic_compare_exchange_strong(object,expected,desired) \ -({ \ - typeof (object) _obj = (object); \ - typeof (object) _exp = (expected); \ - typeof (*object) _des = (desired); \ - bool ret; \ - vlc_global_lock(VLC_ATOMIC_MUTEX); \ - ret = *_obj == *_exp; \ - if (ret) \ - *_obj = _des; \ - else \ - *_exp = *_obj; \ - vlc_global_unlock(VLC_ATOMIC_MUTEX); \ - ret; \ -}) -# define atomic_compare_exchange_strong_explicit(object,expected,desired,order) \ - atomic_compare_exchange_strong(object, expected, desired) -# define atomic_compare_exchange_weak(object,expected,desired) \ - atomic_compare_exchange_strong(object, expected, desired) -# define atomic_compare_exchange_weak_explicit(object,expected,desired,order) \ - atomic_compare_exchange_weak(object, expected, desired) - -# define atomic_fetch_OP(object,desired,op) \ -({ \ - typeof (object) _obj = (object); \ - typeof (*object) _des = (desired); \ - typeof (*object) _old; \ - vlc_global_lock(VLC_ATOMIC_MUTEX); \ - _old = *_obj; \ - *_obj = (*_obj) op (_des); \ - vlc_global_unlock(VLC_ATOMIC_MUTEX); \ - _old; \ -}) - -# define atomic_fetch_add(object,operand) \ - atomic_fetch_OP(object,operand,+) -# define atomic_fetch_add_explicit(object,operand,order) \ - atomic_fetch_add(object,operand) - -# define atomic_fetch_sub(object,operand) \ - atomic_fetch_OP(object,operand,-) -# define atomic_fetch_sub_explicit(object,operand,order) \ - atomic_fetch_sub(object,operand) - -# define atomic_fetch_or(object,operand) \ - atomic_fetch_OP(object,operand,|) -# define atomic_fetch_or_explicit(object,operand,order) \ - atomic_fetch_or(object,operand) - -# define atomic_fetch_xor(object,operand) \ - atomic_fetch_OP(object,operand,^) -# define atomic_fetch_xor_explicit(object,operand,order) \ - atomic_fetch_sub(object,operand) - -# define atomic_fetch_and(object,operand) \ - atomic_fetch_OP(object,operand,&) -# define atomic_fetch_and_explicit(object,operand,order) \ - atomic_fetch_and(object,operand) - -# define atomic_flag_test_and_set(object) \ - atomic_exchange(object, true) - -# define atomic_flag_test_and_set_explicit(object,order) \ - atomic_flag_test_and_set(object) - -# define atomic_flag_clear(object) \ - atomic_store(object, false) - -# define atomic_flag_clear_explicit(object,order) \ - atomic_flag_clear(object) - -# else -# error FIXME: implement atomic operations for this compiler. -# endif -# endif - -/** - * Memory storage space for an atom. Never access it directly. - */ -typedef union -{ - atomic_uintptr_t u; -} vlc_atomic_t; - -/** Static initializer for \ref vlc_atomic_t */ -# define VLC_ATOMIC_INIT(val) { (val) } - -/* All functions return the atom value _after_ the operation. */ -static inline uintptr_t vlc_atomic_get(vlc_atomic_t *atom) -{ - return atomic_load(&atom->u); -} - -static inline uintptr_t vlc_atomic_set(vlc_atomic_t *atom, uintptr_t v) -{ - atomic_store(&atom->u, v); - return v; -} - -static inline uintptr_t vlc_atomic_add(vlc_atomic_t *atom, uintptr_t v) -{ - return atomic_fetch_add(&atom->u, v) + v; -} - -static inline uintptr_t vlc_atomic_sub (vlc_atomic_t *atom, uintptr_t v) -{ - return atomic_fetch_sub (&atom->u, v) - v; -} - -static inline uintptr_t vlc_atomic_inc (vlc_atomic_t *atom) -{ - return vlc_atomic_add (atom, 1); -} - -static inline uintptr_t vlc_atomic_dec (vlc_atomic_t *atom) -{ - return vlc_atomic_sub (atom, 1); -} - -static inline uintptr_t vlc_atomic_swap(vlc_atomic_t *atom, uintptr_t v) -{ - return atomic_exchange(&atom->u, v); -} - -static inline uintptr_t vlc_atomic_compare_swap(vlc_atomic_t *atom, - uintptr_t u, uintptr_t v) -{ - atomic_compare_exchange_strong(&atom->u, &u, v); - return u; -} - -typedef atomic_uint_least32_t vlc_atomic_float; - -/** Helper to retrieve a single precision from an atom. */ -static inline float vlc_atomic_loadf(vlc_atomic_float *atom) -{ - union { float f; uint32_t i; } u; - u.i = atomic_load(atom); - return u.f; -} - -/** Helper to store a single precision into an atom. */ -static inline void vlc_atomic_storef(vlc_atomic_float *atom, float f) -{ - union { float f; uint32_t i; } u; - u.f = f; - atomic_store(atom, u.i); -} - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_avcodec.h b/source/vlc/cpp/include/vlc/plugins/vlc_avcodec.h deleted file mode 100644 index dc7b41607..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_avcodec.h +++ /dev/null @@ -1,34 +0,0 @@ -/***************************************************************************** - * vlc_avcodec.h: VLC thread support for FFMPEG/libavcodec - ***************************************************************************** - * Copyright (C) 2009-2010 Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_AVCODEC_H -# define VLC_AVCODEC_H 1 - -static inline void vlc_avcodec_lock (void) -{ - vlc_global_lock (VLC_AVCODEC_MUTEX); -} - -static inline void vlc_avcodec_unlock (void) -{ - vlc_global_unlock (VLC_AVCODEC_MUTEX); -} - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_bits.h b/source/vlc/cpp/include/vlc/plugins/vlc_bits.h deleted file mode 100644 index 80010dec5..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_bits.h +++ /dev/null @@ -1,197 +0,0 @@ -/***************************************************************************** - * vlc_bits.h : Bit handling helpers - ***************************************************************************** - * Copyright (C) 2003 VLC authors and VideoLAN - * $Id: 6c2915138c768d9c49b6646dde6c711acf6eabef $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_BITS_H -#define VLC_BITS_H 1 - -/** - * \file - * This file defines functions, structures for handling streams of bits in vlc - */ - -typedef struct bs_s -{ - uint8_t *p_start; - uint8_t *p; - uint8_t *p_end; - - ssize_t i_left; /* i_count number of available bits */ -} bs_t; - -static inline void bs_init( bs_t *s, const void *p_data, size_t i_data ) -{ - s->p_start = (void *)p_data; - s->p = s->p_start; - s->p_end = s->p_start + i_data; - s->i_left = 8; -} - -static inline int bs_pos( const bs_t *s ) -{ - return( 8 * ( s->p - s->p_start ) + 8 - s->i_left ); -} - -static inline int bs_eof( const bs_t *s ) -{ - return( s->p >= s->p_end ? 1: 0 ); -} - -static inline uint32_t bs_read( bs_t *s, int i_count ) -{ - static const uint32_t i_mask[33] = - { 0x00, - 0x01, 0x03, 0x07, 0x0f, - 0x1f, 0x3f, 0x7f, 0xff, - 0x1ff, 0x3ff, 0x7ff, 0xfff, - 0x1fff, 0x3fff, 0x7fff, 0xffff, - 0x1ffff, 0x3ffff, 0x7ffff, 0xfffff, - 0x1fffff, 0x3fffff, 0x7fffff, 0xffffff, - 0x1ffffff, 0x3ffffff, 0x7ffffff, 0xfffffff, - 0x1fffffff,0x3fffffff,0x7fffffff,0xffffffff}; - int i_shr; - uint32_t i_result = 0; - - while( i_count > 0 ) - { - if( s->p >= s->p_end ) - { - break; - } - - if( ( i_shr = s->i_left - i_count ) >= 0 ) - { - /* more in the buffer than requested */ - i_result |= ( *s->p >> i_shr )&i_mask[i_count]; - s->i_left -= i_count; - if( s->i_left == 0 ) - { - s->p++; - s->i_left = 8; - } - return( i_result ); - } - else - { - /* less in the buffer than requested */ - i_result |= (*s->p&i_mask[s->i_left]) << -i_shr; - i_count -= s->i_left; - s->p++; - s->i_left = 8; - } - } - - return( i_result ); -} - -static inline uint32_t bs_read1( bs_t *s ) -{ - if( s->p < s->p_end ) - { - unsigned int i_result; - - s->i_left--; - i_result = ( *s->p >> s->i_left )&0x01; - if( s->i_left == 0 ) - { - s->p++; - s->i_left = 8; - } - return i_result; - } - - return 0; -} - -static inline uint32_t bs_show( bs_t *s, int i_count ) -{ - bs_t s_tmp = *s; - return bs_read( &s_tmp, i_count ); -} - -static inline void bs_skip( bs_t *s, ssize_t i_count ) -{ - s->i_left -= i_count; - - if( s->i_left <= 0 ) - { - const int i_bytes = ( -s->i_left + 8 ) / 8; - - s->p += i_bytes; - s->i_left += 8 * i_bytes; - } -} - -static inline void bs_write( bs_t *s, int i_count, uint32_t i_bits ) -{ - while( i_count > 0 ) - { - if( s->p >= s->p_end ) - { - break; - } - - i_count--; - - if( ( i_bits >> i_count )&0x01 ) - { - *s->p |= 1 << ( s->i_left - 1 ); - } - else - { - *s->p &= ~( 1 << ( s->i_left - 1 ) ); - } - s->i_left--; - if( s->i_left == 0 ) - { - s->p++; - s->i_left = 8; - } - } -} - -static inline void bs_align( bs_t *s ) -{ - if( s->i_left != 8 ) - { - s->i_left = 8; - s->p++; - } -} - -static inline void bs_align_0( bs_t *s ) -{ - if( s->i_left != 8 ) - { - bs_write( s, s->i_left, 0 ); - } -} - -static inline void bs_align_1( bs_t *s ) -{ - while( s->i_left != 8 ) - { - bs_write( s, 1, 1 ); - } -} - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_block.h b/source/vlc/cpp/include/vlc/plugins/vlc_block.h deleted file mode 100644 index a83a6b7e9..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_block.h +++ /dev/null @@ -1,321 +0,0 @@ -/***************************************************************************** - * vlc_block.h: Data blocks management functions - ***************************************************************************** - * Copyright (C) 2003 VLC authors and VideoLAN - * $Id: e56e4c7efa57d9ae644892f7e66bf98902f7ce14 $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_BLOCK_H -#define VLC_BLOCK_H 1 - -/** - * \file - * This file implements functions and structures to handle blocks of data in vlc - * - */ - -#include /* for ssize_t */ - -/**************************************************************************** - * block: - **************************************************************************** - * - i_flags may not always be set (ie could be 0, even for a key frame - * it depends where you receive the buffer (before/after a packetizer - * and the demux/packetizer implementations. - * - i_dts/i_pts could be VLC_TS_INVALID, it means no pts/dts - * - i_length: length in microseond of the packet, can be null except in the - * sout where it is mandatory. - * - * - i_buffer number of valid data pointed by p_buffer - * you can freely decrease it but never increase it yourself - * (use block_Realloc) - * - p_buffer: pointer over datas. You should never overwrite it, you can - * only incremment it to skip datas, in others cases use block_Realloc - * (don't duplicate yourself in a bigger buffer, block_Realloc is - * optimised for preheader/postdatas increase) - ****************************************************************************/ - -/** The content doesn't follow the last block, or is probably broken */ -#define BLOCK_FLAG_DISCONTINUITY 0x0001 -/** Intra frame */ -#define BLOCK_FLAG_TYPE_I 0x0002 -/** Inter frame with backward reference only */ -#define BLOCK_FLAG_TYPE_P 0x0004 -/** Inter frame with backward and forward reference */ -#define BLOCK_FLAG_TYPE_B 0x0008 -/** For inter frame when you don't know the real type */ -#define BLOCK_FLAG_TYPE_PB 0x0010 -/** Warn that this block is a header one */ -#define BLOCK_FLAG_HEADER 0x0020 -/** This is the last block of the frame */ -#define BLOCK_FLAG_END_OF_FRAME 0x0040 -/** This is not a key frame for bitrate shaping */ -#define BLOCK_FLAG_NO_KEYFRAME 0x0080 -/** This block contains the last part of a sequence */ -#define BLOCK_FLAG_END_OF_SEQUENCE 0x0100 -/** This block contains a clock reference */ -#define BLOCK_FLAG_CLOCK 0x0200 -/** This block is scrambled */ -#define BLOCK_FLAG_SCRAMBLED 0x0400 -/** This block has to be decoded but not be displayed */ -#define BLOCK_FLAG_PREROLL 0x0800 -/** This block is corrupted and/or there is data loss */ -#define BLOCK_FLAG_CORRUPTED 0x1000 -/** This block contains an interlaced picture with top field first */ -#define BLOCK_FLAG_TOP_FIELD_FIRST 0x2000 -/** This block contains an interlaced picture with bottom field first */ -#define BLOCK_FLAG_BOTTOM_FIELD_FIRST 0x4000 - -/** This block contains an interlaced picture */ -#define BLOCK_FLAG_INTERLACED_MASK \ - (BLOCK_FLAG_TOP_FIELD_FIRST|BLOCK_FLAG_BOTTOM_FIELD_FIRST) - -#define BLOCK_FLAG_TYPE_MASK \ - (BLOCK_FLAG_TYPE_I|BLOCK_FLAG_TYPE_P|BLOCK_FLAG_TYPE_B|BLOCK_FLAG_TYPE_PB) - -/* These are for input core private usage only */ -#define BLOCK_FLAG_CORE_PRIVATE_MASK 0x00ff0000 -#define BLOCK_FLAG_CORE_PRIVATE_SHIFT 16 - -/* These are for module private usage only */ -#define BLOCK_FLAG_PRIVATE_MASK 0xff000000 -#define BLOCK_FLAG_PRIVATE_SHIFT 24 - -typedef void (*block_free_t) (block_t *); - -struct block_t -{ - block_t *p_next; - - uint8_t *p_buffer; /**< Payload start */ - size_t i_buffer; /**< Payload length */ - uint8_t *p_start; /**< Buffer start */ - size_t i_size; /**< Buffer total size */ - - uint32_t i_flags; - unsigned i_nb_samples; /* Used for audio */ - - mtime_t i_pts; - mtime_t i_dts; - mtime_t i_length; - - /* Rudimentary support for overloading block (de)allocation. */ - block_free_t pf_release; -}; - -/**************************************************************************** - * Blocks functions: - **************************************************************************** - * - block_Alloc : create a new block with the requested size ( >= 0 ), return - * NULL for failure. - * - block_Release : release a block allocated with block_Alloc. - * - block_Realloc : realloc a block, - * i_pre: how many bytes to insert before body if > 0, else how many - * bytes of body to skip (the latter can be done without using - * block_Realloc i_buffer -= -i_pre, p_buffer += -i_pre as i_pre < 0) - * i_body (>= 0): the final size of the body (decreasing it can directly - * be done with i_buffer = i_body). - * with preheader and or body (increase - * and decrease are supported). Use it as it is optimised. - * - block_Duplicate : create a copy of a block. - ****************************************************************************/ -VLC_API void block_Init( block_t *, void *, size_t ); -VLC_API block_t *block_Alloc( size_t ) VLC_USED VLC_MALLOC; -VLC_API block_t *block_Realloc( block_t *, ssize_t i_pre, size_t i_body ) VLC_USED; - -static inline void block_CopyProperties( block_t *dst, block_t *src ) -{ - dst->i_flags = src->i_flags; - dst->i_nb_samples = src->i_nb_samples; - dst->i_dts = src->i_dts; - dst->i_pts = src->i_pts; - dst->i_length = src->i_length; -} - -VLC_USED -static inline block_t *block_Duplicate( block_t *p_block ) -{ - block_t *p_dup = block_Alloc( p_block->i_buffer ); - if( p_dup == NULL ) - return NULL; - - block_CopyProperties( p_dup, p_block ); - memcpy( p_dup->p_buffer, p_block->p_buffer, p_block->i_buffer ); - - return p_dup; -} - -static inline void block_Release( block_t *p_block ) -{ - p_block->pf_release( p_block ); -} - -VLC_API block_t *block_heap_Alloc(void *, size_t) VLC_USED VLC_MALLOC; -VLC_API block_t *block_mmap_Alloc(void *addr, size_t length) VLC_USED VLC_MALLOC; -VLC_API block_t * block_shm_Alloc(void *addr, size_t length) VLC_USED VLC_MALLOC; -VLC_API block_t *block_File(int fd) VLC_USED VLC_MALLOC; -VLC_API block_t *block_FilePath(const char *) VLC_USED VLC_MALLOC; - -static inline void block_Cleanup (void *block) -{ - block_Release ((block_t *)block); -} -#define block_cleanup_push( block ) vlc_cleanup_push (block_Cleanup, block) - -/**************************************************************************** - * Chains of blocks functions helper - **************************************************************************** - * - block_ChainAppend : append a block to the last block of a chain. Try to - * avoid using with a lot of data as it's really slow, prefer - * block_ChainLastAppend, p_block can be NULL - * - block_ChainLastAppend : use a pointer over a pointer to the next blocks, - * and update it. - * - block_ChainRelease : release a chain of block - * - block_ChainExtract : extract data from a chain, return real bytes counts - * - block_ChainGather : gather a chain, free it and return one block. - ****************************************************************************/ -static inline void block_ChainAppend( block_t **pp_list, block_t *p_block ) -{ - if( *pp_list == NULL ) - { - *pp_list = p_block; - } - else - { - block_t *p = *pp_list; - - while( p->p_next ) p = p->p_next; - p->p_next = p_block; - } -} - -static inline void block_ChainLastAppend( block_t ***ppp_last, block_t *p_block ) -{ - block_t *p_last = p_block; - - **ppp_last = p_block; - - while( p_last->p_next ) p_last = p_last->p_next; - *ppp_last = &p_last->p_next; -} - -static inline void block_ChainRelease( block_t *p_block ) -{ - while( p_block ) - { - block_t *p_next = p_block->p_next; - block_Release( p_block ); - p_block = p_next; - } -} - -static size_t block_ChainExtract( block_t *p_list, void *p_data, size_t i_max ) -{ - size_t i_total = 0; - uint8_t *p = (uint8_t*)p_data; - - while( p_list && i_max ) - { - size_t i_copy = __MIN( i_max, p_list->i_buffer ); - memcpy( p, p_list->p_buffer, i_copy ); - i_max -= i_copy; - i_total += i_copy; - p += i_copy; - - p_list = p_list->p_next; - } - return i_total; -} - -static inline void block_ChainProperties( block_t *p_list, int *pi_count, size_t *pi_size, mtime_t *pi_length ) -{ - size_t i_size = 0; - mtime_t i_length = 0; - int i_count = 0; - - while( p_list ) - { - i_size += p_list->i_buffer; - i_length += p_list->i_length; - i_count++; - - p_list = p_list->p_next; - } - - if( pi_size ) - *pi_size = i_size; - if( pi_length ) - *pi_length = i_length; - if( pi_count ) - *pi_count = i_count; -} - -static inline block_t *block_ChainGather( block_t *p_list ) -{ - size_t i_total = 0; - mtime_t i_length = 0; - block_t *g; - - if( p_list->p_next == NULL ) - return p_list; /* Already gathered */ - - block_ChainProperties( p_list, NULL, &i_total, &i_length ); - - g = block_Alloc( i_total ); - block_ChainExtract( p_list, g->p_buffer, g->i_buffer ); - - g->i_flags = p_list->i_flags; - g->i_pts = p_list->i_pts; - g->i_dts = p_list->i_dts; - g->i_length = i_length; - - /* free p_list */ - block_ChainRelease( p_list ); - return g; -} - -/**************************************************************************** - * Fifos of blocks. - **************************************************************************** - * - block_FifoNew : create and init a new fifo - * - block_FifoRelease : destroy a fifo and free all blocks in it. - * - block_FifoPace : wait for a fifo to drain to a specified number of packets or total data size - * - block_FifoEmpty : free all blocks in a fifo - * - block_FifoPut : put a block - * - block_FifoGet : get a packet from the fifo (and wait if it is empty) - * - block_FifoShow : show the first packet of the fifo (and wait if - * needed), be carefull, you can use it ONLY if you are sure to be the - * only one getting data from the fifo. - * - block_FifoCount : how many packets are waiting in the fifo - * - * block_FifoGet and block_FifoShow are cancellation points. - ****************************************************************************/ - -VLC_API block_fifo_t *block_FifoNew( void ) VLC_USED VLC_MALLOC; -VLC_API void block_FifoRelease( block_fifo_t * ); -VLC_API void block_FifoPace( block_fifo_t *fifo, size_t max_depth, size_t max_size ); -VLC_API void block_FifoEmpty( block_fifo_t * ); -VLC_API size_t block_FifoPut( block_fifo_t *, block_t * ); -void block_FifoWake( block_fifo_t * ); -VLC_API block_t * block_FifoGet( block_fifo_t * ) VLC_USED; -VLC_API block_t * block_FifoShow( block_fifo_t * ); -size_t block_FifoSize( const block_fifo_t *p_fifo ) VLC_USED; -VLC_API size_t block_FifoCount( const block_fifo_t *p_fifo ) VLC_USED; - -#endif /* VLC_BLOCK_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_block_helper.h b/source/vlc/cpp/include/vlc/plugins/vlc_block_helper.h deleted file mode 100644 index 2e6231fe9..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_block_helper.h +++ /dev/null @@ -1,517 +0,0 @@ -/***************************************************************************** - * vlc_block_helper.h: Helper functions for data blocks management. - ***************************************************************************** - * Copyright (C) 2003 VLC authors and VideoLAN - * $Id: fdd5fdbeafee1f296c157410ef3e69a7cf57d3e5 $ - * - * Authors: Gildas Bazin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_BLOCK_HELPER_H -#define VLC_BLOCK_HELPER_H 1 - -#include - -typedef struct block_bytestream_t -{ - block_t *p_chain; /**< byte stream head block */ - block_t *p_block; /**< byte stream read pointer block */ - size_t i_offset; /**< byte stream read pointer offset within block */ - /* TODO? add tail pointer for faster push? */ -} block_bytestream_t; - -/***************************************************************************** - * block_bytestream_t management - *****************************************************************************/ -static inline void block_BytestreamInit( block_bytestream_t *p_bytestream ) -{ - p_bytestream->p_chain = p_bytestream->p_block = NULL; - p_bytestream->i_offset = 0; -} - -static inline void block_BytestreamRelease( block_bytestream_t *p_bytestream ) -{ - for( block_t *block = p_bytestream->p_chain; block != NULL; ) - { - block_t *p_next = block->p_next; - - block_Release( block ); - block = p_next; - } -} - -/** - * It flush all data (read and unread) from a block_bytestream_t. - */ -static inline void block_BytestreamEmpty( block_bytestream_t *p_bytestream ) -{ - block_BytestreamRelease( p_bytestream ); - block_BytestreamInit( p_bytestream ); -} - -/** - * It flushes all already read data from a block_bytestream_t. - */ -static inline void block_BytestreamFlush( block_bytestream_t *p_bytestream ) -{ - block_t *block = p_bytestream->p_chain; - - while( block != p_bytestream->p_block ) - { - block_t *p_next = block->p_next; - - block_Release( block ); - block = p_next; - } - - while( block != NULL && block->i_buffer == p_bytestream->i_offset ) - { - block_t *p_next = block->p_next; - - block_Release( block ); - block = p_next; - p_bytestream->i_offset = 0; - } - - p_bytestream->p_chain = p_bytestream->p_block = block; -} - -static inline void block_BytestreamPush( block_bytestream_t *p_bytestream, - block_t *p_block ) -{ - block_ChainAppend( &p_bytestream->p_chain, p_block ); - if( !p_bytestream->p_block ) p_bytestream->p_block = p_block; -} - -VLC_USED -static inline block_t *block_BytestreamPop( block_bytestream_t *p_bytestream ) -{ - block_t *p_block; - - block_BytestreamFlush( p_bytestream ); - - p_block = p_bytestream->p_block; - if( p_block == NULL ) - { - return NULL; - } - else if( !p_block->p_next ) - { - p_block->p_buffer += p_bytestream->i_offset; - p_block->i_buffer -= p_bytestream->i_offset; - p_bytestream->i_offset = 0; - p_bytestream->p_chain = p_bytestream->p_block = NULL; - return p_block; - } - - while( p_block->p_next && p_block->p_next->p_next ) - p_block = p_block->p_next; - - block_t *p_block_old = p_block; - p_block = p_block->p_next; - p_block_old->p_next = NULL; - - return p_block; -} - -static inline int block_SkipByte( block_bytestream_t *p_bytestream ) -{ - /* Most common case first */ - if( p_bytestream->p_block->i_buffer - p_bytestream->i_offset ) - { - p_bytestream->i_offset++; - return VLC_SUCCESS; - } - else - { - block_t *p_block; - - /* Less common case which is also slower */ - for( p_block = p_bytestream->p_block->p_next; - p_block != NULL; p_block = p_block->p_next ) - { - if( p_block->i_buffer ) - { - p_bytestream->i_offset = 1; - p_bytestream->p_block = p_block; - return VLC_SUCCESS; - } - } - } - - /* Not enough data, bail out */ - return VLC_EGENERIC; -} - -static inline int block_PeekByte( block_bytestream_t *p_bytestream, - uint8_t *p_data ) -{ - /* Most common case first */ - if( p_bytestream->p_block->i_buffer - p_bytestream->i_offset ) - { - *p_data = p_bytestream->p_block->p_buffer[p_bytestream->i_offset]; - return VLC_SUCCESS; - } - else - { - block_t *p_block; - - /* Less common case which is also slower */ - for( p_block = p_bytestream->p_block->p_next; - p_block != NULL; p_block = p_block->p_next ) - { - if( p_block->i_buffer ) - { - *p_data = p_block->p_buffer[0]; - return VLC_SUCCESS; - } - } - } - - /* Not enough data, bail out */ - return VLC_EGENERIC; -} - -static inline int block_GetByte( block_bytestream_t *p_bytestream, - uint8_t *p_data ) -{ - /* Most common case first */ - if( p_bytestream->p_block->i_buffer - p_bytestream->i_offset ) - { - *p_data = p_bytestream->p_block->p_buffer[p_bytestream->i_offset]; - p_bytestream->i_offset++; - return VLC_SUCCESS; - } - else - { - block_t *p_block; - - /* Less common case which is also slower */ - for( p_block = p_bytestream->p_block->p_next; - p_block != NULL; p_block = p_block->p_next ) - { - if( p_block->i_buffer ) - { - *p_data = p_block->p_buffer[0]; - p_bytestream->i_offset = 1; - p_bytestream->p_block = p_block; - return VLC_SUCCESS; - } - } - } - - /* Not enough data, bail out */ - return VLC_EGENERIC; -} - -static inline int block_WaitBytes( block_bytestream_t *p_bytestream, - size_t i_data ) -{ - block_t *p_block; - size_t i_offset, i_copy, i_size; - - /* Check we have that much data */ - i_offset = p_bytestream->i_offset; - i_size = i_data; - i_copy = 0; - for( p_block = p_bytestream->p_block; - p_block != NULL; p_block = p_block->p_next ) - { - i_copy = __MIN( i_size, p_block->i_buffer - i_offset ); - i_size -= i_copy; - i_offset = 0; - - if( !i_size ) break; - } - - if( i_size ) - { - /* Not enough data, bail out */ - return VLC_EGENERIC; - } - return VLC_SUCCESS; -} - -static inline int block_SkipBytes( block_bytestream_t *p_bytestream, - size_t i_data ) -{ - block_t *p_block; - size_t i_offset, i_copy; - - /* Check we have that much data */ - i_offset = p_bytestream->i_offset; - i_copy = 0; - for( p_block = p_bytestream->p_block; - p_block != NULL; p_block = p_block->p_next ) - { - i_copy = __MIN( i_data, p_block->i_buffer - i_offset ); - i_data -= i_copy; - - if( !i_data ) break; - - i_offset = 0; - } - - if( i_data ) - { - /* Not enough data, bail out */ - return VLC_EGENERIC; - } - - p_bytestream->p_block = p_block; - p_bytestream->i_offset = i_offset + i_copy; - return VLC_SUCCESS; -} - -static inline int block_PeekBytes( block_bytestream_t *p_bytestream, - uint8_t *p_data, size_t i_data ) -{ - block_t *p_block; - size_t i_offset, i_copy, i_size; - - /* Check we have that much data */ - i_offset = p_bytestream->i_offset; - i_size = i_data; - i_copy = 0; - for( p_block = p_bytestream->p_block; - p_block != NULL; p_block = p_block->p_next ) - { - i_copy = __MIN( i_size, p_block->i_buffer - i_offset ); - i_size -= i_copy; - i_offset = 0; - - if( !i_size ) break; - } - - if( i_size ) - { - /* Not enough data, bail out */ - return VLC_EGENERIC; - } - - /* Copy the data */ - i_offset = p_bytestream->i_offset; - i_size = i_data; - i_copy = 0; - for( p_block = p_bytestream->p_block; - p_block != NULL; p_block = p_block->p_next ) - { - i_copy = __MIN( i_size, p_block->i_buffer - i_offset ); - i_size -= i_copy; - - if( i_copy ) - { - memcpy( p_data, p_block->p_buffer + i_offset, i_copy ); - p_data += i_copy; - } - - i_offset = 0; - - if( !i_size ) break; - } - - return VLC_SUCCESS; -} - -static inline int block_GetBytes( block_bytestream_t *p_bytestream, - uint8_t *p_data, size_t i_data ) -{ - block_t *p_block; - size_t i_offset, i_copy, i_size; - - /* Check we have that much data */ - i_offset = p_bytestream->i_offset; - i_size = i_data; - i_copy = 0; - for( p_block = p_bytestream->p_block; - p_block != NULL; p_block = p_block->p_next ) - { - i_copy = __MIN( i_size, p_block->i_buffer - i_offset ); - i_size -= i_copy; - i_offset = 0; - - if( !i_size ) break; - } - - if( i_size ) - { - /* Not enough data, bail out */ - return VLC_EGENERIC; - } - - /* Copy the data */ - i_offset = p_bytestream->i_offset; - i_size = i_data; - i_copy = 0; - for( p_block = p_bytestream->p_block; - p_block != NULL; p_block = p_block->p_next ) - { - i_copy = __MIN( i_size, p_block->i_buffer - i_offset ); - i_size -= i_copy; - - if( i_copy ) - { - memcpy( p_data, p_block->p_buffer + i_offset, i_copy ); - p_data += i_copy; - } - - if( !i_size ) break; - - i_offset = 0; - } - - p_bytestream->p_block = p_block; - p_bytestream->i_offset = i_offset + i_copy; - - return VLC_SUCCESS; -} - -static inline int block_PeekOffsetBytes( block_bytestream_t *p_bytestream, - size_t i_peek_offset, uint8_t *p_data, size_t i_data ) -{ - block_t *p_block; - size_t i_offset, i_copy, i_size; - - /* Check we have that much data */ - i_offset = p_bytestream->i_offset; - i_size = i_data + i_peek_offset; - i_copy = 0; - for( p_block = p_bytestream->p_block; - p_block != NULL; p_block = p_block->p_next ) - { - i_copy = __MIN( i_size, p_block->i_buffer - i_offset ); - i_size -= i_copy; - i_offset = 0; - - if( !i_size ) break; - } - - if( i_size ) - { - /* Not enough data, bail out */ - return VLC_EGENERIC; - } - - /* Find the right place */ - i_offset = p_bytestream->i_offset; - i_size = i_peek_offset; - i_copy = 0; - for( p_block = p_bytestream->p_block; - p_block != NULL; p_block = p_block->p_next ) - { - i_copy = __MIN( i_size, p_block->i_buffer - i_offset ); - i_size -= i_copy; - - if( !i_size ) break; - - i_offset = 0; - } - - /* Copy the data */ - i_offset += i_copy; - i_size = i_data; - i_copy = 0; - for( ; p_block != NULL; p_block = p_block->p_next ) - { - i_copy = __MIN( i_size, p_block->i_buffer - i_offset ); - i_size -= i_copy; - - if( i_copy ) - { - memcpy( p_data, p_block->p_buffer + i_offset, i_copy ); - p_data += i_copy; - } - - i_offset = 0; - - if( !i_size ) break; - } - - return VLC_SUCCESS; -} - -static inline int block_FindStartcodeFromOffset( - block_bytestream_t *p_bytestream, size_t *pi_offset, - const uint8_t *p_startcode, int i_startcode_length ) -{ - block_t *p_block, *p_block_backup = 0; - int i_size = 0; - size_t i_offset, i_offset_backup = 0; - int i_caller_offset_backup = 0, i_match; - - /* Find the right place */ - i_size = *pi_offset + p_bytestream->i_offset; - for( p_block = p_bytestream->p_block; - p_block != NULL; p_block = p_block->p_next ) - { - i_size -= p_block->i_buffer; - if( i_size < 0 ) break; - } - - if( i_size >= 0 ) - { - /* Not enough data, bail out */ - return VLC_EGENERIC; - } - - /* Begin the search. - * We first look for an occurrence of the 1st startcode byte and - * if found, we do a more thorough check. */ - i_size += p_block->i_buffer; - *pi_offset -= i_size; - i_match = 0; - for( ; p_block != NULL; p_block = p_block->p_next ) - { - for( i_offset = i_size; i_offset < p_block->i_buffer; i_offset++ ) - { - if( p_block->p_buffer[i_offset] == p_startcode[i_match] ) - { - if( !i_match ) - { - p_block_backup = p_block; - i_offset_backup = i_offset; - i_caller_offset_backup = *pi_offset; - } - - if( i_match + 1 == i_startcode_length ) - { - /* We have it */ - *pi_offset += i_offset - i_match; - return VLC_SUCCESS; - } - - i_match++; - } - else if ( i_match ) - { - /* False positive */ - p_block = p_block_backup; - i_offset = i_offset_backup; - *pi_offset = i_caller_offset_backup; - i_match = 0; - } - - } - i_size = 0; - *pi_offset += i_offset; - } - - *pi_offset -= i_match; - return VLC_EGENERIC; -} - -#endif /* VLC_BLOCK_HELPER_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_charset.h b/source/vlc/cpp/include/vlc/plugins/vlc_charset.h deleted file mode 100644 index e771fd351..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_charset.h +++ /dev/null @@ -1,211 +0,0 @@ -/***************************************************************************** - * vlc_charset.h: Unicode UTF-8 wrappers function - ***************************************************************************** - * Copyright (C) 2003-2005 VLC authors and VideoLAN - * Copyright © 2005-2010 Rémi Denis-Courmont - * $Id: 4de57ab70f369c91338676f8ca154ecab427ca5e $ - * - * Author: Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_CHARSET_H -#define VLC_CHARSET_H 1 - -/** - * \file - * This files handles locale conversions in vlc - */ - -/* iconv wrappers (defined in src/extras/libc.c) */ -typedef void *vlc_iconv_t; -VLC_API vlc_iconv_t vlc_iconv_open( const char *, const char * ) VLC_USED; -VLC_API size_t vlc_iconv( vlc_iconv_t, const char **, size_t *, char **, size_t * ) VLC_USED; -VLC_API int vlc_iconv_close( vlc_iconv_t ); - -#include - -VLC_API int utf8_vfprintf( FILE *stream, const char *fmt, va_list ap ); -VLC_API int utf8_fprintf( FILE *, const char *, ... ) VLC_FORMAT( 2, 3 ); -VLC_API char * vlc_strcasestr(const char *, const char *) VLC_USED; - -VLC_API char * EnsureUTF8( char * ); -VLC_API const char * IsUTF8( const char * ) VLC_USED; - -VLC_API char * FromCharset( const char *charset, const void *data, size_t data_size ) VLC_USED; -VLC_API void * ToCharset( const char *charset, const char *in, size_t *outsize ) VLC_USED; - -#ifdef _WIN32 -VLC_USED -static inline char *FromWide (const wchar_t *wide) -{ - size_t len = WideCharToMultiByte (CP_UTF8, 0, wide, -1, NULL, 0, NULL, NULL); - if (len == 0) - return NULL; - - char *out = (char *)malloc (len); - - if (likely(out)) - WideCharToMultiByte (CP_UTF8, 0, wide, -1, out, len, NULL, NULL); - return out; -} - -VLC_USED -static inline wchar_t *ToWide (const char *utf8) -{ - int len = MultiByteToWideChar (CP_UTF8, 0, utf8, -1, NULL, 0); - if (len == 0) - return NULL; - - wchar_t *out = (wchar_t *)malloc (len * sizeof (wchar_t)); - - if (likely(out)) - MultiByteToWideChar (CP_UTF8, 0, utf8, -1, out, len); - return out; -} - -VLC_USED VLC_MALLOC -static inline char *ToCodePage (unsigned cp, const char *utf8) -{ - wchar_t *wide = ToWide (utf8); - if (wide == NULL) - return NULL; - - size_t len = WideCharToMultiByte (cp, 0, wide, -1, NULL, 0, NULL, NULL); - if (len == 0) - return NULL; - - char *out = (char *)malloc (len); - if (likely(out != NULL)) - WideCharToMultiByte (cp, 0, wide, -1, out, len, NULL, NULL); - free (wide); - return out; -} - -VLC_USED VLC_MALLOC -static inline char *FromCodePage (unsigned cp, const char *mb) -{ - int len = MultiByteToWideChar (cp, 0, mb, -1, NULL, 0); - if (len == 0) - return NULL; - - wchar_t *wide = (wchar_t *)malloc (len * sizeof (wchar_t)); - if (unlikely(wide == NULL)) - return NULL; - MultiByteToWideChar (cp, 0, mb, -1, wide, len); - - char *utf8 = FromWide (wide); - free (wide); - return utf8; -} - -VLC_USED VLC_MALLOC -static inline char *FromANSI (const char *ansi) -{ - return FromCodePage (GetACP (), ansi); -} - -VLC_USED VLC_MALLOC -static inline char *ToANSI (const char *utf8) -{ - return ToCodePage (GetACP (), utf8); -} - -# ifdef UNICODE -# define FromT FromWide -# define ToT ToWide -# else -# define FromT FromANSI -# define ToT ToANSI -# endif -# define FromLocale FromANSI -# define ToLocale ToANSI -# define LocaleFree(s) free((char *)(s)) -# define FromLocaleDup FromANSI -# define ToLocaleDup ToANSI - -#elif defined(__OS2__) - -VLC_USED static inline char *FromLocale (const char *locale) -{ - return locale ? FromCharset ((char *)"", locale, strlen(locale)) : NULL; -} - -VLC_USED static inline char *ToLocale (const char *utf8) -{ - size_t outsize; - return utf8 ? (char *)ToCharset ("", utf8, &outsize) : NULL; -} - -VLC_USED static inline void LocaleFree (const char *str) -{ - free ((char *)str); -} - -VLC_USED static inline char *FromLocaleDup (const char *locale) -{ - return FromCharset ("", locale, strlen(locale)); -} - -VLC_USED static inline char *ToLocaleDup (const char *utf8) -{ - size_t outsize; - return (char *)ToCharset ("", utf8, &outsize); -} - -#else - -# define FromLocale(l) (l) -# define ToLocale(u) (u) -# define LocaleFree(s) ((void)(s)) -# define FromLocaleDup strdup -# define ToLocaleDup strdup -#endif - -/** - * Converts a nul-terminated string from ISO-8859-1 to UTF-8. - */ -static inline char *FromLatin1 (const char *latin) -{ - char *str = (char *)malloc (2 * strlen (latin) + 1), *utf8 = str; - unsigned char c; - - if (str == NULL) - return NULL; - - while ((c = *(latin++)) != '\0') - { - if (c >= 0x80) - { - *(utf8++) = 0xC0 | (c >> 6); - *(utf8++) = 0x80 | (c & 0x3F); - } - else - *(utf8++) = c; - } - *(utf8++) = '\0'; - - utf8 = (char *)realloc (str, utf8 - str); - return utf8 ? utf8 : str; -} - -VLC_API double us_strtod( const char *, char ** ) VLC_USED; -VLC_API float us_strtof( const char *, char ** ) VLC_USED; -VLC_API double us_atof( const char * ) VLC_USED; -VLC_API int us_vasprintf( char **, const char *, va_list ); -VLC_API int us_asprintf( char **, const char *, ... ) VLC_USED; - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_codec.h b/source/vlc/cpp/include/vlc/plugins/vlc_codec.h deleted file mode 100644 index 147b77443..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_codec.h +++ /dev/null @@ -1,246 +0,0 @@ -/***************************************************************************** - * vlc_codec.h: Definition of the decoder and encoder structures - ***************************************************************************** - * Copyright (C) 1999-2003 VLC authors and VideoLAN - * $Id: b9a89d4cc714e3893187bf78605f3a82d5483478 $ - * - * Authors: Gildas Bazin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_CODEC_H -#define VLC_CODEC_H 1 - -#include -#include -#include -#include - -/** - * \file - * This file defines the structure and types used by decoders and encoders - */ - -typedef struct decoder_owner_sys_t decoder_owner_sys_t; - -/** - * \defgroup decoder Decoder - * - * The structure describing a decoder - * - * @{ - */ - -/* - * BIG FAT WARNING : the code relies in the first 4 members of filter_t - * and decoder_t to be the same, so if you have anything to add, do it - * at the end of the structure. - */ -struct decoder_t -{ - VLC_COMMON_MEMBERS - - /* Module properties */ - module_t * p_module; - decoder_sys_t * p_sys; - - /* Input format ie from demuxer (XXX: a lot of field could be invalid) */ - es_format_t fmt_in; - - /* Output format of decoder/packetizer */ - es_format_t fmt_out; - - /* Some decoders only accept packetized data (ie. not truncated) */ - bool b_need_packetized; - - /* Tell the decoder if it is allowed to drop frames */ - bool b_pace_control; - - /* */ - picture_t * ( * pf_decode_video )( decoder_t *, block_t ** ); - block_t * ( * pf_decode_audio )( decoder_t *, block_t ** ); - subpicture_t * ( * pf_decode_sub) ( decoder_t *, block_t ** ); - block_t * ( * pf_packetize ) ( decoder_t *, block_t ** ); - - /* Closed Caption (CEA 608/708) extraction. - * If set, it *may* be called after pf_decode_video/pf_packetize - * returned data. It should return CC for the pictures returned by the - * last pf_packetize/pf_decode_video call only, - * pb_present will be used to known which cc channel are present (but - * globaly, not necessary for the current packet */ - block_t * ( * pf_get_cc ) ( decoder_t *, bool pb_present[4] ); - - /* Meta data at codec level - * The decoder owner set it back to NULL once it has retreived what it needs. - * The decoder owner is responsible of its release except when you overwrite it. - */ - vlc_meta_t *p_description; - - /* - * Owner fields - * XXX You MUST not use them directly. - */ - - /* Video output callbacks - * XXX use decoder_NewPicture/decoder_DeletePicture - * and decoder_LinkPicture/decoder_UnlinkPicture */ - picture_t *(*pf_vout_buffer_new)( decoder_t * ); - void (*pf_vout_buffer_del)( decoder_t *, picture_t * ); - void (*pf_picture_link) ( decoder_t *, picture_t * ); - void (*pf_picture_unlink) ( decoder_t *, picture_t * ); - - /** - * Number of extra (ie in addition to the DPB) picture buffers - * needed for decoding. - */ - int i_extra_picture_buffers; - - /* Audio output callbacks - * XXX use decoder_NewAudioBuffer/decoder_DeleteAudioBuffer */ - block_t *(*pf_aout_buffer_new)( decoder_t *, int ); - - /* SPU output callbacks - * XXX use decoder_NewSubpicture and decoder_DeleteSubpicture */ - subpicture_t *(*pf_spu_buffer_new)( decoder_t *, const subpicture_updater_t * ); - void (*pf_spu_buffer_del)( decoder_t *, subpicture_t * ); - - /* Input attachments - * XXX use decoder_GetInputAttachments */ - int (*pf_get_attachments)( decoder_t *p_dec, input_attachment_t ***ppp_attachment, int *pi_attachment ); - - /* Display date - * XXX use decoder_GetDisplayDate */ - mtime_t (*pf_get_display_date)( decoder_t *, mtime_t ); - - /* Display rate - * XXX use decoder_GetDisplayRate */ - int (*pf_get_display_rate)( decoder_t * ); - - /* Private structure for the owner of the decoder */ - decoder_owner_sys_t *p_owner; - - bool b_error; -}; - -/** - * @} - */ - -/** - * \defgroup encoder Encoder - * - * The structure describing a Encoder - * - * @{ - */ - -struct encoder_t -{ - VLC_COMMON_MEMBERS - - /* Module properties */ - module_t * p_module; - encoder_sys_t * p_sys; - - /* Properties of the input data fed to the encoder */ - es_format_t fmt_in; - - /* Properties of the output of the encoder */ - es_format_t fmt_out; - - block_t * ( * pf_encode_video )( encoder_t *, picture_t * ); - block_t * ( * pf_encode_audio )( encoder_t *, block_t * ); - block_t * ( * pf_encode_sub )( encoder_t *, subpicture_t * ); - - /* Common encoder options */ - int i_threads; /* Number of threads to use during encoding */ - int i_iframes; /* One I frame per i_iframes */ - int i_bframes; /* One B frame per i_bframes */ - int i_tolerance; /* Bitrate tolerance */ - - /* Encoder config */ - config_chain_t *p_cfg; -}; - -/** - * @} - */ - - -/** - * This function will return a new picture usable by a decoder as an output - * buffer. You have to release it using decoder_DeletePicture or by returning - * it to the caller as a pf_decode_video return value. - */ -VLC_API picture_t * decoder_NewPicture( decoder_t * ) VLC_USED; - -/** - * This function will release a picture create by decoder_NewPicture. - */ -VLC_API void decoder_DeletePicture( decoder_t *, picture_t *p_picture ); - -/** - * This function will increase the picture reference count. - * (picture_Hold is not usable.) - */ -VLC_API void decoder_LinkPicture( decoder_t *, picture_t * ); - -/** - * This function will decrease the picture reference count. - * (picture_Release is not usable.) - */ -VLC_API void decoder_UnlinkPicture( decoder_t *, picture_t * ); - -/** - * This function will return a new audio buffer usable by a decoder as an - * output buffer. You have to release it using decoder_DeleteAudioBuffer - * or by returning it to the caller as a pf_decode_audio return value. - */ -VLC_API block_t * decoder_NewAudioBuffer( decoder_t *, int i_size ) VLC_USED; - -/** - * This function will return a new subpicture usable by a decoder as an output - * buffer. You have to release it using decoder_DeleteSubpicture or by returning - * it to the caller as a pf_decode_sub return value. - */ -VLC_API subpicture_t * decoder_NewSubpicture( decoder_t *, const subpicture_updater_t * ) VLC_USED; - -/** - * This function will release a subpicture created by decoder_NewSubicture. - */ -VLC_API void decoder_DeleteSubpicture( decoder_t *, subpicture_t *p_subpicture ); - -/** - * This function gives all input attachments at once. - * - * You MUST release the returned values - */ -VLC_API int decoder_GetInputAttachments( decoder_t *, input_attachment_t ***ppp_attachment, int *pi_attachment ); - -/** - * This function converts a decoder timestamp into a display date comparable - * to mdate(). - * You MUST use it *only* for gathering statistics about speed. - */ -VLC_API mtime_t decoder_GetDisplayDate( decoder_t *, mtime_t ) VLC_USED; - -/** - * This function returns the current input rate. - * You MUST use it *only* for gathering statistics about speed. - */ -VLC_API int decoder_GetDisplayRate( decoder_t * ) VLC_USED; - -#endif /* _VLC_CODEC_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_codec_synchro.h b/source/vlc/cpp/include/vlc/plugins/vlc_codec_synchro.h deleted file mode 100644 index b237a1c10..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_codec_synchro.h +++ /dev/null @@ -1,49 +0,0 @@ -/***************************************************************************** - * vlc_codec_synchro.h: frame-dropping structures - ***************************************************************************** - * Copyright (C) 1999-2005 VLC authors and VideoLAN - * $Id: ee6c86af8dc8baaac7c2a9068a9dc8fa6cf7fe64 $ - * - * Authors: Christophe Massiot - * Jean-Marc Dressler - * Stéphane Borel - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/***************************************************************************** - * decoder_synchro_t : timers for the video synchro - *****************************************************************************/ -/* Read the discussion on top of decoder_synchro.c for more information. */ -/* Pictures types */ -#define I_CODING_TYPE 1 -#define P_CODING_TYPE 2 -#define B_CODING_TYPE 3 -#define D_CODING_TYPE 4 /* MPEG-1 ONLY */ -/* other values are reserved */ - -/***************************************************************************** - * Prototypes - *****************************************************************************/ -VLC_API decoder_synchro_t * decoder_SynchroInit( decoder_t *, int ) VLC_USED; -VLC_API void decoder_SynchroRelease( decoder_synchro_t * ); -VLC_API void decoder_SynchroReset( decoder_synchro_t * ); -VLC_API bool decoder_SynchroChoose( decoder_synchro_t *, int, int, bool ); -VLC_API void decoder_SynchroTrash( decoder_synchro_t * ); -VLC_API void decoder_SynchroDecode( decoder_synchro_t * ); -VLC_API void decoder_SynchroEnd( decoder_synchro_t *, int, bool ); -VLC_API mtime_t decoder_SynchroDate( decoder_synchro_t * ) VLC_USED; -VLC_API void decoder_SynchroNewPicture( decoder_synchro_t *, int, int, mtime_t, mtime_t, bool ); - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_codecs.h b/source/vlc/cpp/include/vlc/plugins/vlc_codecs.h deleted file mode 100644 index c3ccbcfc8..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_codecs.h +++ /dev/null @@ -1,469 +0,0 @@ -/***************************************************************************** - * vlc_codecs.h: codec related structures needed by the demuxers and decoders - ***************************************************************************** - * Copyright (C) 1999-2001 VLC authors and VideoLAN - * $Id: a47c5830adda396a19718c4a698173d5830e21d2 $ - * - * Author: Gildas Bazin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_CODECS_H -#define VLC_CODECS_H 1 - -#include -/** - * \file - * This file defines codec related structures needed by the demuxers and decoders - */ - -/* Structures exported to the demuxers and decoders */ - -#if !(defined _GUID_DEFINED || defined GUID_DEFINED) -#define GUID_DEFINED -typedef struct _GUID -{ - uint32_t Data1; - uint16_t Data2; - uint16_t Data3; - uint8_t Data4[8]; -} GUID, *REFGUID, *LPGUID; -#endif /* GUID_DEFINED */ - -typedef GUID guid_t; - -#ifdef HAVE_ATTRIBUTE_PACKED -# define ATTR_PACKED __attribute__((__packed__)) -#elif defined(__SUNPRO_C) -# pragma pack(1) -# define ATTR_PACKED -#elif defined(__APPLE__) -# pragma pack(push, 1) -# define ATTR_PACKED -#else -# error FIXME -#endif - -#ifndef _WAVEFORMATEX_ -#define _WAVEFORMATEX_ -typedef struct -ATTR_PACKED -_WAVEFORMATEX { - uint16_t wFormatTag; - uint16_t nChannels; - uint32_t nSamplesPerSec; - uint32_t nAvgBytesPerSec; - uint16_t nBlockAlign; - uint16_t wBitsPerSample; - uint16_t cbSize; -} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX; -#endif /* _WAVEFORMATEX_ */ - -#ifndef _WAVEFORMATEXTENSIBLE_ -#define _WAVEFORMATEXTENSIBLE_ -typedef struct -ATTR_PACKED -_WAVEFORMATEXTENSIBLE { - WAVEFORMATEX Format; - union { - uint16_t wValidBitsPerSample; - uint16_t wSamplesPerBlock; - uint16_t wReserved; - } Samples; - uint32_t dwChannelMask; - GUID SubFormat; -} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE; -#endif /* _WAVEFORMATEXTENSIBLE_ */ - -#ifndef _WAVEHEADER_ -#define _WAVEHEADER_ -typedef struct -ATTR_PACKED -_WAVEHEADER { - uint32_t MainChunkID; - uint32_t Length; - uint32_t ChunkTypeID; - uint32_t SubChunkID; - uint32_t SubChunkLength; - uint16_t Format; - uint16_t Modus; - uint32_t SampleFreq; - uint32_t BytesPerSec; - uint16_t BytesPerSample; - uint16_t BitsPerSample; - uint32_t DataChunkID; - uint32_t DataLength; -} WAVEHEADER; -#endif /* _WAVEHEADER_ */ - -#ifndef _VLC_BITMAPINFOHEADER_ -#define _VLC_BITMAPINFOHEADER_ - -typedef struct -ATTR_PACKED -{ - uint32_t biSize; - uint32_t biWidth; - uint32_t biHeight; - uint16_t biPlanes; - uint16_t biBitCount; - uint32_t biCompression; - uint32_t biSizeImage; - uint32_t biXPelsPerMeter; - uint32_t biYPelsPerMeter; - uint32_t biClrUsed; - uint32_t biClrImportant; -} VLC_BITMAPINFOHEADER, *VLC_PBITMAPINFOHEADER, *VLC_LPBITMAPINFOHEADER; - -typedef struct -ATTR_PACKED -{ - VLC_BITMAPINFOHEADER bmiHeader; - int bmiColors[1]; -} VLC_BITMAPINFO, *VLC_LPBITMAPINFO; -#endif - -#ifndef _RECT32_ -#define _RECT32_ -typedef struct -ATTR_PACKED -{ - int left, top, right, bottom; -} RECT32; -#endif - -#ifndef _REFERENCE_TIME_ -#define _REFERENCE_TIME_ -typedef int64_t REFERENCE_TIME; -#endif - -#ifndef _VIDEOINFOHEADER_ -#define _VIDEOINFOHEADER_ -typedef struct -ATTR_PACKED -{ - RECT32 rcSource; - RECT32 rcTarget; - uint32_t dwBitRate; - uint32_t dwBitErrorRate; - REFERENCE_TIME AvgTimePerFrame; - VLC_BITMAPINFOHEADER bmiHeader; -} VIDEOINFOHEADER; -#endif - -#ifndef _RGBQUAD_ -#define _RGBQUAD_ -typedef struct -ATTR_PACKED -{ - uint8_t rgbBlue; - uint8_t rgbGreen; - uint8_t rgbRed; - uint8_t rgbReserved; -} RGBQUAD1; -#endif - -#ifndef _TRUECOLORINFO_ -#define _TRUECOLORINFO_ -typedef struct -ATTR_PACKED -{ - uint32_t dwBitMasks[3]; - RGBQUAD1 bmiColors[256]; -} TRUECOLORINFO; -#endif - -#ifndef _VIDEOINFO_ -#define _VIDEOINFO_ -typedef struct -ATTR_PACKED -{ - RECT32 rcSource; - RECT32 rcTarget; - uint32_t dwBitRate; - uint32_t dwBitErrorRate; - REFERENCE_TIME AvgTimePerFrame; - VLC_BITMAPINFOHEADER bmiHeader; - - union - { - RGBQUAD1 bmiColors[256]; /* Colour palette */ - uint32_t dwBitMasks[3]; /* True colour masks */ - TRUECOLORINFO TrueColorInfo; /* Both of the above */ - }; - -} VIDEOINFO; -#endif - -#if defined(__SUNPRO_C) -# pragma pack() -#elif defined(__APPLE__) && !HAVE_ATTRIBUTE_PACKED -# pragma pack(pop) -#endif - -/* WAVE format wFormatTag IDs */ -/* See http://msdn.microsoft.com/en-us/library/aa904731%28v=vs.80%29.aspx */ -#define WAVE_FORMAT_UNKNOWN 0x0000 /* Microsoft Corporation */ -#define WAVE_FORMAT_PCM 0x0001 /* Microsoft Corporation */ -#define WAVE_FORMAT_ADPCM 0x0002 /* Microsoft Corporation */ -#define WAVE_FORMAT_IEEE_FLOAT 0x0003 /* Microsoft Corporation */ -#define WAVE_FORMAT_ALAW 0x0006 /* Microsoft Corporation */ -#define WAVE_FORMAT_MULAW 0x0007 /* Microsoft Corporation */ -#define WAVE_FORMAT_DTS_MS 0x0008 /* Microsoft Corporation */ -#define WAVE_FORMAT_WMAS 0x000a /* WMA 9 Speech */ -#define WAVE_FORMAT_IMA_ADPCM 0x0011 /* Intel Corporation */ -#define WAVE_FORMAT_YAMAHA_ADPCM 0x0020 /* Yamaha */ -#define WAVE_FORMAT_TRUESPEECH 0x0022 /* TrueSpeech */ -#define WAVE_FORMAT_GSM610 0x0031 /* Microsoft Corporation */ -#define WAVE_FORMAT_MSNAUDIO 0x0032 /* Microsoft Corporation */ -#define WAVE_FORMAT_MSG723 0x0042 /* Microsoft G.723 [G723.1] */ -#define WAVE_FORMAT_G726 0x0045 /* ITU-T standard */ -#define WAVE_FORMAT_MPEG 0x0050 /* Microsoft Corporation */ -#define WAVE_FORMAT_MPEGLAYER3 0x0055 /* ISO/MPEG Layer3 Format Tag */ -#define WAVE_FORMAT_AMR_NB 0x0057 /* AMR NB */ -#define WAVE_FORMAT_AMR_WB 0x0058 /* AMR Wideband */ -#define WAVE_FORMAT_DOLBY_AC3_SPDIF 0x0092 /* Sonic Foundry */ - -#define WAVE_FORMAT_AAC 0x00FF /* */ -#define WAVE_FORMAT_AAC_MS 0xa106 /* Microsoft AAC */ -#define WAVE_FORMAT_SIPRO 0x0130 /* Sipro Lab Telecom Inc. */ - -#define WAVE_FORMAT_WMA1 0x0160 /* WMA version 1 */ -#define WAVE_FORMAT_WMA2 0x0161 /* WMA (v2) 7, 8, 9 Series */ -#define WAVE_FORMAT_WMAP 0x0162 /* WMA 9 Professional */ -#define WAVE_FORMAT_WMAL 0x0163 /* WMA 9 Lossless */ - -#define WAVE_FORMAT_ULEAD_DV_AUDIO_NTSC 0x0215 /* Ulead */ -#define WAVE_FORMAT_ULEAD_DV_AUDIO_PAL 0x0216 /* Ulead */ - -#define WAVE_FORMAT_ATRAC3 0x0270 /* Atrac3, != from MSDN doc */ -#define WAVE_FORMAT_SONY_ATRAC3 0x0272 /* Atrac3, != from MSDN doc */ - -#define WAVE_FORMAT_INDEO_AUDIO 0x0402 /* Indeo Audio Coder */ - -#define WAVE_FORMAT_AAC_2 0x1601 /* Other AAC */ -#define WAVE_FORMAT_AAC_LATM 0x1602 /* AAC/LATM */ - -#define WAVE_FORMAT_A52 0x2000 /* a52 */ -#define WAVE_FORMAT_DTS 0x2001 /* DTS */ -#define WAVE_FORMAT_FFMPEG_AAC 0x706D -#define WAVE_FORMAT_DIVIO_AAC 0x4143 /* Divio's AAC */ - -#define WAVE_FORMAT_GSM_AMR_FIXED 0x7A21 /* Fixed bitrate, no SID */ -#define WAVE_FORMAT_GSM_AMR 0x7A22 /* Variable bitrate, including SID */ - -/* Need to check these */ -#define WAVE_FORMAT_DK3 0x0061 -#define WAVE_FORMAT_DK4 0x0062 - -/* At least FFmpeg use that ID: from libavformat/riff.c ('Vo' == 0x566f) - * { CODEC_ID_VORBIS, ('V'<<8)+'o' }, //HACK/FIXME, does vorbis in WAV/AVI have an (in)official id? - */ -#define WAVE_FORMAT_VORBIS 0x566f - -/* It seems that these IDs are used by braindead & obsolete VorbisACM encoder - * (Windows only) - * A few info is available except VorbisACM source (remember, Windows only) - * (available on http://svn.xiph.org), but it seems that vo3+ at least is - * made of Vorbis data encapsulated in Ogg container... - */ -#define WAVE_FORMAT_VORB_1 0x674f -#define WAVE_FORMAT_VORB_2 0x6750 -#define WAVE_FORMAT_VORB_3 0x6751 -#define WAVE_FORMAT_VORB_1PLUS 0x676f -#define WAVE_FORMAT_VORB_2PLUS 0x6770 -#define WAVE_FORMAT_VORB_3PLUS 0x6771 - -#define WAVE_FORMAT_G723_1 0xa100 - -#define WAVE_FORMAT_SPEEX 0xa109 /* Speex audio */ -#define WAVE_FORMAT_FLAC 0xf1ac /* Xiph Flac */ - -#if !defined(WAVE_FORMAT_EXTENSIBLE) - #define WAVE_FORMAT_EXTENSIBLE 0xFFFE /* Microsoft */ -#endif - -/* GUID SubFormat IDs */ -/* We need both b/c const variables are not compile-time constants in C, giving - * us an error if we use the const GUID in an enum */ - -#ifndef _KSDATAFORMAT_SUBTYPE_PCM_ -#define _KSDATAFORMAT_SUBTYPE_PCM_ {0x00000001, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}} -static const GUID VLC_KSDATAFORMAT_SUBTYPE_PCM = {0xE923AABF, 0xCB58, 0x4471, {0xA1, 0x19, 0xFF, 0xFA, 0x01, 0xE4, 0xCE, 0x62}}; -#define KSDATAFORMAT_SUBTYPE_PCM VLC_KSDATAFORMAT_SUBTYPE_PCM -#endif - -#ifndef _KSDATAFORMAT_SUBTYPE_IEEE_FLOAT_ -#define _KSDATAFORMAT_SUBTYPE_IEEE_FLOAT_ {0x00000003, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}} -static const GUID VLC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT = {0x00000003, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}}; -#define KSDATAFORMAT_SUBTYPE_IEEE_FLOAT VLC_KSDATAFORMAT_SUBTYPE_PCM -#endif - - -#ifndef _KSDATAFORMAT_SUBTYPE_UNKNOWN_ -#define _KSDATAFORMAT_SUBTYPE_UNKNOWN_ {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}} -static const GUID VLC_KSDATAFORMAT_SUBTYPE_UNKNOWN = {0x00000000, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; -#define KSDATAFORMAT_SUBTYPE_UNKNOWN VLC_KSDATAFORMAT_SUBTYPE_UNKNOWN -#endif - -/* Microsoft speaker definitions */ -#define WAVE_SPEAKER_FRONT_LEFT 0x1 -#define WAVE_SPEAKER_FRONT_RIGHT 0x2 -#define WAVE_SPEAKER_FRONT_CENTER 0x4 -#define WAVE_SPEAKER_LOW_FREQUENCY 0x8 -#define WAVE_SPEAKER_BACK_LEFT 0x10 -#define WAVE_SPEAKER_BACK_RIGHT 0x20 -#define WAVE_SPEAKER_FRONT_LEFT_OF_CENTER 0x40 -#define WAVE_SPEAKER_FRONT_RIGHT_OF_CENTER 0x80 -#define WAVE_SPEAKER_BACK_CENTER 0x100 -#define WAVE_SPEAKER_SIDE_LEFT 0x200 -#define WAVE_SPEAKER_SIDE_RIGHT 0x400 -#define WAVE_SPEAKER_TOP_CENTER 0x800 -#define WAVE_SPEAKER_TOP_FRONT_LEFT 0x1000 -#define WAVE_SPEAKER_TOP_FRONT_CENTER 0x2000 -#define WAVE_SPEAKER_TOP_FRONT_RIGHT 0x4000 -#define WAVE_SPEAKER_TOP_BACK_LEFT 0x8000 -#define WAVE_SPEAKER_TOP_BACK_CENTER 0x10000 -#define WAVE_SPEAKER_TOP_BACK_RIGHT 0x20000 -#define WAVE_SPEAKER_RESERVED 0x80000000 - -static const struct -{ - uint16_t i_tag; - vlc_fourcc_t i_fourcc; - const char *psz_name; -} -wave_format_tag_to_fourcc[] = -{ - { WAVE_FORMAT_PCM, VLC_FOURCC( 'a', 'r', 'a', 'w' ), "Raw audio" }, - { WAVE_FORMAT_PCM, VLC_CODEC_S8, "PCM S8 audio" }, - { WAVE_FORMAT_PCM, VLC_CODEC_S16L, "PCM S16L audio" }, - { WAVE_FORMAT_PCM, VLC_CODEC_S24L, "PCM S24L audio" }, - { WAVE_FORMAT_PCM, VLC_CODEC_S32L, "PCM S32L audio" }, - { WAVE_FORMAT_ADPCM, VLC_CODEC_ADPCM_MS, "ADPCM" }, - { WAVE_FORMAT_IEEE_FLOAT, VLC_FOURCC( 'a', 'f', 'l', 't' ), "IEEE Float audio" }, - { WAVE_FORMAT_IEEE_FLOAT, VLC_CODEC_F32L, "PCM 32 (Float) audio" }, - { WAVE_FORMAT_IEEE_FLOAT, VLC_CODEC_F64L, "PCM 64 (Float) audio" }, - { WAVE_FORMAT_ALAW, VLC_CODEC_ALAW, "A-Law" }, - { WAVE_FORMAT_MULAW, VLC_CODEC_MULAW, "Mu-Law" }, - { WAVE_FORMAT_IMA_ADPCM, VLC_CODEC_ADPCM_IMA_WAV, "Ima-ADPCM" }, - { WAVE_FORMAT_YAMAHA_ADPCM, VLC_CODEC_ADPCM_YAMAHA, "Yamaha ADPCM" }, - { WAVE_FORMAT_TRUESPEECH, VLC_CODEC_TRUESPEECH, "Truespeech" }, - { WAVE_FORMAT_GSM610, VLC_CODEC_GSM_MS, "Microsoft WAV GSM" }, - { WAVE_FORMAT_G726, VLC_CODEC_ADPCM_G726, "G.726 ADPCM" }, - { WAVE_FORMAT_G723_1, VLC_CODEC_G723_1, "G.723.1" }, - { WAVE_FORMAT_MSG723, VLC_CODEC_G723_1, "Microsoft G.723 [G723.1]" }, - { WAVE_FORMAT_MPEGLAYER3, VLC_CODEC_MPGA, "Mpeg Audio" }, - { WAVE_FORMAT_MPEG, VLC_CODEC_MPGA, "Mpeg Audio" }, - { WAVE_FORMAT_AMR_NB, VLC_CODEC_AMR_NB, "AMR NB" }, - { WAVE_FORMAT_AMR_WB, VLC_CODEC_AMR_WB, "AMR Wideband" }, - { WAVE_FORMAT_SIPRO, VLC_CODEC_SIPR, "Sipr Audio" }, - { WAVE_FORMAT_A52, VLC_CODEC_A52, "A/52" }, - { WAVE_FORMAT_WMA1, VLC_CODEC_WMA1, "Window Media Audio v1" }, - { WAVE_FORMAT_WMA2, VLC_CODEC_WMA2, "Window Media Audio v2" }, - { WAVE_FORMAT_WMAP, VLC_CODEC_WMAP, "Window Media Audio 9 Professional" }, - { WAVE_FORMAT_WMAL, VLC_CODEC_WMAL, "Window Media Audio 9 Lossless" }, - { WAVE_FORMAT_WMAS, VLC_CODEC_WMAS, "Window Media Audio 9 Speech" }, - { WAVE_FORMAT_ATRAC3, VLC_CODEC_ATRAC3, "Sony Atrac3" }, - { WAVE_FORMAT_SONY_ATRAC3,VLC_CODEC_ATRAC3, "Sony Atrac3" }, - { WAVE_FORMAT_DK3, VLC_FOURCC( 'm', 's', 0x00,0x61), "Duck DK3" }, - { WAVE_FORMAT_DK4, VLC_FOURCC( 'm', 's', 0x00,0x62), "Duck DK4" }, - { WAVE_FORMAT_DTS, VLC_CODEC_DTS, "DTS Coherent Acoustics" }, - { WAVE_FORMAT_DTS_MS, VLC_CODEC_DTS, "DTS Coherent Acoustics" }, - { WAVE_FORMAT_DIVIO_AAC, VLC_CODEC_MP4A, "MPEG-4 Audio (Divio)" }, - { WAVE_FORMAT_AAC, VLC_CODEC_MP4A, "MPEG-4 Audio" }, - { WAVE_FORMAT_AAC_2, VLC_CODEC_MP4A, "MPEG-4 Audio" }, - { WAVE_FORMAT_AAC_LATM, VLC_CODEC_MP4A, "MPEG-4 Audio" }, - { WAVE_FORMAT_FFMPEG_AAC, VLC_CODEC_MP4A, "MPEG-4 Audio" }, - { WAVE_FORMAT_AAC_MS, VLC_CODEC_MP4A, "MPEG-4 Audio" }, - { WAVE_FORMAT_VORBIS, VLC_CODEC_VORBIS, "Vorbis Audio" }, - { WAVE_FORMAT_VORB_1, VLC_FOURCC( 'v', 'o', 'r', '1' ), "Vorbis 1 Audio" }, - { WAVE_FORMAT_VORB_1PLUS, VLC_FOURCC( 'v', 'o', '1', '+' ), "Vorbis 1+ Audio" }, - { WAVE_FORMAT_VORB_2, VLC_FOURCC( 'v', 'o', 'r', '2' ), "Vorbis 2 Audio" }, - { WAVE_FORMAT_VORB_2PLUS, VLC_FOURCC( 'v', 'o', '2', '+' ), "Vorbis 2+ Audio" }, - { WAVE_FORMAT_VORB_3, VLC_FOURCC( 'v', 'o', 'r', '3' ), "Vorbis 3 Audio" }, - { WAVE_FORMAT_VORB_3PLUS, VLC_FOURCC( 'v', 'o', '3', '+' ), "Vorbis 3+ Audio" }, - { WAVE_FORMAT_SPEEX, VLC_CODEC_SPEEX, "Speex Audio" }, - { WAVE_FORMAT_FLAC, VLC_CODEC_FLAC, "FLAC Audio" }, - { WAVE_FORMAT_GSM_AMR_FIXED, VLC_CODEC_AMR_NB, "GSM-AMR Audio CBR, no SID" }, - { WAVE_FORMAT_GSM_AMR, VLC_CODEC_AMR_NB, "GSM-AMR Audio VBR, SID" }, - { WAVE_FORMAT_ULEAD_DV_AUDIO_NTSC, VLC_CODEC_ULEAD_DV_AUDIO_NTSC, "Ulead DV audio NTSC" }, - { WAVE_FORMAT_ULEAD_DV_AUDIO_PAL, VLC_CODEC_ULEAD_DV_AUDIO_PAL, "Ulead DV audio PAL" }, - { WAVE_FORMAT_INDEO_AUDIO, VLC_CODEC_INDEO_AUDIO, "Indeo Audio Coder" }, - { WAVE_FORMAT_UNKNOWN, VLC_FOURCC( 'u', 'n', 'd', 'f' ), "Unknown" } -}; - -static inline void wf_tag_to_fourcc( uint16_t i_tag, vlc_fourcc_t *fcc, - const char **ppsz_name ) -{ - int i; - for( i = 0; wave_format_tag_to_fourcc[i].i_tag != 0; i++ ) - { - if( wave_format_tag_to_fourcc[i].i_tag == i_tag ) break; - } - if( fcc ) *fcc = wave_format_tag_to_fourcc[i].i_fourcc; - if( ppsz_name ) *ppsz_name = wave_format_tag_to_fourcc[i].psz_name; -} - -static inline void fourcc_to_wf_tag( vlc_fourcc_t fcc, uint16_t *pi_tag ) -{ - int i; - for( i = 0; wave_format_tag_to_fourcc[i].i_tag != 0; i++ ) - { - if( wave_format_tag_to_fourcc[i].i_fourcc == fcc ) break; - } - if( pi_tag ) *pi_tag = wave_format_tag_to_fourcc[i].i_tag; -} - -/* If wFormatTag is WAVEFORMATEXTENSIBLE, we must look at the SubFormat tag - * to determine the actual format. Microsoft has stopped giving out wFormatTag - * assignments in lieu of letting 3rd parties generate their own GUIDs - */ -static const struct -{ - GUID guid_tag; - vlc_fourcc_t i_fourcc; - const char *psz_name; -} -sub_format_tag_to_fourcc[] = -{ - { _KSDATAFORMAT_SUBTYPE_PCM_, VLC_FOURCC( 'a', 'r', 'a', 'w' ), "PCM" }, - { _KSDATAFORMAT_SUBTYPE_IEEE_FLOAT_, VLC_FOURCC( 'a', 'f', 'l', 't' ), "Float PCM" }, - { _KSDATAFORMAT_SUBTYPE_UNKNOWN_, VLC_FOURCC( 'u', 'n', 'd', 'f' ), "Unknown" } -}; - -/* compares two GUIDs, returns 1 if identical, 0 otherwise */ -static inline int guidcmp( const GUID *s1, const GUID *s2 ) -{ - return( s1->Data1 == s2->Data1 && s1->Data2 == s2->Data2 && - s1->Data3 == s2->Data3 && !memcmp( s1->Data4, s2->Data4, 8 ) ); -} - -static inline void sf_tag_to_fourcc( GUID *guid_tag, - vlc_fourcc_t *fcc, const char **ppsz_name ) -{ - int i; - - for( i = 0; !guidcmp( &sub_format_tag_to_fourcc[i].guid_tag, - &KSDATAFORMAT_SUBTYPE_UNKNOWN ); i++ ) - { - if( guidcmp( &sub_format_tag_to_fourcc[i].guid_tag, guid_tag ) ) break; - } - if( fcc ) *fcc = sub_format_tag_to_fourcc[i].i_fourcc; - if( ppsz_name ) *ppsz_name = sub_format_tag_to_fourcc[i].psz_name; -} - -#endif /* "codecs.h" */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_common.h b/source/vlc/cpp/include/vlc/plugins/vlc_common.h deleted file mode 100644 index 6116f8e53..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_common.h +++ /dev/null @@ -1,927 +0,0 @@ -/***************************************************************************** - * vlc_common.h: common definitions - * Collection of useful common types and macros definitions - ***************************************************************************** - * Copyright (C) 1998-2011 VLC authors and VideoLAN - * - * Authors: Samuel Hocevar - * Vincent Seguin - * Gildas Bazin - * Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file is a collection of common definitions and types - */ - -#ifndef VLC_COMMON_H -# define VLC_COMMON_H 1 - -/***************************************************************************** - * Required vlc headers - *****************************************************************************/ -#include "vlc_config.h" - -/***************************************************************************** - * Required system headers - *****************************************************************************/ -#include -#include - -#include -#include -#include -#include - -#ifndef __cplusplus -# include -#endif - -/***************************************************************************** - * Compilers definitions - *****************************************************************************/ -/* Helper for GCC version checks */ -#ifdef __GNUC__ -# define VLC_GCC_VERSION(maj,min) \ - ((__GNUC__ > (maj)) || (__GNUC__ == (maj) && __GNUC_MINOR__ >= (min))) -#else -# define VLC_GCC_VERSION(maj,min) (0) -#endif - -/* Try to fix format strings for all versions of mingw and mingw64 */ -#if defined( _WIN32 ) && defined( __USE_MINGW_ANSI_STDIO ) - #undef PRId64 - #define PRId64 "lld" - #undef PRIi64 - #define PRIi64 "lli" - #undef PRIu64 - #define PRIu64 "llu" - #undef PRIo64 - #define PRIo64 "llo" - #undef PRIx64 - #define PRIx64 "llx" - #define snprintf __mingw_snprintf - #define vsnprintf __mingw_vsnprintf - #define swprintf _snwprintf -#endif - -/* Function attributes for compiler warnings */ -#ifdef __GNUC__ -# define VLC_DEPRECATED __attribute__((deprecated)) - -# if defined( _WIN32 ) && VLC_GCC_VERSION(4,4) -# define VLC_FORMAT(x,y) __attribute__ ((format(gnu_printf,x,y))) -# else -# define VLC_FORMAT(x,y) __attribute__ ((format(printf,x,y))) -# endif -# define VLC_FORMAT_ARG(x) __attribute__ ((format_arg(x))) - -# define VLC_MALLOC __attribute__ ((malloc)) -# define VLC_NORETURN __attribute__ ((noreturn)) - -# if VLC_GCC_VERSION(3,4) -# define VLC_USED __attribute__ ((warn_unused_result)) -# else -# define VLC_USED -# endif - -#else -# define VLC_DEPRECATED -# define VLC_FORMAT(x,y) -# define VLC_FORMAT_ARG(x) -# define VLC_MALLOC -# define VLC_NORETURN -# define VLC_USED -#endif - - -/* Branch prediction */ -#ifdef __GNUC__ -# define likely(p) __builtin_expect(!!(p), 1) -# define unlikely(p) __builtin_expect(!!(p), 0) -#else -# define likely(p) (!!(p)) -# define unlikely(p) (!!(p)) -#endif - -/* Linkage */ -#ifdef __cplusplus -# define VLC_EXTERN extern "C" -#else -# define VLC_EXTERN -#endif - -#if defined (_WIN32) && defined (DLL_EXPORT) -# define VLC_EXPORT __declspec(dllexport) -#elif VLC_GCC_VERSION(4,0) -# define VLC_EXPORT __attribute__((visibility("default"))) -#else -# define VLC_EXPORT -#endif - -#define VLC_API VLC_EXTERN VLC_EXPORT - - -/***************************************************************************** - * Basic types definitions - *****************************************************************************/ -/** - * High precision date or time interval - * - * Store a high precision date or time interval. The maximum precision is the - * microsecond, and a 64 bits integer is used to avoid overflows (maximum - * time interval is then 292271 years, which should be long enough for any - * video). Dates are stored as microseconds since a common date (usually the - * epoch). Note that date and time intervals can be manipulated using regular - * arithmetic operators, and that no special functions are required. - */ -typedef int64_t mtime_t; - -/** - * The vlc_fourcc_t type. - * - * See http://www.webartz.com/fourcc/ for a very detailed list. - */ -typedef uint32_t vlc_fourcc_t; - -#ifdef WORDS_BIGENDIAN -# define VLC_FOURCC( a, b, c, d ) \ - ( ((uint32_t)d) | ( ((uint32_t)c) << 8 ) \ - | ( ((uint32_t)b) << 16 ) | ( ((uint32_t)a) << 24 ) ) -# define VLC_TWOCC( a, b ) \ - ( (uint16_t)(b) | ( (uint16_t)(a) << 8 ) ) - -#else -# define VLC_FOURCC( a, b, c, d ) \ - ( ((uint32_t)a) | ( ((uint32_t)b) << 8 ) \ - | ( ((uint32_t)c) << 16 ) | ( ((uint32_t)d) << 24 ) ) -# define VLC_TWOCC( a, b ) \ - ( (uint16_t)(a) | ( (uint16_t)(b) << 8 ) ) - -#endif - -/** - * Translate a vlc_fourcc into its string representation. This function - * assumes there is enough room in psz_fourcc to store 4 characters in. - * - * \param fcc a vlc_fourcc_t - * \param psz_fourcc string to store string representation of vlc_fourcc in - */ -static inline void vlc_fourcc_to_char( vlc_fourcc_t fcc, char *psz_fourcc ) -{ - memcpy( psz_fourcc, &fcc, 4 ); -} - -#define vlc_fourcc_to_char( a, b ) \ - vlc_fourcc_to_char( (vlc_fourcc_t)(a), (char *)(b) ) - -/***************************************************************************** - * Classes declaration - *****************************************************************************/ - -/* Internal types */ -typedef struct vlc_list_t vlc_list_t; -typedef struct vlc_object_t vlc_object_t; -typedef struct libvlc_int_t libvlc_int_t; -typedef struct date_t date_t; - -/* Playlist */ - -/* FIXME */ -/** - * Playlist commands - */ -typedef enum { - PLAYLIST_PLAY, /**< No arg. res=can fail*/ - PLAYLIST_VIEWPLAY, /**< arg1= playlist_item_t*,*/ - /** arg2 = playlist_item_t* , res=can fail */ - PLAYLIST_PAUSE, /**< No arg res=can fail*/ - PLAYLIST_STOP, /**< No arg res=can fail*/ - PLAYLIST_SKIP, /**< arg1=int, res=can fail*/ -} playlist_command_t; - - -typedef struct playlist_t playlist_t; -typedef struct playlist_item_t playlist_item_t; -typedef struct services_discovery_t services_discovery_t; -typedef struct services_discovery_sys_t services_discovery_sys_t; -typedef struct playlist_add_t playlist_add_t; - -/* Modules */ -typedef struct module_t module_t; -typedef struct module_config_t module_config_t; - -typedef struct config_category_t config_category_t; - -/* Input */ -typedef struct input_thread_t input_thread_t; -typedef struct input_item_t input_item_t; -typedef struct input_item_node_t input_item_node_t; -typedef struct access_t access_t; -typedef struct access_sys_t access_sys_t; -typedef struct stream_t stream_t; -typedef struct stream_sys_t stream_sys_t; -typedef struct demux_t demux_t; -typedef struct demux_sys_t demux_sys_t; -typedef struct es_out_t es_out_t; -typedef struct es_out_id_t es_out_id_t; -typedef struct es_out_sys_t es_out_sys_t; -typedef struct seekpoint_t seekpoint_t; -typedef struct info_t info_t; -typedef struct info_category_t info_category_t; -typedef struct input_attachment_t input_attachment_t; - -/* Format */ -typedef struct audio_format_t audio_format_t; -typedef struct video_format_t video_format_t; -typedef struct subs_format_t subs_format_t; -typedef struct es_format_t es_format_t; -typedef struct video_palette_t video_palette_t; - -/* Audio */ -typedef struct audio_output audio_output_t; -typedef struct aout_sys_t aout_sys_t; -typedef audio_format_t audio_sample_format_t; - -/* Video */ -typedef struct vout_thread_t vout_thread_t; - -typedef video_format_t video_frame_format_t; -typedef struct picture_t picture_t; -typedef struct picture_sys_t picture_sys_t; - -/* Subpictures */ -typedef struct spu_t spu_t; -typedef struct subpicture_t subpicture_t; -typedef struct subpicture_region_t subpicture_region_t; - -typedef struct image_handler_t image_handler_t; - -/* Stream output */ -typedef struct sout_instance_t sout_instance_t; - -typedef struct sout_input_t sout_input_t; -typedef struct sout_packetizer_input_t sout_packetizer_input_t; - -typedef struct sout_access_out_t sout_access_out_t; -typedef struct sout_access_out_sys_t sout_access_out_sys_t; - -typedef struct sout_mux_t sout_mux_t; -typedef struct sout_mux_sys_t sout_mux_sys_t; - -typedef struct sout_stream_t sout_stream_t; -typedef struct sout_stream_sys_t sout_stream_sys_t; - -typedef struct config_chain_t config_chain_t; -typedef struct session_descriptor_t session_descriptor_t; - -/* Decoders */ -typedef struct decoder_t decoder_t; -typedef struct decoder_sys_t decoder_sys_t; -typedef struct decoder_synchro_t decoder_synchro_t; - -/* Encoders */ -typedef struct encoder_t encoder_t; -typedef struct encoder_sys_t encoder_sys_t; - -/* Filters */ -typedef struct filter_t filter_t; -typedef struct filter_sys_t filter_sys_t; - -/* Network */ -typedef struct virtual_socket_t v_socket_t; -typedef struct vlc_url_t vlc_url_t; - -/* Misc */ -typedef struct iso639_lang_t iso639_lang_t; - -/* block */ -typedef struct block_t block_t; -typedef struct block_fifo_t block_fifo_t; - -/* Hashing */ -typedef struct md5_s md5_t; - -/* XML */ -typedef struct xml_t xml_t; -typedef struct xml_sys_t xml_sys_t; -typedef struct xml_reader_t xml_reader_t; -typedef struct xml_reader_sys_t xml_reader_sys_t; - -/* vod server */ -typedef struct vod_t vod_t; -typedef struct vod_sys_t vod_sys_t; -typedef struct vod_media_t vod_media_t; - -/* VLM */ -typedef struct vlm_t vlm_t; -typedef struct vlm_message_t vlm_message_t; - -/* misc */ -typedef struct vlc_meta_t vlc_meta_t; -typedef struct input_stats_t input_stats_t; - -/* Update */ -typedef struct update_t update_t; - -/** - * VLC value structure - */ -typedef union -{ - int64_t i_int; - bool b_bool; - float f_float; - char * psz_string; - void * p_address; - vlc_object_t * p_object; - vlc_list_t * p_list; - mtime_t i_time; - struct { int32_t x; int32_t y; } coords; - -} vlc_value_t; - -/** - * VLC list structure - */ -struct vlc_list_t -{ - int i_count; - vlc_value_t * p_values; - int * pi_types; - -}; - -/***************************************************************************** - * Error values (shouldn't be exposed) - *****************************************************************************/ -#define VLC_SUCCESS (-0) /**< No error */ -#define VLC_EGENERIC (-1) /**< Unspecified error */ -#define VLC_ENOMEM (-2) /**< Not enough memory */ -#define VLC_ETIMEOUT (-3) /**< Timeout */ -#define VLC_ENOMOD (-4) /**< Module not found */ -#define VLC_ENOOBJ (-5) /**< Object not found */ -#define VLC_ENOVAR (-6) /**< Variable not found */ -#define VLC_EBADVAR (-7) /**< Bad variable value */ -#define VLC_ENOITEM (-8) /**< Item not found */ - -/***************************************************************************** - * Variable callbacks - *****************************************************************************/ -typedef int ( * vlc_callback_t ) ( vlc_object_t *, /* variable's object */ - char const *, /* variable name */ - vlc_value_t, /* old value */ - vlc_value_t, /* new value */ - void * ); /* callback data */ - -/***************************************************************************** - * OS-specific headers and thread types - *****************************************************************************/ -#if defined( _WIN32 ) -# include -# ifndef PATH_MAX -# define PATH_MAX MAX_PATH -# endif -# include -#endif - -#ifdef __SYMBIAN32__ - #include -#endif - -#ifdef __OS2__ -# define OS2EMX_PLAIN_CHAR -# define INCL_BASE -# define INCL_PM -# include -#endif - -#include "vlc_mtime.h" -#include "vlc_threads.h" - -/***************************************************************************** - * Common structure members - *****************************************************************************/ - -/* VLC_COMMON_MEMBERS : members common to all basic vlc objects */ -#define VLC_COMMON_MEMBERS \ -/** \name VLC_COMMON_MEMBERS \ - * these members are common for all vlc objects \ - */ \ -/**@{*/ \ - const char *psz_object_type; \ - \ - /* Messages header */ \ - char *psz_header; \ - int i_flags; \ - \ - /* Object properties */ \ - bool b_force; /**< set by the outside (eg. module_need()) */ \ - \ - /* Stuff related to the libvlc structure */ \ - libvlc_int_t *p_libvlc; /**< (root of all evil) - 1 */ \ - \ - vlc_object_t * p_parent; /**< our parent */ \ - \ -/**@}*/ \ - -/* VLC_OBJECT: attempt at doing a clever cast */ -#if VLC_GCC_VERSION(4,0) -# ifndef __cplusplus -# define VLC_OBJECT( x ) \ - __builtin_choose_expr( \ - __builtin_offsetof(__typeof__(*(x)), psz_object_type), \ - (void)0 /* screw you */, \ - (vlc_object_t *)(x)) -# else -# define VLC_OBJECT( x ) \ - ((vlc_object_t *)(x) \ - + 0 * __builtin_offsetof(__typeof__(*(x)), psz_object_type)) -# endif -#else -# define VLC_OBJECT( x ) ((vlc_object_t *)(x)) -#endif - -/***************************************************************************** - * Macros and inline functions - *****************************************************************************/ - -/* CEIL: division with round to nearest greater integer */ -#define CEIL(n, d) ( ((n) / (d)) + ( ((n) % (d)) ? 1 : 0) ) - -/* PAD: PAD(n, d) = CEIL(n ,d) * d */ -#define PAD(n, d) ( ((n) % (d)) ? ((((n) / (d)) + 1) * (d)) : (n) ) - -/* __MAX and __MIN: self explanatory */ -#ifndef __MAX -# define __MAX(a, b) ( ((a) > (b)) ? (a) : (b) ) -#endif -#ifndef __MIN -# define __MIN(a, b) ( ((a) < (b)) ? (a) : (b) ) -#endif - -/* clip v in [min, max] */ -#define VLC_CLIP(v, min, max) __MIN(__MAX((v), (min)), (max)) - -VLC_USED -static inline int64_t GCD ( int64_t a, int64_t b ) -{ - while( b ) - { - int64_t c = a % b; - a = b; - b = c; - } - return a; -} - -/* function imported from libavutil/common.h */ -VLC_USED -static inline uint8_t clip_uint8_vlc( int32_t a ) -{ - if( a&(~255) ) return (-a)>>31; - else return a; -} - -/** Count leading zeroes */ -VLC_USED -static inline unsigned clz (unsigned x) -{ -#if VLC_GCC_VERSION(3,4) - return __builtin_clz (x); -#else - unsigned i = sizeof (x) * 8; - - while (x) - { - x >>= 1; - i--; - } - return i; -#endif -} - -#define clz8( x ) (clz(x) - ((sizeof(unsigned) - sizeof (uint8_t)) * 8)) -#define clz16( x ) (clz(x) - ((sizeof(unsigned) - sizeof (uint16_t)) * 8)) -/* XXX: this assumes that int is 32-bits or more */ -#define clz32( x ) (clz(x) - ((sizeof(unsigned) - sizeof (uint32_t)) * 8)) - -/** Count trailing zeroes */ -VLC_USED -static inline unsigned ctz (unsigned x) -{ -#if VLC_GCC_VERSION(3,4) - return __builtin_ctz (x); -#else - unsigned i = sizeof (x) * 8; - - while (x) - { - x <<= 1; - i--; - } - return i; -#endif -} - -/** Bit weight */ -VLC_USED -static inline unsigned popcount (unsigned x) -{ -#if VLC_GCC_VERSION(3,4) - return __builtin_popcount (x); -#else - unsigned count = 0; - while (x) - { - count += x & 1; - x = x >> 1; - } - return count; -#endif -} - -VLC_USED -static inline unsigned parity (unsigned x) -{ -#if VLC_GCC_VERSION(3,4) - return __builtin_parity (x); -#else - for (unsigned i = 4 * sizeof (x); i > 0; i /= 2) - x ^= x >> i; - return x & 1; -#endif -} - -#ifdef __OS2__ -# undef bswap16 -# undef bswap32 -# undef bswap64 -#endif - -/** Byte swap (16 bits) */ -VLC_USED -static inline uint16_t bswap16 (uint16_t x) -{ - return (x << 8) | (x >> 8); -} - -/** Byte swap (32 bits) */ -VLC_USED -static inline uint32_t bswap32 (uint32_t x) -{ -#if VLC_GCC_VERSION(4,3) || defined(__clang__) - return __builtin_bswap32 (x); -#else - return ((x & 0x000000FF) << 24) - | ((x & 0x0000FF00) << 8) - | ((x & 0x00FF0000) >> 8) - | ((x & 0xFF000000) >> 24); -#endif -} - -/** Byte swap (64 bits) */ -VLC_USED -static inline uint64_t bswap64 (uint64_t x) -{ -#if VLC_GCC_VERSION(4,3) || defined(__clang__) - return __builtin_bswap64 (x); -#elif !defined (__cplusplus) - return ((x & 0x00000000000000FF) << 56) - | ((x & 0x000000000000FF00) << 40) - | ((x & 0x0000000000FF0000) << 24) - | ((x & 0x00000000FF000000) << 8) - | ((x & 0x000000FF00000000) >> 8) - | ((x & 0x0000FF0000000000) >> 24) - | ((x & 0x00FF000000000000) >> 40) - | ((x & 0xFF00000000000000) >> 56); -#else - return ((x & 0x00000000000000FFULL) << 56) - | ((x & 0x000000000000FF00ULL) << 40) - | ((x & 0x0000000000FF0000ULL) << 24) - | ((x & 0x00000000FF000000ULL) << 8) - | ((x & 0x000000FF00000000ULL) >> 8) - | ((x & 0x0000FF0000000000ULL) >> 24) - | ((x & 0x00FF000000000000ULL) >> 40) - | ((x & 0xFF00000000000000ULL) >> 56); -#endif -} - - -/* Free and set set the variable to NULL */ -#define FREENULL(a) do { free( a ); a = NULL; } while(0) - -#define EMPTY_STR(str) (!str || !*str) - -VLC_API char const * vlc_error( int ) VLC_USED; - -#include - -/* MSB (big endian)/LSB (little endian) conversions - network order is always - * MSB, and should be used for both network communications and files. */ - -#ifdef WORDS_BIGENDIAN -# define hton16(i) ((uint16_t)(i)) -# define hton32(i) ((uint32_t)(i)) -# define hton64(i) ((uint64_t)(i)) -#else -# define hton16(i) bswap16(i) -# define hton32(i) bswap32(i) -# define hton64(i) bswap64(i) -#endif -#define ntoh16(i) hton16(i) -#define ntoh32(i) hton32(i) -#define ntoh64(i) hton64(i) - -/** Reads 16 bits in network byte order */ -VLC_USED -static inline uint16_t U16_AT (const void *p) -{ - uint16_t x; - - memcpy (&x, p, sizeof (x)); - return ntoh16 (x); -} - -/** Reads 32 bits in network byte order */ -VLC_USED -static inline uint32_t U32_AT (const void *p) -{ - uint32_t x; - - memcpy (&x, p, sizeof (x)); - return ntoh32 (x); -} - -/** Reads 64 bits in network byte order */ -VLC_USED -static inline uint64_t U64_AT (const void *p) -{ - uint64_t x; - - memcpy (&x, p, sizeof (x)); - return ntoh64 (x); -} - -#define GetWBE(p) U16_AT(p) -#define GetDWBE(p) U32_AT(p) -#define GetQWBE(p) U64_AT(p) - -/** Reads 16 bits in little-endian order */ -VLC_USED -static inline uint16_t GetWLE (const void *p) -{ - uint16_t x; - - memcpy (&x, p, sizeof (x)); -#ifdef WORDS_BIGENDIAN - x = bswap16 (x); -#endif - return x; -} - -/** Reads 32 bits in little-endian order */ -VLC_USED -static inline uint32_t GetDWLE (const void *p) -{ - uint32_t x; - - memcpy (&x, p, sizeof (x)); -#ifdef WORDS_BIGENDIAN - x = bswap32 (x); -#endif - return x; -} - -/** Reads 64 bits in little-endian order */ -VLC_USED -static inline uint64_t GetQWLE (const void *p) -{ - uint64_t x; - - memcpy (&x, p, sizeof (x)); -#ifdef WORDS_BIGENDIAN - x = bswap64 (x); -#endif - return x; -} - -/** Writes 16 bits in network byte order */ -static inline void SetWBE (void *p, uint16_t w) -{ - w = hton16 (w); - memcpy (p, &w, sizeof (w)); -} - -/** Writes 32 bits in network byte order */ -static inline void SetDWBE (void *p, uint32_t dw) -{ - dw = hton32 (dw); - memcpy (p, &dw, sizeof (dw)); -} - -/** Writes 64 bits in network byte order */ -static inline void SetQWBE (void *p, uint64_t qw) -{ - qw = hton64 (qw); - memcpy (p, &qw, sizeof (qw)); -} - -/** Writes 16 bits in little endian order */ -static inline void SetWLE (void *p, uint16_t w) -{ -#ifdef WORDS_BIGENDIAN - w = bswap16 (w); -#endif - memcpy (p, &w, sizeof (w)); -} - -/** Writes 32 bits in little endian order */ -static inline void SetDWLE (void *p, uint32_t dw) -{ -#ifdef WORDS_BIGENDIAN - dw = bswap32 (dw); -#endif - memcpy (p, &dw, sizeof (dw)); -} - -/** Writes 64 bits in little endian order */ -static inline void SetQWLE (void *p, uint64_t qw) -{ -#ifdef WORDS_BIGENDIAN - qw = bswap64 (qw); -#endif - memcpy (p, &qw, sizeof (qw)); -} - -/* */ -#define VLC_UNUSED(x) (void)(x) - -/* Stuff defined in src/extras/libc.c */ - -#if defined(_WIN32) -/* several type definitions */ -# if defined( __MINGW32__ ) -# if !defined( _OFF_T_ ) - typedef long long _off_t; - typedef _off_t off_t; -# define _OFF_T_ -# else -# ifdef off_t -# undef off_t -# endif -# define off_t long long -# endif -# endif - -# ifndef O_NONBLOCK -# define O_NONBLOCK 0 -# endif - -# include -#endif /* _WIN32 */ - -VLC_API bool vlc_ureduce( unsigned *, unsigned *, uint64_t, uint64_t, uint64_t ); - -/* Aligned memory allocator */ -#ifdef __APPLE__ -#include -#endif - -#ifdef _WIN32 -# define vlc_memalign(align, size) (__mingw_aligned_malloc(size, align)) -# define vlc_free(base) (__mingw_aligned_free(base)) -#elif defined(__APPLE__) && !defined(MAC_OS_X_VERSION_10_6) -static inline void *vlc_memalign(size_t align, size_t size) -{ - long diff; - void *ptr; - - ptr = malloc(size+align); - if(!ptr) - return ptr; - diff = ((-(long)ptr - 1)&(align-1)) + 1; - ptr = (char*)ptr + diff; - ((char*)ptr)[-1]= diff; - return ptr; -} - -static void vlc_free(void *ptr) -{ - if (ptr) - free((char*)ptr - ((char*)ptr)[-1]); -} -#else -static inline void *vlc_memalign(size_t align, size_t size) -{ - void *base; - if (unlikely(posix_memalign(&base, align, size))) - base = NULL; - return base; -} -# define vlc_free(base) free(base) -#endif - -VLC_API void vlc_tdestroy( void *, void (*)(void *) ); - -/***************************************************************************** - * I18n stuff - *****************************************************************************/ -VLC_API char *vlc_gettext( const char *msgid ) VLC_FORMAT_ARG(1); -VLC_API char *vlc_ngettext( const char *s, const char *p, unsigned long n ) VLC_FORMAT_ARG(1) VLC_FORMAT_ARG(2); - -#define vlc_pgettext( ctx, id ) \ - vlc_pgettext_aux( ctx "\004" id, id ) - -VLC_FORMAT_ARG(2) -static inline const char *vlc_pgettext_aux( const char *ctx, const char *id ) -{ - const char *tr = vlc_gettext( ctx ); - return (tr == ctx) ? id : tr; -} - -/***************************************************************************** - * Loosy memory allocation functions. Do not use in new code. - *****************************************************************************/ -static inline void *xmalloc (size_t len) -{ - void *ptr = malloc (len); - if (unlikely (ptr == NULL)) - abort (); - return ptr; -} - -static inline void *xrealloc (void *ptr, size_t len) -{ - void *nptr = realloc (ptr, len); - if (unlikely (nptr == NULL)) - abort (); - return nptr; -} - -static inline void *xcalloc (size_t n, size_t size) -{ - void *ptr = calloc (n, size); - if (unlikely (ptr == NULL)) - abort (); - return ptr; -} - -static inline char *xstrdup (const char *str) -{ - char *ptr = strdup (str); - if (unlikely(ptr == NULL)) - abort (); - return ptr; -} - -/***************************************************************************** - * libvlc features - *****************************************************************************/ -VLC_API const char * VLC_CompileBy( void ) VLC_USED; -VLC_API const char * VLC_CompileHost( void ) VLC_USED; -VLC_API const char * VLC_Compiler( void ) VLC_USED; - -/***************************************************************************** - * Additional vlc stuff - *****************************************************************************/ -#include "vlc_messages.h" -#include "vlc_objects.h" -#include "vlc_variables.h" -#include "vlc_main.h" -#include "vlc_configuration.h" - -#if defined( _WIN32 ) || defined( __SYMBIAN32__ ) || defined( __OS2__ ) -# define DIR_SEP_CHAR '\\' -# define DIR_SEP "\\" -# define PATH_SEP_CHAR ';' -# define PATH_SEP ";" -#else -# define DIR_SEP_CHAR '/' -# define DIR_SEP "/" -# define PATH_SEP_CHAR ':' -# define PATH_SEP ":" -#endif - -#define LICENSE_MSG \ - _("This program comes with NO WARRANTY, to the extent permitted by " \ - "law.\nYou may redistribute it under the terms of the GNU General " \ - "Public License;\nsee the file named COPYING for details.\n" \ - "Written by the VideoLAN team; see the AUTHORS file.\n") - -#endif /* !VLC_COMMON_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_config.h b/source/vlc/cpp/include/vlc/plugins/vlc_config.h deleted file mode 100644 index c1cf96ca2..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_config.h +++ /dev/null @@ -1,114 +0,0 @@ -/***************************************************************************** - * vlc_config.h: limits and configuration - * Defines all compilation-time configuration constants and size limits - ***************************************************************************** - * Copyright (C) 1999-2003 VLC authors and VideoLAN - * - * Authors: Vincent Seguin - * Samuel Hocevar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file defines of values used in interface, vout, aout and vlc core functions. - */ - -/* Conventions regarding names of symbols and variables - * ---------------------------------------------------- - * - * - Symbols should begin with a prefix indicating in which module they are - * used, such as INTF_, VOUT_ or AOUT_. - */ - -/***************************************************************************** - * General configuration - *****************************************************************************/ - -/* All timestamp below or equal to this define are invalid/unset - * XXX the numerical value is 0 because of historical reason and will change.*/ -#define VLC_TS_INVALID (0) -#define VLC_TS_0 (1) - -#define CLOCK_FREQ INT64_C(1000000) - -/***************************************************************************** - * Interface configuration - *****************************************************************************/ - -/* Base delay in micro second for interface sleeps */ -#define INTF_IDLE_SLEEP (CLOCK_FREQ/20) - -/***************************************************************************** - * Input thread configuration - *****************************************************************************/ - -/* Used in ErrorThread */ -#define INPUT_IDLE_SLEEP (CLOCK_FREQ/10) - -/* - * General limitations - */ - -/* Duration between the time we receive the data packet, and the time we will - * mark it to be presented */ -#define DEFAULT_PTS_DELAY (3*CLOCK_FREQ/10) - -/***************************************************************************** - * SPU configuration - *****************************************************************************/ - -/* Buffer must avoid arriving more than SPU_MAX_PREPARE_TIME in advanced to - * the SPU */ -#define SPU_MAX_PREPARE_TIME (CLOCK_FREQ/2) - -/***************************************************************************** - * Video configuration - *****************************************************************************/ - -/* - * Default settings for video output threads - */ - -/* Multiplier value for aspect ratio calculation (2^7 * 3^3 * 5^3) */ -#define VOUT_ASPECT_FACTOR 432000 - -/* Maximum width of a scaled source picture - this should be relatively high, - * since higher stream values will result in no display at all. */ -#define VOUT_MAX_WIDTH 4096 - -/* Number of planes in a picture */ -#define VOUT_MAX_PLANES 5 - -/* - * Time settings - */ - -/* Time to sleep when waiting for a buffer (from vout or the video fifo). - * It should be approximately the time needed to perform a complete picture - * loop. Since it only happens when the video heap is full, it does not need - * to be too low, even if it blocks the decoder. */ -#define VOUT_OUTMEM_SLEEP (CLOCK_FREQ/50) - -/* The default video output window title */ -#define VOUT_TITLE "VLC" - -/***************************************************************************** - * Messages and console interfaces configuration - *****************************************************************************/ - -/* Maximal depth of the object tree output by vlc_dumpstructure */ -#define MAX_DUMPSTRUCTURE_DEPTH 100 diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_config_cat.h b/source/vlc/cpp/include/vlc/plugins/vlc_config_cat.h deleted file mode 100644 index 84e420091..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_config_cat.h +++ /dev/null @@ -1,291 +0,0 @@ -/***************************************************************************** - * vlc_config_cat.h : Definition of configuration categories - ***************************************************************************** - * Copyright (C) 2003 VLC authors and VideoLAN - * $Id: 7cb796b4794b98f1267747d590cdc3922371f742 $ - * - * Authors: Clément Stenac - * Anil Daoud - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_HELP_H -#define VLC_HELP_H 1 -# include - -/* - * First, we need help strings for the General Settings and for the - * Plugins screen - */ -#define MAIN_TITLE N_( "VLC preferences" ) -#define MAIN_HELP N_( \ - "Select \"Advanced Options\" to see all options." ) - -/* Interface */ -#define INTF_TITLE N_("Interface") -#define INTF_HELP N_( "Settings for VLC's interfaces" ) - -#define INTF_GENERAL_HELP N_( "Main interfaces settings" ) - -#define INTF_MAIN_TITLE N_( "Main interfaces" ) -#define INTF_MAIN_HELP N_( "Settings for the main interface" ) - -#define INTF_CONTROL_TITLE N_( "Control interfaces" ) -#define INTF_CONTROL_HELP N_( "Settings for VLC's control interfaces" ) - -#define INTF_HOTKEYS_TITLE N_( "Hotkeys settings" ) -#define INTF_HOTKEYS_HELP N_( "Hotkeys settings" ) - -/* Audio */ -#define AUDIO_TITLE N_( "Audio" ) -#define AUDIO_HELP N_( "Audio settings" ) - -#define AUDIO_GENERAL_HELP N_("General audio settings") - -#define AFILTER_TITLE N_("Filters") -#define AFILTER_HELP N_( "Audio filters are used to process the audio stream." ) - -#define AVISUAL_TITLE N_("Visualizations") -#define AVISUAL_HELP N_( "Audio visualizations" ) - -#define AOUT_TITLE N_( "Output modules" ) -#define AOUT_HELP N_("General settings for audio output modules.") - -#define AMISC_TITLE N_("Miscellaneous") -#define AMISC_HELP N_( "Miscellaneous audio settings and modules." ) - -/* Video */ -#define VIDEO_TITLE N_("Video") -#define VIDEO_HELP N_("Video settings") - -#define VIDEO_GENERAL_HELP N_( "General video settings" ) - -#define _VOUT_TITLE N_("Output modules" ) -#define VOUT_HELP N_( \ - "Choose your preferred video output and configure it here." ) - -#define VFILTER_TITLE N_("Filters" ) -#define VFILTER_HELP N_( \ - "Video filters are used to process the video stream." ) - -#define SUBPIC_TITLE N_( "Subtitles / OSD") -#define SUBPIC_HELP N_( "Settings related to On-Screen-Display,"\ - " subtitles and \"overlay subpictures\"") -/* -#define TEXT_HELP N_( \ - "Use the settings of the \"freetype\" module to choose the font you " \ - "want VLC to use for text rendering (to display subtitles for example).") -*/ -/* Input */ -#define INPUT_TITLE N_( "Input / Codecs" ) -#define INPUT_HELP N_( "Settings for input, demultiplexing, " \ - "decoding and encoding") - -#define ACCESS_TITLE N_( "Access modules" ) -#define ACCESS_HELP N_( \ - "Settings related to the various access methods. " \ - "Common settings you may want to alter are HTTP proxy or " \ - "caching settings." ) - -#define STREAM_FILTER_TITLE N_( "Stream filters" ) -#define STREAM_FILTER_HELP N_( \ - "Stream filters are special modules that allow advanced operations on " \ - "the input side of VLC. Use with care..." ) - -#define DEMUX_TITLE N_("Demuxers") -#define DEMUX_HELP N_( "Demuxers are used to separate audio and video streams." ) - -#define VDEC_TITLE N_( "Video codecs" ) -#define VDEC_HELP N_( "Settings for the video, images or video+audio decoders and encoders." ) - -#define ADEC_TITLE N_( "Audio codecs" ) -#define ADEC_HELP N_( "Settings for the audio-only decoders and encoders." ) - -#define SDEC_TITLE N_( "Subtitle codecs") -#define SDEC_HELP N_( "Settings for subtitle, teletext and CC decoders and encoders." ) - -#define ADVANCED_HELP N_( "General input settings. Use with care..." ) - -/* Sout */ -#define SOUT_TITLE N_( "Stream output" ) -#define SOUT_HELP N_( \ - "Stream output settings are used when acting as a streaming server " \ - "or when saving incoming streams.\n" \ - "Streams are first muxed and then sent through an \"access output\" "\ - "module that can either save the stream to a file, or stream " \ - "it (UDP, HTTP, RTP/RTSP).\n" \ - "Sout streams modules allow advanced stream processing (transcoding, "\ - "duplicating...).") - -#define SOUT_GENERAL_HELP N_( "General stream output settings") - -#define SOUT_MUX_TITLE N_( "Muxers" ) -#define SOUT_MUX_HELP N_( \ - "Muxers create the encapsulation formats that are used to " \ - "put all the elementary streams (video, audio, ...) " \ - "together. This setting allows you to always force a specific muxer. " \ - "You should probably not do that.\n" \ - "You can also set default parameters for each muxer." ) - -#define SOUT_ACO_TITLE N_( "Access output" ) -#define SOUT_ACO_HELP N_( \ - "Access output modules control the ways the muxed streams are sent. " \ - "This setting allows you to always force a specific access output method. " \ - "You should probably not do that.\n" \ - "You can also set default parameters for each access output.") - -#define SOUT_PACKET_TITLE N_( "Packetizers" ) -#define SOUT_PACKET_HELP N_( \ - "Packetizers are used to \"preprocess\" the elementary "\ - "streams before muxing. " \ - "This setting allows you to always force a packetizer. " \ - "You should probably not do that.\n" \ - "You can also set default parameters for each packetizer." ) - -#define SOUT_STREAM_TITLE N_("Sout stream") -#define SOUT_STREAM_HELP N_( "Sout stream modules allow to build a sout " \ - "processing chain. Please refer to the Streaming Howto for " \ - "more information. You can configure default options for " \ - "each sout stream module here.") - -#define SOUT_VOD_TITLE N_( "VOD" ) -#define SOUT_VOD_HELP N_( "VLC's implementation of Video On Demand" ) - - -/* Playlist */ -#define PLAYLIST_TITLE N_( "Playlist" ) -#define PLAYLIST_HELP N_( "Settings related to playlist behaviour " \ - "(e.g. playback mode) and to modules that automatically add "\ - "items to the playlist (\"service discovery\" modules).") - -#define PGENERAL_HELP N_( "General playlist behaviour") -#define SD_TITLE N_("Services discovery") -#define SD_HELP N_("Services discovery modules are facilities "\ - "that automatically add items to playlist.") - -/* Advanced */ -#define AADVANCED_TITLE N_( "Advanced" ) -#define AADVANCED_HELP N_( "Advanced settings. Use with care...") - -#define MISC_TITLE N_( "Advanced settings" ) - - -/* OLD */ -#if 0 -#define NETWORK_TITLE N_( "Network" ) -#define NETWORK_HELP N_( "These modules provide network functions to all " \ - "other parts of VLC." ) - -#define PACKETIZER_HELP "These are general settings for the "\ - "packetizers used in VLC's stream output subsystem." - -#define ENCODER_HELP N_( \ - "These are general settings for video/audio/subtitle encoding modules.") - -#define DIALOGS_HELP N_( \ - "Dialog providers can be configured here.") - -#define SUBTITLE_DEMUX_HELP N_( \ - "In this section you can force the behavior of the subtitle demuxer, " \ - "for example by setting the subtitle type or file name.") - -/* - * A little help for modules with unknown capabilities - */ - -#endif - -/* This function is deprecated and is kept only for compatibility */ -static const struct config_category_t categories_array[] = -{ - /* Interface */ - { CAT_INTERFACE, INTF_TITLE, INTF_HELP }, - { SUBCAT_INTERFACE_GENERAL, INTF_TITLE, INTF_GENERAL_HELP }, - { SUBCAT_INTERFACE_MAIN, INTF_MAIN_TITLE, INTF_MAIN_HELP }, - { SUBCAT_INTERFACE_CONTROL, INTF_CONTROL_TITLE, INTF_CONTROL_HELP }, - { SUBCAT_INTERFACE_HOTKEYS, INTF_HOTKEYS_TITLE, INTF_HOTKEYS_HELP }, - - { CAT_AUDIO, AUDIO_TITLE, AUDIO_HELP }, - { SUBCAT_AUDIO_GENERAL, AUDIO_TITLE, AUDIO_GENERAL_HELP }, - { SUBCAT_AUDIO_AOUT, AOUT_TITLE, AOUT_HELP }, - { SUBCAT_AUDIO_AFILTER, AFILTER_TITLE, AFILTER_HELP }, - { SUBCAT_AUDIO_VISUAL, AVISUAL_TITLE, AVISUAL_HELP }, - { SUBCAT_AUDIO_MISC, AMISC_TITLE, AMISC_HELP }, - - { CAT_VIDEO, VIDEO_TITLE, VIDEO_HELP }, - { SUBCAT_VIDEO_GENERAL, VIDEO_TITLE, VIDEO_GENERAL_HELP }, - { SUBCAT_VIDEO_VOUT, _VOUT_TITLE, VOUT_HELP }, - { SUBCAT_VIDEO_VFILTER, VFILTER_TITLE, VFILTER_HELP }, - { SUBCAT_VIDEO_SUBPIC, SUBPIC_TITLE, SUBPIC_HELP }, - - { CAT_INPUT, INPUT_TITLE, INPUT_HELP }, - { SUBCAT_INPUT_GENERAL, INPUT_TITLE, INPUT_HELP }, - { SUBCAT_INPUT_ACCESS, ACCESS_TITLE, ACCESS_HELP }, - { SUBCAT_INPUT_DEMUX, DEMUX_TITLE, DEMUX_HELP }, - { SUBCAT_INPUT_VCODEC, VDEC_TITLE, VDEC_HELP }, - { SUBCAT_INPUT_ACODEC, ADEC_TITLE, ADEC_HELP }, - { SUBCAT_INPUT_SCODEC, SDEC_TITLE, SDEC_HELP }, - { SUBCAT_INPUT_STREAM_FILTER, STREAM_FILTER_TITLE, STREAM_FILTER_HELP }, - - { CAT_SOUT, SOUT_TITLE, SOUT_HELP }, - { SUBCAT_SOUT_GENERAL, SOUT_TITLE, SOUT_GENERAL_HELP }, - { SUBCAT_SOUT_STREAM, SOUT_STREAM_TITLE, SOUT_STREAM_HELP }, - { SUBCAT_SOUT_MUX, SOUT_MUX_TITLE, SOUT_MUX_HELP }, - { SUBCAT_SOUT_ACO, SOUT_ACO_TITLE, SOUT_ACO_HELP }, - { SUBCAT_SOUT_PACKETIZER, SOUT_PACKET_TITLE, SOUT_PACKET_HELP }, - { SUBCAT_SOUT_VOD, SOUT_VOD_TITLE, SOUT_VOD_HELP }, - - { CAT_PLAYLIST, PLAYLIST_TITLE , PLAYLIST_HELP }, - { SUBCAT_PLAYLIST_GENERAL, PLAYLIST_TITLE, PGENERAL_HELP }, - { SUBCAT_PLAYLIST_SD, SD_TITLE, SD_HELP }, - - { CAT_ADVANCED, AADVANCED_TITLE, AADVANCED_HELP }, - { SUBCAT_ADVANCED_MISC, MISC_TITLE, AADVANCED_HELP }, - - { -1, NULL, NULL } -}; - -VLC_USED -static inline const char *config_CategoryNameGet( int i_value ) -{ - int i = 0; - while( categories_array[i].psz_name != NULL ) - { - if( categories_array[i].i_id == i_value ) - { - return vlc_gettext(categories_array[i].psz_name); - } - i++; - } - return NULL; -} - -VLC_USED -static inline const char *config_CategoryHelpGet( int i_value ) -{ - int i = 0; - while( categories_array[i].psz_help != NULL ) - { - if( categories_array[i].i_id == i_value ) - { - return vlc_gettext(categories_array[i].psz_help); - } - i++; - } - return NULL; -} - -#endif /* VLC_HELP_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_configuration.h b/source/vlc/cpp/include/vlc/plugins/vlc_configuration.h deleted file mode 100644 index c35fc6e71..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_configuration.h +++ /dev/null @@ -1,236 +0,0 @@ -/***************************************************************************** - * vlc_configuration.h : configuration management module - * This file describes the programming interface for the configuration module. - * It includes functions allowing to declare, get or set configuration options. - ***************************************************************************** - * Copyright (C) 1999-2006 VLC authors and VideoLAN - * $Id: fe0aba5ca8b9d5bb60afd0ac9027d023b1862f2f $ - * - * Authors: Gildas Bazin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_CONFIGURATION_H -#define VLC_CONFIGURATION_H 1 - -/** - * \file - * This file describes the programming interface for the configuration module. - * It includes functions allowing to declare, get or set configuration options. - */ - -#include /* for ssize_t */ - -# ifdef __cplusplus -extern "C" { -# endif - -struct config_category_t -{ - int i_id; - const char *psz_name; - const char *psz_help; -}; - -typedef union -{ - char *psz; - int64_t i; - float f; -} module_value_t; - -typedef int (*vlc_string_list_cb)(vlc_object_t *, const char *, - char ***, char ***); -typedef int (*vlc_integer_list_cb)(vlc_object_t *, const char *, - int64_t **, char ***); - -struct module_config_t -{ - uint8_t i_type; /* Configuration type */ - char i_short; /* Optional short option name */ - unsigned b_advanced:1; /* Advanced option */ - unsigned b_internal:1; /* Hidden from prefs and help */ - unsigned b_unsaveable:1; /* Not stored in configuration */ - unsigned b_safe:1; /* Safe in web plugins and playlists */ - unsigned b_removed:1; /* Deprecated */ - - char *psz_type; /* Configuration subtype */ - char *psz_name; /* Option name */ - char *psz_text; /* Short comment on the configuration option */ - char *psz_longtext; /* Long comment on the configuration option */ - - module_value_t value; /* Option value */ - module_value_t orig; - module_value_t min; - module_value_t max; - - /* Values list */ - uint16_t list_count; /* Options list size */ - union - { - char **psz; /* List of possible values for the option */ - int *i; - vlc_string_list_cb psz_cb; - vlc_integer_list_cb i_cb; - } list; - char **list_text; /* Friendly names for list values */ -}; - -/***************************************************************************** - * Prototypes - these methods are used to get, set or manipulate configuration - * data. - *****************************************************************************/ -VLC_API int config_GetType(vlc_object_t *, const char *) VLC_USED; -VLC_API int64_t config_GetInt(vlc_object_t *, const char *) VLC_USED; -VLC_API void config_PutInt(vlc_object_t *, const char *, int64_t); -VLC_API float config_GetFloat(vlc_object_t *, const char *) VLC_USED; -VLC_API void config_PutFloat(vlc_object_t *, const char *, float); -VLC_API char * config_GetPsz(vlc_object_t *, const char *) VLC_USED VLC_MALLOC; -VLC_API void config_PutPsz(vlc_object_t *, const char *, const char *); -VLC_API ssize_t config_GetIntChoices(vlc_object_t *, const char *, - int64_t **, char ***) VLC_USED; -VLC_API ssize_t config_GetPszChoices(vlc_object_t *, const char *, - char ***, char ***) VLC_USED; - -VLC_API int config_SaveConfigFile( vlc_object_t * ); -#define config_SaveConfigFile(a) config_SaveConfigFile(VLC_OBJECT(a)) - -VLC_API void config_ResetAll( vlc_object_t * ); -#define config_ResetAll(a) config_ResetAll(VLC_OBJECT(a)) - -VLC_API module_config_t * config_FindConfig( vlc_object_t *, const char * ) VLC_USED; -VLC_API char * config_GetDataDir(void) VLC_USED VLC_MALLOC; -VLC_API char *config_GetLibDir(void) VLC_USED; - -typedef enum vlc_userdir -{ - VLC_HOME_DIR, /* User's home */ - VLC_CONFIG_DIR, /* VLC-specific configuration directory */ - VLC_DATA_DIR, /* VLC-specific data directory */ - VLC_CACHE_DIR, /* VLC-specific user cached data directory */ - /* Generic directories (same as XDG) */ - VLC_DESKTOP_DIR=0x80, - VLC_DOWNLOAD_DIR, - VLC_TEMPLATES_DIR, - VLC_PUBLICSHARE_DIR, - VLC_DOCUMENTS_DIR, - VLC_MUSIC_DIR, - VLC_PICTURES_DIR, - VLC_VIDEOS_DIR, -} vlc_userdir_t; - -VLC_API char * config_GetUserDir( vlc_userdir_t ) VLC_USED VLC_MALLOC; - -VLC_API void config_AddIntf( vlc_object_t *, const char * ); -VLC_API void config_RemoveIntf( vlc_object_t *, const char * ); -VLC_API bool config_ExistIntf( vlc_object_t *, const char * ) VLC_USED; - -#define config_GetType(a,b) config_GetType(VLC_OBJECT(a),b) -#define config_GetInt(a,b) config_GetInt(VLC_OBJECT(a),b) -#define config_PutInt(a,b,c) config_PutInt(VLC_OBJECT(a),b,c) -#define config_GetFloat(a,b) config_GetFloat(VLC_OBJECT(a),b) -#define config_PutFloat(a,b,c) config_PutFloat(VLC_OBJECT(a),b,c) -#define config_GetPsz(a,b) config_GetPsz(VLC_OBJECT(a),b) -#define config_PutPsz(a,b,c) config_PutPsz(VLC_OBJECT(a),b,c) - -#define config_AddIntf(a,b) config_AddIntf(VLC_OBJECT(a),b) -#define config_RemoveIntf(a,b) config_RemoveIntf(VLC_OBJECT(a),b) -#define config_ExistIntf(a,b) config_ExistIntf(VLC_OBJECT(a),b) - -/**************************************************************************** - * config_chain_t: - ****************************************************************************/ -struct config_chain_t -{ - config_chain_t *p_next; /**< Pointer on the next config_chain_t element */ - - char *psz_name; /**< Option name */ - char *psz_value; /**< Option value */ -}; - -/** - * This function will - * - create all options in the array ppsz_options (var_Create). - * - parse the given linked list of config_chain_t and set the value (var_Set). - * - * The option names will be created by adding the psz_prefix prefix. - */ -VLC_API void config_ChainParse( vlc_object_t *, const char *psz_prefix, const char *const *ppsz_options, config_chain_t * ); -#define config_ChainParse( a, b, c, d ) config_ChainParse( VLC_OBJECT(a), b, c, d ) - -/** - * This function will parse a configuration string (psz_opts) and - * - set all options for this module in a chained list (*pp_cfg) - * - returns a pointer on the next module if any. - * - * The string format is - * module{option=*,option=*} - * - * The options values are unescaped using config_StringUnescape. - */ -VLC_API const char *config_ChainParseOptions( config_chain_t **pp_cfg, const char *ppsz_opts ); - -/** - * This function will parse a configuration string (psz_string) and - * - set the module name (*ppsz_name) - * - set all options for this module in a chained list (*pp_cfg) - * - returns a pointer on the next module if any. - * - * The string format is - * module{option=*,option=*}[:modulenext{option=*,...}] - * - * The options values are unescaped using config_StringUnescape. - */ -VLC_API char *config_ChainCreate( char **ppsz_name, config_chain_t **pp_cfg, const char *psz_string ) VLC_USED VLC_MALLOC; - -/** - * This function will release a linked list of config_chain_t - * (Including the head) - */ -VLC_API void config_ChainDestroy( config_chain_t * ); - -/** - * This function will duplicate a linked list of config_chain_t - */ -VLC_API config_chain_t * config_ChainDuplicate( const config_chain_t * ) VLC_USED VLC_MALLOC; - -/** - * This function will unescape a string in place and will return a pointer on - * the given string. - * No memory is allocated by it (unlike config_StringEscape). - * If NULL is given as parameter nothing will be done (NULL will be returned). - * - * The following sequences will be unescaped (only one time): - * \\ \' and \" - */ -VLC_API char * config_StringUnescape( char *psz_string ); - -/** - * This function will escape a string that can be unescaped by - * config_StringUnescape. - * The returned value is allocated by it. You have to free it once you - * do not need it anymore (unlike config_StringUnescape). - * If NULL is given as parameter nothing will be done (NULL will be returned). - * - * The escaped characters are ' " and \ - */ -VLC_API char * config_StringEscape( const char *psz_string ) VLC_USED VLC_MALLOC; - -# ifdef __cplusplus -} -# endif - -#endif /* _VLC_CONFIGURATION_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_cpu.h b/source/vlc/cpp/include/vlc/plugins/vlc_cpu.h deleted file mode 100644 index 910900ab4..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_cpu.h +++ /dev/null @@ -1,198 +0,0 @@ -/***************************************************************************** - * vlc_cpu.h: CPU capabilities - ***************************************************************************** - * Copyright (C) 1998-2009 VLC authors and VideoLAN - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file provides CPU features detection. - */ - -#ifndef VLC_CPU_H -# define VLC_CPU_H 1 - -VLC_API unsigned vlc_CPU(void); - -# if defined (__i386__) || defined (__x86_64__) -# define HAVE_FPU 1 -# define VLC_CPU_MMX 0x00000008 -# define VLC_CPU_3dNOW 0x00000010 -# define VLC_CPU_MMXEXT 0x00000020 -# define VLC_CPU_SSE 0x00000040 -# define VLC_CPU_SSE2 0x00000080 -# define VLC_CPU_SSE3 0x00000100 -# define VLC_CPU_SSSE3 0x00000200 -# define VLC_CPU_SSE4_1 0x00000400 -# define VLC_CPU_SSE4_2 0x00000800 -# define VLC_CPU_SSE4A 0x00001000 -# define VLC_CPU_AVX 0x00002000 -# define VLC_CPU_AVX2 0x00004000 -# define VLC_CPU_XOP 0x00008000 -# define VLC_CPU_FMA4 0x00010000 - -# if defined (__MMX__) -# define vlc_CPU_MMX() (1) -# define VLC_MMX -# else -# define vlc_CPU_MMX() ((vlc_CPU() & VLC_CPU_MMX) != 0) -# if VLC_GCC_VERSION(4, 4) || defined(__clang__) -# define VLC_MMX __attribute__ ((__target__ ("mmx"))) -# else -# define VLC_MMX VLC_MMX_is_not_implemented_on_this_compiler -# endif -# endif - -# if defined (__SSE__) -# define vlc_CPU_MMXEXT() (1) -# define vlc_CPU_SSE() (1) -# define VLC_SSE -# else -# define vlc_CPU_MMXEXT() ((vlc_CPU() & VLC_CPU_MMXEXT) != 0) -# define vlc_CPU_SSE() ((vlc_CPU() & VLC_CPU_SSE) != 0) -# if VLC_GCC_VERSION(4, 4) || defined(__clang__) -# define VLC_SSE __attribute__ ((__target__ ("sse"))) -# else -# define VLC_SSE VLC_SSE_is_not_implemented_on_this_compiler -# endif -# endif - -# ifdef __SSE2__ -# define vlc_CPU_SSE2() (1) -# else -# define vlc_CPU_SSE2() ((vlc_CPU() & VLC_CPU_SSE2) != 0) -# endif - -# ifdef __SSE3__ -# define vlc_CPU_SSE3() (1) -# else -# define vlc_CPU_SSE3() ((vlc_CPU() & VLC_CPU_SSE3) != 0) -# endif - -# ifdef __SSSE3__ -# define vlc_CPU_SSSE3() (1) -# else -# define vlc_CPU_SSSE3() ((vlc_CPU() & VLC_CPU_SSSE3) != 0) -# endif - -# ifdef __SSE4_1__ -# define vlc_CPU_SSE4_1() (1) -# else -# define vlc_CPU_SSE4_1() ((vlc_CPU() & VLC_CPU_SSE4_1) != 0) -# endif - -# ifdef __SSE4_2__ -# define vlc_CPU_SSE4_2() (1) -# else -# define vlc_CPU_SSE4_2() ((vlc_CPU() & VLC_CPU_SSE4_2) != 0) -# endif - -# ifdef __SSE4A__ -# define vlc_CPU_SSE4A() (1) -# else -# define vlc_CPU_SSE4A() ((vlc_CPU() & VLC_CPU_SSE4A) != 0) -# endif - -# ifdef __AVX__ -# define vlc_CPU_AVX() (1) -# else -# define vlc_CPU_AVX() ((vlc_CPU() & VLC_CPU_AVX) != 0) -# endif - -# ifdef __AVX2__ -# define vlc_CPU_AVX2() (1) -# else -# define vlc_CPU_AVX2() ((vlc_CPU() & VLC_CPU_AVX2) != 0) -# endif - -# ifdef __3dNOW__ -# define vlc_CPU_3dNOW() (1) -# else -# define vlc_CPU_3dNOW() ((vlc_CPU() & VLC_CPU_3dNOW) != 0) -# endif - -# ifdef __XOP__ -# define vlc_CPU_XOP() (1) -# else -# define vlc_CPU_XOP() ((vlc_CPU() & VLC_CPU_XOP) != 0) -# endif - -# ifdef __FMA4__ -# define vlc_CPU_FMA4() (1) -# else -# define vlc_CPU_FMA4() ((vlc_CPU() & VLC_CPU_FMA4) != 0) -# endif - -# elif defined (__ppc__) || defined (__ppc64__) || defined (__powerpc__) -# define HAVE_FPU 1 -# define VLC_CPU_ALTIVEC 2 - -# ifdef ALTIVEC -# define vlc_CPU_ALTIVEC() (1) -# else -# define vlc_CPU_ALTIVEC() ((vlc_CPU() & VLC_CPU_ALTIVEC) != 0) -# endif - -# elif defined (__arm__) -# if defined (__VFP_FP__) && !defined (__SOFTFP__) -# define HAVE_FPU 1 -# else -# define HAVE_FPU 0 -# endif -# define VLC_CPU_ARMv6 4 -# define VLC_CPU_ARM_NEON 2 - -# if defined (__ARM_ARCH_7A__) -# define VLC_CPU_ARM_ARCH 7 -# elif defined (__ARM_ARCH_6__) || defined (__ARM_ARCH_6T2__) -# define VLC_CPU_ARM_ARCH 6 -# else -# define VLC_CPU_ARM_ARCH 4 -# endif - -# if (VLC_CPU_ARM_ARCH >= 6) -# define vlc_CPU_ARMv6() (1) -# else -# define vlc_CPU_ARMv6() ((vlc_CPU() & VLC_CPU_ARMv6) != 0) -# endif - -# ifdef __ARM_NEON__ -# define vlc_CPU_ARM_NEON() (1) -# else -# define vlc_CPU_ARM_NEON() ((vlc_CPU() & VLC_CPU_ARM_NEON) != 0) -# endif - -# elif defined (__aarch64__) -# define HAVE_FPU 1 - -# elif defined (__sparc__) -# define HAVE_FPU 1 - -# elif defined (__mips_hard_float) -# define HAVE_FPU 1 - -# else -/** - * Are single precision floating point operations "fast"? - * If this preprocessor constant is zero, floating point should be avoided - * (especially relevant for audio codecs). - */ -# define HAVE_FPU 0 - -# endif - -#endif /* !VLC_CPU_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_demux.h b/source/vlc/cpp/include/vlc/plugins/vlc_demux.h deleted file mode 100644 index a270fd46a..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_demux.h +++ /dev/null @@ -1,228 +0,0 @@ -/***************************************************************************** - * vlc_demux.h: Demuxer descriptor, queries and methods - ***************************************************************************** - * Copyright (C) 1999-2005 VLC authors and VideoLAN - * $Id: 249291427c0439edbaeb5f5fafd70d6d44340390 $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_DEMUX_H -#define VLC_DEMUX_H 1 - -/** - * \file - * This files defines functions and structures used by demux objects in vlc - */ - -#include -#include -#include - -/** - * \defgroup demux Demux - * @{ - */ - -struct demux_t -{ - VLC_COMMON_MEMBERS - - /* Module properties */ - module_t *p_module; - - /* eg informative but needed (we can have access+demux) */ - char *psz_access; - char *psz_demux; - char *psz_location; - char *psz_file; - - /* input stream */ - stream_t *s; /* NULL in case of a access+demux in one */ - - /* es output */ - es_out_t *out; /* our p_es_out */ - - /* set by demuxer */ - int (*pf_demux) ( demux_t * ); /* demux one frame only */ - int (*pf_control)( demux_t *, int i_query, va_list args); - - /* Demux has to maintain them uptodate - * when it is responsible of seekpoint/title */ - struct - { - unsigned int i_update; /* Demux sets them on change, - Input removes them once take into account*/ - /* Seekpoint/Title at demux level */ - int i_title; /* idem, start from 0 (could be menu) */ - int i_seekpoint; /* idem, start from 0 */ - } info; - demux_sys_t *p_sys; - - /* Weak link to parent input */ - input_thread_t *p_input; -}; - - -/* demux_meta_t is returned by "meta reader" module to the demuxer */ -typedef struct demux_meta_t -{ - VLC_COMMON_MEMBERS - demux_t *p_demux; /** FIXME: use stream_t instead? */ - input_item_t *p_item; /***< the input item that is being read */ - - vlc_meta_t *p_meta; /**< meta data */ - - int i_attachments; /**< number of attachments */ - input_attachment_t **attachments; /**< array of attachments */ -} demux_meta_t; - -enum demux_query_e -{ - /* I. Common queries to access_demux and demux */ - /* POSITION double between 0.0 and 1.0 */ - DEMUX_GET_POSITION, /* arg1= double * res= */ - DEMUX_SET_POSITION, /* arg1= double arg2= bool b_precise res=can fail */ - - /* LENGTH/TIME in microsecond, 0 if unknown */ - DEMUX_GET_LENGTH, /* arg1= int64_t * res= */ - DEMUX_GET_TIME, /* arg1= int64_t * res= */ - DEMUX_SET_TIME, /* arg1= int64_t arg2= bool b_precise res=can fail */ - - /* TITLE_INFO only if more than 1 title or 1 chapter */ - DEMUX_GET_TITLE_INFO, /* arg1=input_title_t*** arg2=int* - arg3=int*pi_title_offset(0), arg4=int*pi_seekpoint_offset(0) can fail */ - /* TITLE/SEEKPOINT, only when TITLE_INFO succeed */ - DEMUX_SET_TITLE, /* arg1= int can fail */ - DEMUX_SET_SEEKPOINT, /* arg1= int can fail */ - - /* DEMUX_SET_GROUP only a hint for demuxer (mainly DVB) to allow not - * reading everything (you should not use this to call es_out_Control) - * if you don't know what to do with it, just IGNORE it, it is safe(r) - * -1 means all group, 0 default group (first es added) */ - DEMUX_SET_GROUP, /* arg1= int, arg2=const vlc_list_t * can fail */ - - /* Ask the demux to demux until the given date at the next pf_demux call - * but not more (and not less, at the precision available of course). - * XXX: not mandatory (except for subtitle demux) but will help a lot - * for multi-input - */ - DEMUX_SET_NEXT_DEMUX_TIME, /* arg1= int64_t can fail */ - /* FPS for correct subtitles handling */ - DEMUX_GET_FPS, /* arg1= double * res=can fail */ - - /* Meta data */ - DEMUX_GET_META, /* arg1= vlc_meta_t ** res=can fail */ - DEMUX_HAS_UNSUPPORTED_META, /* arg1= bool * res can fail */ - - /* Attachments */ - DEMUX_GET_ATTACHMENTS, /* arg1=input_attachment_t***, int* res=can fail */ - - /* RECORD you are ensured that it is never called twice with the same state - * you should accept it only if the stream can be recorded without - * any modification or header addition. */ - DEMUX_CAN_RECORD, /* arg1=bool* res=can fail(assume false) */ - DEMUX_SET_RECORD_STATE, /* arg1=bool res=can fail */ - - - /* II. Specific access_demux queries */ - /* PAUSE you are ensured that it is never called twice with the same state */ - DEMUX_CAN_PAUSE = 0x1000, /* arg1= bool* can fail (assume false)*/ - DEMUX_SET_PAUSE_STATE, /* arg1= bool can fail */ - - DEMUX_GET_PTS_DELAY, /* arg1= int64_t* cannot fail */ - - /* DEMUX_CAN_CONTROL_PACE returns true (*pb_pace) if we can read the - * data at our pace */ - DEMUX_CAN_CONTROL_PACE, /* arg1= bool*pb_pace can fail (assume false) */ - - /* DEMUX_CAN_CONTROL_RATE is called only if DEMUX_CAN_CONTROL_PACE has returned false. - * *pb_rate should be true when the rate can be changed (using DEMUX_SET_RATE) - * *pb_ts_rescale should be true when the timestamps (pts/dts/pcr) have to be rescaled */ - DEMUX_CAN_CONTROL_RATE, /* arg1= bool*pb_rate arg2= bool*pb_ts_rescale can fail(assume false) */ - /* DEMUX_SET_RATE is called only if DEMUX_CAN_CONTROL_RATE has returned true. - * It should return the value really used in *pi_rate */ - DEMUX_SET_RATE, /* arg1= int*pi_rate can fail */ - - DEMUX_CAN_SEEK, /* arg1= bool* can fail (assume false)*/ - - /* Navigation */ - DEMUX_NAV_ACTIVATE, /* res=can fail */ - DEMUX_NAV_UP, /* res=can fail */ - DEMUX_NAV_DOWN, /* res=can fail */ - DEMUX_NAV_LEFT, /* res=can fail */ - DEMUX_NAV_RIGHT, /* res=can fail */ -}; - -VLC_API int demux_vaControlHelper( stream_t *, int64_t i_start, int64_t i_end, int64_t i_bitrate, int i_align, int i_query, va_list args ); - -/************************************************************************* - * Miscellaneous helpers for demuxers - *************************************************************************/ - -VLC_USED -static inline bool demux_IsPathExtension( demux_t *p_demux, const char *psz_extension ) -{ - const char *name = (p_demux->psz_file != NULL) ? p_demux->psz_file - : p_demux->psz_location; - const char *psz_ext = strrchr ( name, '.' ); - if( !psz_ext || strcasecmp( psz_ext, psz_extension ) ) - return false; - return true; -} - -VLC_USED -static inline bool demux_IsForced( demux_t *p_demux, const char *psz_name ) -{ - if( !p_demux->psz_demux || strcmp( p_demux->psz_demux, psz_name ) ) - return false; - return true; -} - -/** - * This function will create a packetizer suitable for a demuxer that parses - * elementary stream. - * - * The provided es_format_t will be cleaned on error or by - * demux_PacketizerDestroy. - */ -VLC_API decoder_t * demux_PacketizerNew( demux_t *p_demux, es_format_t *p_fmt, const char *psz_msg ) VLC_USED; - -/** - * This function will destroy a packetizer create by demux_PacketizerNew. - */ -VLC_API void demux_PacketizerDestroy( decoder_t *p_packetizer ); - -/** - * This function will return the parent input of this demux. - * It is retained. Can return NULL. - */ -VLC_API input_thread_t * demux_GetParentInput( demux_t *p_demux ) VLC_USED; - -/* */ -#define DEMUX_INIT_COMMON() do { \ - p_demux->pf_control = Control; \ - p_demux->pf_demux = Demux; \ - p_demux->p_sys = calloc( 1, sizeof( demux_sys_t ) ); \ - if( !p_demux->p_sys ) return VLC_ENOMEM;\ - } while(0) - -/** - * @} - */ - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_dialog.h b/source/vlc/cpp/include/vlc/plugins/vlc_dialog.h deleted file mode 100644 index 168bea4b0..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_dialog.h +++ /dev/null @@ -1,124 +0,0 @@ -/***************************************************************************** - * vlc_dialog.h: user interaction dialogs - ***************************************************************************** - * Copyright (C) 2009 Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_DIALOG_H_ -#define VLC_DIALOG_H_ -# include - -/** - * \file vlc_dialog.h - * User interaction dialog APIs - */ - -/** - * A fatal error dialog. - * No response expected from the user. - */ -typedef struct dialog_fatal_t -{ - const char *title; - const char *message; -} dialog_fatal_t; - -VLC_API void dialog_VFatal(vlc_object_t *, bool, const char *, const char *, va_list); - -static inline VLC_FORMAT(3, 4) -void dialog_Fatal (vlc_object_t *obj, const char *title, const char *fmt, ...) -{ - va_list ap; - - va_start (ap, fmt); - dialog_VFatal(obj, false, title, fmt, ap); - va_end (ap); -} -#define dialog_Fatal(o, t, ...) \ - dialog_Fatal(VLC_OBJECT(o), t, __VA_ARGS__) - -static inline VLC_FORMAT(3, 4) -void dialog_FatalWait (vlc_object_t *obj, const char *title, - const char *fmt, ...){ - va_list ap; - - va_start (ap, fmt); - dialog_VFatal(obj, true, title, fmt, ap); - va_end (ap); -} -#define dialog_FatalWait(o, t, ...) \ - dialog_FatalWait(VLC_OBJECT(o), t, __VA_ARGS__) - -/** - * A login dialog. - */ -typedef struct dialog_login_t -{ - const char *title; - const char *message; - char **username; - char **password; -} dialog_login_t; - -VLC_API void dialog_Login(vlc_object_t *, char **, char **, const char *, const char *, ...) VLC_FORMAT (5, 6); -#define dialog_Login(o, u, p, t, ...) \ - dialog_Login(VLC_OBJECT(o), u, p, t, __VA_ARGS__) - -/** - * A question dialog. - */ -typedef struct dialog_question_t -{ - const char *title; - const char *message; - const char *yes; - const char *no; - const char *cancel; - int answer; -} dialog_question_t; - -VLC_API int dialog_Question(vlc_object_t *, const char *, const char *, - const char *, const char *, const char *, ...) -VLC_FORMAT(3, 7); -#define dialog_Question(o, t, m, y, n, ...) \ - dialog_Question(VLC_OBJECT(o), t, m, y, n, __VA_ARGS__) - -typedef struct dialog_progress_bar_t -{ /* Request-time parameters */ - const char *title; - const char *message; - const char *cancel; - /* Permanent parameters */ - void (*pf_update) (void *, const char *, float); - bool (*pf_check) (void *); - void (*pf_destroy) (void *); - void *p_sys; -} dialog_progress_bar_t; - -VLC_API dialog_progress_bar_t * dialog_ProgressCreate(vlc_object_t *, const char *, const char *, const char *) VLC_USED; -#define dialog_ProgressCreate(o, t, m, c) \ - dialog_ProgressCreate(VLC_OBJECT(o), t, m, c) -VLC_API void dialog_ProgressDestroy(dialog_progress_bar_t *); -VLC_API void dialog_ProgressSet(dialog_progress_bar_t *, const char *, float); -VLC_API bool dialog_ProgressCancelled(dialog_progress_bar_t *); - -VLC_API int dialog_Register(vlc_object_t *); -VLC_API int dialog_Unregister(vlc_object_t *); -#define dialog_Register(o) dialog_Register(VLC_OBJECT(o)) -#define dialog_Unregister(o) dialog_Unregister(VLC_OBJECT(o)) - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_epg.h b/source/vlc/cpp/include/vlc/plugins/vlc_epg.h deleted file mode 100644 index 2ae770f94..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_epg.h +++ /dev/null @@ -1,97 +0,0 @@ -/***************************************************************************** - * vlc_epg.h: Electronic Program Guide - ***************************************************************************** - * Copyright (C) 2007 VLC authors and VideoLAN - * $Id: c0fd0f559ac3bb7ed6201889dcda998ebff3a413 $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_EPG_H -#define VLC_EPG_H 1 - -/** - * \file - * This file defines functions and structures for storing dvb epg information - */ - -typedef struct -{ - int64_t i_start; /* Interpreted as a value return by time() */ - int i_duration; /* Duration of the event in second */ - - char *psz_name; - char *psz_short_description; - char *psz_description; - - uint8_t i_rating; /* Parental control, set to 0 when undefined */ -} vlc_epg_event_t; - -typedef struct -{ - char *psz_name; - vlc_epg_event_t *p_current; /* Can be null or should be the same than one of pp_event entry */ - - int i_event; - vlc_epg_event_t **pp_event; -} vlc_epg_t; - -/** - * It initializes a vlc_epg_t. - * - * You must call vlc_epg_Clean to release the associated resource. - */ -VLC_API void vlc_epg_Init(vlc_epg_t *p_epg, const char *psz_name); - -/** - * It releases all resources associated to a vlc_epg_t - */ -VLC_API void vlc_epg_Clean(vlc_epg_t *p_epg); - -/** - * It creates and appends a new vlc_epg_event_t to a vlc_epg_t. - * - * \see vlc_epg_t for the definitions of the parameters. - */ -VLC_API void vlc_epg_AddEvent(vlc_epg_t *p_epg, int64_t i_start, int i_duration, const char *psz_name, const char *psz_short_description, const char *psz_description, uint8_t i_rating ); - -/** - * It creates a new vlc_epg_t* - * - * You must call vlc_epg_Delete to release the associated resource. - */ -VLC_API vlc_epg_t * vlc_epg_New(const char *psz_name) VLC_USED; - -/** - * It releases a vlc_epg_t*. - */ -VLC_API void vlc_epg_Delete(vlc_epg_t *p_epg); - -/** - * It set the current event of a vlc_epg_t given a start time - */ -VLC_API void vlc_epg_SetCurrent(vlc_epg_t *p_epg, int64_t i_start); - -/** - * It merges all the event of \p p_src and \p p_dst into \p p_dst. - * - * \p p_src is not modified. - */ -VLC_API void vlc_epg_Merge(vlc_epg_t *p_dst, const vlc_epg_t *p_src); - -#endif - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_es.h b/source/vlc/cpp/include/vlc/plugins/vlc_es.h deleted file mode 100644 index d07720b10..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_es.h +++ /dev/null @@ -1,407 +0,0 @@ -/***************************************************************************** - * vlc_es.h: Elementary stream formats descriptions - ***************************************************************************** - * Copyright (C) 1999-2012 VLC authors and VideoLAN - * $Id: 4c3bc9378da24e7bc56f276f2c933925dcbf712c $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_ES_H -#define VLC_ES_H 1 - -#include - -/** - * \file - * This file defines the elementary streams format types - */ - -/** - * video palette data - * \see video_format_t - * \see subs_format_t - */ -struct video_palette_t -{ - int i_entries; /**< to keep the compatibility with ffmpeg's palette */ - uint8_t palette[256][4]; /**< 4-byte RGBA/YUVA palette */ -}; - -/** - * audio replay gain description - */ -#define AUDIO_REPLAY_GAIN_MAX (2) -#define AUDIO_REPLAY_GAIN_TRACK (0) -#define AUDIO_REPLAY_GAIN_ALBUM (1) -typedef struct -{ - /* true if we have the peak value */ - bool pb_peak[AUDIO_REPLAY_GAIN_MAX]; - /* peak value where 1.0 means full sample value */ - float pf_peak[AUDIO_REPLAY_GAIN_MAX]; - - /* true if we have the gain value */ - bool pb_gain[AUDIO_REPLAY_GAIN_MAX]; - /* gain value in dB */ - float pf_gain[AUDIO_REPLAY_GAIN_MAX]; -} audio_replay_gain_t; - -/** - * audio format description - */ -struct audio_format_t -{ - vlc_fourcc_t i_format; /**< audio format fourcc */ - unsigned int i_rate; /**< audio sample-rate */ - - /* Describes the channels configuration of the samples (ie. number of - * channels which are available in the buffer, and positions). */ - uint16_t i_physical_channels; - - /* Describes from which original channels, before downmixing, the - * buffer is derived. */ - uint32_t i_original_channels; - - /* Optional - for A/52, SPDIF and DTS types : */ - /* Bytes used by one compressed frame, depends on bitrate. */ - unsigned int i_bytes_per_frame; - - /* Number of sampleframes contained in one compressed frame. */ - unsigned int i_frame_length; - /* Please note that it may be completely arbitrary - buffers are not - * obliged to contain a integral number of so-called "frames". It's - * just here for the division : - * buffer_size = i_nb_samples * i_bytes_per_frame / i_frame_length - */ - - /* FIXME ? (used by the codecs) */ - unsigned i_bitspersample; - unsigned i_blockalign; - uint8_t i_channels; /* must be <=32 */ -}; - -/* Values available for audio channels */ -#define AOUT_CHAN_CENTER 0x1 -#define AOUT_CHAN_LEFT 0x2 -#define AOUT_CHAN_RIGHT 0x4 -#define AOUT_CHAN_REARCENTER 0x10 -#define AOUT_CHAN_REARLEFT 0x20 -#define AOUT_CHAN_REARRIGHT 0x40 -#define AOUT_CHAN_MIDDLELEFT 0x100 -#define AOUT_CHAN_MIDDLERIGHT 0x200 -#define AOUT_CHAN_LFE 0x1000 - -#define AOUT_CHANS_FRONT (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT) -#define AOUT_CHANS_MIDDLE (AOUT_CHAN_MIDDLELEFT | AOUT_CHAN_MIDDLERIGHT) -#define AOUT_CHANS_REAR (AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT) -#define AOUT_CHANS_CENTER (AOUT_CHAN_CENTER | AOUT_CHAN_REARCENTER) - -#define AOUT_CHANS_STEREO AOUT_CHANS_2_0 -#define AOUT_CHANS_2_0 (AOUT_CHANS_FRONT) -#define AOUT_CHANS_2_1 (AOUT_CHANS_FRONT | AOUT_CHAN_LFE) -#define AOUT_CHANS_3_0 (AOUT_CHANS_FRONT | AOUT_CHAN_CENTER) -#define AOUT_CHANS_3_1 (AOUT_CHANS_3_0 | AOUT_CHAN_LFE) -#define AOUT_CHANS_4_0 (AOUT_CHANS_FRONT | AOUT_CHANS_REAR) -#define AOUT_CHANS_4_1 (AOUT_CHANS_4_0 | AOUT_CHAN_LFE) -#define AOUT_CHANS_5_0 (AOUT_CHANS_4_0 | AOUT_CHAN_CENTER) -#define AOUT_CHANS_5_1 (AOUT_CHANS_5_0 | AOUT_CHAN_LFE) -#define AOUT_CHANS_6_0 (AOUT_CHANS_4_0 | AOUT_CHANS_MIDDLE) -#define AOUT_CHANS_7_0 (AOUT_CHANS_6_0 | AOUT_CHAN_CENTER) -#define AOUT_CHANS_7_1 (AOUT_CHANS_5_1 | AOUT_CHANS_MIDDLE) -#define AOUT_CHANS_8_1 (AOUT_CHANS_7_1 | AOUT_CHAN_REARCENTER) - -#define AOUT_CHANS_4_0_MIDDLE (AOUT_CHANS_FRONT | AOUT_CHANS_MIDDLE) -#define AOUT_CHANS_4_CENTER_REAR (AOUT_CHANS_FRONT | AOUT_CHANS_CENTER) -#define AOUT_CHANS_5_0_MIDDLE (AOUT_CHANS_4_0_MIDDLE | AOUT_CHAN_CENTER) -#define AOUT_CHANS_6_1_MIDDLE (AOUT_CHANS_5_0_MIDDLE | AOUT_CHAN_REARCENTER | AOUT_CHAN_LFE) - -/* Values available for original channels only */ -#define AOUT_CHAN_DOLBYSTEREO 0x10000 -#define AOUT_CHAN_DUALMONO 0x20000 -#define AOUT_CHAN_REVERSESTEREO 0x40000 - -#define AOUT_CHAN_PHYSMASK 0xFFFF -#define AOUT_CHAN_MAX 9 - -/** - * Picture orientation. - */ -typedef enum video_orientation_t -{ - ORIENT_TOP_LEFT = 0, /**< Top line represents top, left column left. */ - ORIENT_TOP_RIGHT, /**< Flipped horizontally */ - ORIENT_BOTTOM_LEFT, /**< Flipped vertically */ - ORIENT_BOTTOM_RIGHT, /**< Rotated 180 degrees */ - ORIENT_LEFT_TOP, /**< Transposed */ - ORIENT_LEFT_BOTTOM, /**< Rotated 90 degrees clockwise */ - ORIENT_RIGHT_TOP, /**< Rotated 90 degrees anti-clockwise */ - ORIENT_RIGHT_BOTTOM, /**< Anti-transposed */ - - ORIENT_NORMAL = ORIENT_TOP_LEFT, - ORIENT_HFLIPPED = ORIENT_TOP_RIGHT, - ORIENT_VFLIPPED = ORIENT_BOTTOM_LEFT, - ORIENT_ROTATED_180 = ORIENT_BOTTOM_RIGHT, - ORIENT_ROTATED_270 = ORIENT_LEFT_BOTTOM, - ORIENT_ROTATED_90 = ORIENT_RIGHT_TOP, -} video_orientation_t; -/** Convert EXIF orientation to enum video_orientation_t */ -#define ORIENT_FROM_EXIF(exif) ((0x01324675U >> (4 * ((exif) - 1))) & 7) -/** Convert enum video_orientation_t to EXIF */ -#define ORIENT_TO_EXIF(orient) ((0x12435867U >> (4 * (orient))) & 15) -/** If the orientation is natural or mirrored */ -#define ORIENT_IS_MIRROR(orient) parity(orient) -/** If the orientation swaps dimensions */ -#define ORIENT_IS_SWAP(orient) (((orient) & 4) != 0) -/** Applies horizontal flip to an orientation */ -#define ORIENT_HFLIP(orient) ((orient) ^ 1) -/** Applies vertical flip to an orientation */ -#define ORIENT_VFLIP(orient) ((orient) ^ 2) -/** Applies horizontal flip to an orientation */ -#define ORIENT_ROTATE_180(orient) ((orient) ^ 3) - -/** - * video format description - */ -struct video_format_t -{ - vlc_fourcc_t i_chroma; /**< picture chroma */ - - unsigned int i_width; /**< picture width */ - unsigned int i_height; /**< picture height */ - unsigned int i_x_offset; /**< start offset of visible area */ - unsigned int i_y_offset; /**< start offset of visible area */ - unsigned int i_visible_width; /**< width of visible area */ - unsigned int i_visible_height; /**< height of visible area */ - - unsigned int i_bits_per_pixel; /**< number of bits per pixel */ - - unsigned int i_sar_num; /**< sample/pixel aspect ratio */ - unsigned int i_sar_den; - - unsigned int i_frame_rate; /**< frame rate numerator */ - unsigned int i_frame_rate_base; /**< frame rate denominator */ - - uint32_t i_rmask, i_gmask, i_bmask; /**< color masks for RGB chroma */ - int i_rrshift, i_lrshift; - int i_rgshift, i_lgshift; - int i_rbshift, i_lbshift; - video_palette_t *p_palette; /**< video palette from demuxer */ - video_orientation_t orientation; /**< picture orientation */ -}; - -/** - * Initialize a video_format_t structure with chroma 'i_chroma' - * \param p_src pointer to video_format_t structure - * \param i_chroma chroma value to use - */ -static inline void video_format_Init( video_format_t *p_src, vlc_fourcc_t i_chroma ) -{ - memset( p_src, 0, sizeof( video_format_t ) ); - p_src->i_chroma = i_chroma; - p_src->i_sar_num = p_src->i_sar_den = 1; - p_src->p_palette = NULL; -} - -/** - * Copy video_format_t including the palette - * \param p_dst video_format_t to copy to - * \param p_src video_format_t to copy from - */ -static inline int video_format_Copy( video_format_t *p_dst, const video_format_t *p_src ) -{ - memcpy( p_dst, p_src, sizeof( *p_dst ) ); - if( p_src->p_palette ) - { - p_dst->p_palette = (video_palette_t *) malloc( sizeof( video_palette_t ) ); - if( !p_dst->p_palette ) - return VLC_ENOMEM; - memcpy( p_dst->p_palette, p_src->p_palette, sizeof( *p_dst->p_palette ) ); - } - return VLC_SUCCESS; -} - -/** - * Cleanup and free palette of this video_format_t - * \param p_src video_format_t structure to clean - */ -static inline void video_format_Clean( video_format_t *p_src ) -{ - free( p_src->p_palette ); - memset( p_src, 0, sizeof( video_format_t ) ); - p_src->p_palette = NULL; -} - -/** - * It will fill up a video_format_t using the given arguments. - * Note that the video_format_t must already be initialized. - */ -VLC_API void video_format_Setup( video_format_t *, vlc_fourcc_t i_chroma, int i_width, int i_height, int i_sar_num, int i_sar_den ); - -/** - * It will copy the crop properties from a video_format_t to another. - */ -VLC_API void video_format_CopyCrop( video_format_t *, const video_format_t * ); - -/** - * It will compute the crop/ar properties when scaling. - */ -VLC_API void video_format_ScaleCropAr( video_format_t *, const video_format_t * ); - -/** - * This function will check if the first video format is similar - * to the second one. - */ -VLC_API bool video_format_IsSimilar( const video_format_t *, const video_format_t * ); - -/** - * It prints details about the given video_format_t - */ -VLC_API void video_format_Print( vlc_object_t *, const char *, const video_format_t * ); - -/** - * subtitles format description - */ -struct subs_format_t -{ - /* the character encoding of the text of the subtitle. - * all gettext recognized shorts can be used */ - char *psz_encoding; - - - int i_x_origin; /**< x coordinate of the subtitle. 0 = left */ - int i_y_origin; /**< y coordinate of the subtitle. 0 = top */ - - struct - { - /* */ - uint32_t palette[16+1]; - - /* the width of the original movie the spu was extracted from */ - int i_original_frame_width; - /* the height of the original movie the spu was extracted from */ - int i_original_frame_height; - } spu; - - struct - { - int i_id; - } dvb; - struct - { - int i_magazine; - int i_page; - } teletext; -}; - -/** - * ES language definition - */ -typedef struct extra_languages_t -{ - char *psz_language; - char *psz_description; -} extra_languages_t; - -/** - * ES format definition - */ -struct es_format_t -{ - int i_cat; /**< ES category @see es_format_category_e */ - vlc_fourcc_t i_codec; /**< FOURCC value as used in vlc */ - vlc_fourcc_t i_original_fourcc; /**< original FOURCC from the container */ - - int i_id; /**< es identifier, where means - -1: let the core mark the right id - >=0: valid id */ - int i_group; /**< group identifier, where means: - -1 : standalone - >= 0 then a "group" (program) is created - for each value */ - int i_priority; /**< priority, where means: - -2 : mean not selectable by the users - -1 : mean not selected by default even - when no other stream - >=0: priority */ - - char *psz_language; /**< human readible language name */ - char *psz_description; /**< human readible description of language */ - int i_extra_languages; /**< length in bytes of extra language data pointer */ - extra_languages_t *p_extra_languages; /**< extra language data needed by some decoders */ - - audio_format_t audio; /**< description of audio format */ - audio_replay_gain_t audio_replay_gain; /*< audio replay gain information */ - video_format_t video; /**< description of video format */ - subs_format_t subs; /**< description of subtitle format */ - - unsigned int i_bitrate; /**< bitrate of this ES */ - int i_profile; /**< codec specific information (like real audio flavor, mpeg audio layer, h264 profile ...) */ - int i_level; /**< codec specific information: indicates maximum restrictions on the stream (resolution, bitrate, codec features ...) */ - - bool b_packetized; /**< whether the data is packetized (ie. not truncated) */ - int i_extra; /**< length in bytes of extra data pointer */ - void *p_extra; /**< extra data needed by some decoders or muxers */ - -}; - -/** ES Categories */ -enum es_format_category_e -{ - UNKNOWN_ES = 0x00, - VIDEO_ES = 0x01, - AUDIO_ES = 0x02, - SPU_ES = 0x03, - NAV_ES = 0x04, -}; - -/** - * This function will fill all RGB shift from RGB masks. - */ -VLC_API void video_format_FixRgb( video_format_t * ); - -/** - * This function will initialize a es_format_t structure. - */ -VLC_API void es_format_Init( es_format_t *, int i_cat, vlc_fourcc_t i_codec ); - -/** - * This function will initialize a es_format_t structure from a video_format_t. - */ -VLC_API void es_format_InitFromVideo( es_format_t *, const video_format_t * ); - -/** - * This functions will copy a es_format_t. - */ -VLC_API int es_format_Copy( es_format_t *p_dst, const es_format_t *p_src ); - -/** - * This function will clean up a es_format_t and release all associated - * resources. - * You can call it multiple times on the same structure. - */ -VLC_API void es_format_Clean( es_format_t *fmt ); - -/** - * This function will check if the first ES format is similar - * to the second one. - * - * All descriptive fields are ignored. - */ -VLC_API bool es_format_IsSimilar( const es_format_t *, const es_format_t * ); - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_es_out.h b/source/vlc/cpp/include/vlc/plugins/vlc_es_out.h deleted file mode 100644 index 8e2bad184..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_es_out.h +++ /dev/null @@ -1,163 +0,0 @@ -/***************************************************************************** - * vlc_es_out.h: es_out (demuxer output) descriptor, queries and methods - ***************************************************************************** - * Copyright (C) 1999-2004 VLC authors and VideoLAN - * $Id: cf1abcec08467eb495ad62474e055c1500f358b6 $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_ES_OUT_H -#define VLC_ES_OUT_H 1 - -/** - * \file - * This file defines functions and structures for handling es_out in stream output - */ - -/** - * \defgroup es out Es Out - * @{ - */ - -enum es_out_query_e -{ - /* set ES selected for the es category (audio/video/spu) */ - ES_OUT_SET_ES, /* arg1= es_out_id_t* */ - ES_OUT_RESTART_ES, /* arg1= es_out_id_t* */ - - /* set 'default' tag on ES (copied across from container) */ - ES_OUT_SET_ES_DEFAULT, /* arg1= es_out_id_t* */ - - /* force selection/unselection of the ES (bypass current mode) */ - ES_OUT_SET_ES_STATE,/* arg1= es_out_id_t* arg2=bool */ - ES_OUT_GET_ES_STATE,/* arg1= es_out_id_t* arg2=bool* */ - - /* */ - ES_OUT_SET_GROUP, /* arg1= int */ - - /* PCR handling, DTS/PTS will be automatically computed using thoses PCR - * XXX: SET_PCR(_GROUP) are in charge of the pace control. They will wait - * to slow down the demuxer so that it reads at the right speed. - * XXX: if you want PREROLL just call ES_OUT_SET_NEXT_DISPLAY_TIME and send - * as you would normally do. - */ - ES_OUT_SET_PCR, /* arg1=int64_t i_pcr(microsecond!) (using default group 0)*/ - ES_OUT_SET_GROUP_PCR, /* arg1= int i_group, arg2=int64_t i_pcr(microsecond!)*/ - ES_OUT_RESET_PCR, /* no arg */ - - /* Try not to use this one as it is a bit hacky */ - ES_OUT_SET_ES_FMT, /* arg1= es_out_id_t* arg2=es_format_t* */ - - /* Allow preroll of data (data with dts/pts < i_pts for all ES will be decoded but not displayed */ - ES_OUT_SET_NEXT_DISPLAY_TIME, /* arg1=int64_t i_pts(microsecond) */ - /* Set meta data for group (dynamic) (The vlc_meta_t is not modified nor released) */ - ES_OUT_SET_GROUP_META, /* arg1=int i_group arg2=const vlc_meta_t */ - /* Set epg for group (dynamic) (The vlc_epg_t is not modified nor released) */ - ES_OUT_SET_GROUP_EPG, /* arg1=int i_group arg2=const vlc_epg_t */ - /* */ - ES_OUT_DEL_GROUP, /* arg1=int i_group */ - - /* Set scrambled state for one es */ - ES_OUT_SET_ES_SCRAMBLED_STATE, /* arg1=int i_group arg2=es_out_id_t* */ - - /* Stop any buffering being done, and ask if es_out has no more data to - * play. - * It will not block and so MUST be used carrefully. The only good reason - * is for interactive playback (like for DVD menu). - * XXX You SHALL call ES_OUT_RESET_PCR before any other es_out_Control/Send calls. */ - ES_OUT_GET_EMPTY, /* arg1=bool* res=cannot fail */ - - /* Set global meta data (The vlc_meta_t is not modified nor released) */ - ES_OUT_SET_META, /* arg1=const vlc_meta_t * */ - - /* PCR system clock manipulation for external clock synchronization */ - ES_OUT_GET_PCR_SYSTEM, /* arg1=mtime_t *, arg2=mtime_t * res=can fail */ - ES_OUT_MODIFY_PCR_SYSTEM, /* arg1=int is_absolute, arg2=mtime_t, res=can fail */ - - /* First value usable for private control */ - ES_OUT_PRIVATE_START = 0x10000, -}; - -struct es_out_t -{ - es_out_id_t *(*pf_add) ( es_out_t *, const es_format_t * ); - int (*pf_send) ( es_out_t *, es_out_id_t *, block_t * ); - void (*pf_del) ( es_out_t *, es_out_id_t * ); - int (*pf_control)( es_out_t *, int i_query, va_list ); - void (*pf_destroy)( es_out_t * ); - - es_out_sys_t *p_sys; -}; - -VLC_USED -static inline es_out_id_t * es_out_Add( es_out_t *out, const es_format_t *fmt ) -{ - return out->pf_add( out, fmt ); -} - -static inline void es_out_Del( es_out_t *out, es_out_id_t *id ) -{ - out->pf_del( out, id ); -} - -static inline int es_out_Send( es_out_t *out, es_out_id_t *id, - block_t *p_block ) -{ - return out->pf_send( out, id, p_block ); -} - -static inline int es_out_vaControl( es_out_t *out, int i_query, va_list args ) -{ - return out->pf_control( out, i_query, args ); -} - -static inline int es_out_Control( es_out_t *out, int i_query, ... ) -{ - va_list args; - int i_result; - - va_start( args, i_query ); - i_result = es_out_vaControl( out, i_query, args ); - va_end( args ); - return i_result; -} - -static inline void es_out_Delete( es_out_t *p_out ) -{ - p_out->pf_destroy( p_out ); -} - -static inline int es_out_ControlSetMeta( es_out_t *out, const vlc_meta_t *p_meta ) -{ - return es_out_Control( out, ES_OUT_SET_META, p_meta ); -} - -static inline int es_out_ControlGetPcrSystem( es_out_t *out, mtime_t *pi_system, mtime_t *pi_delay ) -{ - return es_out_Control( out, ES_OUT_GET_PCR_SYSTEM, pi_system, pi_delay ); -} -static inline int es_out_ControlModifyPcrSystem( es_out_t *out, bool b_absolute, mtime_t i_system ) -{ - return es_out_Control( out, ES_OUT_MODIFY_PCR_SYSTEM, b_absolute, i_system ); -} - -/** - * @} - */ - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_events.h b/source/vlc/cpp/include/vlc/plugins/vlc_events.h deleted file mode 100644 index def27fc66..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_events.h +++ /dev/null @@ -1,253 +0,0 @@ -/***************************************************************************** - * vlc_events.h: events definitions - * Interface used to send events. - ***************************************************************************** - * Copyright (C) 2007 VLC authors and VideoLAN - * $Id: 9e37f7f5753243d52a4fba2616d958598083a53f $ - * - * Authors: Pierre d'Herbemont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_EVENTS_H -# define VLC_EVENTS_H - -#include -#include - -/** - * \file - * This file is the interface definition for events - * (implementation in src/misc/events.c) - */ - -/***************************************************************************** - * Documentation - *****************************************************************************/ -/* - **** Background - * - * This implements a way to send and receive event for an object (which can be - * a simple C struct or less). - * - * This is in direct concurrency with the Variable based Callback - * (see src/misc/variables.c). - * - * It has the following advantages over Variable based Callback: - * - No need to implement the whole VLC_COMMON_MEMBERS in the object, - * thus it reduce it size. This is especially true for input_item_t which - * doesn't have VLC_COMMON_MEMBERS. This is the first reason of existence of - * this implementation. - * - Libvlc can easily be based upon that. - * - Existing event are clearly declared (in include/vlc_events.h) - * - * - **** Example usage - * - * (vlc_cool_object_t doesn't need to have the VLC_COMMON_MEMBERS.) - * - * struct vlc_cool_object_t - * { - * ... - * vlc_event_manager_t p_event_manager; - * ... - * } - * - * vlc_my_cool_object_new() - * { - * ... - * vlc_event_manager_init( &p_self->p_event_manager, p_self, p_a_libvlc_object ); - * vlc_event_manager_register_event_type(p_self->p_event_manager, - * vlc_MyCoolObjectDidSomething, p_e) - * ... - * } - * - * vlc_my_cool_object_release() - * { - * ... - * vlc_event_manager_fini( &p_self->p_event_manager ); - * ... - * } - * - * vlc_my_cool_object_do_something() - * { - * ... - * vlc_event_t event; - * event.type = vlc_MyCoolObjectDidSomething; - * event.u.my_cool_object_did_something.what_it_did = kSomething; - * vlc_event_send( &p_self->p_event_manager, &event ); - * } - * */ - - /***************************************************************************** - * Event Type - *****************************************************************************/ - -/* Private structure defined in misc/events.c */ -struct vlc_event_listeners_group_t; - -/* Event manager type */ -typedef struct vlc_event_manager_t -{ - void * p_obj; - vlc_mutex_t object_lock; - vlc_mutex_t event_sending_lock; - DECL_ARRAY(struct vlc_event_listeners_group_t *) listeners_groups; -} vlc_event_manager_t; - -/* List of event */ -typedef enum vlc_event_type_t { - /* Input (thread) events */ - vlc_InputStateChanged, - vlc_InputSelectedStreamChanged, - - /* Input item events */ - vlc_InputItemMetaChanged, - vlc_InputItemSubItemAdded, - vlc_InputItemSubItemTreeAdded, - vlc_InputItemDurationChanged, - vlc_InputItemPreparsedChanged, - vlc_InputItemNameChanged, - vlc_InputItemInfoChanged, - vlc_InputItemErrorWhenReadingChanged, - - /* Service Discovery event */ - vlc_ServicesDiscoveryItemAdded, - vlc_ServicesDiscoveryItemRemoved, - vlc_ServicesDiscoveryItemRemoveAll, - vlc_ServicesDiscoveryStarted, - vlc_ServicesDiscoveryEnded -} vlc_event_type_t; - -/* Event definition */ -typedef struct vlc_event_t -{ - vlc_event_type_t type; - void * p_obj; /* Sender object, automatically filled by vlc_event_send() */ - union vlc_event_type_specific - { - /* Input (thread) events */ - struct vlc_input_state_changed - { - int new_state; - } input_state_changed; - struct vlc_input_selected_stream_changed - { - void * unused; - } input_selected_stream_changed; - - /* Input item events */ - struct vlc_input_item_meta_changed - { - vlc_meta_type_t meta_type; - } input_item_meta_changed; - struct vlc_input_item_subitem_added - { - input_item_t * p_new_child; - } input_item_subitem_added; - struct vlc_input_item_subitem_tree_added - { - input_item_node_t * p_root; - } input_item_subitem_tree_added; - struct vlc_input_item_duration_changed - { - mtime_t new_duration; - } input_item_duration_changed; - struct vlc_input_item_preparsed_changed - { - int new_status; - } input_item_preparsed_changed; - struct vlc_input_item_name_changed - { - const char * new_name; - } input_item_name_changed; - struct vlc_input_item_info_changed - { - void * unused; - } input_item_info_changed; - struct input_item_error_when_reading_changed - { - bool new_value; - } input_item_error_when_reading_changed; - - /* Service discovery events */ - struct vlc_services_discovery_item_added - { - input_item_t * p_new_item; - const char * psz_category; - } services_discovery_item_added; - struct vlc_services_discovery_item_removed - { - input_item_t * p_item; - } services_discovery_item_removed; - struct vlc_services_discovery_started - { - void * unused; - } services_discovery_started; - struct vlc_services_discovery_ended - { - void * unused; - } services_discovery_ended; - - } u; -} vlc_event_t; - -/* Event callback type */ -typedef void ( *vlc_event_callback_t )( const vlc_event_t *, void * ); - - /***************************************************************************** - * Event manager - *****************************************************************************/ - -/* - * p_obj points to the object that owns the event manager, and from - * which events are sent - */ -VLC_API int vlc_event_manager_init( vlc_event_manager_t * p_em, void * p_obj ); - -/* - * Destroy - */ -VLC_API void vlc_event_manager_fini( vlc_event_manager_t * p_em ); - -/* - * Tells a specific event manager that it will handle event_type object - */ -VLC_API int vlc_event_manager_register_event_type( vlc_event_manager_t * p_em, - vlc_event_type_t ); - -/* - * Send an event to the listener attached to this p_em. - */ -VLC_API void vlc_event_send( vlc_event_manager_t * p_em, vlc_event_t * ); - -/* - * Add a callback for an event. - */ -VLC_API int vlc_event_attach( vlc_event_manager_t * p_event_manager, - vlc_event_type_t event_type, - vlc_event_callback_t pf_callback, - void *p_user_data ); - -/* - * Remove a callback for an event. - */ -VLC_API void vlc_event_detach( vlc_event_manager_t *p_event_manager, - vlc_event_type_t event_type, - vlc_event_callback_t pf_callback, - void *p_user_data ); - -#endif /* VLC_EVENTS_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_extensions.h b/source/vlc/cpp/include/vlc/plugins/vlc_extensions.h deleted file mode 100644 index 1f75a6e74..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_extensions.h +++ /dev/null @@ -1,318 +0,0 @@ -/***************************************************************************** - * vlc_extensions.h: Extensions (meta data, web information, ...) - ***************************************************************************** - * Copyright (C) 2009-2010 VideoLAN and authors - * $Id: 1b3b90a8b30afe0d11fb3b2c5e27f97619b13e81 $ - * - * Authors: Jean-Philippe André < jpeg # videolan.org > - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_EXTENSIONS_H -#define VLC_EXTENSIONS_H - -#include "vlc_common.h" -#include "vlc_arrays.h" - -/* Structures */ -typedef struct extensions_manager_sys_t extensions_manager_sys_t; -typedef struct extensions_manager_t extensions_manager_t; -typedef struct extension_sys_t extension_sys_t; - -/** Extension descriptor: name, title, author, ... */ -typedef struct extension_t { - /* Below, (ro) means read-only for the GUI */ - char *psz_name; /**< Real name of the extension (ro) */ - - char *psz_title; /**< Display title (ro) */ - char *psz_author; /**< Author of the extension (ro) */ - char *psz_version; /**< Version (ro) */ - char *psz_url; /**< A URL to the official page (ro) */ - char *psz_description; /**< Full description (ro) */ - char *psz_shortdescription; /**< Short description (eg. 1 line) (ro) */ - char *p_icondata; /**< Embedded data for the icon (ro) */ - int i_icondata_size; /**< Size of that data */ - - extension_sys_t *p_sys; /**< Reserved for the manager module */ -} extension_t; - -/** Extensions manager object */ -struct extensions_manager_t -{ - VLC_COMMON_MEMBERS - - module_t *p_module; /**< Extensions manager module */ - extensions_manager_sys_t *p_sys; /**< Reserved for the module */ - - DECL_ARRAY(extension_t*) extensions; /**< Array of extension descriptors */ - vlc_mutex_t lock; /**< A lock for the extensions array */ - - /** Control, see extension_Control */ - int ( *pf_control ) ( extensions_manager_t*, int, va_list ); -}; - -/* Control commands */ -enum -{ - /* Control extensions */ - EXTENSION_ACTIVATE, /**< arg1: extension_t* */ - EXTENSION_DEACTIVATE, /**< arg1: extension_t* */ - EXTENSION_IS_ACTIVATED, /**< arg1: extension_t*, arg2: bool* */ - EXTENSION_HAS_MENU, /**< arg1: extension_t* */ - EXTENSION_GET_MENU, /**< arg1: extension_t*, arg2: char***, arg3: uint16_t** */ - EXTENSION_TRIGGER_ONLY, /**< arg1: extension_t*, arg2: bool* */ - EXTENSION_TRIGGER, /**< arg1: extension_t* */ - EXTENSION_TRIGGER_MENU, /**< arg1: extension_t*, int (uint16_t) */ - EXTENSION_SET_INPUT, /**< arg1: extension_t*, arg2 (input_thread_t*) */ - EXTENSION_PLAYING_CHANGED, /**< arg1: extension_t*, arg2 int( playing status ) */ - EXTENSION_META_CHANGED, /**< arg1: extension_t*, arg2 (input_item_t*) */ -}; - -/** - * Control function for extensions. - * Every GUI -> extension command will go through this function. - **/ -static inline int extension_Control( extensions_manager_t *p_mgr, - int i_control, ... ) -{ - va_list args; - va_start( args, i_control ); - int i_ret = p_mgr->pf_control( p_mgr, i_control, args ); - va_end( args ); - return i_ret; -} - -/** - * Helper for extension_HasMenu, extension_IsActivated... - * Do not use. - **/ -static inline bool __extension_GetBool( extensions_manager_t *p_mgr, - extension_t *p_ext, - int i_flag, - bool b_default ) -{ - bool b = b_default; - int i_ret = extension_Control( p_mgr, i_flag, p_ext, &b ); - if( i_ret != VLC_SUCCESS ) - return b_default; - else - return b; -} - -/** Activate or trigger an extension */ -#define extension_Activate( mgr, ext ) \ - extension_Control( mgr, EXTENSION_ACTIVATE, ext ) - -/** Trigger the extension. Attention: NOT multithreaded! */ -#define extension_Trigger( mgr, ext ) \ - extension_Control( mgr, EXTENSION_TRIGGER, ext ) - -/** Deactivate an extension */ -#define extension_Deactivate( mgr, ext ) \ - extension_Control( mgr, EXTENSION_DEACTIVATE, ext ) - -/** Is this extension activated? */ -#define extension_IsActivated( mgr, ext ) \ - __extension_GetBool( mgr, ext, EXTENSION_IS_ACTIVATED, false ) - -/** Does this extension have a sub-menu? */ -#define extension_HasMenu( mgr, ext ) \ - __extension_GetBool( mgr, ext, EXTENSION_HAS_MENU, false ) - -/** Get this extension's sub-menu */ -static inline int extension_GetMenu( extensions_manager_t *p_mgr, - extension_t *p_ext, - char ***pppsz, - uint16_t **ppi ) -{ - return extension_Control( p_mgr, EXTENSION_GET_MENU, p_ext, pppsz, ppi ); -} - -/** Trigger an entry of the extension menu */ -static inline int extension_TriggerMenu( extensions_manager_t *p_mgr, - extension_t *p_ext, - uint16_t i ) -{ - return extension_Control( p_mgr, EXTENSION_TRIGGER_MENU, p_ext, i ); -} - -/** Trigger an entry of the extension menu */ -static inline int extension_SetInput( extensions_manager_t *p_mgr, - extension_t *p_ext, - struct input_thread_t *p_input ) -{ - return extension_Control( p_mgr, EXTENSION_SET_INPUT, p_ext, p_input ); -} - -static inline int extension_PlayingChanged( extensions_manager_t *p_mgr, - extension_t *p_ext, - int state ) -{ - return extension_Control( p_mgr, EXTENSION_PLAYING_CHANGED, p_ext, state ); -} - -static inline int extension_MetaChanged( extensions_manager_t *p_mgr, - extension_t *p_ext ) -{ - return extension_Control( p_mgr, EXTENSION_META_CHANGED, p_ext ); -} - -/** Can this extension only be triggered but not activated? - Not compatible with HasMenu */ -#define extension_TriggerOnly( mgr, ext ) \ - __extension_GetBool( mgr, ext, EXTENSION_TRIGGER_ONLY, false ) - - -/***************************************************************************** - * Extension dialogs - *****************************************************************************/ - -typedef struct extension_dialog_t extension_dialog_t; -typedef struct extension_widget_t extension_widget_t; - -/// User interface event types -typedef enum -{ - EXTENSION_EVENT_CLICK, ///< Click on a widget: data = widget - EXTENSION_EVENT_CLOSE, ///< Close the dialog: no data - // EXTENSION_EVENT_SELECTION_CHANGED, - // EXTENSION_EVENT_TEXT_CHANGED, -} extension_dialog_event_e; - -/// Command to pass to the extension dialog owner -typedef struct -{ - extension_dialog_t *p_dlg; ///< Destination dialog - extension_dialog_event_e event; ///< Event, @see extension_dialog_event_e - void *p_data; ///< Opaque data to send -} extension_dialog_command_t; - - -/// Dialog descriptor for extensions -struct extension_dialog_t -{ - vlc_object_t *p_object; ///< Owner object (callback on "dialog-event") - - char *psz_title; ///< Title for the Dialog (in TitleBar) - int i_width; ///< Width hint in pixels (may be discarded) - int i_height; ///< Height hint in pixels (may be discarded) - - DECL_ARRAY(extension_widget_t*) widgets; ///< Widgets owned by the dialog - - bool b_hide; ///< Hide this dialog (!b_hide shows) - bool b_kill; ///< Kill this dialog - - void *p_sys; ///< Dialog private pointer - void *p_sys_intf; ///< GUI private pointer - vlc_mutex_t lock; ///< Dialog mutex - vlc_cond_t cond; ///< Signaled == UI is done working on the dialog -}; - -/** Send a command to an Extension dialog - * @param p_dialog The dialog - * @param event @see extension_dialog_event_e for a list of possible events - * @param data Optional opaque data, @see extension_dialog_event_e - * @return VLC error code - **/ -static inline int extension_DialogCommand( extension_dialog_t* p_dialog, - extension_dialog_event_e event, - void *data ) -{ - extension_dialog_command_t command; - command.p_dlg = p_dialog; - command.event = event; - command.p_data = data; - var_SetAddress( p_dialog->p_object, "dialog-event", &command ); - return VLC_SUCCESS; -} - -/** Close the dialog - * @param dlg The dialog - **/ -#define extension_DialogClosed( dlg ) \ - extension_DialogCommand( dlg, EXTENSION_EVENT_CLOSE, NULL ) - -/** Forward a click on a widget - * @param dlg The dialog - * @param wdg The widget (button, ...) - **/ -#define extension_WidgetClicked( dlg, wdg ) \ - extension_DialogCommand( dlg, EXTENSION_EVENT_CLICK, wdg ) - -/// Widget types -typedef enum -{ - EXTENSION_WIDGET_LABEL, ///< Text label - EXTENSION_WIDGET_BUTTON, ///< Clickable button - EXTENSION_WIDGET_IMAGE, ///< Image label (psz_text is local URI) - EXTENSION_WIDGET_HTML, ///< HTML or rich text area (non editable) - EXTENSION_WIDGET_TEXT_FIELD, ///< Editable text line for user input - EXTENSION_WIDGET_PASSWORD, ///< Editable password input (******) - EXTENSION_WIDGET_DROPDOWN, ///< Drop-down box - EXTENSION_WIDGET_LIST, ///< Vertical list box (of strings) - EXTENSION_WIDGET_CHECK_BOX, ///< Checkable box with label - EXTENSION_WIDGET_SPIN_ICON, ///< A "loading..." spinning icon -} extension_widget_type_e; - -/// Widget descriptor for extensions -struct extension_widget_t -{ - /* All widgets */ - extension_widget_type_e type; ///< Type of the widget - char *psz_text; ///< Text. May be NULL or modified by the UI - - /* Drop-down & List widgets */ - struct extension_widget_value_t { - int i_id; ///< Identifier for the extension module - // (weird behavior may occur if not unique) - char *psz_text; ///< String value - bool b_selected; ///< True if this item is selected - struct extension_widget_value_t *p_next; ///< Next value or NULL - } *p_values; ///< Chained list of values (Drop-down/List) - - /* Check-box */ - bool b_checked; ///< Is this entry checked - - /* Layout */ - int i_row; ///< Row in the grid - int i_column; ///< Column in the grid - int i_horiz_span; ///< Horizontal size of the object - int i_vert_span; ///< Vertical size of the object - int i_width; ///< Width hint - int i_height; ///< Height hint - bool b_hide; ///< Hide this widget (make it invisible) - - /* Spinning icon */ - int i_spin_loops; ///< Number of loops to play (-1 = infinite, - // 0 = stop animation) - - /* Orders */ - bool b_kill; ///< Destroy this widget - bool b_update; ///< Update this widget - - /* Misc */ - void *p_sys; ///< Reserved for the extension manager - void *p_sys_intf; ///< Reserved for the UI, but: - // NULL means the UI has destroyed the widget - // or has not created it yet - extension_dialog_t *p_dialog; ///< Parent dialog -}; - -VLC_API int dialog_ExtensionUpdate(vlc_object_t*, extension_dialog_t *); -#define dialog_ExtensionUpdate(o, d) dialog_ExtensionUpdate(VLC_OBJECT(o), d) - -#endif /* VLC_EXTENSIONS_H */ - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_filter.h b/source/vlc/cpp/include/vlc/plugins/vlc_filter.h deleted file mode 100644 index 91a14a87e..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_filter.h +++ /dev/null @@ -1,419 +0,0 @@ -/***************************************************************************** - * vlc_filter.h: filter related structures and functions - ***************************************************************************** - * Copyright (C) 1999-2008 VLC authors and VideoLAN - * $Id: 320cbac3a4a5b8461ec41eabd77f323bbbc509dd $ - * - * Authors: Gildas Bazin - * Antoine Cellerier - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_FILTER_H -#define VLC_FILTER_H 1 - -#include -#include -#include -#include - -/** - * \file - * This file defines the structure and types used by video and audio filters - */ - -typedef struct filter_owner_sys_t filter_owner_sys_t; - -/** Structure describing a filter - * @warning BIG FAT WARNING : the code relies on the first 4 members of - * filter_t and decoder_t to be the same, so if you have anything to add, - * do it at the end of the structure. - */ -struct filter_t -{ - VLC_COMMON_MEMBERS - - /* Module properties */ - module_t * p_module; - filter_sys_t * p_sys; - - /* Input format */ - es_format_t fmt_in; - - /* Output format of filter */ - es_format_t fmt_out; - bool b_allow_fmt_out_change; - - /* Filter configuration */ - config_chain_t * p_cfg; - - union - { - struct - { - picture_t * (*pf_filter) ( filter_t *, picture_t * ); - void (*pf_flush)( filter_t * ); - picture_t * (*pf_buffer_new) ( filter_t * ); - void (*pf_buffer_del) ( filter_t *, picture_t * ); - /* Filter mouse state. - * - * If non-NULL, you must convert from output to input formats: - * - If VLC_SUCCESS is returned, the mouse state is propagated. - * - Otherwise, the mouse change is not propagated. - * If NULL, the mouse state is considered unchanged and will be - * propagated. - */ - int (*pf_mouse)( filter_t *, vlc_mouse_t *, - const vlc_mouse_t *p_old, - const vlc_mouse_t *p_new ); - } video; -#define pf_video_filter u.video.pf_filter -#define pf_video_flush u.video.pf_flush -#define pf_video_mouse u.video.pf_mouse -#define pf_video_buffer_new u.video.pf_buffer_new -#define pf_video_buffer_del u.video.pf_buffer_del - - struct - { - block_t * (*pf_filter) ( filter_t *, block_t * ); - } audio; -#define pf_audio_filter u.audio.pf_filter - - struct - { - void (*pf_blend) ( filter_t *, picture_t *, - const picture_t *, int, int, int ); - } blend; -#define pf_video_blend u.blend.pf_blend - - struct - { - subpicture_t * (*pf_source) ( filter_t *, mtime_t ); - subpicture_t * (*pf_buffer_new)( filter_t * ); - void (*pf_buffer_del)( filter_t *, subpicture_t * ); - int (*pf_mouse) ( filter_t *, - const vlc_mouse_t *p_old, - const vlc_mouse_t *p_new, - const video_format_t * ); - } sub; -#define pf_sub_source u.sub.pf_source -#define pf_sub_buffer_new u.sub.pf_buffer_new -#define pf_sub_buffer_del u.sub.pf_buffer_del -#define pf_sub_mouse u.sub.pf_mouse - - struct - { - subpicture_t * (*pf_filter) ( filter_t *, subpicture_t * ); - } subf; -#define pf_sub_filter u.subf.pf_filter - - struct - { - int (*pf_text) ( filter_t *, subpicture_region_t *, - subpicture_region_t *, - const vlc_fourcc_t * ); - int (*pf_html) ( filter_t *, subpicture_region_t *, - subpicture_region_t *, - const vlc_fourcc_t * ); - } render; -#define pf_render_text u.render.pf_text -#define pf_render_html u.render.pf_html - - } u; - - /* Input attachments - * XXX use filter_GetInputAttachments */ - int (*pf_get_attachments)( filter_t *, input_attachment_t ***, int * ); - - /* Private structure for the owner of the decoder */ - filter_owner_sys_t *p_owner; -}; - -/** - * This function will return a new picture usable by p_filter as an output - * buffer. You have to release it using filter_DeletePicture or by returning - * it to the caller as a pf_video_filter return value. - * Provided for convenience. - * - * \param p_filter filter_t object - * \return new picture on success or NULL on failure - */ -static inline picture_t *filter_NewPicture( filter_t *p_filter ) -{ - picture_t *p_picture = p_filter->pf_video_buffer_new( p_filter ); - if( !p_picture ) - msg_Warn( p_filter, "can't get output picture" ); - return p_picture; -} - -/** - * This function will release a picture create by filter_NewPicture. - * Provided for convenience. - * - * \param p_filter filter_t object - * \param p_picture picture to be deleted - */ -static inline void filter_DeletePicture( filter_t *p_filter, picture_t *p_picture ) -{ - p_filter->pf_video_buffer_del( p_filter, p_picture ); -} - -/** - * This function will flush the state of a video filter. - */ -static inline void filter_FlushPictures( filter_t *p_filter ) -{ - if( p_filter->pf_video_flush ) - p_filter->pf_video_flush( p_filter ); -} - -/** - * This function will return a new subpicture usable by p_filter as an output - * buffer. You have to release it using filter_DeleteSubpicture or by returning - * it to the caller as a pf_sub_source return value. - * Provided for convenience. - * - * \param p_filter filter_t object - * \return new subpicture - */ -static inline subpicture_t *filter_NewSubpicture( filter_t *p_filter ) -{ - subpicture_t *p_subpicture = p_filter->pf_sub_buffer_new( p_filter ); - if( !p_subpicture ) - msg_Warn( p_filter, "can't get output subpicture" ); - return p_subpicture; -} - -/** - * This function will release a subpicture create by filter_NewSubicture. - * Provided for convenience. - * - * \param p_filter filter_t object - * \param p_subpicture to be released - */ -static inline void filter_DeleteSubpicture( filter_t *p_filter, subpicture_t *p_subpicture ) -{ - p_filter->pf_sub_buffer_del( p_filter, p_subpicture ); -} - -/** - * This function gives all input attachments at once. - * - * You MUST release the returned values - */ -static inline int filter_GetInputAttachments( filter_t *p_filter, - input_attachment_t ***ppp_attachment, - int *pi_attachment ) -{ - if( !p_filter->pf_get_attachments ) - return VLC_EGENERIC; - return p_filter->pf_get_attachments( p_filter, - ppp_attachment, pi_attachment ); -} - -/** - * It creates a blend filter. - * - * Only the chroma properties of the dest format is used (chroma - * type, rgb masks and shifts) - */ -VLC_API filter_t * filter_NewBlend( vlc_object_t *, const video_format_t *p_dst_chroma ) VLC_USED; - -/** - * It configures blend filter parameters that are allowed to changed - * after the creation. - */ -VLC_API int filter_ConfigureBlend( filter_t *, int i_dst_width, int i_dst_height, const video_format_t *p_src ); - -/** - * It blends a picture into another one. - * - * The input picture is not modified and not released. - */ -VLC_API int filter_Blend( filter_t *, picture_t *p_dst, int i_dst_x, int i_dst_y, const picture_t *p_src, int i_alpha ); - -/** - * It destroys a blend filter created by filter_NewBlend. - */ -VLC_API void filter_DeleteBlend( filter_t * ); - -/** - * Create a picture_t *(*)( filter_t *, picture_t * ) compatible wrapper - * using a void (*)( filter_t *, picture_t *, picture_t * ) function - * - * Currently used by the chroma video filters - */ -#define VIDEO_FILTER_WRAPPER( name ) \ - static picture_t *name ## _Filter ( filter_t *p_filter, \ - picture_t *p_pic ) \ - { \ - picture_t *p_outpic = filter_NewPicture( p_filter ); \ - if( p_outpic ) \ - { \ - name( p_filter, p_pic, p_outpic ); \ - picture_CopyProperties( p_outpic, p_pic ); \ - } \ - picture_Release( p_pic ); \ - return p_outpic; \ - } - -/** - * Filter chain management API - * The filter chain management API is used to dynamically construct filters - * and add them in a chain. - */ - -typedef struct filter_chain_t filter_chain_t; - -/** - * Create new filter chain - * - * \param p_object pointer to a vlc object - * \param psz_capability vlc capability of filters in filter chain - * \param b_allow_format_fmt_change allow changing of fmt - * \param pf_buffer_allocation_init callback function to initialize buffer allocations - * \param pf_buffer_allocation_clear callback function to clear buffer allocation initialization - * \param p_buffer_allocation_data pointer to private allocation data - * \return pointer to a filter chain - */ -VLC_API filter_chain_t * filter_chain_New( vlc_object_t *, const char *, bool, int (*)( filter_t *, void * ), void (*)( filter_t * ), void * ) VLC_USED; -#define filter_chain_New( a, b, c, d, e, f ) filter_chain_New( VLC_OBJECT( a ), b, c, d, e, f ) - -/** - * Delete filter chain will delete all filters in the chain and free all - * allocated data. The pointer to the filter chain is then no longer valid. - * - * \param p_chain pointer to filter chain - */ -VLC_API void filter_chain_Delete( filter_chain_t * ); - -/** - * Reset filter chain will delete all filters in the chain and - * reset p_fmt_in and p_fmt_out to the new values. - * - * \param p_chain pointer to filter chain - * \param p_fmt_in new fmt_in params - * \param p_fmt_out new fmt_out params - */ -VLC_API void filter_chain_Reset( filter_chain_t *, const es_format_t *, const es_format_t * ); - -/** - * Append filter to the end of the chain. - * - * \param p_chain pointer to filter chain - * \param psz_name name of filter - * \param p_cfg - * \param p_fmt_in input es_format_t - * \param p_fmt_out output es_format_t - * \return pointer to filter chain - */ -VLC_API filter_t * filter_chain_AppendFilter( filter_chain_t *, const char *, config_chain_t *, const es_format_t *, const es_format_t * ); - -/** - * Append new filter to filter chain from string. - * - * \param p_chain pointer to filter chain - * \param psz_string string of filters - * \return 0 for success - */ -VLC_API int filter_chain_AppendFromString( filter_chain_t *, const char * ); - -/** - * Delete filter from filter chain. This function also releases the filter - * object and unloads the filter modules. The pointer to p_filter is no - * longer valid after this function successfully returns. - * - * \param p_chain pointer to filter chain - * \param p_filter pointer to filter object - * \return VLC_SUCCESS on succes, else VLC_EGENERIC - */ -VLC_API int filter_chain_DeleteFilter( filter_chain_t *, filter_t * ); - -/** - * Get the number of filters in the filter chain. - * - * \param p_chain pointer to filter chain - * \return number of filters in this filter chain - */ -VLC_API int filter_chain_GetLength( filter_chain_t * ); - -/** - * Get last p_fmt_out in the chain. - * - * \param p_chain pointer to filter chain - * \return last p_fmt (es_format_t) of this filter chain - */ -VLC_API const es_format_t * filter_chain_GetFmtOut( filter_chain_t * ); - -/** - * Apply the filter chain to a video picture. - * - * \param p_chain pointer to filter chain - * \param p_picture picture to apply filters on - * \return modified picture after applying all video filters - */ -VLC_API picture_t * filter_chain_VideoFilter( filter_chain_t *, picture_t * ); - -/** - * Flush a video filter chain. - */ -VLC_API void filter_chain_VideoFlush( filter_chain_t * ); - -/** - * Apply the filter chain to a audio block. - * - * \param p_chain pointer to filter chain - * \param p_block audio frame to apply filters on - * \return modified audio frame after applying all audio filters - */ -VLC_API block_t * filter_chain_AudioFilter( filter_chain_t *, block_t * ); - -/** - * Apply filter chain to subpictures. - * - * \param p_chain pointer to filter chain - * \param display_date of subpictures - */ -VLC_API void filter_chain_SubSource( filter_chain_t *, mtime_t ); - -/** - * Apply filter chain to subpictures. - * - * \param p_chain pointer to filter chain - * \param p_subpicture subpicture to apply filters on - * \return modified subpicture after applying all subpicture filters - */ -VLC_API subpicture_t * filter_chain_SubFilter( filter_chain_t *, subpicture_t * ); - -/** - * Apply the filter chain to a mouse state. - * - * It will be applied from the output to the input. It makes sense only - * for a video filter chain. - * - * The vlc_mouse_t* pointers may be the same. - */ -VLC_API int filter_chain_MouseFilter( filter_chain_t *, vlc_mouse_t *, const vlc_mouse_t * ); - -/** - * Inform the filter chain of mouse state. - * - * It makes sense only for a sub source chain. - */ -VLC_API int filter_chain_MouseEvent( filter_chain_t *, const vlc_mouse_t *, const video_format_t * ); - -#endif /* _VLC_FILTER_H */ - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_fingerprinter.h b/source/vlc/cpp/include/vlc/plugins/vlc_fingerprinter.h deleted file mode 100644 index 0e7d19b03..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_fingerprinter.h +++ /dev/null @@ -1,92 +0,0 @@ -/***************************************************************************** - * vlc_fingerprinter.h: Fingerprinter abstraction layer - ***************************************************************************** - * Copyright (C) 2012 VLC authors and VideoLAN - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_FINGERPRINTER_H -# define VLC_FINGERPRINTER_H - -#include -#include -#include -#include - -# ifdef __cplusplus -extern "C" { -# endif - -typedef struct fingerprinter_sys_t fingerprinter_sys_t; - -struct fingerprint_request_t -{ - input_item_t *p_item; - unsigned int i_duration; /* track length hint in seconds, 0 if unkown */ - struct - { - char *psz_fingerprint; - vlc_array_t metas_array; - } results ; -}; -typedef struct fingerprint_request_t fingerprint_request_t; - -static inline fingerprint_request_t *fingerprint_request_New( input_item_t *p_item ) -{ - fingerprint_request_t *p_r = - ( fingerprint_request_t * ) calloc( 1, sizeof( fingerprint_request_t ) ); - if ( !p_r ) return NULL; - p_r->results.psz_fingerprint = NULL; - p_r->i_duration = 0; - vlc_gc_incref( p_item ); - p_r->p_item = p_item; - vlc_array_init( & p_r->results.metas_array ); /* shouldn't be needed */ - return p_r; -} - -static inline void fingerprint_request_Delete( fingerprint_request_t *p_f ) -{ - vlc_gc_decref( p_f->p_item ); - free( p_f->results.psz_fingerprint ); - for ( int i=0; i< vlc_array_count( & p_f->results.metas_array ) ; i++ ) - vlc_meta_Delete( (vlc_meta_t *) vlc_array_item_at_index( & p_f->results.metas_array, i ) ); - free( p_f ); -} - -struct fingerprinter_thread_t -{ - VLC_COMMON_MEMBERS - - /* Specific interfaces */ - fingerprinter_sys_t * p_sys; - - module_t * p_module; - void ( *pf_run ) ( struct fingerprinter_thread_t * ); - - void ( *pf_enqueue ) ( struct fingerprinter_thread_t *f, fingerprint_request_t *r ); - fingerprint_request_t * ( *pf_getresults ) ( struct fingerprinter_thread_t *f ); - void ( *pf_apply ) ( fingerprint_request_t *, int i_resultid ); -}; -typedef struct fingerprinter_thread_t fingerprinter_thread_t; - -VLC_API fingerprinter_thread_t *fingerprinter_Create( vlc_object_t *p_this ); -VLC_API void fingerprinter_Destroy( fingerprinter_thread_t *p_fingerprint ); - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_fixups.h b/source/vlc/cpp/include/vlc/plugins/vlc_fixups.h deleted file mode 100644 index 434058388..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_fixups.h +++ /dev/null @@ -1,344 +0,0 @@ -/***************************************************************************** - * vlc_fixups.h: portability fixups included from config.h - ***************************************************************************** - * Copyright © 1998-2008 the VideoLAN project - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file is a collection of portability fixes - */ - -#ifndef LIBVLC_FIXUPS_H -# define LIBVLC_FIXUPS_H 1 - -#if !defined (HAVE_GMTIME_R) || !defined (HAVE_LOCALTIME_R) -# include /* time_t */ -#endif - -#ifndef HAVE_LLDIV -typedef struct -{ - long long quot; /* Quotient. */ - long long rem; /* Remainder. */ -} lldiv_t; -#endif - -#if !defined(HAVE_GETENV) || \ - !defined(HAVE_USELOCALE) -# include /* NULL */ -#endif - -#if !defined (HAVE_REWIND) || \ - !defined (HAVE_GETDELIM) -# include /* FILE */ -#endif - -#if !defined (HAVE_POSIX_MEMALIGN) || \ - !defined (HAVE_STRLCPY) || \ - !defined (HAVE_STRNDUP) || \ - !defined (HAVE_STRNLEN) -# include /* size_t */ -#endif - -#ifndef HAVE_VASPRINTF -# include /* va_list */ -#endif - -#if !defined (HAVE_GETDELIM) || \ - !defined (HAVE_GETPID) || \ - !defined (HAVE_SWAB) -# include /* ssize_t, pid_t */ -#endif - -#if !defined (HAVE_DIRFD) || \ - !defined (HAVE_FDOPENDIR) -# include -#endif - -#ifdef __cplusplus -# define VLC_NOTHROW throw () -extern "C" { -#else -# define VLC_NOTHROW -#endif - -/* stdio.h */ -#ifndef HAVE_ASPRINTF -int asprintf (char **, const char *, ...); -#endif - -#ifndef HAVE_FLOCKFILE -void flockfile (FILE *); -int ftrylockfile (FILE *); -void funlockfile (FILE *); -int getc_unlocked (FILE *); -int getchar_unlocked (void); -int putc_unlocked (int, FILE *); -int putchar_unlocked (int); -#endif - -#ifndef HAVE_GETDELIM -ssize_t getdelim (char **, size_t *, int, FILE *); -ssize_t getline (char **, size_t *, FILE *); -#endif - -#ifndef HAVE_REWIND -void rewind (FILE *); -#endif - -#ifndef HAVE_VASPRINTF -int vasprintf (char **, const char *, va_list); -#endif - -/* string.h */ -#ifndef HAVE_STRCASECMP -int strcasecmp (const char *, const char *); -#endif - -#ifndef HAVE_STRCASESTR -char *strcasestr (const char *, const char *); -#endif - -#ifndef HAVE_STRDUP -char *strdup (const char *); -#endif - -#ifndef HAVE_STRVERSCMP -int strverscmp (const char *, const char *); -#endif - -#ifndef HAVE_STRNLEN -size_t strnlen (const char *, size_t); -#endif - -#ifndef HAVE_STRNDUP -char *strndup (const char *, size_t); -#endif - -#ifndef HAVE_STRLCPY -size_t strlcpy (char *, const char *, size_t); -#endif - -#ifndef HAVE_STRSEP -char *strsep (char **, const char *); -#endif - -#ifndef HAVE_STRTOK_R -char *strtok_r(char *, const char *, char **); -#endif - -/* stdlib.h */ -#ifndef HAVE_ATOF -#ifndef __ANDROID__ -double atof (const char *); -#endif -#endif - -#ifndef HAVE_ATOLL -long long atoll (const char *); -#endif - -#ifndef HAVE_LLDIV -lldiv_t lldiv (long long, long long); -#endif - -#ifndef HAVE_STRTOF -#ifndef __ANDROID__ -float strtof (const char *, char **); -#endif -#endif - -#ifndef HAVE_STRTOLL -long long int strtoll (const char *, char **, int); -#endif - -/* time.h */ -#ifndef HAVE_GMTIME_R -struct tm *gmtime_r (const time_t *, struct tm *); -#endif - -#ifndef HAVE_LOCALTIME_R -struct tm *localtime_r (const time_t *, struct tm *); -#endif - -/* unistd.h */ -#ifndef HAVE_GETPID -pid_t getpid (void) VLC_NOTHROW; -#endif - -#ifndef HAVE_FSYNC -int fsync (int fd); -#endif - -/* dirent.h */ -#ifndef HAVE_DIRFD -int (dirfd) (DIR *); -#endif - -#ifndef HAVE_FDOPENDIR -DIR *fdopendir (int); -#endif - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -/* stdlib.h */ -#ifndef HAVE_GETENV -static inline char *getenv (const char *name) -{ - (void)name; - return NULL; -} -#endif - -#ifndef HAVE_SETENV -int setenv (const char *, const char *, int); -int unsetenv (const char *); -#endif - -#ifndef HAVE_POSIX_MEMALIGN -int posix_memalign (void **, size_t, size_t); -#endif - -/* locale.h */ -#ifndef HAVE_USELOCALE -#define LC_NUMERIC_MASK 0 -#define LC_MESSAGES_MASK 0 -typedef void *locale_t; -static inline locale_t uselocale(locale_t loc) -{ - (void)loc; - return NULL; -} -static inline void freelocale(locale_t loc) -{ - (void)loc; -} -static inline locale_t newlocale(int mask, const char * locale, locale_t base) -{ - (void)mask; (void)locale; (void)base; - return NULL; -} -#endif - -#if !defined (HAVE_STATIC_ASSERT) -# define _Static_assert(x, s) ((void) sizeof (struct { unsigned:-!(x); })) -# define static_assert _Static_assert -#endif - -/* Alignment of critical static data structures */ -#ifdef ATTRIBUTE_ALIGNED_MAX -# define ATTR_ALIGN(align) __attribute__ ((__aligned__ ((ATTRIBUTE_ALIGNED_MAX < align) ? ATTRIBUTE_ALIGNED_MAX : align))) -#else -# define ATTR_ALIGN(align) -#endif - -/* libintl support */ -#define _(str) vlc_gettext (str) -#define N_(str) gettext_noop (str) -#define gettext_noop(str) (str) - -#ifndef HAVE_SWAB -void swab (const void *, void *, ssize_t); -#endif - -/* Socket stuff */ -#ifndef HAVE_INET_PTON -int inet_pton(int, const char *, void *); -const char *inet_ntop(int, const void *, char *, int); -#endif - -#ifndef HAVE_STRUCT_POLLFD -enum -{ - POLLIN=1, - POLLOUT=2, - POLLPRI=4, - POLLERR=8, // unsupported stub - POLLHUP=16, // unsupported stub - POLLNVAL=32 // unsupported stub -}; - -struct pollfd -{ - int fd; - unsigned events; - unsigned revents; -}; -#endif -#ifndef HAVE_POLL -struct pollfd; -int poll (struct pollfd *, unsigned, int); -#endif - -#ifndef HAVE_IF_NAMEINDEX -#include -struct if_nameindex -{ - unsigned if_index; - char *if_name; -}; -# ifndef HAVE_IF_NAMETOINDEX -# define if_nametoindex(name) atoi(name) -# endif -# define if_nameindex() (errno = ENOBUFS, NULL) -# define if_freenameindex(list) (void)0 -#endif - -/* search.h */ -#ifndef HAVE_SEARCH_H -typedef struct entry { - char *key; - void *data; -} ENTRY; - -typedef enum { - FIND, ENTER -} ACTION; - -typedef enum { - preorder, - postorder, - endorder, - leaf -} VISIT; - -void *tsearch( const void *key, void **rootp, int(*cmp)(const void *, const void *) ); -void *tfind( const void *key, const void **rootp, int(*cmp)(const void *, const void *) ); -void *tdelete( const void *key, void **rootp, int(*cmp)(const void *, const void *) ); -void twalk( const void *root, void(*action)(const void *nodep, VISIT which, int depth) ); -void tdestroy( void *root, void (*free_node)(void *nodep) ); -#else // HAVE_SEARCH_H -# ifndef HAVE_TDESTROY -# define tdestroy vlc_tdestroy -# endif -#endif - -/* Random numbers */ -#ifndef HAVE_NRAND48 -double erand48 (unsigned short subi[3]); -long jrand48 (unsigned short subi[3]); -long nrand48 (unsigned short subi[3]); -#endif - -#ifdef __OS2__ -# undef HAVE_FORK /* Implementation of fork() is imperfect on OS/2 */ -#endif - -#endif /* !LIBVLC_FIXUPS_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_fourcc.h b/source/vlc/cpp/include/vlc/plugins/vlc_fourcc.h deleted file mode 100644 index 67449ce5a..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_fourcc.h +++ /dev/null @@ -1,517 +0,0 @@ -/***************************************************************************** - * vlc_fourcc.h: Definition of various FOURCC and helpers - ***************************************************************************** - * Copyright (C) 2009 Laurent Aimar - * $Id: c50acac437da05e88602cb0a0f553e1a1061062e $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_FOURCC_H -#define VLC_FOURCC_H 1 - -#include - -/* Video codec */ -#define VLC_CODEC_MPGV VLC_FOURCC('m','p','g','v') -#define VLC_CODEC_MP4V VLC_FOURCC('m','p','4','v') -#define VLC_CODEC_DIV1 VLC_FOURCC('D','I','V','1') -#define VLC_CODEC_DIV2 VLC_FOURCC('D','I','V','2') -#define VLC_CODEC_DIV3 VLC_FOURCC('D','I','V','3') -#define VLC_CODEC_SVQ1 VLC_FOURCC('S','V','Q','1') -#define VLC_CODEC_SVQ3 VLC_FOURCC('S','V','Q','3') -#define VLC_CODEC_H264 VLC_FOURCC('h','2','6','4') -#define VLC_CODEC_H263 VLC_FOURCC('h','2','6','3') -#define VLC_CODEC_H263I VLC_FOURCC('I','2','6','3') -#define VLC_CODEC_H263P VLC_FOURCC('I','L','V','R') -#define VLC_CODEC_FLV1 VLC_FOURCC('F','L','V','1') -#define VLC_CODEC_H261 VLC_FOURCC('h','2','6','1') -#define VLC_CODEC_MJPG VLC_FOURCC('M','J','P','G') -#define VLC_CODEC_MJPGB VLC_FOURCC('m','j','p','b') -#define VLC_CODEC_LJPG VLC_FOURCC('L','J','P','G') -#define VLC_CODEC_WMV1 VLC_FOURCC('W','M','V','1') -#define VLC_CODEC_WMV2 VLC_FOURCC('W','M','V','2') -#define VLC_CODEC_WMV3 VLC_FOURCC('W','M','V','3') -#define VLC_CODEC_WMVA VLC_FOURCC('W','M','V','A') -#define VLC_CODEC_WMVP VLC_FOURCC('W','M','V','P') -#define VLC_CODEC_WMVP2 VLC_FOURCC('W','V','P','2') -#define VLC_CODEC_VC1 VLC_FOURCC('V','C','-','1') -#define VLC_CODEC_THEORA VLC_FOURCC('t','h','e','o') -#define VLC_CODEC_TARKIN VLC_FOURCC('t','a','r','k') -#define VLC_CODEC_DIRAC VLC_FOURCC('d','r','a','c') -#define VLC_CODEC_CAVS VLC_FOURCC('C','A','V','S') -#define VLC_CODEC_NUV VLC_FOURCC('N','J','P','G') -#define VLC_CODEC_RV10 VLC_FOURCC('R','V','1','0') -#define VLC_CODEC_RV13 VLC_FOURCC('R','V','1','3') -#define VLC_CODEC_RV20 VLC_FOURCC('R','V','2','0') -#define VLC_CODEC_RV30 VLC_FOURCC('R','V','3','0') -#define VLC_CODEC_RV40 VLC_FOURCC('R','V','4','0') -#define VLC_CODEC_VP3 VLC_FOURCC('V','P','3',' ') -#define VLC_CODEC_VP5 VLC_FOURCC('V','P','5',' ') -#define VLC_CODEC_VP6 VLC_FOURCC('V','P','6','2') -#define VLC_CODEC_VP6F VLC_FOURCC('V','P','6','F') -#define VLC_CODEC_VP6A VLC_FOURCC('V','P','6','A') -#define VLC_CODEC_MSVIDEO1 VLC_FOURCC('M','S','V','C') -#define VLC_CODEC_FLIC VLC_FOURCC('F','L','I','C') -#define VLC_CODEC_SP5X VLC_FOURCC('S','P','5','X') -#define VLC_CODEC_DV VLC_FOURCC('d','v',' ',' ') -#define VLC_CODEC_MSRLE VLC_FOURCC('m','r','l','e') -#define VLC_CODEC_HUFFYUV VLC_FOURCC('H','F','Y','U') -#define VLC_CODEC_FFVHUFF VLC_FOURCC('F','F','V','H') -#define VLC_CODEC_ASV1 VLC_FOURCC('A','S','V','1') -#define VLC_CODEC_ASV2 VLC_FOURCC('A','S','V','2') -#define VLC_CODEC_FFV1 VLC_FOURCC('F','F','V','1') -#define VLC_CODEC_VCR1 VLC_FOURCC('V','C','R','1') -#define VLC_CODEC_CLJR VLC_FOURCC('C','L','J','R') -#define VLC_CODEC_RPZA VLC_FOURCC('r','p','z','a') -#define VLC_CODEC_SMC VLC_FOURCC('s','m','c',' ') -#define VLC_CODEC_CINEPAK VLC_FOURCC('C','V','I','D') -#define VLC_CODEC_TSCC VLC_FOURCC('T','S','C','C') -#define VLC_CODEC_CSCD VLC_FOURCC('C','S','C','D') -#define VLC_CODEC_ZMBV VLC_FOURCC('Z','M','B','V') -#define VLC_CODEC_VMNC VLC_FOURCC('V','M','n','c') -#define VLC_CODEC_FRAPS VLC_FOURCC('F','P','S','1') -#define VLC_CODEC_TRUEMOTION1 VLC_FOURCC('D','U','C','K') -#define VLC_CODEC_TRUEMOTION2 VLC_FOURCC('T','M','2','0') -#define VLC_CODEC_QTRLE VLC_FOURCC('r','l','e',' ') -#define VLC_CODEC_QDRAW VLC_FOURCC('q','d','r','w') -#define VLC_CODEC_QPEG VLC_FOURCC('Q','P','E','G') -#define VLC_CODEC_ULTI VLC_FOURCC('U','L','T','I') -#define VLC_CODEC_VIXL VLC_FOURCC('V','I','X','L') -#define VLC_CODEC_LOCO VLC_FOURCC('L','O','C','O') -#define VLC_CODEC_WNV1 VLC_FOURCC('W','N','V','1') -#define VLC_CODEC_AASC VLC_FOURCC('A','A','S','C') -#define VLC_CODEC_INDEO2 VLC_FOURCC('I','V','2','0') -#define VLC_CODEC_INDEO3 VLC_FOURCC('I','V','3','1') -#define VLC_CODEC_INDEO4 VLC_FOURCC('I','V','4','1') -#define VLC_CODEC_INDEO5 VLC_FOURCC('I','V','5','0') -#define VLC_CODEC_FLASHSV VLC_FOURCC('F','S','V','1') -#define VLC_CODEC_KMVC VLC_FOURCC('K','M','V','C') -#define VLC_CODEC_SMACKVIDEO VLC_FOURCC('S','M','K','2') -#define VLC_CODEC_DNXHD VLC_FOURCC('A','V','d','n') -#define VLC_CODEC_8BPS VLC_FOURCC('8','B','P','S') -#define VLC_CODEC_MIMIC VLC_FOURCC('M','L','2','O') -#define VLC_CODEC_INTERPLAY VLC_FOURCC('i','m','v','e') -#define VLC_CODEC_IDCIN VLC_FOURCC('I','D','C','I') -#define VLC_CODEC_4XM VLC_FOURCC('4','X','M','V') -#define VLC_CODEC_ROQ VLC_FOURCC('R','o','Q','v') -#define VLC_CODEC_MDEC VLC_FOURCC('M','D','E','C') -#define VLC_CODEC_VMDVIDEO VLC_FOURCC('V','M','D','V') -#define VLC_CODEC_CDG VLC_FOURCC('C','D','G',' ') -#define VLC_CODEC_FRWU VLC_FOURCC('F','R','W','U') -#define VLC_CODEC_AMV VLC_FOURCC('A','M','V',' ') -#define VLC_CODEC_VP8 VLC_FOURCC('V','P','8','0') -#define VLC_CODEC_JPEG2000 VLC_FOURCC('J','P','2','K') -#define VLC_CODEC_LAGARITH VLC_FOURCC('L','A','G','S') -#define VLC_CODEC_FLASHSV2 VLC_FOURCC('F','S','V','2') -#define VLC_CODEC_PRORES VLC_FOURCC('a','p','c','n') -#define VLC_CODEC_MXPEG VLC_FOURCC('M','X','P','G') -#define VLC_CODEC_CDXL VLC_FOURCC('C','D','X','L') -#define VLC_CODEC_BMVVIDEO VLC_FOURCC('B','M','V','V') -#define VLC_CODEC_UTVIDEO VLC_FOURCC('U','L','R','A') -#define VLC_CODEC_VBLE VLC_FOURCC('V','B','L','E') -#define VLC_CODEC_DXTORY VLC_FOURCC('x','t','o','r') -#define VLC_CODEC_MSS1 VLC_FOURCC('M','S','S','1') -#define VLC_CODEC_MSS2 VLC_FOURCC('M','S','S','2') -#define VLC_CODEC_MSA1 VLC_FOURCC('M','S','A','1') -#define VLC_CODEC_TSC2 VLC_FOURCC('T','S','C','2') -#define VLC_CODEC_MTS2 VLC_FOURCC('M','T','S','2') -#define VLC_CODEC_HEVC VLC_FOURCC('h','e','v','c') -#define VLC_CODEC_VP9 VLC_FOURCC('V','P','9','0') -#define VLC_CODEC_ICOD VLC_FOURCC('i','c','o','d') -#define VLC_CODEC_G2M2 VLC_FOURCC('G','2','M','2') -#define VLC_CODEC_G2M3 VLC_FOURCC('G','2','M','3') -#define VLC_CODEC_G2M4 VLC_FOURCC('G','2','M','4') - -/* Planar YUV 4:1:0 Y:V:U */ -#define VLC_CODEC_YV9 VLC_FOURCC('Y','V','U','9') -/* Planar YUV 4:2:0 Y:V:U */ -#define VLC_CODEC_YV12 VLC_FOURCC('Y','V','1','2') -/* Planar YUV 4:1:0 Y:U:V */ -#define VLC_CODEC_I410 VLC_FOURCC('I','4','1','0') -/* Planar YUV 4:1:1 Y:U:V */ -#define VLC_CODEC_I411 VLC_FOURCC('I','4','1','1') -/* Planar YUV 4:2:0 Y:U:V 8-bit */ -#define VLC_CODEC_I420 VLC_FOURCC('I','4','2','0') -/* Planar YUV 4:2:0 Y:U:V 9-bit stored on 16 bits */ -#define VLC_CODEC_I420_9L VLC_FOURCC('I','0','9','L') -#define VLC_CODEC_I420_9B VLC_FOURCC('I','0','9','B') -/* Planar YUV 4:2:0 Y:U:V 10-bit stored on 16 bits */ -#define VLC_CODEC_I420_10L VLC_FOURCC('I','0','A','L') -#define VLC_CODEC_I420_10B VLC_FOURCC('I','0','A','B') -/* Planar YUV 4:2:2 Y:U:V 8-bit */ -#define VLC_CODEC_I422 VLC_FOURCC('I','4','2','2') -/* Planar YUV 4:2:2 Y:U:V 9-bit stored on 16 bits */ -#define VLC_CODEC_I422_9L VLC_FOURCC('I','2','9','L') -#define VLC_CODEC_I422_9B VLC_FOURCC('I','2','9','B') -/* Planar YUV 4:2:2 Y:U:V 10-bit stored on 16 bits */ -#define VLC_CODEC_I422_10L VLC_FOURCC('I','2','A','L') -#define VLC_CODEC_I422_10B VLC_FOURCC('I','2','A','B') -/* Planar YUV 4:4:0 Y:U:V */ -#define VLC_CODEC_I440 VLC_FOURCC('I','4','4','0') -/* Planar YUV 4:4:4 Y:U:V 8-bit */ -#define VLC_CODEC_I444 VLC_FOURCC('I','4','4','4') -/* Planar YUV 4:4:4 Y:U:V 9-bit stored on 16 bits */ -#define VLC_CODEC_I444_9L VLC_FOURCC('I','4','9','L') -#define VLC_CODEC_I444_9B VLC_FOURCC('I','4','9','B') -/* Planar YUV 4:4:4 Y:U:V 10-bit stored on 16 bits */ -#define VLC_CODEC_I444_10L VLC_FOURCC('I','4','A','L') -#define VLC_CODEC_I444_10B VLC_FOURCC('I','4','A','B') -/* Planar YUV 4:2:0 Y:U:V full scale */ -#define VLC_CODEC_J420 VLC_FOURCC('J','4','2','0') -/* Planar YUV 4:2:2 Y:U:V full scale */ -#define VLC_CODEC_J422 VLC_FOURCC('J','4','2','2') -/* Planar YUV 4:4:0 Y:U:V full scale */ -#define VLC_CODEC_J440 VLC_FOURCC('J','4','4','0') -/* Planar YUV 4:4:4 Y:U:V full scale */ -#define VLC_CODEC_J444 VLC_FOURCC('J','4','4','4') -/* Palettized YUV with palette element Y:U:V:A */ -#define VLC_CODEC_YUVP VLC_FOURCC('Y','U','V','P') -/* Planar YUV 4:4:4 Y:U:V:A */ -#define VLC_CODEC_YUVA VLC_FOURCC('Y','U','V','A') -/* Planar YUV 4:2:2 Y:U:V:A */ -#define VLC_CODEC_YUV422A VLC_FOURCC('I','4','2','A') -/* Planar YUV 4:2:0 Y:U:V:A */ -#define VLC_CODEC_YUV420A VLC_FOURCC('I','4','0','A') -/* Palettized RGB with palette element R:G:B */ -#define VLC_CODEC_RGBP VLC_FOURCC('R','G','B','P') -/* 8 bits RGB */ -#define VLC_CODEC_RGB8 VLC_FOURCC('R','G','B','8') -/* 12 bits RGB padded to 16 bits */ -#define VLC_CODEC_RGB12 VLC_FOURCC('R','V','1','2') -/* 16 bits RGBA (12 bits RGB + 4 bits alpha) */ -#define VLC_CODEC_RGBA16 VLC_FOURCC('A','V','1','6') -/* 15 bits RGB padded to 16 bits */ -#define VLC_CODEC_RGB15 VLC_FOURCC('R','V','1','5') -/* 16 bits RGBA (15 bits RGB + 1 bit alpha) */ -#define VLC_CODEC_RGBT VLC_FOURCC('R','G','B','T') -/* 16 bits RGB */ -#define VLC_CODEC_RGB16 VLC_FOURCC('R','V','1','6') -/* 24 bits RGB */ -#define VLC_CODEC_RGB24 VLC_FOURCC('R','V','2','4') -/* 24 bits RGB padded to 32 bits */ -#define VLC_CODEC_RGB32 VLC_FOURCC('R','V','3','2') -/* 32 bits RGBA */ -#define VLC_CODEC_RGBA VLC_FOURCC('R','G','B','A') -/* 8 bits grey */ -#define VLC_CODEC_GREY VLC_FOURCC('G','R','E','Y') -/* Packed YUV 4:2:2, U:Y:V:Y */ -#define VLC_CODEC_UYVY VLC_FOURCC('U','Y','V','Y') -/* Packed YUV 4:2:2, V:Y:U:Y */ -#define VLC_CODEC_VYUY VLC_FOURCC('V','Y','U','Y') -/* Packed YUV 4:2:2, Y:U:Y:V */ -#define VLC_CODEC_YUYV VLC_FOURCC('Y','U','Y','2') -/* Packed YUV 4:2:2, Y:V:Y:U */ -#define VLC_CODEC_YVYU VLC_FOURCC('Y','V','Y','U') -/* Packed YUV 2:1:1, Y:U:Y:V */ -#define VLC_CODEC_Y211 VLC_FOURCC('Y','2','1','1') -/* Packed YUV 4:2:2, U:Y:V:Y, reverted */ -#define VLC_CODEC_CYUV VLC_FOURCC('c','y','u','v') -/* 10-bit 4:2:2 Component YCbCr */ -#define VLC_CODEC_V210 VLC_FOURCC('v','2','1','0') -/* 2 planes Y/UV 4:2:0 */ -#define VLC_CODEC_NV12 VLC_FOURCC('N','V','1','2') -/* 2 planes Y/VU 4:2:0 */ -#define VLC_CODEC_NV21 VLC_FOURCC('N','V','2','1') -/* 2 planes Y/UV 4:2:2 */ -#define VLC_CODEC_NV16 VLC_FOURCC('N','V','1','6') -/* 2 planes Y/VU 4:2:2 */ -#define VLC_CODEC_NV61 VLC_FOURCC('N','V','6','1') - -/* Image codec (video) */ -#define VLC_CODEC_PNG VLC_FOURCC('p','n','g',' ') -#define VLC_CODEC_PPM VLC_FOURCC('p','p','m',' ') -#define VLC_CODEC_PGM VLC_FOURCC('p','g','m',' ') -#define VLC_CODEC_PGMYUV VLC_FOURCC('p','g','m','y') -#define VLC_CODEC_PAM VLC_FOURCC('p','a','m',' ') -#define VLC_CODEC_JPEG VLC_FOURCC('j','p','e','g') -#define VLC_CODEC_JPEGLS VLC_FOURCC('M','J','L','S') -#define VLC_CODEC_BMP VLC_FOURCC('b','m','p',' ') -#define VLC_CODEC_TIFF VLC_FOURCC('t','i','f','f') -#define VLC_CODEC_GIF VLC_FOURCC('g','i','f',' ') -#define VLC_CODEC_TARGA VLC_FOURCC('t','g','a',' ') -#define VLC_CODEC_SGI VLC_FOURCC('s','g','i',' ') -#define VLC_CODEC_PNM VLC_FOURCC('p','n','m',' ') -#define VLC_CODEC_PCX VLC_FOURCC('p','c','x',' ') -#define VLC_CODEC_XWD VLC_FOURCC('X','W','D',' ') - - -/* Audio codec */ -#define VLC_CODEC_MPGA VLC_FOURCC('m','p','g','a') -#define VLC_CODEC_MP4A VLC_FOURCC('m','p','4','a') -#define VLC_CODEC_ALS VLC_FOURCC('a','l','s',' ') -#define VLC_CODEC_A52 VLC_FOURCC('a','5','2',' ') -#define VLC_CODEC_EAC3 VLC_FOURCC('e','a','c','3') -#define VLC_CODEC_DTS VLC_FOURCC('d','t','s',' ') -#define VLC_CODEC_WMA1 VLC_FOURCC('W','M','A','1') -#define VLC_CODEC_WMA2 VLC_FOURCC('W','M','A','2') -#define VLC_CODEC_WMAP VLC_FOURCC('W','M','A','P') -#define VLC_CODEC_WMAL VLC_FOURCC('W','M','A','L') -#define VLC_CODEC_WMAS VLC_FOURCC('W','M','A','S') -#define VLC_CODEC_FLAC VLC_FOURCC('f','l','a','c') -#define VLC_CODEC_MLP VLC_FOURCC('m','l','p',' ') -#define VLC_CODEC_TRUEHD VLC_FOURCC('t','r','h','d') -#define VLC_CODEC_DVAUDIO VLC_FOURCC('d','v','a','u') -#define VLC_CODEC_SPEEX VLC_FOURCC('s','p','x',' ') -#define VLC_CODEC_OPUS VLC_FOURCC('O','p','u','s') -#define VLC_CODEC_VORBIS VLC_FOURCC('v','o','r','b') -#define VLC_CODEC_MACE3 VLC_FOURCC('M','A','C','3') -#define VLC_CODEC_MACE6 VLC_FOURCC('M','A','C','6') -#define VLC_CODEC_MUSEPACK7 VLC_FOURCC('M','P','C',' ') -#define VLC_CODEC_MUSEPACK8 VLC_FOURCC('M','P','C','K') -#define VLC_CODEC_RA_144 VLC_FOURCC('1','4','_','4') -#define VLC_CODEC_RA_288 VLC_FOURCC('2','8','_','8') -#define VLC_CODEC_INTERPLAY_DPCM VLC_FOURCC('i','d','p','c') -#define VLC_CODEC_ROQ_DPCM VLC_FOURCC('R','o','Q','a') -#define VLC_CODEC_DSICINAUDIO VLC_FOURCC('D','C','I','A') -#define VLC_CODEC_ADPCM_4XM VLC_FOURCC('4','x','m','a') -#define VLC_CODEC_ADPCM_EA VLC_FOURCC('A','D','E','A') -#define VLC_CODEC_ADPCM_XA VLC_FOURCC('x','a',' ',' ') -#define VLC_CODEC_ADPCM_ADX VLC_FOURCC('a','d','x',' ') -#define VLC_CODEC_ADPCM_IMA_WS VLC_FOURCC('A','I','W','S') -#define VLC_CODEC_ADPCM_G722 VLC_FOURCC('g','7','2','2') -#define VLC_CODEC_ADPCM_G726 VLC_FOURCC('g','7','2','6') -#define VLC_CODEC_ADPCM_SWF VLC_FOURCC('S','W','F','a') -#define VLC_CODEC_ADPCM_MS VLC_FOURCC('m','s',0x00,0x02) -#define VLC_CODEC_ADPCM_IMA_WAV VLC_FOURCC('m','s',0x00,0x11) -#define VLC_CODEC_ADPCM_IMA_AMV VLC_FOURCC('i','m','a','v') -#define VLC_CODEC_ADPCM_IMA_QT VLC_FOURCC('i','m','a','4') -#define VLC_CODEC_ADPCM_YAMAHA VLC_FOURCC('m','s',0x00,0x20) -#define VLC_CODEC_G723_1 VLC_FOURCC('g','7','2', 0x31) -#define VLC_CODEC_G729 VLC_FOURCC('g','7','2','9') -#define VLC_CODEC_VMDAUDIO VLC_FOURCC('v','m','d','a') -#define VLC_CODEC_AMR_NB VLC_FOURCC('s','a','m','r') -#define VLC_CODEC_AMR_WB VLC_FOURCC('s','a','w','b') -#define VLC_CODEC_ALAC VLC_FOURCC('a','l','a','c') -#define VLC_CODEC_QDM2 VLC_FOURCC('Q','D','M','2') -#define VLC_CODEC_COOK VLC_FOURCC('c','o','o','k') -#define VLC_CODEC_SIPR VLC_FOURCC('s','i','p','r') -#define VLC_CODEC_TTA VLC_FOURCC('T','T','A','1') -#define VLC_CODEC_SHORTEN VLC_FOURCC('s','h','n',' ') -#define VLC_CODEC_WAVPACK VLC_FOURCC('W','V','P','K') -#define VLC_CODEC_GSM VLC_FOURCC('g','s','m',' ') -#define VLC_CODEC_GSM_MS VLC_FOURCC('a','g','s','m') -#define VLC_CODEC_ATRAC1 VLC_FOURCC('a','t','r','1') -#define VLC_CODEC_ATRAC3 VLC_FOURCC('a','t','r','c') -#define VLC_CODEC_IMC VLC_FOURCC(0x1,0x4,0x0,0x0) -#define VLC_CODEC_TRUESPEECH VLC_FOURCC(0x22,0x0,0x0,0x0) -#define VLC_CODEC_NELLYMOSER VLC_FOURCC('N','E','L','L') -#define VLC_CODEC_APE VLC_FOURCC('A','P','E',' ') -#define VLC_CODEC_QCELP VLC_FOURCC('Q','c','l','p') -#define VLC_CODEC_302M VLC_FOURCC('3','0','2','m') -#define VLC_CODEC_DVD_LPCM VLC_FOURCC('l','p','c','m') -#define VLC_CODEC_DVDA_LPCM VLC_FOURCC('a','p','c','m') -#define VLC_CODEC_BD_LPCM VLC_FOURCC('b','p','c','m') -#define VLC_CODEC_SDDS VLC_FOURCC('s','d','d','s') -#define VLC_CODEC_MIDI VLC_FOURCC('M','I','D','I') -#define VLC_CODEC_RALF VLC_FOURCC('R','A','L','F') - -#define VLC_CODEC_S8 VLC_FOURCC('s','8',' ',' ') -#define VLC_CODEC_U8 VLC_FOURCC('u','8',' ',' ') -#define VLC_CODEC_S16L VLC_FOURCC('s','1','6','l') -#define VLC_CODEC_S16B VLC_FOURCC('s','1','6','b') -#define VLC_CODEC_U16L VLC_FOURCC('u','1','6','l') -#define VLC_CODEC_U16B VLC_FOURCC('u','1','6','b') -#define VLC_CODEC_S20B VLC_FOURCC('s','2','0','b') -#define VLC_CODEC_S24L VLC_FOURCC('s','2','4','l') -#define VLC_CODEC_S24B VLC_FOURCC('s','2','4','b') -#define VLC_CODEC_U24L VLC_FOURCC('u','2','4','l') -#define VLC_CODEC_U24B VLC_FOURCC('u','2','4','b') -#define VLC_CODEC_S24L32 VLC_FOURCC('s','2','4','4') -#define VLC_CODEC_S24B32 VLC_FOURCC('S','2','4','4') -#define VLC_CODEC_S32L VLC_FOURCC('s','3','2','l') -#define VLC_CODEC_S32B VLC_FOURCC('s','3','2','b') -#define VLC_CODEC_U32L VLC_FOURCC('u','3','2','l') -#define VLC_CODEC_U32B VLC_FOURCC('u','3','2','b') -#define VLC_CODEC_F32L VLC_FOURCC('f','3','2','l') -#define VLC_CODEC_F32B VLC_FOURCC('f','3','2','b') -#define VLC_CODEC_F64L VLC_FOURCC('f','6','4','l') -#define VLC_CODEC_F64B VLC_FOURCC('f','6','4','b') - -#define VLC_CODEC_ALAW VLC_FOURCC('a','l','a','w') -#define VLC_CODEC_MULAW VLC_FOURCC('m','l','a','w') -#define VLC_CODEC_DAT12 VLC_FOURCC('L','P','1','2') -#define VLC_CODEC_S24DAUD VLC_FOURCC('d','a','u','d') -#define VLC_CODEC_TWINVQ VLC_FOURCC('T','W','I','N') -#define VLC_CODEC_BMVAUDIO VLC_FOURCC('B','M','V','A') -#define VLC_CODEC_ULEAD_DV_AUDIO_NTSC VLC_FOURCC('m','s',0x02,0x15) -#define VLC_CODEC_ULEAD_DV_AUDIO_PAL VLC_FOURCC('m','s',0x02,0x16) -#define VLC_CODEC_INDEO_AUDIO VLC_FOURCC('m','s',0x04,0x02) - -/* Subtitle */ -#define VLC_CODEC_SPU VLC_FOURCC('s','p','u',' ') -#define VLC_CODEC_DVBS VLC_FOURCC('d','v','b','s') -#define VLC_CODEC_SUBT VLC_FOURCC('s','u','b','t') -#define VLC_CODEC_XSUB VLC_FOURCC('X','S','U','B') -#define VLC_CODEC_SSA VLC_FOURCC('s','s','a',' ') -#define VLC_CODEC_TEXT VLC_FOURCC('T','E','X','T') -#define VLC_CODEC_TELETEXT VLC_FOURCC('t','e','l','x') -#define VLC_CODEC_KATE VLC_FOURCC('k','a','t','e') -#define VLC_CODEC_CMML VLC_FOURCC('c','m','m','l') -#define VLC_CODEC_ITU_T140 VLC_FOURCC('t','1','4','0') -#define VLC_CODEC_USF VLC_FOURCC('u','s','f',' ') -#define VLC_CODEC_OGT VLC_FOURCC('o','g','t',' ') -#define VLC_CODEC_CVD VLC_FOURCC('c','v','d',' ') -/* Blu-ray Presentation Graphics */ -#define VLC_CODEC_BD_PG VLC_FOURCC('b','d','p','g') -/* EBU STL (TECH. 3264-E) */ -#define VLC_CODEC_EBU_STL VLC_FOURCC('S','T','L',' ') -#define VLC_CODEC_SCTE_27 VLC_FOURCC('S','C','2','7') - -/* XYZ colorspace 12 bits packed in 16 bits, organisation |XXX0|YYY0|ZZZ0| */ -#define VLC_CODEC_XYZ12 VLC_FOURCC('X','Y','1','2') - - -/* Special endian dependant values - * The suffic N means Native - * The suffix I means Inverted (ie non native) */ -#ifdef WORDS_BIGENDIAN -# define VLC_CODEC_S16N VLC_CODEC_S16B -# define VLC_CODEC_U16N VLC_CODEC_U16B -# define VLC_CODEC_S24N VLC_CODEC_S24B -# define VLC_CODEC_U24N VLC_CODEC_U24B -# define VLC_CODEC_S32N VLC_CODEC_S32B -# define VLC_CODEC_U32N VLC_CODEC_U32B -# define VLC_CODEC_FL32 VLC_CODEC_F32B -# define VLC_CODEC_FL64 VLC_CODEC_F64B - -# define VLC_CODEC_S16I VLC_CODEC_S16L -# define VLC_CODEC_U16I VLC_CODEC_U16L -# define VLC_CODEC_S24I VLC_CODEC_S24L -# define VLC_CODEC_U24I VLC_CODEC_U24L -# define VLC_CODEC_S32I VLC_CODEC_S32L -# define VLC_CODEC_U32I VLC_CODEC_U32L - -#else -# define VLC_CODEC_S16N VLC_CODEC_S16L -# define VLC_CODEC_U16N VLC_CODEC_U16L -# define VLC_CODEC_S24N VLC_CODEC_S24L -# define VLC_CODEC_U24N VLC_CODEC_U24L -# define VLC_CODEC_S32N VLC_CODEC_S32L -# define VLC_CODEC_U32N VLC_CODEC_U32L -# define VLC_CODEC_FL32 VLC_CODEC_F32L -# define VLC_CODEC_FL64 VLC_CODEC_F64L - -# define VLC_CODEC_S16I VLC_CODEC_S16B -# define VLC_CODEC_U16I VLC_CODEC_U16B -# define VLC_CODEC_S24I VLC_CODEC_S24B -# define VLC_CODEC_U24I VLC_CODEC_U24B -# define VLC_CODEC_S32I VLC_CODEC_S32B -# define VLC_CODEC_U32I VLC_CODEC_U32B -#endif - -/* Non official codecs, used to force a profile in an encoder */ -/* MPEG-1 video */ -#define VLC_CODEC_MP1V VLC_FOURCC('m','p','1','v') -/* MPEG-2 video */ -#define VLC_CODEC_MP2V VLC_FOURCC('m','p','2','v') -/* MPEG-I/II layer 2 audio */ -#define VLC_CODEC_MP2 VLC_FOURCC('m','p','2',' ') -/* MPEG-I/II layer 3 audio */ -#define VLC_CODEC_MP3 VLC_FOURCC('m','p','3',' ') - -/** - * It returns the codec associated to a fourcc within a ES category. - * - * If not found, it will return the given fourcc. - * If found, it will always be one of the VLC_CODEC_ defined above. - * - * You may use UNKNOWN_ES for the ES category if you don't have the information. - */ -VLC_API vlc_fourcc_t vlc_fourcc_GetCodec( int i_cat, vlc_fourcc_t i_fourcc ); - -/** - * It returns the codec associated to a fourcc store in a zero terminated - * string. - * - * If the string is NULL or does not have exactly 4 charateres, it will - * return 0, otherwise it behaves like vlc_fourcc_GetCodec. - * - * Provided for convenience. - */ -VLC_API vlc_fourcc_t vlc_fourcc_GetCodecFromString( int i_cat, const char * ); - -/** - * It convert the gives fourcc to an audio codec when possible. - * - * The fourcc converted are aflt, araw/pcm , twos, sowt. When an incompatible i_bits - * is detected, 0 is returned. - * The other fourcc goes through vlc_fourcc_GetCodec and i_bits is not checked. - */ -VLC_API vlc_fourcc_t vlc_fourcc_GetCodecAudio( vlc_fourcc_t i_fourcc, int i_bits ); - -/** - * It returns the description of the given fourcc or NULL if not found. - * - * You may use UNKNOWN_ES for the ES category if you don't have the information. - */ -VLC_API const char * vlc_fourcc_GetDescription( int i_cat, vlc_fourcc_t i_fourcc ); - -/** - * It returns a list (terminated with the value 0) of YUV fourccs in - * decreasing priority order for the given chroma. - * - * It will always return a non NULL pointer that must not be freed. - */ -VLC_API const vlc_fourcc_t * vlc_fourcc_GetYUVFallback( vlc_fourcc_t ); - -/** - * It returns a list (terminated with the value 0) of RGB fourccs in - * decreasing priority order for the given chroma. - * - * It will always return a non NULL pointer that must not be freed. - */ -VLC_API const vlc_fourcc_t * vlc_fourcc_GetRGBFallback( vlc_fourcc_t ); - -/** - * It returns true if the given fourcc is YUV and false otherwise. - */ -VLC_API bool vlc_fourcc_IsYUV( vlc_fourcc_t ); - -/** - * It returns true if the two fourccs are equivalent if their U&V planes are - * swapped. - */ -VLC_API bool vlc_fourcc_AreUVPlanesSwapped(vlc_fourcc_t , vlc_fourcc_t ); - -/** - * Chroma related information. - */ -typedef struct { - unsigned plane_count; - struct { - struct { - unsigned num; - unsigned den; - } w; - struct { - unsigned num; - unsigned den; - } h; - } p[4]; - unsigned pixel_size; /* Number of bytes per pixel for a plane */ - unsigned pixel_bits; /* Number of bits actually used bits per pixel for a plane */ -} vlc_chroma_description_t; - -/** - * It returns a vlc_chroma_description_t describing the request fourcc or NULL - * if not found. - */ -VLC_API const vlc_chroma_description_t * vlc_fourcc_GetChromaDescription( vlc_fourcc_t fourcc ); - -#endif /* _VLC_FOURCC_H */ - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_fs.h b/source/vlc/cpp/include/vlc/plugins/vlc_fs.h deleted file mode 100644 index e0fc4b561..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_fs.h +++ /dev/null @@ -1,91 +0,0 @@ -/***************************************************************************** - * vlc_fs.h: File system helpers - ***************************************************************************** - * Copyright © 2006-2010 Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_FS_H -#define VLC_FS_H 1 - -/** - * \file - * Those functions convert file paths from UTF-8 to the system-specific - * encoding (especially UTF-16 on Windows). Also, they always mark file - * descriptor with the close-on-exec flag. - */ - -#include -#include - -VLC_API int vlc_open( const char *filename, int flags, ... ) VLC_USED; -VLC_API FILE * vlc_fopen( const char *filename, const char *mode ) VLC_USED; -VLC_API int vlc_openat( int fd, const char *filename, int flags, ... ) VLC_USED; - -VLC_API DIR * vlc_opendir( const char *dirname ) VLC_USED; -VLC_API char * vlc_readdir( DIR *dir ) VLC_USED; -VLC_API int vlc_loaddir( DIR *dir, char ***namelist, int (*select)( const char * ), int (*compar)( const char **, const char ** ) ); -VLC_API int vlc_scandir( const char *dirname, char ***namelist, int (*select)( const char * ), int (*compar)( const char **, const char ** ) ); -VLC_API int vlc_mkdir( const char *filename, mode_t mode ); - -VLC_API int vlc_unlink( const char *filename ); -VLC_API int vlc_rename( const char *oldpath, const char *newpath ); -VLC_API char *vlc_getcwd( void ) VLC_USED; - -#if defined( _WIN32 ) -static inline int vlc_closedir( DIR *dir ) -{ - _WDIR *wdir = *(_WDIR **)dir; - free( dir ); - return wdir ? _wclosedir( wdir ) : 0; -} -# undef closedir -# define closedir vlc_closedir - -static inline void vlc_rewinddir( DIR *dir ) -{ - _WDIR *wdir = *(_WDIR **)dir; - - _wrewinddir( wdir ); -} -# undef rewinddir -# define rewinddir vlc_rewinddir - -# include -# ifndef stat -# define stat _stati64 -# endif -# ifndef fstat -# define fstat _fstati64 -# endif -# undef lseek -# define lseek _lseeki64 -#endif - -#ifdef __ANDROID__ -# define lseek lseek64 -#endif - -struct stat; - -VLC_API int vlc_stat( const char *filename, struct stat *buf ); -VLC_API int vlc_lstat( const char *filename, struct stat *buf ); - -VLC_API int vlc_mkstemp( char * ); - -VLC_API int vlc_dup( int ); -VLC_API int vlc_pipe( int[2] ); -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_gcrypt.h b/source/vlc/cpp/include/vlc/plugins/vlc_gcrypt.h deleted file mode 100644 index 89bdab87e..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_gcrypt.h +++ /dev/null @@ -1,103 +0,0 @@ -/***************************************************************************** - * vlc_gcrypt.h: VLC thread support for gcrypt - ***************************************************************************** - * Copyright (C) 2004-2010 Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file implements gcrypt support functions in vlc - */ - -#include - -#ifdef LIBVLC_USE_PTHREAD -/** - * If possible, use gcrypt-provided thread implementation. This is so that - * other non-VLC components (inside the process) can also use gcrypt safely. - */ -GCRY_THREAD_OPTION_PTHREAD_IMPL; -# define gcry_threads_vlc gcry_threads_pthread -#else - -/** - * gcrypt thread option VLC implementation - */ - -static int gcry_vlc_mutex_init( void **p_sys ) -{ - vlc_mutex_t *p_lock = (vlc_mutex_t *)malloc( sizeof( vlc_mutex_t ) ); - if( p_lock == NULL) - return ENOMEM; - - vlc_mutex_init( p_lock ); - *p_sys = p_lock; - return VLC_SUCCESS; -} - -static int gcry_vlc_mutex_destroy( void **p_sys ) -{ - vlc_mutex_t *p_lock = (vlc_mutex_t *)*p_sys; - vlc_mutex_destroy( p_lock ); - free( p_lock ); - return VLC_SUCCESS; -} - -static int gcry_vlc_mutex_lock( void **p_sys ) -{ - vlc_mutex_lock( (vlc_mutex_t *)*p_sys ); - return VLC_SUCCESS; -} - -static int gcry_vlc_mutex_unlock( void **lock ) -{ - vlc_mutex_unlock( (vlc_mutex_t *)*lock ); - return VLC_SUCCESS; -} - -static const struct gcry_thread_cbs gcry_threads_vlc = -{ - GCRY_THREAD_OPTION_USER, - NULL, - gcry_vlc_mutex_init, - gcry_vlc_mutex_destroy, - gcry_vlc_mutex_lock, - gcry_vlc_mutex_unlock, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL -}; -#endif - -/** - * Initializes gcrypt with proper locking. - */ -static inline void vlc_gcrypt_init (void) -{ - /* This would need a process-wide static mutex with all libraries linking - * to a given instance of libgcrypt. We cannot do this as we have different - * plugins linking with gcrypt, and some underlying libraries may use it - * behind our back. Only way is to always link gcrypt statically (ouch!) or - * have upstream gcrypt provide one shared object per threading system. */ - static bool done = false; - - vlc_global_lock (VLC_GCRYPT_MUTEX); - if (!done) - { - gcry_control (GCRYCTL_SET_THREAD_CBS, &gcry_threads_vlc); - done = true; - } - vlc_global_unlock (VLC_GCRYPT_MUTEX); -} diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_http.h b/source/vlc/cpp/include/vlc/plugins/vlc_http.h deleted file mode 100644 index 9b0510a30..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_http.h +++ /dev/null @@ -1,67 +0,0 @@ -/***************************************************************************** - * vlc_http.h: Shared code for HTTP clients - ***************************************************************************** - * Copyright (C) 2001-2008 VLC authors and VideoLAN - * $Id: ddde13efed1e11a15632f17e1da4437f59750988 $ - * - * Authors: Laurent Aimar - * Christophe Massiot - * Rémi Denis-Courmont - * Antoine Cellerier - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_HTTP_H -#define VLC_HTTP_H 1 - -/** - * \file - * This file defines functions, structures, enums and macros shared between - * HTTP clients. - */ - -/* RFC 2617: Basic and Digest Access Authentication */ -typedef struct http_auth_t -{ - char *psz_realm; - char *psz_domain; - char *psz_nonce; - char *psz_opaque; - char *psz_stale; - char *psz_algorithm; - char *psz_qop; - int i_nonce; - char *psz_cnonce; - char *psz_HA1; /* stored H(A1) value if algorithm = "MD5-sess" */ -} http_auth_t; - - -VLC_API void http_auth_Init( http_auth_t * ); -VLC_API void http_auth_Reset( http_auth_t * ); -VLC_API void http_auth_ParseWwwAuthenticateHeader - ( vlc_object_t *, http_auth_t * , - const char * ); -VLC_API int http_auth_ParseAuthenticationInfoHeader - ( vlc_object_t *, http_auth_t *, - const char *, const char *, - const char *, const char *, - const char * ); -VLC_API char *http_auth_FormatAuthorizationHeader - ( vlc_object_t *, http_auth_t *, - const char *, const char *, - const char *, const char * ) VLC_USED; - -#endif /* VLC_HTTP_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_httpd.h b/source/vlc/cpp/include/vlc/plugins/vlc_httpd.h deleted file mode 100644 index d8ac9d90f..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_httpd.h +++ /dev/null @@ -1,149 +0,0 @@ -/***************************************************************************** - * vlc_httpd.h: builtin HTTP/RTSP server. - ***************************************************************************** - * Copyright (C) 2004-2006 VLC authors and VideoLAN - * $Id: 6100dd00b2f1a1c957224c5d0af0791ace64551a $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_HTTPD_H -#define VLC_HTTPD_H 1 - -/** - * \file - * HTTP/RTSP server API. - */ - -enum -{ - HTTPD_MSG_NONE, - - /* answer */ - HTTPD_MSG_ANSWER, - - /* http request */ - HTTPD_MSG_GET, - HTTPD_MSG_HEAD, - HTTPD_MSG_POST, - - /* rtsp request */ - HTTPD_MSG_OPTIONS, - HTTPD_MSG_DESCRIBE, - HTTPD_MSG_SETUP, - HTTPD_MSG_PLAY, - HTTPD_MSG_PAUSE, - HTTPD_MSG_GETPARAMETER, - HTTPD_MSG_TEARDOWN, - - /* just to track the count of MSG */ - HTTPD_MSG_MAX -}; - -enum -{ - HTTPD_PROTO_NONE, - HTTPD_PROTO_HTTP, /* HTTP/1.x */ - HTTPD_PROTO_RTSP, /* RTSP/1.x */ - HTTPD_PROTO_HTTP0, /* HTTP/0.x */ -}; - -typedef struct httpd_host_t httpd_host_t; -typedef struct httpd_client_t httpd_client_t; -/* create a new host */ -VLC_API httpd_host_t *vlc_http_HostNew( vlc_object_t * ) VLC_USED; -VLC_API httpd_host_t *vlc_https_HostNew( vlc_object_t * ) VLC_USED; -VLC_API httpd_host_t *vlc_rtsp_HostNew( vlc_object_t * ) VLC_USED; -/* delete a host */ -VLC_API void httpd_HostDelete( httpd_host_t * ); - -typedef struct httpd_message_t -{ - httpd_client_t *cl; /* NULL if not throught a connection e vlc internal */ - - uint8_t i_type; - uint8_t i_proto; - uint8_t i_version; - - /* for an answer */ - int i_status; - - /* for a query */ - char *psz_url; - /* FIXME find a clean way to handle GET(psz_args) - and POST(body) through the same code */ - uint8_t *psz_args; - - /* options */ - int i_name; - char **name; - int i_value; - char **value; - - /* body */ - int64_t i_body_offset; - int i_body; - uint8_t *p_body; - -} httpd_message_t; - -typedef struct httpd_url_t httpd_url_t; -typedef struct httpd_callback_sys_t httpd_callback_sys_t; -typedef int (*httpd_callback_t)( httpd_callback_sys_t *, httpd_client_t *, httpd_message_t *answer, const httpd_message_t *query ); -/* register a new url */ -VLC_API httpd_url_t * httpd_UrlNew( httpd_host_t *, const char *psz_url, const char *psz_user, const char *psz_password ) VLC_USED; -/* register callback on a url */ -VLC_API int httpd_UrlCatch( httpd_url_t *, int i_msg, httpd_callback_t, httpd_callback_sys_t * ); -/* delete a url */ -VLC_API void httpd_UrlDelete( httpd_url_t * ); - -VLC_API char* httpd_ClientIP( const httpd_client_t *cl, char *, int * ); -VLC_API char* httpd_ServerIP( const httpd_client_t *cl, char *, int * ); - -/* High level */ - -typedef struct httpd_file_t httpd_file_t; -typedef struct httpd_file_sys_t httpd_file_sys_t; -typedef int (*httpd_file_callback_t)( httpd_file_sys_t *, httpd_file_t *, uint8_t *psz_request, uint8_t **pp_data, int *pi_data ); -VLC_API httpd_file_t * httpd_FileNew( httpd_host_t *, const char *psz_url, const char *psz_mime, const char *psz_user, const char *psz_password, httpd_file_callback_t pf_fill, httpd_file_sys_t * ) VLC_USED; -VLC_API httpd_file_sys_t * httpd_FileDelete( httpd_file_t * ); - - -typedef struct httpd_handler_t httpd_handler_t; -typedef struct httpd_handler_sys_t httpd_handler_sys_t; -typedef int (*httpd_handler_callback_t)( httpd_handler_sys_t *, httpd_handler_t *, char *psz_url, uint8_t *psz_request, int i_type, uint8_t *p_in, int i_in, char *psz_remote_addr, char *psz_remote_host, uint8_t **pp_data, int *pi_data ); -VLC_API httpd_handler_t * httpd_HandlerNew( httpd_host_t *, const char *psz_url, const char *psz_user, const char *psz_password, httpd_handler_callback_t pf_fill, httpd_handler_sys_t * ) VLC_USED; -VLC_API httpd_handler_sys_t * httpd_HandlerDelete( httpd_handler_t * ); - -typedef struct httpd_redirect_t httpd_redirect_t; -VLC_API httpd_redirect_t * httpd_RedirectNew( httpd_host_t *, const char *psz_url_dst, const char *psz_url_src ) VLC_USED; -VLC_API void httpd_RedirectDelete( httpd_redirect_t * ); - - -typedef struct httpd_stream_t httpd_stream_t; -VLC_API httpd_stream_t * httpd_StreamNew( httpd_host_t *, const char *psz_url, const char *psz_mime, const char *psz_user, const char *psz_password ) VLC_USED; -VLC_API void httpd_StreamDelete( httpd_stream_t * ); -VLC_API int httpd_StreamHeader( httpd_stream_t *, uint8_t *p_data, int i_data ); -VLC_API int httpd_StreamSend( httpd_stream_t *, uint8_t *p_data, int i_data ); - - -/* Msg functions facilities */ -VLC_API void httpd_MsgAdd( httpd_message_t *, const char *psz_name, const char *psz_value, ... ) VLC_FORMAT( 3, 4 ); -/* return "" if not found. The string is not allocated */ -VLC_API const char * httpd_MsgGet( const httpd_message_t *, const char *psz_name ); - -#endif /* _VLC_HTTPD_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_image.h b/source/vlc/cpp/include/vlc/plugins/vlc_image.h deleted file mode 100644 index 52419af0d..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_image.h +++ /dev/null @@ -1,81 +0,0 @@ -/***************************************************************************** - * vlc_image.h : wrapper for image reading/writing facilities - ***************************************************************************** - * Copyright (C) 2004 VLC authors and VideoLAN - * $Id: 52bce1f24495ffdbadfb6d0aef0953577992b9a2 $ - * - * Authors: Gildas Bazin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_IMAGE_H -#define VLC_IMAGE_H 1 - -/** - * \file - * This file defines functions and structures for image conversions in vlc - */ - -#include - -# ifdef __cplusplus -extern "C" { -# endif - -struct image_handler_t -{ - picture_t * (*pf_read) ( image_handler_t *, block_t *, - video_format_t *, video_format_t * ); - picture_t * (*pf_read_url) ( image_handler_t *, const char *, - video_format_t *, video_format_t * ); - block_t * (*pf_write) ( image_handler_t *, picture_t *, - video_format_t *, video_format_t * ); - int (*pf_write_url) ( image_handler_t *, picture_t *, - video_format_t *, video_format_t *, - const char * ); - - picture_t * (*pf_convert) ( image_handler_t *, picture_t *, - video_format_t *, video_format_t * ); - picture_t * (*pf_filter) ( image_handler_t *, picture_t *, - video_format_t *, const char * ); - - /* Private properties */ - vlc_object_t *p_parent; - decoder_t *p_dec; - encoder_t *p_enc; - filter_t *p_filter; -}; - -VLC_API image_handler_t * image_HandlerCreate( vlc_object_t * ) VLC_USED; -#define image_HandlerCreate( a ) image_HandlerCreate( VLC_OBJECT(a) ) -VLC_API void image_HandlerDelete( image_handler_t * ); - -#define image_Read( a, b, c, d ) a->pf_read( a, b, c, d ) -#define image_ReadUrl( a, b, c, d ) a->pf_read_url( a, b, c, d ) -#define image_Write( a, b, c, d ) a->pf_write( a, b, c, d ) -#define image_WriteUrl( a, b, c, d, e ) a->pf_write_url( a, b, c, d, e ) -#define image_Convert( a, b, c, d ) a->pf_convert( a, b, c, d ) -#define image_Filter( a, b, c, d ) a->pf_filter( a, b, c, d ) - -VLC_API vlc_fourcc_t image_Type2Fourcc( const char *psz_name ); -VLC_API vlc_fourcc_t image_Ext2Fourcc( const char *psz_name ); -VLC_API vlc_fourcc_t image_Mime2Fourcc( const char *psz_mime ); - -# ifdef __cplusplus -} -# endif - -#endif /* _VLC_IMAGE_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_inhibit.h b/source/vlc/cpp/include/vlc/plugins/vlc_inhibit.h deleted file mode 100644 index b1f733063..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_inhibit.h +++ /dev/null @@ -1,54 +0,0 @@ -/***************************************************************************** - * vlc_inhibit.h: VLC screen saver inhibition - ***************************************************************************** - * Copyright (C) 2009 Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file defines the interface for screen-saver inhibition modules - */ - -#ifndef VLC_INHIBIT_H -# define VLC_INHIBIT_H 1 - -typedef struct vlc_inhibit vlc_inhibit_t; -typedef struct vlc_inhibit_sys vlc_inhibit_sys_t; - -enum vlc_inhibit_flags -{ - VLC_INHIBIT_NONE=0 /*< No inhibition */, - VLC_INHIBIT_SUSPEND=0x1 /*< Processor is in use - do not suspend */, - VLC_INHIBIT_DISPLAY=0x2 /*< Display is in use - do not blank/lock */, -#define VLC_INHIBIT_AUDIO (VLC_INHIBIT_SUSPEND) -#define VLC_INHIBIT_VIDEO (VLC_INHIBIT_SUSPEND|VLC_INHIBIT_DISPLAY) -}; - -struct vlc_inhibit -{ - VLC_COMMON_MEMBERS - - vlc_inhibit_sys_t *p_sys; - void (*inhibit) (vlc_inhibit_t *, unsigned flags); -}; - -static inline void vlc_inhibit_Set (vlc_inhibit_t *ih, unsigned flags) -{ - ih->inhibit (ih, flags); -} - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_input.h b/source/vlc/cpp/include/vlc/plugins/vlc_input.h deleted file mode 100644 index 51b7ad37b..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_input.h +++ /dev/null @@ -1,648 +0,0 @@ -/***************************************************************************** - * vlc_input.h: Core input structures - ***************************************************************************** - * Copyright (C) 1999-2006 VLC authors and VideoLAN - * $Id: b48a256ca4d7be090540a638f0c3040d17410b55 $ - * - * Authors: Christophe Massiot - * Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/* __ is need because conflict with */ -#ifndef VLC_INPUT_H -#define VLC_INPUT_H 1 - -/** - * \file - * This file defines functions, structures and enums for input objects in vlc - */ - -#include -#include -#include -#include -#include - -#include - -/***************************************************************************** - * Seek point: (generalisation of chapters) - *****************************************************************************/ -struct seekpoint_t -{ - int64_t i_byte_offset; - int64_t i_time_offset; - char *psz_name; -}; - -static inline seekpoint_t *vlc_seekpoint_New( void ) -{ - seekpoint_t *point = (seekpoint_t*)malloc( sizeof( seekpoint_t ) ); - point->i_byte_offset = - point->i_time_offset = -1; - point->psz_name = NULL; - return point; -} - -static inline void vlc_seekpoint_Delete( seekpoint_t *point ) -{ - if( !point ) return; - free( point->psz_name ); - free( point ); -} - -static inline seekpoint_t *vlc_seekpoint_Duplicate( const seekpoint_t *src ) -{ - seekpoint_t *point = vlc_seekpoint_New(); - if( src->psz_name ) point->psz_name = strdup( src->psz_name ); - point->i_time_offset = src->i_time_offset; - point->i_byte_offset = src->i_byte_offset; - return point; -} - -/***************************************************************************** - * Title: - *****************************************************************************/ -typedef struct -{ - char *psz_name; - - bool b_menu; /* Is it a menu or a normal entry */ - - int64_t i_length; /* Length(microsecond) if known, else 0 */ - int64_t i_size; /* Size (bytes) if known, else 0 */ - - /* Title seekpoint */ - int i_seekpoint; - seekpoint_t **seekpoint; - -} input_title_t; - -static inline input_title_t *vlc_input_title_New(void) -{ - input_title_t *t = (input_title_t*)malloc( sizeof( input_title_t ) ); - - t->psz_name = NULL; - t->b_menu = false; - t->i_length = 0; - t->i_size = 0; - t->i_seekpoint = 0; - t->seekpoint = NULL; - - return t; -} - -static inline void vlc_input_title_Delete( input_title_t *t ) -{ - int i; - if( t == NULL ) - return; - - free( t->psz_name ); - for( i = 0; i < t->i_seekpoint; i++ ) - { - free( t->seekpoint[i]->psz_name ); - free( t->seekpoint[i] ); - } - free( t->seekpoint ); - free( t ); -} - -static inline input_title_t *vlc_input_title_Duplicate( const input_title_t *t ) -{ - input_title_t *dup = vlc_input_title_New( ); - int i; - - if( t->psz_name ) dup->psz_name = strdup( t->psz_name ); - dup->b_menu = t->b_menu; - dup->i_length = t->i_length; - dup->i_size = t->i_size; - dup->i_seekpoint = t->i_seekpoint; - if( t->i_seekpoint > 0 ) - { - dup->seekpoint = (seekpoint_t**)calloc( t->i_seekpoint, - sizeof(seekpoint_t*) ); - - for( i = 0; i < t->i_seekpoint; i++ ) - { - dup->seekpoint[i] = vlc_seekpoint_Duplicate( t->seekpoint[i] ); - } - } - - return dup; -} - -/***************************************************************************** - * Attachments - *****************************************************************************/ -struct input_attachment_t -{ - char *psz_name; - char *psz_mime; - char *psz_description; - - int i_data; - void *p_data; -}; - -static inline input_attachment_t *vlc_input_attachment_New( const char *psz_name, - const char *psz_mime, - const char *psz_description, - const void *p_data, - int i_data ) -{ - input_attachment_t *a = - (input_attachment_t*)malloc( sizeof(input_attachment_t) ); - if( !a ) - return NULL; - a->psz_name = strdup( psz_name ? psz_name : "" ); - a->psz_mime = strdup( psz_mime ? psz_mime : "" ); - a->psz_description = strdup( psz_description ? psz_description : "" ); - a->i_data = i_data; - a->p_data = NULL; - if( i_data > 0 ) - { - a->p_data = malloc( i_data ); - if( a->p_data && p_data ) - memcpy( a->p_data, p_data, i_data ); - } - return a; -} -static inline input_attachment_t *vlc_input_attachment_Duplicate( const input_attachment_t *a ) -{ - return vlc_input_attachment_New( a->psz_name, a->psz_mime, a->psz_description, - a->p_data, a->i_data ); -} -static inline void vlc_input_attachment_Delete( input_attachment_t *a ) -{ - if( !a ) - return; - free( a->psz_name ); - free( a->psz_mime ); - free( a->psz_description ); - free( a->p_data ); - free( a ); -} - -/***************************************************************************** - * input defines/constants. - *****************************************************************************/ - -/* i_update field of access_t/demux_t */ -#define INPUT_UPDATE_TITLE 0x0010 -#define INPUT_UPDATE_SEEKPOINT 0x0020 -#define INPUT_UPDATE_META 0x0040 -#define INPUT_UPDATE_SIGNAL 0x0080 -#define INPUT_UPDATE_TITLE_LIST 0x0100 - -/** - * This defines private core storage for an input. - */ -typedef struct input_thread_private_t input_thread_private_t; - -/** - * This defines an opaque input resource handler. - */ -typedef struct input_resource_t input_resource_t; - -/** - * Main structure representing an input thread. This structure is mostly - * private. The only public fields are READ-ONLY. You must use the helpers - * to modify them - */ -struct input_thread_t -{ - VLC_COMMON_MEMBERS - - bool b_error; - bool b_eof; - bool b_preparsing; - bool b_dead; - - /* All other data is input_thread is PRIVATE. You can't access it - * outside of src/input */ - input_thread_private_t *p; -}; - -/** - * Record prefix string. - * TODO make it configurable. - */ -#define INPUT_RECORD_PREFIX "vlc-record-%Y-%m-%d-%Hh%Mm%Ss-$ N-$ p" - -/***************************************************************************** - * Input events and variables - *****************************************************************************/ - -/** - * \defgroup inputvariable Input variables - * - * The input provides multiples variable you can write to and/or read from. - * - * TODO complete the documentation. - * The read only variables are: - * - "length" - * - "can-seek" (if you can seek, it doesn't say if 'bar display' has be shown - * or not, for that check position != 0.0) - * - "can-pause" - * - "can-rate" - * - "can-rewind" - * - "can-record" (if a stream can be recorded while playing) - * - "teletext-es" (list of id from the spu tracks (spu-es) that are teletext, the - * variable value being the one currently selected, -1 if no teletext) - * - "signal-quality" - * - "signal-strength" - * - "program-scrambled" (if the current program is scrambled) - * - "cache" (level of data cached [0 .. 1]) - * - * The read-write variables are: - * - state (\see input_state_e) - * - rate - * - position, position-offset - * - time, time-offset - * - title, next-title, prev-title - * - chapter, next-chapter, next-chapter-prev - * - program, audio-es, video-es, spu-es - * - audio-delay, spu-delay - * - bookmark (bookmark list) - * - record - * - frame-next - * - navigation (list of "title %2i") - * - "title %2i" - * - * The variable used for event is - * - intf-event (\see input_event_type_e) - */ - -/** - * Input state - * - * This enum is used by the variable "state" - */ -typedef enum input_state_e -{ - INIT_S = 0, - OPENING_S, - PLAYING_S, - PAUSE_S, - END_S, - ERROR_S, -} input_state_e; - -/** - * Input rate. - * - * It is an float used by the variable "rate" in the - * range [INPUT_RATE_DEFAULT/INPUT_RATE_MAX, INPUT_RATE_DEFAULT/INPUT_RATE_MIN] - * the default value being 1. It represents the ratio of playback speed to - * nominal speed (bigger is faster). - * - * Internally, the rate is stored as a value in the range - * [INPUT_RATE_MIN, INPUT_RATE_MAX]. - * internal rate = INPUT_RATE_DEFAULT / rate variable - */ - -/** - * Default rate value - */ -#define INPUT_RATE_DEFAULT 1000 -/** - * Minimal rate value - */ -#define INPUT_RATE_MIN 32 /* Up to 32/1 */ -/** - * Maximal rate value - */ -#define INPUT_RATE_MAX 32000 /* Up to 1/32 */ - -/** - * Input events - * - * You can catch input event by adding a callback on the variable "intf-event". - * This variable is an integer that will hold a input_event_type_e value. - */ -typedef enum input_event_type_e -{ - /* "state" has changed */ - INPUT_EVENT_STATE, - /* b_dead is true */ - INPUT_EVENT_DEAD, - /* a *user* abort has been requested */ - INPUT_EVENT_ABORT, - - /* "rate" has changed */ - INPUT_EVENT_RATE, - - /* At least one of "position" or "time" */ - INPUT_EVENT_POSITION, - - /* "length" has changed */ - INPUT_EVENT_LENGTH, - - /* A title has been added or removed or selected. - * It imply that chapter has changed (not chapter event is sent) */ - INPUT_EVENT_TITLE, - /* A chapter has been added or removed or selected. */ - INPUT_EVENT_CHAPTER, - - /* A program ("program") has been added or removed or selected, - * or "program-scrambled" has changed.*/ - INPUT_EVENT_PROGRAM, - /* A ES has been added or removed or selected */ - INPUT_EVENT_ES, - /* "teletext-es" has changed */ - INPUT_EVENT_TELETEXT, - - /* "record" has changed */ - INPUT_EVENT_RECORD, - - /* input_item_t media has changed */ - INPUT_EVENT_ITEM_META, - /* input_item_t info has changed */ - INPUT_EVENT_ITEM_INFO, - /* input_item_t name has changed */ - INPUT_EVENT_ITEM_NAME, - /* input_item_t epg has changed */ - INPUT_EVENT_ITEM_EPG, - - /* Input statistics have been updated */ - INPUT_EVENT_STATISTICS, - /* At least one of "signal-quality" or "signal-strength" has changed */ - INPUT_EVENT_SIGNAL, - - /* "audio-delay" has changed */ - INPUT_EVENT_AUDIO_DELAY, - /* "spu-delay" has changed */ - INPUT_EVENT_SUBTITLE_DELAY, - - /* "bookmark" has changed */ - INPUT_EVENT_BOOKMARK, - - /* cache" has changed */ - INPUT_EVENT_CACHE, - - /* A audio_output_t object has been created/deleted by *the input* */ - INPUT_EVENT_AOUT, - /* A vout_thread_t object has been created/deleted by *the input* */ - INPUT_EVENT_VOUT, - -} input_event_type_e; - -/** - * Input queries - */ -enum input_query_e -{ - /* input variable "position" */ - INPUT_GET_POSITION, /* arg1= double * res= */ - INPUT_SET_POSITION, /* arg1= double res=can fail */ - - /* input variable "length" */ - INPUT_GET_LENGTH, /* arg1= int64_t * res=can fail */ - - /* input variable "time" */ - INPUT_GET_TIME, /* arg1= int64_t * res= */ - INPUT_SET_TIME, /* arg1= int64_t res=can fail */ - - /* input variable "rate" (nominal is INPUT_RATE_DEFAULT) */ - INPUT_GET_RATE, /* arg1= int * res= */ - INPUT_SET_RATE, /* arg1= int res=can fail */ - - /* input variable "state" */ - INPUT_GET_STATE, /* arg1= int * res= */ - INPUT_SET_STATE, /* arg1= int res=can fail */ - - /* input variable "audio-delay" and "sub-delay" */ - INPUT_GET_AUDIO_DELAY, /* arg1 = int* res=can fail */ - INPUT_SET_AUDIO_DELAY, /* arg1 = int res=can fail */ - INPUT_GET_SPU_DELAY, /* arg1 = int* res=can fail */ - INPUT_SET_SPU_DELAY, /* arg1 = int res=can fail */ - - /* Menu navigation */ - INPUT_NAV_ACTIVATE, - INPUT_NAV_UP, - INPUT_NAV_DOWN, - INPUT_NAV_LEFT, - INPUT_NAV_RIGHT, - - /* Meta datas */ - INPUT_ADD_INFO, /* arg1= char* arg2= char* arg3=... res=can fail */ - INPUT_REPLACE_INFOS,/* arg1= info_category_t * res=cannot fail */ - INPUT_MERGE_INFOS,/* arg1= info_category_t * res=cannot fail */ - INPUT_GET_INFO, /* arg1= char* arg2= char* arg3= char** res=can fail */ - INPUT_DEL_INFO, /* arg1= char* arg2= char* res=can fail */ - INPUT_SET_NAME, /* arg1= char* res=can fail */ - - /* Input properties */ - INPUT_GET_VIDEO_FPS, /* arg1= double * res=can fail */ - - /* bookmarks */ - INPUT_GET_BOOKMARK, /* arg1= seekpoint_t * res=can fail */ - INPUT_GET_BOOKMARKS, /* arg1= seekpoint_t *** arg2= int * res=can fail */ - INPUT_CLEAR_BOOKMARKS, /* res=can fail */ - INPUT_ADD_BOOKMARK, /* arg1= seekpoint_t * res=can fail */ - INPUT_CHANGE_BOOKMARK, /* arg1= seekpoint_t * arg2= int * res=can fail */ - INPUT_DEL_BOOKMARK, /* arg1= seekpoint_t * res=can fail */ - INPUT_SET_BOOKMARK, /* arg1= int res=can fail */ - - /* titles */ - INPUT_GET_TITLE_INFO, /* arg1=input_title_t** arg2= int * res=can fail */ - - /* Attachments */ - INPUT_GET_ATTACHMENTS, /* arg1=input_attachment_t***, arg2=int* res=can fail */ - INPUT_GET_ATTACHMENT, /* arg1=input_attachment_t**, arg2=char* res=can fail */ - - /* On the fly input slave */ - INPUT_ADD_SLAVE, /* arg1= const char * */ - INPUT_ADD_SUBTITLE, /* arg1= const char *, arg2=bool b_check_extension */ - - /* On the fly record while playing */ - INPUT_SET_RECORD_STATE, /* arg1=bool res=can fail */ - INPUT_GET_RECORD_STATE, /* arg1=bool* res=can fail */ - - /* ES */ - INPUT_RESTART_ES, /* arg1=int (-AUDIO/VIDEO/SPU_ES for the whole category) */ - - /* Input ressources - * XXX You must call vlc_object_release as soon as possible */ - INPUT_GET_AOUT, /* arg1=audio_output_t ** res=can fail */ - INPUT_GET_VOUTS, /* arg1=vout_thread_t ***, size_t * res=can fail */ - INPUT_GET_ES_OBJECTS, /* arg1=int id, vlc_object_t **dec, vout_thread_t **, audio_output_t ** */ - - /* External clock managments */ - INPUT_GET_PCR_SYSTEM, /* arg1=mtime_t *, arg2=mtime_t * res=can fail */ - INPUT_MODIFY_PCR_SYSTEM,/* arg1=int absolute, arg2=mtime_t res=can fail */ -}; - -/** @}*/ - -/***************************************************************************** - * Prototypes - *****************************************************************************/ - -VLC_API input_thread_t * input_Create( vlc_object_t *p_parent, input_item_t *, const char *psz_log, input_resource_t * ) VLC_USED; -#define input_Create(a,b,c,d) input_Create(VLC_OBJECT(a),b,c,d) - -VLC_API input_thread_t * input_CreateAndStart( vlc_object_t *p_parent, input_item_t *, const char *psz_log ) VLC_USED; -#define input_CreateAndStart(a,b,c) input_CreateAndStart(VLC_OBJECT(a),b,c) - -VLC_API int input_Start( input_thread_t * ); - -VLC_API void input_Stop( input_thread_t *, bool b_abort ); - -VLC_API int input_Read( vlc_object_t *, input_item_t * ); -#define input_Read(a,b) input_Read(VLC_OBJECT(a),b) - -VLC_API int input_vaControl( input_thread_t *, int i_query, va_list ); - -VLC_API int input_Control( input_thread_t *, int i_query, ... ); - -VLC_API void input_Close( input_thread_t * ); -void input_Join( input_thread_t * ); -void input_Release( input_thread_t * ); - -/** - * Get the input item for an input thread - * - * You have to keep a reference to the input or to the input_item_t until - * you do not need it anymore. - */ -VLC_API input_item_t* input_GetItem( input_thread_t * ) VLC_USED; - -/** - * It will return the current state of the input. - * Provided for convenience. - */ -static inline input_state_e input_GetState( input_thread_t * p_input ) -{ - input_state_e state = INIT_S; - input_Control( p_input, INPUT_GET_STATE, &state ); - return state; -} -/** - * It will add a new subtitle source to the input. - * Provided for convenience. - */ -static inline int input_AddSubtitle( input_thread_t *p_input, const char *psz_url, bool b_check_extension ) -{ - return input_Control( p_input, INPUT_ADD_SUBTITLE, psz_url, b_check_extension ); -} - -/** - * Return one of the video output (if any). If possible, you should use - * INPUT_GET_VOUTS directly and process _all_ video outputs instead. - * @param p_input an input thread from which to get a video output - * @return NULL on error, or a video output thread pointer (which needs to be - * released with vlc_object_release()). - */ -static inline vout_thread_t *input_GetVout( input_thread_t *p_input ) -{ - vout_thread_t **pp_vout, *p_vout; - size_t i_vout; - - if( input_Control( p_input, INPUT_GET_VOUTS, &pp_vout, &i_vout ) ) - return NULL; - - for( size_t i = 1; i < i_vout; i++ ) - vlc_object_release( (vlc_object_t *)(pp_vout[i]) ); - - p_vout = (i_vout >= 1) ? pp_vout[0] : NULL; - free( pp_vout ); - return p_vout; -} - -/** - * Return the audio output (if any) associated with an input. - * @param p_input an input thread - * @return NULL on error, or the audio output (which needs to be - * released with vlc_object_release()). - */ -static inline audio_output_t *input_GetAout( input_thread_t *p_input ) -{ - audio_output_t *p_aout; - return input_Control( p_input, INPUT_GET_AOUT, &p_aout ) ? NULL : p_aout; -} - -/** - * Returns the objects associated to an ES. - * - * You must release all non NULL object using vlc_object_release. - * You may set pointer of pointer to NULL to avoid retreiving it. - */ -static inline int input_GetEsObjects( input_thread_t *p_input, int i_id, - vlc_object_t **pp_decoder, - vout_thread_t **pp_vout, audio_output_t **pp_aout ) -{ - return input_Control( p_input, INPUT_GET_ES_OBJECTS, i_id, - pp_decoder, pp_vout, pp_aout ); -} - -/** - * \see input_clock_GetSystemOrigin - */ -static inline int input_GetPcrSystem( input_thread_t *p_input, mtime_t *pi_system, mtime_t *pi_delay ) -{ - return input_Control( p_input, INPUT_GET_PCR_SYSTEM, pi_system, pi_delay ); -} -/** - * \see input_clock_ChangeSystemOrigin - */ -static inline int input_ModifyPcrSystem( input_thread_t *p_input, bool b_absolute, mtime_t i_system ) -{ - return input_Control( p_input, INPUT_MODIFY_PCR_SYSTEM, b_absolute, i_system ); -} - -/* */ -VLC_API decoder_t * input_DecoderCreate( vlc_object_t *, es_format_t *, input_resource_t * ) VLC_USED; -VLC_API void input_DecoderDelete( decoder_t * ); -VLC_API void input_DecoderDecode( decoder_t *, block_t *, bool b_do_pace ); - -/** - * This function creates a sane filename path. - */ -VLC_API char * input_CreateFilename( vlc_object_t *, const char *psz_path, const char *psz_prefix, const char *psz_extension ) VLC_USED; - -/** - * It creates an empty input resource handler. - * - * The given object MUST stay alive as long as the input_resource_t is - * not deleted. - */ -VLC_API input_resource_t * input_resource_New( vlc_object_t * ) VLC_USED; - -/** - * It releases an input resource. - */ -VLC_API void input_resource_Release( input_resource_t * ); - -/** - * Forcefully destroys the video output (e.g. when the playlist is stopped). - */ -VLC_API void input_resource_TerminateVout( input_resource_t * ); - -/** - * This function releases all resources (object). - */ -VLC_API void input_resource_Terminate( input_resource_t * ); - -/** - * \return the current audio output if any. - * Use vlc_object_release() to drop the reference. - */ -VLC_API audio_output_t *input_resource_HoldAout( input_resource_t * ); - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_input_item.h b/source/vlc/cpp/include/vlc/plugins/vlc_input_item.h deleted file mode 100644 index 0191ee5e4..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_input_item.h +++ /dev/null @@ -1,319 +0,0 @@ -/***************************************************************************** - * vlc_input_item.h: Core input item - ***************************************************************************** - * Copyright (C) 1999-2009 VLC authors and VideoLAN - * $Id: 0f9800da4dd2cd7febdca74b4787054d6baa5dee $ - * - * Authors: Christophe Massiot - * Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_INPUT_ITEM_H -#define VLC_INPUT_ITEM_H 1 - -/** - * \file - * This file defines functions, structures and enums for input items in vlc - */ - -#include -#include -#include - -#include - -/***************************************************************************** - * input_item_t: Describes an input and is used to spawn input_thread_t objects - *****************************************************************************/ -struct info_t -{ - char *psz_name; /**< Name of this info */ - char *psz_value; /**< Value of the info */ -}; - -struct info_category_t -{ - char *psz_name; /**< Name of this category */ - int i_infos; /**< Number of infos in the category */ - struct info_t **pp_infos; /**< Pointer to an array of infos */ -}; - -struct input_item_t -{ - int i_id; /**< Identifier of the item */ - - char *psz_name; /**< text describing this item */ - char *psz_uri; /**< mrl of this item */ - - int i_options; /**< Number of input options */ - char **ppsz_options; /**< Array of input options */ - uint8_t *optflagv; /**< Some flags of input options */ - unsigned optflagc; - - mtime_t i_duration; /**< Duration in microseconds */ - - - int i_categories; /**< Number of info categories */ - info_category_t **pp_categories; /**< Pointer to the first info category */ - - int i_es; /**< Number of es format descriptions */ - es_format_t **es; /**< Es formats */ - - input_stats_t *p_stats; /**< Statistics */ - int i_nb_played; /**< Number of times played */ - - vlc_meta_t *p_meta; - - int i_epg; /**< Number of EPG entries */ - vlc_epg_t **pp_epg; /**< EPG entries */ - - vlc_event_manager_t event_manager; - - vlc_mutex_t lock; /**< Lock for the item */ - - uint8_t i_type; /**< Type (file, disc, ... see input_item_type_e) */ - bool b_fixed_name; /**< Can the interface change the name ?*/ - bool b_error_when_reading;/**< Error When Reading */ -}; - -enum input_item_type_e -{ - ITEM_TYPE_UNKNOWN, - ITEM_TYPE_FILE, - ITEM_TYPE_DIRECTORY, - ITEM_TYPE_DISC, - ITEM_TYPE_CDDA, - ITEM_TYPE_CARD, - ITEM_TYPE_NET, - ITEM_TYPE_PLAYLIST, - ITEM_TYPE_NODE, - - /* This one is not a real type but the number of input_item types. */ - ITEM_TYPE_NUMBER -}; - -struct input_item_node_t -{ - input_item_t * p_item; - int i_children; - input_item_node_t **pp_children; - input_item_node_t *p_parent; -}; - -VLC_API void input_item_CopyOptions( input_item_t *p_parent, input_item_t *p_child ); -VLC_API void input_item_SetName( input_item_t *p_item, const char *psz_name ); - -/** - * Add one subitem to this item - * - * This won't hold the item, but can tell to interested third parties - * Like the playlist, that there is a new sub item. With this design - * It is not the input item's responsability to keep all the ref of - * the input item children. - * - * Sends a vlc_InputItemSubItemTreeAdded and a vlc_InputItemSubItemAdded event - */ -VLC_API void input_item_PostSubItem( input_item_t *p_parent, input_item_t *p_child ); - -/** - * Start adding multiple subitems. - * - * Create a root node to hold a tree of subitems for given item - */ -VLC_API input_item_node_t * input_item_node_Create( input_item_t *p_input ) VLC_USED; - -/** - * Add a new child node to this parent node that will point to this subitem. - */ -VLC_API input_item_node_t * input_item_node_AppendItem( input_item_node_t *p_node, input_item_t *p_item ); - -/** - * Add an already created node to children of this parent node. - */ -VLC_API void input_item_node_AppendNode( input_item_node_t *p_parent, input_item_node_t *p_child ); - -/** - * Delete a node created with input_item_node_Create() and all its children. - */ -VLC_API void input_item_node_Delete( input_item_node_t *p_node ); - -/** - * End adding multiple subitems. - * - * Sends a vlc_InputItemSubItemTreeAdded event to notify that the item pointed to - * by the given root node has created new subitems that are pointed to by all the - * children of the node. - * - * Also sends vlc_InputItemSubItemAdded event for every child under the given root node; - * - * In the end deletes the node and all its children nodes. - */ -VLC_API void input_item_node_PostAndDelete( input_item_node_t *p_node ); - - -/** - * Option flags - */ -enum input_item_option_e -{ - /* Allow VLC to trust the given option. - * By default options are untrusted */ - VLC_INPUT_OPTION_TRUSTED = 0x2, - - /* Change the value associated to an option if already present, otherwise - * add the option */ - VLC_INPUT_OPTION_UNIQUE = 0x100, -}; - -/** - * This function allows to add an option to an existing input_item_t. - */ -VLC_API int input_item_AddOption(input_item_t *, const char *, unsigned i_flags ); - -/* */ -VLC_API bool input_item_HasErrorWhenReading( input_item_t * ); -VLC_API void input_item_SetMeta( input_item_t *, vlc_meta_type_t meta_type, const char *psz_val ); -VLC_API bool input_item_MetaMatch( input_item_t *p_i, vlc_meta_type_t meta_type, const char *psz ); -VLC_API char * input_item_GetMeta( input_item_t *p_i, vlc_meta_type_t meta_type ) VLC_USED; -VLC_API char * input_item_GetName( input_item_t * p_i ) VLC_USED; -VLC_API char * input_item_GetTitleFbName( input_item_t * p_i ) VLC_USED; -VLC_API char * input_item_GetURI( input_item_t * p_i ) VLC_USED; -VLC_API void input_item_SetURI( input_item_t * p_i, const char *psz_uri ); -VLC_API mtime_t input_item_GetDuration( input_item_t * p_i ); -VLC_API void input_item_SetDuration( input_item_t * p_i, mtime_t i_duration ); -VLC_API bool input_item_IsPreparsed( input_item_t *p_i ); -VLC_API bool input_item_IsArtFetched( input_item_t *p_i ); - -#define INPUT_META( name ) \ -static inline \ -void input_item_Set ## name (input_item_t *p_input, const char *val) \ -{ \ - input_item_SetMeta (p_input, vlc_meta_ ## name, val); \ -} \ -static inline \ -char *input_item_Get ## name (input_item_t *p_input) \ -{ \ - return input_item_GetMeta (p_input, vlc_meta_ ## name); \ -} - -INPUT_META(Title) -INPUT_META(Artist) -INPUT_META(Genre) -INPUT_META(Copyright) -INPUT_META(Album) -INPUT_META(TrackNumber) -INPUT_META(Description) -INPUT_META(Rating) -INPUT_META(Date) -INPUT_META(Setting) -INPUT_META(URL) -INPUT_META(Language) -INPUT_META(NowPlaying) -INPUT_META(Publisher) -INPUT_META(EncodedBy) -INPUT_META(ArtworkURL) -INPUT_META(TrackID) -INPUT_META(TrackTotal) - -#define input_item_SetTrackNum input_item_SetTrackNumber -#define input_item_GetTrackNum input_item_GetTrackNumber -#define input_item_SetArtURL input_item_SetArtworkURL -#define input_item_GetArtURL input_item_GetArtworkURL - -VLC_API char * input_item_GetInfo( input_item_t *p_i, const char *psz_cat,const char *psz_name ) VLC_USED; -VLC_API int input_item_AddInfo( input_item_t *p_i, const char *psz_cat, const char *psz_name, const char *psz_format, ... ) VLC_FORMAT( 4, 5 ); -VLC_API int input_item_DelInfo( input_item_t *p_i, const char *psz_cat, const char *psz_name ); -VLC_API void input_item_ReplaceInfos( input_item_t *, info_category_t * ); -VLC_API void input_item_MergeInfos( input_item_t *, info_category_t * ); - -/** - * This function creates a new input_item_t with the provided information. - * - * XXX You may also use input_item_New or input_item_NewExt as they need - * less arguments. - */ -VLC_API input_item_t * input_item_NewWithType( const char *psz_uri, const char *psz_name, int i_options, const char *const *ppsz_options, unsigned i_option_flags, mtime_t i_duration, int i_type ) VLC_USED; - -/** - * This function creates a new input_item_t with the provided information. - * - * Provided for convenience. - */ -VLC_API input_item_t * input_item_NewExt( const char *psz_uri, const char *psz_name, int i_options, const char *const *ppsz_options, unsigned i_option_flags, mtime_t i_duration ) VLC_USED; - -/** - * This function creates a new input_item_t with the provided information. - * - * Provided for convenience. - */ -#define input_item_New( a,b ) input_item_NewExt( a, b, 0, NULL, 0, -1 ) - -/** - * This function creates a new input_item_t as a copy of another. - */ -VLC_API input_item_t * input_item_Copy(input_item_t * ) VLC_USED; - -/** Holds an input item, i.e. creates a new reference. */ -VLC_API input_item_t *input_item_Hold(input_item_t *); - -/** Releases an input item, i.e. decrements its reference counter. */ -VLC_API void input_item_Release(input_item_t *); - -/* Historical hack... */ -#define vlc_gc_incref(i) input_item_Hold(i) -#define vlc_gc_decref(i) input_item_Release(i) - -/****************** - * Input stats - ******************/ -struct input_stats_t -{ - vlc_mutex_t lock; - - /* Input */ - int64_t i_read_packets; - int64_t i_read_bytes; - float f_input_bitrate; - float f_average_input_bitrate; - - /* Demux */ - int64_t i_demux_read_packets; - int64_t i_demux_read_bytes; - float f_demux_bitrate; - float f_average_demux_bitrate; - int64_t i_demux_corrupted; - int64_t i_demux_discontinuity; - - /* Decoders */ - int64_t i_decoded_audio; - int64_t i_decoded_video; - - /* Vout */ - int64_t i_displayed_pictures; - int64_t i_lost_pictures; - - /* Sout */ - int64_t i_sent_packets; - int64_t i_sent_bytes; - float f_send_bitrate; - - /* Aout */ - int64_t i_played_abuffers; - int64_t i_lost_abuffers; -}; - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_interface.h b/source/vlc/cpp/include/vlc/plugins/vlc_interface.h deleted file mode 100644 index d2d8482ba..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_interface.h +++ /dev/null @@ -1,351 +0,0 @@ -/***************************************************************************** - * vlc_interface.h: interface access for other threads - * This library provides basic functions for threads to interact with user - * interface, such as message output. - ***************************************************************************** - * Copyright (C) 1999, 2000 VLC authors and VideoLAN - * $Id: 81ad15e3e659297e0982a375f7f3e6061ec92a42 $ - * - * Authors: Vincent Seguin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_INTF_H_ -#define VLC_INTF_H_ - -# ifdef __cplusplus -extern "C" { -# endif - -typedef struct intf_dialog_args_t intf_dialog_args_t; - -/** - * \file - * This file contains structures and function prototypes for - * interface management in vlc - */ - -/** - * \defgroup vlc_interface Interface - * These functions and structures are for interface management - * @{ - */ - -typedef struct intf_sys_t intf_sys_t; - -/** Describe all interface-specific data of the interface thread */ -typedef struct intf_thread_t -{ - VLC_COMMON_MEMBERS - - struct intf_thread_t *p_next; /** LibVLC interfaces book keeping */ - - /* Specific interfaces */ - intf_sys_t * p_sys; /** system interface */ - - /** Interface module */ - module_t * p_module; - - /** Specific for dialogs providers */ - void ( *pf_show_dialog ) ( struct intf_thread_t *, int, int, - intf_dialog_args_t * ); - - config_chain_t *p_cfg; -} intf_thread_t; - -/** \brief Arguments passed to a dialogs provider - * This describes the arguments passed to the dialogs provider. They are - * mainly used with INTF_DIALOG_FILE_GENERIC. - */ -struct intf_dialog_args_t -{ - intf_thread_t *p_intf; - char *psz_title; - - char **psz_results; - int i_results; - - void (*pf_callback) ( intf_dialog_args_t * ); - void *p_arg; - - /* Specifically for INTF_DIALOG_FILE_GENERIC */ - char *psz_extensions; - bool b_save; - bool b_multiple; - - /* Specific to INTF_DIALOG_INTERACTION */ - struct interaction_dialog_t *p_dialog; -}; - -VLC_API int intf_Create( vlc_object_t *, const char * ); -#define intf_Create(a,b) intf_Create(VLC_OBJECT(a),b) - -VLC_API void libvlc_Quit( libvlc_int_t * ); - -/** - * \defgroup vlc_subscription Log messages subscription - * These functions deal with log messages. - * @{ - */ - -/** - * Message logging callback signature. - * \param data data pointer as provided to vlc_msg_SetCallback(). - * \param type message type (VLC_MSG_* values from enum vlc_log_type) - * \param item meta informations - * \param fmt format string - * \param args format string arguments - */ -typedef void (*vlc_log_cb) (void *data, int type, const vlc_log_t *item, - const char *fmt, va_list args); - -VLC_API void vlc_LogSet(libvlc_int_t *, vlc_log_cb cb, void *data); - -typedef struct msg_subscription { } msg_subscription_t; -#define vlc_Subscribe(sub,cb,data) ((sub), (cb), (data)) -#define vlc_Unsubscribe(sub) ((void)(sub)) - -/*@}*/ - -#if defined( _WIN32 ) && !VLC_WINSTORE_APP -# define CONSOLE_INTRO_MSG \ - if( !getenv( "PWD" ) ) /* detect Cygwin shell or Wine */ \ - { \ - AllocConsole(); \ - freopen( "CONOUT$", "w", stdout ); \ - freopen( "CONOUT$", "w", stderr ); \ - freopen( "CONIN$", "r", stdin ); \ - } \ - msg_Info( p_intf, "VLC media player - %s", VERSION_MESSAGE ); \ - msg_Info( p_intf, "%s", COPYRIGHT_MESSAGE ); \ - msg_Info( p_intf, _("\nWarning: if you cannot access the GUI " \ - "anymore, open a command-line window, go to the " \ - "directory where you installed VLC and run " \ - "\"vlc -I qt\"\n") ) -#else -# define CONSOLE_INTRO_MSG (void)0 -#endif - -/* Interface dialog ids for dialog providers */ -typedef enum vlc_dialog { - INTF_DIALOG_FILE_SIMPLE = 1, - INTF_DIALOG_FILE, - INTF_DIALOG_DISC, - INTF_DIALOG_NET, - INTF_DIALOG_CAPTURE, - INTF_DIALOG_SAT, - INTF_DIALOG_DIRECTORY, - - INTF_DIALOG_STREAMWIZARD, - INTF_DIALOG_WIZARD, - - INTF_DIALOG_PLAYLIST, - INTF_DIALOG_MESSAGES, - INTF_DIALOG_FILEINFO, - INTF_DIALOG_PREFS, - INTF_DIALOG_BOOKMARKS, - INTF_DIALOG_EXTENDED, - - INTF_DIALOG_POPUPMENU = 20, - INTF_DIALOG_AUDIOPOPUPMENU, - INTF_DIALOG_VIDEOPOPUPMENU, - INTF_DIALOG_MISCPOPUPMENU, - - INTF_DIALOG_FILE_GENERIC = 30, - INTF_DIALOG_INTERACTION = 50, - - INTF_DIALOG_UPDATEVLC = 90, - INTF_DIALOG_VLM, - - INTF_DIALOG_EXIT = 99 -} vlc_dialog_t; - -/* Useful text messages shared by interfaces */ -#define INTF_ABOUT_MSG LICENSE_MSG - -#define EXTENSIONS_AUDIO_CSV "3ga", "669", "a52", "aac", "ac3", "adt", "adts", "aif", "aifc", "aiff", \ - "amr", "aob", "ape", "awb", "caf", "dts", "flac", "it", "kar", \ - "m4a", "m4p", "m5p", "mka", "mlp", "mod", "mpa", "mp1", "mp2", "mp3", "mpc", "mpga", \ - "oga", "ogg", "oma", "opus", "qcp", "ra", "rmi", "s3m", "spx", "thd", "tta", \ - "voc", "vqf", "w64", "wav", "wma", "wv", "xa", "xm" - -#define EXTENSIONS_VIDEO_CSV "3g2", "3gp", "3gp2", "3gpp", "amv", "asf", "avi", "divx", "drc", "dv", \ - "f4v", "flv", "gvi", "gxf", "iso", \ - "m1v", "m2v", "m2t", "m2ts", "m4v", "mkv", "mov",\ - "mp2", "mp2v", "mp4", "mp4v", "mpe", "mpeg", "mpeg1", \ - "mpeg2", "mpeg4", "mpg", "mpv2", "mts", "mtv", "mxf", "mxg", "nsv", "nuv", \ - "ogg", "ogm", "ogv", "ogx", "ps", \ - "rec", "rm", "rmvb", "tod", "ts", "tts", "vob", "vro", \ - "webm", "wm", "wmv", "wtv", "xesc" - -#define EXTENSIONS_AUDIO \ - "*.3ga;" \ - "*.669;" \ - "*.a52;" \ - "*.aac;" \ - "*.ac3;" \ - "*.adt;" \ - "*.adts;" \ - "*.aif;"\ - "*.aifc;"\ - "*.aiff;"\ - "*.amr;" \ - "*.aob;" \ - "*.ape;" \ - "*.awb;" \ - "*.caf;" \ - "*.dts;" \ - "*.flac;"\ - "*.it;" \ - "*.kar;" \ - "*.m4a;" \ - "*.m4p;" \ - "*.m5p;" \ - "*.mid;" \ - "*.mka;" \ - "*.mlp;" \ - "*.mod;" \ - "*.mpa;" \ - "*.mp1;" \ - "*.mp2;" \ - "*.mp3;" \ - "*.mpc;" \ - "*.mpga;" \ - "*.oga;" \ - "*.ogg;" \ - "*.oma;" \ - "*.opus;" \ - "*.qcp;" \ - "*.ra;" \ - "*.rmi;" \ - "*.s3m;" \ - "*.spx;" \ - "*.thd;" \ - "*.tta;" \ - "*.voc;" \ - "*.vqf;" \ - "*.w64;" \ - "*.wav;" \ - "*.wma;" \ - "*.wv;" \ - "*.xa;" \ - "*.xm" - -#define EXTENSIONS_VIDEO "*.3g2;*.3gp;*.3gp2;*.3gpp;*.amv;*.asf;*.avi;*.bin;*.divx;*.drc;*.dv;*f4v;*.flv;*.gvi;*.gxf;*.iso;*.m1v;*.m2v;" \ - "*.m2t;*.m2ts;*.m4v;*.mkv;*.mov;*.mp2;*.mp2v;*.mp4;*.mp4v;*.mpe;*.mpeg;*.mpeg1;" \ - "*.mpeg2;*.mpeg4;*.mpg;*.mpv2;*.mts;*.mtv;*.mxf;*.mxg;*.nsv;*.nuv;" \ - "*.ogg;*.ogm;*.ogv;*.ogx;*.ps;" \ - "*.rec;*.rm;*.rmvb;*.tod;*.ts;*.tts;*.vob;*.vro;*.webm;*.wm;*.wmv;*.wtv;*.xesc" - -#define EXTENSIONS_PLAYLIST "*.asx;*.b4s;*.cue;*.ifo;*.m3u;*.m3u8;*.pls;*.ram;*.rar;*.sdp;*.vlc;*.xspf;*.wvx;*.zip;*.conf" - -#define EXTENSIONS_MEDIA EXTENSIONS_VIDEO ";" EXTENSIONS_AUDIO ";" \ - EXTENSIONS_PLAYLIST - -#define EXTENSIONS_SUBTITLE "*.cdg;*.idx;*.srt;" \ - "*.sub;*.utf;*.ass;" \ - "*.ssa;*.aqt;" \ - "*.jss;*.psb;" \ - "*.rt;*.smi;*.txt;" \ - "*.smil;*.stl;*.usf;" \ - "*.dks;*.pjs;*.mpl2;*.mks" - -/** \defgroup vlc_interaction Interaction - * \ingroup vlc_interface - * Interaction between user and modules - * @{ - */ - -/** - * This structure describes a piece of interaction with the user - */ -typedef struct interaction_dialog_t -{ - int i_type; ///< Type identifier - char *psz_title; ///< Title - char *psz_description; ///< Descriptor string - char *psz_default_button; ///< default button title (~OK) - char *psz_alternate_button;///< alternate button title (~NO) - /// other button title (optional,~Cancel) - char *psz_other_button; - - char *psz_returned[1]; ///< returned responses from the user - - vlc_value_t val; ///< value coming from core for dialogue - int i_timeToGo; ///< time (in sec) until shown progress is finished - bool b_cancelled; ///< was the dialogue cancelled ? - - void * p_private; ///< Private interface data - - int i_status; ///< Dialog status; - int i_action; ///< Action to perform; - int i_flags; ///< Misc flags - int i_return; ///< Return status - - vlc_object_t *p_parent; ///< The vlc object that asked - //for interaction - intf_thread_t *p_interface; - vlc_mutex_t *p_lock; -} interaction_dialog_t; - -/** - * Possible flags . Dialog types - */ -#define DIALOG_GOT_ANSWER 0x01 -#define DIALOG_YES_NO_CANCEL 0x02 -#define DIALOG_LOGIN_PW_OK_CANCEL 0x04 -#define DIALOG_PSZ_INPUT_OK_CANCEL 0x08 -#define DIALOG_BLOCKING_ERROR 0x10 -#define DIALOG_NONBLOCKING_ERROR 0x20 -#define DIALOG_USER_PROGRESS 0x80 -#define DIALOG_INTF_PROGRESS 0x100 - -/** Possible return codes */ -enum -{ - DIALOG_OK_YES, - DIALOG_NO, - DIALOG_CANCELLED -}; - -/** Possible status */ -enum -{ - ANSWERED_DIALOG, ///< Got "answer" - DESTROYED_DIALOG, ///< Interface has destroyed it -}; - -/** Possible actions */ -enum -{ - INTERACT_NEW, - INTERACT_UPDATE, - INTERACT_HIDE, - INTERACT_DESTROY -}; - -#define intf_UserStringInput( a, b, c, d ) (VLC_OBJECT(a),b,c,d, VLC_EGENERIC) -#define interaction_Register( t ) (t, VLC_EGENERIC) -#define interaction_Unregister( t ) (t, VLC_EGENERIC) - - -/** @} */ -/** @} */ - -# ifdef __cplusplus -} -# endif -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_intf_strings.h b/source/vlc/cpp/include/vlc/plugins/vlc_intf_strings.h deleted file mode 100644 index 3c9a1b4bc..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_intf_strings.h +++ /dev/null @@ -1,114 +0,0 @@ -/***************************************************************************** - * vlc_intf_strings.h : Strings for main interfaces - ***************************************************************************** - * Copyright (C) 2003 VLC authors and VideoLAN - * $Id: c075c98c6b869684955a93147e5311e530fffc14 $ - * - * Authors: Clément Stenac - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_INTF_STRINGS_H -#define VLC_INTF_STRINGS_H 1 - -/** - * \file - * This file defines a number of strings used in user interfaces - */ - -/* A helper macro that will expand to either of the arguments - depanding on platform. The arguments are supposed to be: - 1. dir: a string containing "directory" - 2. folder: a string with the same meaning but with directory - substituted with "folder" -*/ -#if defined( _WIN32 ) || defined(__APPLE__) - #define I_DIR_OR_FOLDER( dir, folder ) folder -#else - #define I_DIR_OR_FOLDER( dir, folder ) dir -#endif - -/*************** Open dialogs **************/ - -#define I_OP_OPF N_("&Open File...") -#define I_OP_ADVOP N_("&Advanced Open...") -#define I_OP_OPDIR I_DIR_OR_FOLDER( N_("Open D&irectory..."), \ - N_("Open &Folder...") ) -#define I_OP_SEL_FILES N_("Select one or more files to open") -#define I_OP_SEL_DIR I_DIR_OR_FOLDER( N_("Select Directory"), N_("Select Folder") ) - -/******************* Menus *****************/ - -#define I_MENU_INFO N_("Media &Information") -#define I_MENU_CODECINFO N_("&Codec Information") -#define I_MENU_MSG N_("&Messages") -#define I_MENU_GOTOTIME N_("Jump to Specific &Time") -#define I_MENU_BOOKMARK N_("Custom &Bookmarks") -#define I_MENU_VLM N_("&VLM Configuration") - -#define I_MENU_ABOUT N_("&About") - -/* Playlist popup */ -#define I_POP_PLAY N_("Play") -#define I_POP_DEL N_("Remove Selected") -#define I_POP_INFO N_("Information...") -#define I_POP_NEWFOLDER I_DIR_OR_FOLDER( N_("Create Directory..."), \ - N_("Create Folder...") ) -#define I_POP_EXPLORE I_DIR_OR_FOLDER( N_("Show Containing Directory..."), \ - N_("Show Containing Folder...") ) -#define I_POP_STREAM N_("Stream...") -#define I_POP_SAVE N_("Save...") - -/*************** Playlist *************/ - -#define I_PL_LOOP N_("Repeat All") -#define I_PL_REPEAT N_("Repeat One") -#define I_PL_RANDOM N_("Random") -#define I_PL_NORANDOM N_("Random Off") -#define I_PL_ADDPL N_("Add to Playlist") - -#define I_PL_ADDF N_("Add File...") -#define I_PL_ADDDIR I_DIR_OR_FOLDER( N_("Add Directory..."), \ - N_("Add Folder...") ) - -#define I_PL_SAVE N_("Save Playlist to &File...") - -#define I_PL_SEARCH N_("Search") - - -/*************** Preferences *************/ - - -/*************** Video filters **************/ - -#define I_WAVE N_("Waves") -#define I_LONGHELP N_("" \ - "

Welcome to VLC media player Help

" \ - "

Documentation

" \ - "

You can find VLC documentation on VideoLAN's wiki website.

" \ - "

If you are a newcomer to VLC media player, please read the
Introduction to VLC media player.

" \ - "

You will find some information on how to use the player in the
\"How to play files with VLC media player\" document.

" \ - "

For all the saving, converting, transcoding, encoding, muxing and streaming tasks, you should find useful information in the Streaming Documentation.

" \ - "

If you are unsure about terminology, please consult the knowledge base.

" \ - "

To understand the main keyboard shortcuts, read the shortcuts page.

" \ - "

Help

" \ - "

Before asking any question, please refer yourself to the FAQ.

" \ - "

You might then get (and give) help on the Forums, the mailing-lists or our IRC channel (#videolan on irc.freenode.net).

" \ - "

Contribute to the project

" \ - "

You can help the VideoLAN project giving some of your time to help the community, to design skins, to translate the documentation, to test and to code. You can also give funds and material to help us. And of course, you can promote VLC media player.

" \ - "") - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_iso_lang.h b/source/vlc/cpp/include/vlc/plugins/vlc_iso_lang.h deleted file mode 100644 index fe6794e27..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_iso_lang.h +++ /dev/null @@ -1,47 +0,0 @@ -/***************************************************************************** - * vlc_iso_lang.h: function to decode language code (in dvd or a52 for instance). - ***************************************************************************** - * Copyright (C) 1998-2001 VLC authors and VideoLAN - * $Id: f27fb665f3db2754e137610a74f14d157bb647e9 $ - * - * Author: Stéphane Borel - * Arnaud de Bossoreille de Ribou - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file defines functions and structures for iso639 language codes - */ - -struct iso639_lang_t -{ - const char *psz_eng_name; /* Description in English */ - const char psz_iso639_1[3]; /* ISO-639-1 (2 characters) code */ - const char psz_iso639_2T[4]; /* ISO-639-2/T (3 characters) English code */ - const char psz_iso639_2B[4]; /* ISO-639-2/B (3 characters) native code */ -}; - -#if defined( __cplusplus ) -extern "C" { -#endif -VLC_API const iso639_lang_t * GetLang_1( const char * ); -VLC_API const iso639_lang_t * GetLang_2T( const char * ); -VLC_API const iso639_lang_t * GetLang_2B( const char * ); -#if defined( __cplusplus ) -} -#endif - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_keys.h b/source/vlc/cpp/include/vlc/plugins/vlc_keys.h deleted file mode 100644 index 710da5e5b..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_keys.h +++ /dev/null @@ -1,234 +0,0 @@ -/***************************************************************************** - * vlc_keys.h: keycode defines - ***************************************************************************** - * Copyright (C) 2003-2009 VLC authors and VideoLAN - * $Id: 62a52fde038aae844097413977156d27d81296fb $ - * - * Authors: Sigmund Augdal Helberg - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_KEYS_H -#define VLC_KEYS_H 1 - -/** - * \file - * This file defines keys and functions - */ - -#define KEY_MODIFIER 0xFF000000 -#define KEY_MODIFIER_ALT 0x01000000 -#define KEY_MODIFIER_SHIFT 0x02000000 -#define KEY_MODIFIER_CTRL 0x04000000 -#define KEY_MODIFIER_META 0x08000000 -#define KEY_MODIFIER_COMMAND 0x10000000 - -#define KEY_UNSET 0x00000000 -#define KEY_BACKSPACE 0x08 -#define KEY_TAB 0x09 -#define KEY_ENTER 0x0D -#define KEY_ESC 0x1B -/* End of Unicode range: 0x0010FFFF */ -#define KEY_LEFT 0x00210000 -#define KEY_RIGHT 0x00220000 -#define KEY_UP 0x00230000 -#define KEY_DOWN 0x00240000 -#define KEY_F1 0x00270000 -#define KEY_F2 0x00280000 -#define KEY_F3 0x00290000 -#define KEY_F4 0x002A0000 -#define KEY_F5 0x002B0000 -#define KEY_F6 0x002C0000 -#define KEY_F7 0x002D0000 -#define KEY_F8 0x002E0000 -#define KEY_F9 0x002F0000 -#define KEY_F10 0x00300000 -#define KEY_F11 0x00310000 -#define KEY_F12 0x00320000 -#define KEY_HOME 0x00330000 -#define KEY_END 0x00340000 -#define KEY_INSERT 0x00350000 -#define KEY_DELETE 0x00360000 -#define KEY_MENU 0x00370000 -#define KEY_PAGEUP 0x00390000 -#define KEY_PAGEDOWN 0x003A0000 - -#define KEY_BROWSER_BACK 0x003F0000 -#define KEY_BROWSER_FORWARD 0x00400000 -#define KEY_BROWSER_REFRESH 0x00410000 -#define KEY_BROWSER_STOP 0x00420000 -#define KEY_BROWSER_SEARCH 0x00430000 -#define KEY_BROWSER_FAVORITES 0x00440000 -#define KEY_BROWSER_HOME 0x00450000 -#define KEY_VOLUME_MUTE 0x00460000 -#define KEY_VOLUME_DOWN 0x00470000 -#define KEY_VOLUME_UP 0x00480000 -#define KEY_MEDIA_NEXT_TRACK 0x00490000 -#define KEY_MEDIA_PREV_TRACK 0x004A0000 -#define KEY_MEDIA_STOP 0x004B0000 -#define KEY_MEDIA_PLAY_PAUSE 0x004C0000 -#define KEY_MEDIA_RECORD 0x004D0000 -#define KEY_MEDIA_REWIND 0x004E0000 -#define KEY_MEDIA_FORWARD 0x004F0000 -#define KEY_MEDIA_REPEAT 0x00500000 -#define KEY_MEDIA_SHUFFLE 0x00510000 -#define KEY_MEDIA_SUBTITLE 0x00520000 -#define KEY_MEDIA_AUDIO 0x00530000 -#define KEY_MEDIA_ANGLE 0x00540000 -#define KEY_MEDIA_TIME 0x00550000 -#define KEY_MEDIA_FRAME_PREV 0x00560000 -#define KEY_MEDIA_FRAME_NEXT 0x00570000 -#define KEY_MEDIA_SELECT 0x00580000 -#define KEY_MEDIA_VIEW 0x00590000 -#define KEY_MEDIA_MENU 0x005A0000 -#define KEY_ZOOM_IN 0x00600000 -#define KEY_ZOOM_OUT 0x00610000 -#define KEY_BRIGHTNESS_UP 0x00620000 -#define KEY_BRIGHTNESS_DOWN 0x00630000 - -#define KEY_MOUSEWHEELUP 0x00F00000 -#define KEY_MOUSEWHEELDOWN 0x00F10000 -#define KEY_MOUSEWHEELLEFT 0x00F20000 -#define KEY_MOUSEWHEELRIGHT 0x00F30000 - -VLC_API char *vlc_keycode2str(uint_fast32_t i_key, bool locale) VLC_USED; -VLC_API uint_fast32_t vlc_str2keycode(const char *str) VLC_USED; - -typedef enum vlc_action { - ACTIONID_NONE = 0, - ACTIONID_QUIT, - ACTIONID_PLAY_PAUSE, - ACTIONID_PLAY, - ACTIONID_PAUSE, - ACTIONID_STOP, - ACTIONID_PREV, - ACTIONID_NEXT, - ACTIONID_SLOWER, - ACTIONID_FASTER, - ACTIONID_TOGGLE_FULLSCREEN, - ACTIONID_VOL_UP, - ACTIONID_VOL_DOWN, - ACTIONID_NAV_ACTIVATE, - ACTIONID_NAV_UP, - ACTIONID_NAV_DOWN, - ACTIONID_NAV_LEFT, - ACTIONID_NAV_RIGHT, - ACTIONID_JUMP_BACKWARD_EXTRASHORT, - ACTIONID_JUMP_FORWARD_EXTRASHORT, - ACTIONID_JUMP_BACKWARD_SHORT, - ACTIONID_JUMP_FORWARD_SHORT, - ACTIONID_JUMP_BACKWARD_MEDIUM, - ACTIONID_JUMP_FORWARD_MEDIUM, - ACTIONID_JUMP_BACKWARD_LONG, - ACTIONID_JUMP_FORWARD_LONG, - ACTIONID_FRAME_NEXT, - ACTIONID_POSITION, - ACTIONID_VOL_MUTE, -/* let ACTIONID_SET_BOOMARK* and ACTIONID_PLAY_BOOKMARK* be contiguous */ - ACTIONID_SET_BOOKMARK1, - ACTIONID_SET_BOOKMARK2, - ACTIONID_SET_BOOKMARK3, - ACTIONID_SET_BOOKMARK4, - ACTIONID_SET_BOOKMARK5, - ACTIONID_SET_BOOKMARK6, - ACTIONID_SET_BOOKMARK7, - ACTIONID_SET_BOOKMARK8, - ACTIONID_SET_BOOKMARK9, - ACTIONID_SET_BOOKMARK10, - ACTIONID_PLAY_BOOKMARK1, - ACTIONID_PLAY_BOOKMARK2, - ACTIONID_PLAY_BOOKMARK3, - ACTIONID_PLAY_BOOKMARK4, - ACTIONID_PLAY_BOOKMARK5, - ACTIONID_PLAY_BOOKMARK6, - ACTIONID_PLAY_BOOKMARK7, - ACTIONID_PLAY_BOOKMARK8, - ACTIONID_PLAY_BOOKMARK9, - ACTIONID_PLAY_BOOKMARK10, - /* end of contiguous zone */ - ACTIONID_PLAY_CLEAR, - ACTIONID_SUBDELAY_UP, - ACTIONID_SUBDELAY_DOWN, - ACTIONID_SUBSYNC_MARKAUDIO, - ACTIONID_SUBSYNC_MARKSUB, - ACTIONID_SUBSYNC_APPLY, - ACTIONID_SUBSYNC_RESET, - ACTIONID_SUBPOS_UP, - ACTIONID_SUBPOS_DOWN, - ACTIONID_AUDIO_TRACK, - ACTIONID_SUBTITLE_TRACK, - ACTIONID_INTF_TOGGLE_FSC, - ACTIONID_INTF_HIDE, - ACTIONID_INTF_BOSS, - /* chapter and title navigation */ - ACTIONID_TITLE_PREV, - ACTIONID_TITLE_NEXT, - ACTIONID_CHAPTER_PREV, - ACTIONID_CHAPTER_NEXT, - /* end of chapter and title navigation */ - ACTIONID_AUDIODELAY_UP, - ACTIONID_AUDIODELAY_DOWN, - ACTIONID_SNAPSHOT, - ACTIONID_RECORD, - ACTIONID_DISC_MENU, - ACTIONID_ASPECT_RATIO, - ACTIONID_CROP, - ACTIONID_DEINTERLACE, - ACTIONID_DEINTERLACE_MODE, - ACTIONID_ZOOM, - ACTIONID_UNZOOM, - ACTIONID_CROP_TOP, - ACTIONID_UNCROP_TOP, - ACTIONID_CROP_LEFT, - ACTIONID_UNCROP_LEFT, - ACTIONID_CROP_BOTTOM, - ACTIONID_UNCROP_BOTTOM, - ACTIONID_CROP_RIGHT, - ACTIONID_UNCROP_RIGHT, - ACTIONID_RANDOM, - ACTIONID_LOOP, - ACTIONID_WALLPAPER, - ACTIONID_LEAVE_FULLSCREEN, - /* Zoom */ - ACTIONID_ZOOM_QUARTER, - ACTIONID_ZOOM_HALF, - ACTIONID_ZOOM_ORIGINAL, - ACTIONID_ZOOM_DOUBLE, - /* Cycle Through Audio Devices */ - ACTIONID_AUDIODEVICE_CYCLE, - /* scaling */ - ACTIONID_TOGGLE_AUTOSCALE, - ACTIONID_SCALE_UP, - ACTIONID_SCALE_DOWN, - /* */ - ACTIONID_RATE_NORMAL, - ACTIONID_RATE_SLOWER_FINE, - ACTIONID_RATE_FASTER_FINE, - /* Cycle Through Program Service IDs */ - ACTIONID_PROGRAM_SID_NEXT, - ACTIONID_PROGRAM_SID_PREV, - ACTIONID_INTF_POPUP_MENU, - -} vlc_action_t; - -VLC_API vlc_action_t vlc_GetActionId(const char *psz_key) VLC_USED; - -struct hotkey -{ - const char *psz_action; -}; - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_main.h b/source/vlc/cpp/include/vlc/plugins/vlc_main.h deleted file mode 100644 index cd710b247..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_main.h +++ /dev/null @@ -1,45 +0,0 @@ -/***************************************************************************** - * vlc_main.h: access to all program variables - * Declaration and extern access to LibVLC instance object. - ***************************************************************************** - * Copyright (C) 1999, 2000, 2001, 2002, 2008 VLC authors and VideoLAN - * - * Authors: Vincent Seguin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file defines libvlc_int_t internal libvlc instance - */ - -TYPEDEF_ARRAY(input_item_t*, input_item_array_t) - -struct hotkey; - -/***************************************************************************** - * libvlc_internal_instance_t - ***************************************************************************** - * This structure is a LibVLC instance, for use by libvlc core and plugins - *****************************************************************************/ -struct libvlc_int_t -{ - VLC_COMMON_MEMBERS - - /* Structure storing the action name / key associations */ - const struct hotkey *p_hotkeys; -}; - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_md5.h b/source/vlc/cpp/include/vlc/plugins/vlc_md5.h deleted file mode 100644 index 0d61b394a..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_md5.h +++ /dev/null @@ -1,59 +0,0 @@ -/***************************************************************************** - * vlc_md5.h: MD5 hash - ***************************************************************************** - * Copyright © 2004-2011 VLC authors and VideoLAN - * - * Authors: Rémi Denis-Courmont - * Rafaël Carré - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_MD5_H -# define VLC_MD5_H - -/** - * \file - * This file defines functions and structures to compute MD5 digests - */ - -struct md5_s -{ - uint32_t A, B, C, D; /* chaining variables */ - uint32_t nblocks; - uint8_t buf[64]; - int count; -}; - -VLC_API void InitMD5( struct md5_s * ); -VLC_API void AddMD5( struct md5_s *, const void *, size_t ); -VLC_API void EndMD5( struct md5_s * ); - -/** - * Returns a char representation of the md5 hash, as shown by UNIX md5 or - * md5sum tools. - */ -static inline char * psz_md5_hash( struct md5_s *md5_s ) -{ - char *psz = malloc( 33 ); /* md5 string is 32 bytes + NULL character */ - if( likely(psz) ) - { - for( int i = 0; i < 16; i++ ) - sprintf( &psz[2*i], "%02"PRIx8, md5_s->buf[i] ); - } - return psz; -} - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_media_library.h b/source/vlc/cpp/include/vlc/plugins/vlc_media_library.h deleted file mode 100644 index e7e1f706e..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_media_library.h +++ /dev/null @@ -1,127 +0,0 @@ -/***************************************************************************** - * vlc_media_library.h: SQL-based media library - ***************************************************************************** - * Copyright (C) 2008-2010 the VideoLAN Team and AUTHORS - * $Id: a35d9729ca3705ec792b7be9e1819919f6e601f6 $ - * - * Authors: Antoine Lejeune - * Jean-Philippe André - * Rémi Duraffort - * Adrien Maglo - * Srikanth Raju - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_MEDIA_LIBRARY_H -# define VLC_MEDIA_LIBRARY_H - -# ifdef __cplusplus -extern "C" { -# endif - -/***************************************************************************** - * ML Enums - *****************************************************************************/ - -#define ML_PERSON_ARTIST "Artist" -#define ML_PERSON_ALBUM_ARTIST "Album Artist" -#define ML_PERSON_ENCODER "Encoder" -#define ML_PERSON_PUBLISHER "Publisher" - - -/** List of Query select types. - * In a query array or variable argument list, each select type is followed - * by an argument (X) of variable type (char* or int, @see ml_element_t). - * These types can be used either in the query list or in the result array. - * Some types are reserved for the result array: - */ -typedef enum -{ - ML_ALBUM = 1, /**< Album Title */ - ML_ALBUM_ID, /**< Album ID */ - ML_ALBUM_COVER, /**< Album Cover art url */ - /* FIXME: Remove ML_ARTIST */ - ML_ARTIST, /**< Artist, interpreted as ML_PEOPLE - && ML_PEOPLE_ROLE = ML_PERSON_ARTIST */ - ML_ARTIST_ID, /**< Artist ID, interpreted as ML_PEOPLE_ID - && ML_PEOPLE_ROLE = ML_PERSON_ARTIST */ - ML_COMMENT, /**< Comment about media */ - ML_COUNT_MEDIA, /**< Number of medias */ - ML_COUNT_ALBUM, /**< Number of albums */ - ML_COUNT_PEOPLE, /**< Number of people */ - ML_COVER, /**< Cover art url */ - ML_DURATION, /**< Duration in ms */ - ML_DISC_NUMBER, /**< Disc number of the track */ - ML_EXTRA, /**< Extra/comment (string) on the media */ - ML_FIRST_PLAYED, /**< First time media was played */ - ML_FILESIZE, /**< Size of the media file */ - ML_GENRE, /**< Genre of the media (if any) */ - ML_ID, /**< Media ID */ - ML_IMPORT_TIME, /**< Date when media was imported */ - ML_LANGUAGE, /**< Language */ - ML_LAST_PLAYED, /**< Last play UNIX timestamp */ - ML_LAST_SKIPPED, /**< Time when media was last skipped */ - ML_ORIGINAL_TITLE, /**< Media original title (if any) */ - ML_PEOPLE, /**< Any People associated with this media */ - ML_PEOPLE_ID, /**< Id of a person */ - ML_PEOPLE_ROLE, /**< Person role */ - ML_PLAYED_COUNT, /**< Media play count */ - ML_PREVIEW, /**< Url of the video preview */ - ML_SKIPPED_COUNT, /**< Number of times skipped */ - ML_SCORE, /**< Computed media score */ - ML_TITLE, /**< Media title */ - ML_TRACK_NUMBER, /**< Media track number (if any) */ - ML_TYPE, /**< Media type. @see ml_type_e */ - ML_URI, /**< Media full URI. */ - ML_VOTE, /**< Media user vote value */ - ML_YEAR, /**< Media publishing year */ - ML_DIRECTORY, /**< Monitored directory */ - ML_MEDIA, /**< Full media descriptor. @see ml_media_t */ - ML_MEDIA_SPARSE, /**< Sparse media. @see ml_media_t */ - ML_MEDIA_EXTRA, /**< Sparse + Extra = Full media */ - - /* Some special elements */ - ML_LIMIT = -1, /**< Limit a query to X results */ - ML_SORT_DESC = -2, /**< Sort a query descending on argument X */ - ML_SORT_ASC = -3, /**< Sort a query ascending on argument X */ - ML_DISTINCT = -4, /**< Add DISTINCT to SELECT statements. */ - ML_END = -42 /**< End of argument list */ -} ml_select_e; - -/** Media types (audio, video, etc...) */ -typedef enum -{ - ML_UNKNOWN = 0, /**< Unknown media type */ - ML_AUDIO = 1 << 0, /**< Audio only media */ - ML_VIDEO = 1 << 1, /**< Video media. May contain audio channels */ - ML_STREAM = 1 << 2, /**< Streamed media = not a local file */ - ML_NODE = 1 << 3, /**< Nodes like simple nodes, directories, playlists, etc */ - ML_REMOVABLE = 1 << 4, /**< Removable media: CD/DVD/Card/... */ -} ml_type_e; - -/** Query result item/list type: integers, strings, medias, timestamps */ -typedef enum { - ML_TYPE_INT, /**< Object is an int */ - ML_TYPE_PSZ, /**< A string char* */ - ML_TYPE_TIME, /**< A timestamp mtime_t */ - ML_TYPE_MEDIA, /**< A pointer to a media ml_media_t* */ -} ml_result_type_e; - -#ifdef __cplusplus -} -#endif /* C++ */ - -#endif /* VLC_MEDIA_LIBRARY_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_memory.h b/source/vlc/cpp/include/vlc/plugins/vlc_memory.h deleted file mode 100644 index f4b8d4931..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_memory.h +++ /dev/null @@ -1,57 +0,0 @@ -/***************************************************************************** - * vlc_memory.h: Memory functions - ***************************************************************************** - * Copyright (C) 2009 VLC authors and VideoLAN - * - * Authors: JP Dinger - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_MEMORY_H -#define VLC_MEMORY_H 1 - -#include - -/** - * \file - * This file deals with memory fixups - */ - -/** - * \defgroup memory Memory - * @{ - */ - -/** - * This wrapper around realloc() will free the input pointer when - * realloc() returns NULL. The use case ptr = realloc(ptr, newsize) will - * cause a memory leak when ptr pointed to a heap allocation before, - * leaving the buffer allocated but unreferenced. vlc_realloc() is a - * drop-in replacement for that use case (and only that use case). - */ -static inline void *realloc_or_free( void *p, size_t sz ) -{ - void *n = realloc(p,sz); - if( !n ) - free(p); - return n; -} - -/** - * @} - */ - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_messages.h b/source/vlc/cpp/include/vlc/plugins/vlc_messages.h deleted file mode 100644 index 0a0ae86b1..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_messages.h +++ /dev/null @@ -1,83 +0,0 @@ -/***************************************************************************** - * vlc_messages.h: messages interface - * This library provides basic functions for threads to interact with user - * interface, such as message output. - ***************************************************************************** - * Copyright (C) 1999, 2000, 2001, 2002 VLC authors and VideoLAN - * $Id: 79aa519e00a65af6b0e64f60dd0f67e03ad20268 $ - * - * Authors: Vincent Seguin - * Samuel Hocevar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_MESSAGES_H_ -#define VLC_MESSAGES_H_ - -/** - * \file - * This file defines structures and functions to handle messages and statistics gathering - */ - -#include - -/** - * \defgroup messages Messages - * This library provides basic functions for threads to interact with user - * interface, such as message output. - * - * @{ - */ - -/** Message types */ -enum vlc_log_type -{ - VLC_MSG_INFO=0, /**< Important information */ - VLC_MSG_ERR, /**< Error */ - VLC_MSG_WARN, /**< Warning */ - VLC_MSG_DBG, /**< Debug */ -}; - -/** - * Log message - */ -typedef struct vlc_log_t -{ - uintptr_t i_object_id; /**< Emitter (temporaly) unique object ID or 0 */ - const char *psz_object_type; /**< Emitter object type name */ - const char *psz_module; /**< Emitter module (source code) */ - const char *psz_header; /**< Additional header (used by VLM media) */ -} vlc_log_t; - -VLC_API void vlc_Log(vlc_object_t *, int, - const char *, const char *, ...) VLC_FORMAT( 4, 5 ); -VLC_API void vlc_vaLog(vlc_object_t *, int, - const char *, const char *, va_list); -#define msg_GenericVa(a, b, c, d, e) vlc_vaLog(VLC_OBJECT(a), b, c, d, e) - -#define msg_Info( p_this, ... ) \ - vlc_Log( VLC_OBJECT(p_this), VLC_MSG_INFO, MODULE_STRING, __VA_ARGS__ ) -#define msg_Err( p_this, ... ) \ - vlc_Log( VLC_OBJECT(p_this), VLC_MSG_ERR, MODULE_STRING, __VA_ARGS__ ) -#define msg_Warn( p_this, ... ) \ - vlc_Log( VLC_OBJECT(p_this), VLC_MSG_WARN, MODULE_STRING, __VA_ARGS__ ) -#define msg_Dbg( p_this, ... ) \ - vlc_Log( VLC_OBJECT(p_this), VLC_MSG_DBG, MODULE_STRING, __VA_ARGS__ ) - -/** - * @} - */ -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_meta.h b/source/vlc/cpp/include/vlc/plugins/vlc_meta.h deleted file mode 100644 index 83c1e485d..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_meta.h +++ /dev/null @@ -1,148 +0,0 @@ -/***************************************************************************** - * vlc_meta.h: Stream meta-data - ***************************************************************************** - * Copyright (C) 2004 VLC authors and VideoLAN - * $Id: db9f58af4b68976c9fd31aaa431b9ec52cd41717 $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_META_H -#define VLC_META_H 1 - -/** - * \file - * This file defines functions and structures for stream meta-data in vlc - * - */ - -typedef enum vlc_meta_type_t -{ - vlc_meta_Title, - vlc_meta_Artist, - vlc_meta_Genre, - vlc_meta_Copyright, - vlc_meta_Album, - vlc_meta_TrackNumber, - vlc_meta_Description, - vlc_meta_Rating, - vlc_meta_Date, - vlc_meta_Setting, - vlc_meta_URL, - vlc_meta_Language, - vlc_meta_NowPlaying, - vlc_meta_Publisher, - vlc_meta_EncodedBy, - vlc_meta_ArtworkURL, - vlc_meta_TrackID, - vlc_meta_TrackTotal -} vlc_meta_type_t; - -#define VLC_META_TYPE_COUNT 18 - -#define ITEM_PREPARSED 1 -#define ITEM_ARTURL_FETCHED 2 -#define ITEM_ART_FETCHED 4 -#define ITEM_ART_NOTFOUND 8 - -/** - * Basic function to deal with meta - */ -struct vlc_meta_t; - -VLC_API vlc_meta_t * vlc_meta_New( void ) VLC_USED; -VLC_API void vlc_meta_Delete( vlc_meta_t *m ); -VLC_API void vlc_meta_Set( vlc_meta_t *p_meta, vlc_meta_type_t meta_type, const char *psz_val ); -VLC_API const char * vlc_meta_Get( const vlc_meta_t *p_meta, vlc_meta_type_t meta_type ); - -VLC_API void vlc_meta_AddExtra( vlc_meta_t *m, const char *psz_name, const char *psz_value ); -VLC_API const char * vlc_meta_GetExtra( const vlc_meta_t *m, const char *psz_name ); -VLC_API unsigned vlc_meta_GetExtraCount( const vlc_meta_t *m ); - -/** - * Allocate a copy of all extra meta names and a table with it. - * Be sure to free both the returned pointers and its name. - */ -VLC_API char ** vlc_meta_CopyExtraNames( const vlc_meta_t *m ) VLC_USED; - -VLC_API void vlc_meta_Merge( vlc_meta_t *dst, const vlc_meta_t *src ); - -VLC_API int vlc_meta_GetStatus( vlc_meta_t *m ); -VLC_API void vlc_meta_SetStatus( vlc_meta_t *m, int status ); - -/** - * Returns a localizes string describing the meta - */ -VLC_API const char * vlc_meta_TypeToLocalizedString( vlc_meta_type_t meta_type ); - -enum { - ALBUM_ART_WHEN_ASKED, - ALBUM_ART_WHEN_PLAYED, - ALBUM_ART_ALL -}; - - -typedef struct meta_export_t -{ - VLC_COMMON_MEMBERS - input_item_t *p_item; - const char *psz_file; -} meta_export_t; - -VLC_API int input_item_WriteMeta(vlc_object_t *, input_item_t *); - -/* Setters for meta. - * Warning: Make sure to use the input_item meta setters (defined in vlc_input_item.h) - * instead of those one. */ -#define vlc_meta_SetTitle( meta, b ) vlc_meta_Set( meta, vlc_meta_Title, b ) -#define vlc_meta_SetArtist( meta, b ) vlc_meta_Set( meta, vlc_meta_Artist, b ) -#define vlc_meta_SetGenre( meta, b ) vlc_meta_Set( meta, vlc_meta_Genre, b ) -#define vlc_meta_SetCopyright( meta, b ) vlc_meta_Set( meta, vlc_meta_Copyright, b ) -#define vlc_meta_SetAlbum( meta, b ) vlc_meta_Set( meta, vlc_meta_Album, b ) -#define vlc_meta_SetTrackNum( meta, b ) vlc_meta_Set( meta, vlc_meta_TrackNumber, b ) -#define vlc_meta_SetDescription( meta, b ) vlc_meta_Set( meta, vlc_meta_Description, b ) -#define vlc_meta_SetRating( meta, b ) vlc_meta_Set( meta, vlc_meta_Rating, b ) -#define vlc_meta_SetDate( meta, b ) vlc_meta_Set( meta, vlc_meta_Date, b ) -#define vlc_meta_SetSetting( meta, b ) vlc_meta_Set( meta, vlc_meta_Setting, b ) -#define vlc_meta_SetURL( meta, b ) vlc_meta_Set( meta, vlc_meta_URL, b ) -#define vlc_meta_SetLanguage( meta, b ) vlc_meta_Set( meta, vlc_meta_Language, b ) -#define vlc_meta_SetNowPlaying( meta, b ) vlc_meta_Set( meta, vlc_meta_NowPlaying, b ) -#define vlc_meta_SetPublisher( meta, b ) vlc_meta_Set( meta, vlc_meta_Publisher, b ) -#define vlc_meta_SetEncodedBy( meta, b ) vlc_meta_Set( meta, vlc_meta_EncodedBy, b ) -#define vlc_meta_SetArtURL( meta, b ) vlc_meta_Set( meta, vlc_meta_ArtworkURL, b ) -#define vlc_meta_SetTrackID( meta, b ) vlc_meta_Set( meta, vlc_meta_TrackID, b ) - -#define VLC_META_TITLE vlc_meta_TypeToLocalizedString( vlc_meta_Title ) -#define VLC_META_ARTIST vlc_meta_TypeToLocalizedString( vlc_meta_Artist ) -#define VLC_META_GENRE vlc_meta_TypeToLocalizedString( vlc_meta_Genre ) -#define VLC_META_COPYRIGHT vlc_meta_TypeToLocalizedString( vlc_meta_Copyright ) -#define VLC_META_ALBUM vlc_meta_TypeToLocalizedString( vlc_meta_Album ) -#define VLC_META_TRACK_NUMBER vlc_meta_TypeToLocalizedString( vlc_meta_TrackNumber ) -#define VLC_META_DESCRIPTION vlc_meta_TypeToLocalizedString( vlc_meta_Description ) -#define VLC_META_RATING vlc_meta_TypeToLocalizedString( vlc_meta_Rating ) -#define VLC_META_DATE vlc_meta_TypeToLocalizedString( vlc_meta_Date ) -#define VLC_META_SETTING vlc_meta_TypeToLocalizedString( vlc_meta_Setting ) -#define VLC_META_URL vlc_meta_TypeToLocalizedString( vlc_meta_URL ) -#define VLC_META_LANGUAGE vlc_meta_TypeToLocalizedString( vlc_meta_Language ) -#define VLC_META_NOW_PLAYING vlc_meta_TypeToLocalizedString( vlc_meta_NowPlaying ) -#define VLC_META_PUBLISHER vlc_meta_TypeToLocalizedString( vlc_meta_Publisher ) -#define VLC_META_ENCODED_BY vlc_meta_TypeToLocalizedString( vlc_meta_EncodedBy ) -#define VLC_META_ART_URL vlc_meta_TypeToLocalizedString( vlc_meta_ArtworkURL ) -#define VLC_META_TRACKID vlc_meta_TypeToLocalizedString( vlc_meta_TrackID ) - - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_mime.h b/source/vlc/cpp/include/vlc/plugins/vlc_mime.h deleted file mode 100644 index f04fc95d8..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_mime.h +++ /dev/null @@ -1,31 +0,0 @@ -/***************************************************************************** - * vlc_mime.h: Mime type recognition - ***************************************************************************** - * Copyright (C) 2012 VLC authors and VideoLAN - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_MIME_H -#define VLC_MIME_H 1 - -/** - * \file - * Mime type recognition helpers. - */ - -VLC_API const char * vlc_mime_Ext2Mime( const char *psz_url ); - -#endif /* _VLC_MIME_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_modules.h b/source/vlc/cpp/include/vlc/plugins/vlc_modules.h deleted file mode 100644 index 1cb41592e..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_modules.h +++ /dev/null @@ -1,77 +0,0 @@ -/***************************************************************************** - * vlc_modules.h : Module descriptor and load functions - ***************************************************************************** - * Copyright (C) 2001-2011 VLC authors and VideoLAN - * $Id: d152f256bd9c66e0b14647981b55244fb49ff00e $ - * - * Authors: Samuel Hocevar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file defines functions for modules in vlc - */ - -typedef int (*vlc_activate_t)(void *func, va_list args); -typedef void (*vlc_deactivate_t)(void *func, va_list args); - -/***************************************************************************** - * Exported functions. - *****************************************************************************/ - -VLC_API module_t * vlc_module_load( vlc_object_t *obj, const char *cap, const char *name, bool strict, vlc_activate_t probe, ... ) VLC_USED; -#define vlc_module_load(o,c,n,s,...) \ - vlc_module_load(VLC_OBJECT(o),c,n,s,__VA_ARGS__) -VLC_API void vlc_module_unload( module_t *, vlc_deactivate_t deinit, ... ); - -VLC_API module_t * module_need( vlc_object_t *, const char *, const char *, bool ) VLC_USED; -#define module_need(a,b,c,d) module_need(VLC_OBJECT(a),b,c,d) -VLC_API void module_unneed( vlc_object_t *, module_t * ); -#define module_unneed(a,b) module_unneed(VLC_OBJECT(a),b) -VLC_API bool module_exists(const char *) VLC_USED; -VLC_API module_t * module_find(const char *) VLC_USED; - -int module_start(vlc_object_t *, const module_t *); -#define module_start(o, m) module_start(VLC_OBJECT(o),m) -void module_stop(vlc_object_t *, const module_t *); -#define module_stop(o, m) module_stop(VLC_OBJECT(o),m) - -VLC_API module_config_t * module_config_get( const module_t *, unsigned * ) VLC_USED; -VLC_API void module_config_free( module_config_t * ); - -VLC_API void module_list_free(module_t **); -VLC_API module_t ** module_list_get(size_t *n) VLC_USED; - -VLC_API bool module_provides( const module_t *m, const char *cap ); -VLC_API const char * module_get_object( const module_t *m ) VLC_USED; -VLC_API const char * module_get_name( const module_t *m, bool long_name ) VLC_USED; -#define module_GetLongName( m ) module_get_name( m, true ) -VLC_API const char * module_get_help( const module_t *m ) VLC_USED; -VLC_API const char * module_get_capability( const module_t *m ) VLC_USED; -VLC_API int module_get_score( const module_t *m ) VLC_USED; -VLC_API const char * module_gettext( const module_t *, const char * ) VLC_USED; - -VLC_USED static inline module_t *module_get_main (void) -{ - return module_find ("main"); -} -#define module_get_main(a) module_get_main() - -VLC_USED static inline bool module_is_main( const module_t * p_module ) -{ - return !strcmp( module_get_object( p_module ), "main" ); -} diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_mouse.h b/source/vlc/cpp/include/vlc/plugins/vlc_mouse.h deleted file mode 100644 index c62ee3c05..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_mouse.h +++ /dev/null @@ -1,148 +0,0 @@ -/***************************************************************************** - * vlc_mouse.h: mouse related structures and functions - ***************************************************************************** - * Copyright (C) 2009 Laurent Aimar - * $Id: b48853570a09ad1d77cc95cda0c5b04b5028ee80 $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef _VLC_MOUSE_H -#define _VLC_MOUSE_H 1 - -/** - * Mouse buttons - */ -enum -{ - MOUSE_BUTTON_LEFT=0, - MOUSE_BUTTON_CENTER, - MOUSE_BUTTON_RIGHT, - MOUSE_BUTTON_WHEEL_UP, - MOUSE_BUTTON_WHEEL_DOWN, - MOUSE_BUTTON_WHEEL_LEFT, - MOUSE_BUTTON_WHEEL_RIGHT, - MOUSE_BUTTON_MAX -}; - -/** - * Mouse state - */ -typedef struct -{ - /* Coordinate */ - int i_x; - int i_y; - /* Mask of pressed button */ - int i_pressed; - /* Is double clicked */ - bool b_double_click; -} vlc_mouse_t; - -static inline void vlc_mouse_Init( vlc_mouse_t *p_mouse ) -{ - p_mouse->i_x = 0; - p_mouse->i_y = 0; - p_mouse->i_pressed = 0; - p_mouse->b_double_click = false; -} - -/* */ -static inline void vlc_mouse_SetPressed( vlc_mouse_t *p_mouse, - int i_button ) -{ - p_mouse->i_pressed |= 1 << i_button; -} -static inline void vlc_mouse_SetReleased( vlc_mouse_t *p_mouse, - int i_button ) -{ - p_mouse->i_pressed &= ~(1 << i_button); -} -static inline void vlc_mouse_SetPosition( vlc_mouse_t *p_mouse, - int i_x, int i_y ) -{ - p_mouse->i_x = i_x; - p_mouse->i_y = i_y; -} - -/* */ -static inline bool vlc_mouse_IsPressed( const vlc_mouse_t *p_mouse, - int i_button ) -{ - return ( p_mouse->i_pressed & (1 << i_button) ) != 0; -} -static inline bool vlc_mouse_IsLeftPressed( const vlc_mouse_t *p_mouse ) -{ - return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_LEFT ); -} -static inline bool vlc_mouse_IsCenterPressed( const vlc_mouse_t *p_mouse ) -{ - return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_CENTER ); -} -static inline bool vlc_mouse_IsRightPressed( const vlc_mouse_t *p_mouse ) -{ - return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_RIGHT ); -} -static inline bool vlc_mouse_IsWheelUpPressed( const vlc_mouse_t *p_mouse ) -{ - return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_WHEEL_UP ); -} -static inline bool vlc_mouse_IsWheelDownPressed( const vlc_mouse_t *p_mouse ) -{ - return vlc_mouse_IsPressed( p_mouse, MOUSE_BUTTON_WHEEL_DOWN ); -} -static inline void vlc_mouse_GetMotion( int *pi_x, int *pi_y, - const vlc_mouse_t *p_old, - const vlc_mouse_t *p_new ) -{ - *pi_x = p_new->i_x - p_old->i_x; - *pi_y = p_new->i_y - p_old->i_y; -} - -/* */ -static inline bool vlc_mouse_HasChanged( const vlc_mouse_t *p_old, - const vlc_mouse_t *p_new ) -{ - return p_old->i_x != p_new->i_x || p_old->i_y != p_new->i_y || - p_old->i_pressed != p_new->i_pressed; -} -static inline bool vlc_mouse_HasMoved( const vlc_mouse_t *p_old, - const vlc_mouse_t *p_new ) -{ - return p_old->i_x != p_new->i_x || p_old->i_y != p_new->i_y; -} -static inline bool vlc_mouse_HasButton( const vlc_mouse_t *p_old, - const vlc_mouse_t *p_new ) -{ - return p_old->i_pressed != p_new->i_pressed; -} -static inline bool vlc_mouse_HasPressed( const vlc_mouse_t *p_old, - const vlc_mouse_t *p_new, - int i_button ) -{ - const int i_mask = 1 << i_button; - return (p_old->i_pressed & i_mask) == 0 && (p_new->i_pressed & i_mask); -} -static inline bool vlc_mouse_HasReleased( const vlc_mouse_t *p_old, - const vlc_mouse_t *p_new, - int i_button ) -{ - const int i_mask = 1 << i_button; - return (p_old->i_pressed & i_mask) && (p_new->i_pressed & i_mask) == 0; -} -#endif /* _VLC_MOUSE_H */ - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_mtime.h b/source/vlc/cpp/include/vlc/plugins/vlc_mtime.h deleted file mode 100644 index 42172e0bf..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_mtime.h +++ /dev/null @@ -1,79 +0,0 @@ -/***************************************************************************** - * vlc_mtime.h: high resolution time management functions - ***************************************************************************** - * This header provides portable high precision time management functions, - * which should be the only ones used in other segments of the program, since - * functions like gettimeofday() and ftime() are not always supported. - * Most functions are declared as inline or as macros since they are only - * interfaces to system calls and have to be called frequently. - * 'm' stands for 'micro', since maximum resolution is the microsecond. - * Functions prototyped are implemented in interface/mtime.c. - ***************************************************************************** - * Copyright (C) 1996, 1997, 1998, 1999, 2000 VLC authors and VideoLAN - * $Id: ab89a972120c8ee3f45d9823994eac584f8fe527 $ - * - * Authors: Vincent Seguin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef __VLC_MTIME_H -# define __VLC_MTIME_H 1 - -/***************************************************************************** - * LAST_MDATE: date which will never happen - ***************************************************************************** - * This date can be used as a 'never' date, to mark missing events in a function - * supposed to return a date, such as nothing to display in a function - * returning the date of the first image to be displayed. It can be used in - * comparaison with other values: all existing dates will be earlier. - *****************************************************************************/ -#define LAST_MDATE ((mtime_t)((uint64_t)(-1)/2)) - -/***************************************************************************** - * MSTRTIME_MAX_SIZE: maximum possible size of mstrtime - ***************************************************************************** - * This values is the maximal possible size of the string returned by the - * mstrtime() function, including '-' and the final '\0'. It should be used to - * allocate the buffer. - *****************************************************************************/ -#define MSTRTIME_MAX_SIZE 22 - -/***************************************************************************** - * Prototypes - *****************************************************************************/ -VLC_API char * mstrtime( char *psz_buffer, mtime_t date ); -VLC_API char * secstotimestr( char *psz_buffer, int32_t secs ); - -/***************************************************************************** - * date_t: date incrementation without long-term rounding errors - *****************************************************************************/ -struct date_t -{ - mtime_t date; - uint32_t i_divider_num; - uint32_t i_divider_den; - uint32_t i_remainder; -}; - -VLC_API void date_Init( date_t *, uint32_t, uint32_t ); -VLC_API void date_Change( date_t *, uint32_t, uint32_t ); -VLC_API void date_Set( date_t *, mtime_t ); -VLC_API mtime_t date_Get( const date_t * ); -VLC_API void date_Move( date_t *, mtime_t ); -VLC_API mtime_t date_Increment( date_t *, uint32_t ); -VLC_API mtime_t date_Decrement( date_t *, uint32_t ); -VLC_API uint64_t NTPtime64( void ); -#endif /* !__VLC_MTIME_ */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_network.h b/source/vlc/cpp/include/vlc/plugins/vlc_network.h deleted file mode 100644 index 7f3132b57..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_network.h +++ /dev/null @@ -1,383 +0,0 @@ -/***************************************************************************** - * vlc_network.h: interface to communicate with network plug-ins - ***************************************************************************** - * Copyright (C) 2002-2005 VLC authors and VideoLAN - * Copyright © 2006-2007 Rémi Denis-Courmont - * $Id: d438642203dcf8b21606b8a5003754223162cc52 $ - * - * Authors: Christophe Massiot - * Laurent Aimar - * Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_NETWORK_H -# define VLC_NETWORK_H - -/** - * \file - * This file defines interface to communicate with network plug-ins - */ - -#if defined( _WIN32 ) -# define _NO_OLDNAMES 1 -# include -# include -# include -# define net_errno (WSAGetLastError()) -extern const char *net_strerror( int val ); - -struct iovec -{ - void *iov_base; - size_t iov_len; -}; - -struct msghdr -{ - void *msg_name; - size_t msg_namelen; - struct iovec *msg_iov; - size_t msg_iovlen; - void *msg_control; - size_t msg_controllen; - int msg_flags; -}; - -# ifndef IPV6_V6ONLY -# define IPV6_V6ONLY 27 -# endif -#else -# include -# include -# include -# include -# include -# define net_errno errno -#endif - -#if defined( __SYMBIAN32__ ) -# undef AF_INET6 -# undef IN6_IS_ADDR_MULTICAST -# undef IPV6_V6ONLY -# undef IPV6_MULTICAST_HOPS -# undef IPV6_MULTICAST_IF -# undef IPV6_TCLASS -# undef IPV6_JOIN_GROUP -#endif - -VLC_API int vlc_socket (int, int, int, bool nonblock) VLC_USED; - -struct sockaddr; -VLC_API int vlc_accept( int, struct sockaddr *, socklen_t *, bool ) VLC_USED; - -# ifdef __cplusplus -extern "C" { -# endif - -/* Portable networking layer communication */ -int net_Socket (vlc_object_t *obj, int family, int socktype, int proto); - -VLC_API int net_Connect(vlc_object_t *p_this, const char *psz_host, int i_port, int socktype, int protocol); -#define net_Connect(a, b, c, d, e) net_Connect(VLC_OBJECT(a), b, c, d, e) - -VLC_API int * net_Listen(vlc_object_t *p_this, const char *psz_host, int i_port, int socktype, int protocol); - -#define net_ListenTCP(a, b, c) net_Listen(VLC_OBJECT(a), b, c, \ - SOCK_STREAM, IPPROTO_TCP) - -static inline int net_ConnectTCP (vlc_object_t *obj, const char *host, int port) -{ - return net_Connect (obj, host, port, SOCK_STREAM, IPPROTO_TCP); -} -#define net_ConnectTCP(a, b, c) net_ConnectTCP(VLC_OBJECT(a), b, c) - -VLC_API int net_AcceptSingle(vlc_object_t *obj, int lfd); - -VLC_API int net_Accept( vlc_object_t *, int * ); -#define net_Accept(a, b) \ - net_Accept(VLC_OBJECT(a), b) - -VLC_API int net_ConnectDgram( vlc_object_t *p_this, const char *psz_host, int i_port, int hlim, int proto ); -#define net_ConnectDgram(a, b, c, d, e ) \ - net_ConnectDgram(VLC_OBJECT(a), b, c, d, e) - -static inline int net_ConnectUDP (vlc_object_t *obj, const char *host, int port, int hlim) -{ - return net_ConnectDgram (obj, host, port, hlim, IPPROTO_UDP); -} - -VLC_API int net_OpenDgram( vlc_object_t *p_this, const char *psz_bind, int i_bind, const char *psz_server, int i_server, int proto ); -#define net_OpenDgram( a, b, c, d, e, g ) \ - net_OpenDgram(VLC_OBJECT(a), b, c, d, e, g) - -static inline int net_ListenUDP1 (vlc_object_t *obj, const char *host, int port) -{ - return net_OpenDgram (obj, host, port, NULL, 0, IPPROTO_UDP); -} - -VLC_API void net_ListenClose( int *fd ); - -int net_Subscribe (vlc_object_t *obj, int fd, const struct sockaddr *addr, - socklen_t addrlen); - -VLC_API int net_SetCSCov( int fd, int sendcov, int recvcov ); - -/* Functions to read from or write to the networking layer */ -struct virtual_socket_t -{ - void *p_sys; - int (*pf_recv) ( void *, void *, size_t ); - int (*pf_send) ( void *, const void *, size_t ); -}; - -VLC_API ssize_t net_Read( vlc_object_t *p_this, int fd, const v_socket_t *, void *p_data, size_t i_data, bool b_retry ); -#define net_Read(a,b,c,d,e,f) net_Read(VLC_OBJECT(a),b,c,d,e,f) -VLC_API ssize_t net_Write( vlc_object_t *p_this, int fd, const v_socket_t *, const void *p_data, size_t i_data ); -#define net_Write(a,b,c,d,e) net_Write(VLC_OBJECT(a),b,c,d,e) -VLC_API char * net_Gets( vlc_object_t *p_this, int fd, const v_socket_t * ); -#define net_Gets(a,b,c) net_Gets(VLC_OBJECT(a),b,c) - - -VLC_API ssize_t net_Printf( vlc_object_t *p_this, int fd, const v_socket_t *, const char *psz_fmt, ... ) VLC_FORMAT( 4, 5 ); -#define net_Printf(o,fd,vs,...) net_Printf(VLC_OBJECT(o),fd,vs, __VA_ARGS__) -VLC_API ssize_t net_vaPrintf( vlc_object_t *p_this, int fd, const v_socket_t *, const char *psz_fmt, va_list args ); -#define net_vaPrintf(a,b,c,d,e) net_vaPrintf(VLC_OBJECT(a),b,c,d,e) - -#ifdef _WIN32 -/* Microsoft: same semantic, same value, different name... go figure */ -# define SHUT_RD SD_RECEIVE -# define SHUT_WR SD_SEND -# define SHUT_RDWR SD_BOTH -# define net_Close( fd ) closesocket ((SOCKET)fd) -#else -# ifdef __OS2__ -# define SHUT_RD 0 -# define SHUT_WR 1 -# define SHUT_RDWR 2 -# endif -# define net_Close( fd ) (void)close (fd) -#endif - -/* Portable network names/addresses resolution layer */ - -/* GAI error codes */ -# ifndef EAI_BADFLAGS -# define EAI_BADFLAGS -1 -# endif -# ifndef EAI_NONAME -# define EAI_NONAME -2 -# endif -# ifndef EAI_AGAIN -# define EAI_AGAIN -3 -# endif -# ifndef EAI_FAIL -# define EAI_FAIL -4 -# endif -# ifndef EAI_NODATA -# define EAI_NODATA -5 -# endif -# ifndef EAI_FAMILY -# define EAI_FAMILY -6 -# endif -# ifndef EAI_SOCKTYPE -# define EAI_SOCKTYPE -7 -# endif -# ifndef EAI_SERVICE -# define EAI_SERVICE -8 -# endif -# ifndef EAI_ADDRFAMILY -# define EAI_ADDRFAMILY -9 -# endif -# ifndef EAI_MEMORY -# define EAI_MEMORY -10 -# endif -#ifndef EAI_OVERFLOW -# define EAI_OVERFLOW -11 -#endif -# ifndef EAI_SYSTEM -# define EAI_SYSTEM -12 -# endif - - -# ifndef NI_MAXHOST -# define NI_MAXHOST 1025 -# define NI_MAXSERV 32 -# endif -# define NI_MAXNUMERICHOST 64 - -#ifndef AI_NUMERICSERV -# define AI_NUMERICSERV 0 -#endif -#ifndef AI_IDN -# define AI_IDN 0 /* GNU/libc extension */ -#endif - -#ifdef _WIN32 -# undef gai_strerror -# define gai_strerror gai_strerrorA -#endif - -#ifdef __OS2__ -# ifndef NI_NUMERICHOST -# define NI_NUMERICHOST 0x01 -# define NI_NUMERICSERV 0x02 -# define NI_NOFQDN 0x04 -# define NI_NAMEREQD 0x08 -# define NI_DGRAM 0x10 -# endif - -struct addrinfo -{ - int ai_flags; - int ai_family; - int ai_socktype; - int ai_protocol; - size_t ai_addrlen; - struct sockaddr *ai_addr; - char *ai_canonname; - struct addrinfo *ai_next; -}; - -# define AI_PASSIVE 1 -# define AI_CANONNAME 2 -# define AI_NUMERICHOST 4 - -VLC_API const char *gai_strerror( int errnum ); - -VLC_API int getaddrinfo ( const char *, const char *, - const struct addrinfo *, struct addrinfo ** ); -VLC_API void freeaddrinfo( struct addrinfo * ); -VLC_API int getnameinfo ( const struct sockaddr *, socklen_t, - char *, int, char *, int, int ); -#endif - -VLC_API int vlc_getnameinfo( const struct sockaddr *, int, char *, int, int *, int ); -VLC_API int vlc_getaddrinfo (const char *, unsigned, - const struct addrinfo *, struct addrinfo **); - - -#ifdef __OS2__ -/* OS/2 does not support IPv6, yet. But declare these only for compilation */ -struct in6_addr -{ - uint8_t s6_addr[16]; -}; - -struct sockaddr_in6 -{ - uint8_t sin6_len; - uint8_t sin6_family; - uint16_t sin6_port; - uint32_t sin6_flowinfo; - struct in6_addr sin6_addr; - uint32_t sin6_scope_id; -}; - -# define IN6_IS_ADDR_MULTICAST(a) (((__const uint8_t *) (a))[0] == 0xff) - -static const struct in6_addr in6addr_any = - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }; -#endif - -static inline bool -net_SockAddrIsMulticast (const struct sockaddr *addr, socklen_t len) -{ - switch (addr->sa_family) - { -#ifdef IN_MULTICAST - case AF_INET: - { - const struct sockaddr_in *v4 = (const struct sockaddr_in *)addr; - if ((size_t)len < sizeof (*v4)) - return false; - return IN_MULTICAST (ntohl (v4->sin_addr.s_addr)) != 0; - } -#endif - -#ifdef IN6_IS_ADDR_MULTICAST - case AF_INET6: - { - const struct sockaddr_in6 *v6 = (const struct sockaddr_in6 *)addr; - if ((size_t)len < sizeof (*v6)) - return false; - return IN6_IS_ADDR_MULTICAST (&v6->sin6_addr) != 0; - } -#endif - } - - return false; -} - - -static inline int net_GetSockAddress( int fd, char *address, int *port ) -{ - struct sockaddr_storage addr; - socklen_t addrlen = sizeof( addr ); - - return getsockname( fd, (struct sockaddr *)&addr, &addrlen ) - || vlc_getnameinfo( (struct sockaddr *)&addr, addrlen, address, - NI_MAXNUMERICHOST, port, NI_NUMERICHOST ) - ? VLC_EGENERIC : 0; -} - -static inline int net_GetPeerAddress( int fd, char *address, int *port ) -{ - struct sockaddr_storage addr; - socklen_t addrlen = sizeof( addr ); - - return getpeername( fd, (struct sockaddr *)&addr, &addrlen ) - || vlc_getnameinfo( (struct sockaddr *)&addr, addrlen, address, - NI_MAXNUMERICHOST, port, NI_NUMERICHOST ) - ? VLC_EGENERIC : 0; -} - -static inline uint16_t net_GetPort (const struct sockaddr *addr) -{ - switch (addr->sa_family) - { -#ifdef AF_INET6 - case AF_INET6: - return ((const struct sockaddr_in6 *)addr)->sin6_port; -#endif - case AF_INET: - return ((const struct sockaddr_in *)addr)->sin_port; - } - return 0; -} - -static inline void net_SetPort (struct sockaddr *addr, uint16_t port) -{ - switch (addr->sa_family) - { -#ifdef AF_INET6 - case AF_INET6: - ((struct sockaddr_in6 *)addr)->sin6_port = port; - break; -#endif - case AF_INET: - ((struct sockaddr_in *)addr)->sin_port = port; - break; - } -} - -VLC_API char *vlc_getProxyUrl(const char *); - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_objects.h b/source/vlc/cpp/include/vlc/plugins/vlc_objects.h deleted file mode 100644 index db3f8fe09..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_objects.h +++ /dev/null @@ -1,79 +0,0 @@ -/***************************************************************************** - * vlc_objects.h: vlc_object_t definition and manipulation methods - ***************************************************************************** - * Copyright (C) 2002-2008 VLC authors and VideoLAN - * $Id: c6708750ee9cd68a9fce0246f019ad8aec80432b $ - * - * Authors: Samuel Hocevar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -/** - * \file - * This file defines the vlc_object_t structure and object types. - */ - -/** - * \defgroup vlc_object Objects - * @{ - */ - -/* Object flags */ -#define OBJECT_FLAGS_QUIET 0x0002 -#define OBJECT_FLAGS_NOINTERACT 0x0004 - -/***************************************************************************** - * The vlc_object_t type. Yes, it's that simple :-) - *****************************************************************************/ -/** The main vlc_object_t structure */ -struct vlc_object_t -{ - VLC_COMMON_MEMBERS -}; - -/***************************************************************************** - * Prototypes - *****************************************************************************/ -VLC_API void *vlc_object_create( vlc_object_t *, size_t ) VLC_MALLOC VLC_USED; -VLC_API vlc_object_t *vlc_object_find_name( vlc_object_t *, const char * ) VLC_USED VLC_DEPRECATED; -VLC_API void * vlc_object_hold( vlc_object_t * ); -VLC_API void vlc_object_release( vlc_object_t * ); -VLC_API vlc_list_t *vlc_list_children( vlc_object_t * ) VLC_USED; -VLC_API void vlc_list_release( vlc_list_t * ); -VLC_API char *vlc_object_get_name( const vlc_object_t * ) VLC_USED; -#define vlc_object_get_name(o) vlc_object_get_name(VLC_OBJECT(o)) - -/**}@*/ - -#define vlc_object_create(a,b) vlc_object_create( VLC_OBJECT(a), b ) - -#define vlc_object_find_name(a,b) \ - vlc_object_find_name( VLC_OBJECT(a),b) - -#define vlc_object_hold(a) \ - vlc_object_hold( VLC_OBJECT(a) ) - -#define vlc_object_release(a) \ - vlc_object_release( VLC_OBJECT(a) ) - -#define vlc_list_children(a) \ - vlc_list_children( VLC_OBJECT(a) ) - -/* Objects and threading */ -VLC_API VLC_USED VLC_DEPRECATED bool vlc_object_alive (vlc_object_t *); -#define vlc_object_alive(a) vlc_object_alive( VLC_OBJECT(a) ) - -/** @} */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_opengl.h b/source/vlc/cpp/include/vlc/plugins/vlc_opengl.h deleted file mode 100644 index 1cc8ca241..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_opengl.h +++ /dev/null @@ -1,95 +0,0 @@ -/***************************************************************************** - * vlc_opengl.h: VLC GL API - ***************************************************************************** - * Copyright (C) 2009 Laurent Aimar - * Copyright (C) 2011 Rémi Denis-Courmont - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_GL_H -#define VLC_GL_H 1 - -/** - * \file - * This file defines GL structures and functions. - */ - -struct vout_window_t; - -/** - * A VLC GL context (and its underlying surface) - */ -typedef struct vlc_gl_t vlc_gl_t; - -struct vlc_gl_t -{ - VLC_COMMON_MEMBERS - - struct vout_window_t *surface; - module_t *module; - void *sys; - - int (*makeCurrent)(vlc_gl_t *); - void (*releaseCurrent)(vlc_gl_t *); - void (*swap)(vlc_gl_t *); - int (*lock)(vlc_gl_t *); - void (*unlock)(vlc_gl_t *); - void*(*getProcAddress)(vlc_gl_t *, const char *); -}; - -enum { - VLC_OPENGL, - VLC_OPENGL_ES, - VLC_OPENGL_ES2, -}; - -VLC_API vlc_gl_t *vlc_gl_Create(struct vout_window_t *, unsigned, const char *) VLC_USED; -VLC_API void vlc_gl_Destroy(vlc_gl_t *); - -static inline int vlc_gl_MakeCurrent(vlc_gl_t *gl) -{ - return gl->makeCurrent(gl); -} - -static inline void vlc_gl_ReleaseCurrent(vlc_gl_t *gl) -{ - gl->releaseCurrent(gl); -} - -static inline int vlc_gl_Lock(vlc_gl_t *gl) -{ - return (gl->lock != NULL) ? gl->lock(gl) : VLC_SUCCESS; -} - -static inline void vlc_gl_Unlock(vlc_gl_t *gl) -{ - if (gl->unlock != NULL) - gl->unlock(gl); -} - -static inline void vlc_gl_Swap(vlc_gl_t *gl) -{ - gl->swap(gl); -} - -static inline void *vlc_gl_GetProcAddress(vlc_gl_t *gl, const char *name) -{ - return (gl->getProcAddress != NULL) ? gl->getProcAddress(gl, name) : NULL; -} - -#endif /* VLC_GL_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_pgpkey.h b/source/vlc/cpp/include/vlc/plugins/vlc_pgpkey.h deleted file mode 100644 index ea562100e..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_pgpkey.h +++ /dev/null @@ -1,42 +0,0 @@ -/***************************************************************************** - * vlc_pgpkey.h: VideoLAN PGP Public Key used to sign releases - *****************************************************************************/ - -/* We trust this public key, and by extension, also keys signed by it. */ - -/* NOTE: - * We need a 1024 bits DSA key. - * Don't forget to upload the key to http://download.videolan.org/pub/keys/ - */ - -/* - * VideoLAN Release Signing Key (2013) - * expires on 2014-02-03 - */ - -static const uint8_t videolan_public_key_longid[8] = { - 0x71, 0x80, 0x71, 0x3B, 0xE5, 0x8D, 0x1A, 0xDC -}; - -/* gpg --export --armor ""|sed -e s/^/\"/ -e s/\$/\\\\n\"/ */ -static const uint8_t videolan_public_key[] = { - "-----BEGIN PGP PUBLIC KEY BLOCK-----\n" - "Version: GnuPG v2.0.19 (GNU/Linux)\n" - "\n" - "mQGiBFD9w2QRBACoEzH9KKirWE4wgiuPPynNnxks+p+t5i1z3CG+1XhagmTHoOf3\n" - "v8i19kKHV6WnVMn2CKJFgwTTLYXOJTrBM/4ABVtu11cHeeueeo+pCSkdoLzYJ5QF\n" - "HbByB6j33QUbwKF0frEs+ge4LxzvYyCDAmNAW560QtOAR9Lk1Fo5B1GXzwCg1kDk\n" - "RkSe7EOZNm1U2rYAQ2VPrfsEAIHr4ooOyUByPR7XpoDOKoaXEG0hjpgh46lbgse+\n" - "dQx8YrxS9vXQLwYokfWLrs55avx9Ys0iVv2TMv7X4Tn5sTVaK5K+NbKhxhLORxGI\n" - "sgKqRn7W5SG5xoO0w/dmQj756ppjITGbxjFuhYE0X5S6NeMhUuFci7sJ42R7F1Ko\n" - "6sYuA/wOMUxCk4XOXeQF16ApyyenjE/UWbBNEhBmjEsZkYAFNc89pAEnEFSnIxK8\n" - "fcuCQioM6ojjaW+aEs/q3/klI0nat9LMLhNSCebjriMHwJDU70NeCn4nPWsfItT1\n" - "eKvbHNcX+3bq3D/i2Wa3PZ5YFFF01C61dHmVC9YGh4sAOXO09LQjVmlkZW9MQU4g\n" - "UmVsZWFzZSBTaWduaW5nIEtleSAoMjAxMymIaAQTEQIAKAUCUP3DZAIbAwUJAfJX\n" - "AAYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQcYBxO+WNGtwQQwCg1JX6dDn5\n" - "gMpV4oczkpwlj5noOQwAn0HdTOxfmefXNQF1x+Gt9BXBYXrNiEYEEBECAAYFAlD9\n" - "xH4ACgkQp0FUn1ntKYdB+gCfS641cDBN2rOKf/+Fra/p3bXgAeAAn2sJtSdN07Dv\n" - "rZeDWEbkhT620YOS\n" - "=Npzf\n" - "-----END PGP PUBLIC KEY BLOCK-----\n" -}; diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_picture.h b/source/vlc/cpp/include/vlc/plugins/vlc_picture.h deleted file mode 100644 index 8213b12d5..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_picture.h +++ /dev/null @@ -1,275 +0,0 @@ -/***************************************************************************** - * vlc_picture.h: picture definitions - ***************************************************************************** - * Copyright (C) 1999 - 2009 VLC authors and VideoLAN - * $Id: c99f54d7212b39689a8027c64cc92b40442cf080 $ - * - * Authors: Vincent Seguin - * Samuel Hocevar - * Olivier Aubert - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_PICTURE_H -#define VLC_PICTURE_H 1 - -/** - * \file - * This file defines picture structures and functions in vlc - */ - -#include -#include - -/** Description of a planar graphic field */ -typedef struct plane_t -{ - uint8_t *p_pixels; /**< Start of the plane's data */ - - /* Variables used for fast memcpy operations */ - int i_lines; /**< Number of lines, including margins */ - int i_pitch; /**< Number of bytes in a line, including margins */ - - /** Size of a macropixel, defaults to 1 */ - int i_pixel_pitch; - - /* Variables used for pictures with margins */ - int i_visible_lines; /**< How many visible lines are there ? */ - int i_visible_pitch; /**< How many visible pixels are there ? */ - -} plane_t; - -/** - * Maximum number of plane for a picture - */ -#define PICTURE_PLANE_MAX (VOUT_MAX_PLANES) - - -/** - * A private definition to help overloading picture release - */ -typedef struct picture_gc_sys_t picture_gc_sys_t; - -/** - * Video picture - */ -struct picture_t -{ - /** - * The properties of the picture - */ - video_frame_format_t format; - - plane_t p[PICTURE_PLANE_MAX]; /**< description of the planes */ - int i_planes; /**< number of allocated planes */ - - /** \name Picture management properties - * These properties can be modified using the video output thread API, - * but should never be written directly */ - /**@{*/ - mtime_t date; /**< display date */ - bool b_force; - /**@}*/ - - /** \name Picture dynamic properties - * Those properties can be changed by the decoder - * @{ - */ - bool b_progressive; /**< is it a progressive frame ? */ - bool b_top_field_first; /**< which field is first */ - unsigned int i_nb_fields; /**< # of displayed fields */ - /**@}*/ - - /** Private data - the video output plugin might want to put stuff here to - * keep track of the picture */ - picture_sys_t * p_sys; - - /** This way the picture_Release can be overloaded */ - struct - { - vlc_atomic_t refcount; - void (*pf_destroy)( picture_t * ); - picture_gc_sys_t *p_sys; - } gc; - - /** Next picture in a FIFO a pictures */ - struct picture_t *p_next; -}; - -/** - * This function will create a new picture. - * The picture created will implement a default release management compatible - * with picture_Hold and picture_Release. This default management will release - * p_sys, gc.p_sys fields if non NULL. - */ -VLC_API picture_t * picture_New( vlc_fourcc_t i_chroma, int i_width, int i_height, int i_sar_num, int i_sar_den ) VLC_USED; - -/** - * This function will create a new picture using the given format. - * - * When possible, it is preferred to use this function over picture_New - * as more information about the format is kept. - */ -VLC_API picture_t * picture_NewFromFormat( const video_format_t *p_fmt ) VLC_USED; - -/** - * Resource for a picture. - */ -typedef struct -{ - picture_sys_t *p_sys; - - /* Plane resources - * XXX all fields MUST be set to the right value. - */ - struct - { - uint8_t *p_pixels; /**< Start of the plane's data */ - int i_lines; /**< Number of lines, including margins */ - int i_pitch; /**< Number of bytes in a line, including margins */ - } p[PICTURE_PLANE_MAX]; - -} picture_resource_t; - -/** - * This function will create a new picture using the provided resource. - * - * If the resource is NULL then a plain picture_NewFromFormat is returned. - */ -VLC_API picture_t * picture_NewFromResource( const video_format_t *, const picture_resource_t * ) VLC_USED; - -/** - * This function will increase the picture reference count. - * It will not have any effect on picture obtained from vout - * - * It returns the given picture for convenience. - */ -VLC_API picture_t *picture_Hold( picture_t *p_picture ); - -/** - * This function will release a picture. - * It will not have any effect on picture obtained from vout - */ -VLC_API void picture_Release( picture_t *p_picture ); - -/** - * This function will return true if you are not the only owner of the - * picture. - * - * It is only valid if it is created using picture_New. - */ -VLC_API bool picture_IsReferenced( picture_t *p_picture ); - -/** - * This function will copy all picture dynamic properties. - */ -VLC_API void picture_CopyProperties( picture_t *p_dst, const picture_t *p_src ); - -/** - * This function will reset a picture information (properties and quantizers). - * It is sometimes useful for reusing pictures (like from a pool). - */ -VLC_API void picture_Reset( picture_t * ); - -/** - * This function will copy the picture pixels. - * You can safely copy between pictures that do not have the same size, - * only the compatible(smaller) part will be copied. - */ -VLC_API void picture_CopyPixels( picture_t *p_dst, const picture_t *p_src ); -VLC_API void plane_CopyPixels( plane_t *p_dst, const plane_t *p_src ); - -/** - * This function will copy both picture dynamic properties and pixels. - * You have to notice that sometime a simple picture_Hold may do what - * you want without the copy overhead. - * Provided for convenience. - * - * \param p_dst pointer to the destination picture. - * \param p_src pointer to the source picture. - */ -VLC_API void picture_Copy( picture_t *p_dst, const picture_t *p_src ); - -/** - * This function will export a picture to an encoded bitstream. - * - * pp_image will contain the encoded bitstream in psz_format format. - * - * p_fmt can be NULL otherwise it will be set with the format used for the - * picture before encoding. - * - * i_override_width/height allow to override the width and/or the height of the - * picture to be encoded: - * - if strictly lower than 0, the original dimension will be used. - * - if equal to 0, it will be deduced from the other dimension which must be - * different to 0. - * - if strictly higher than 0, it will override the dimension. - * If at most one of them is > 0 then the picture aspect ratio will be kept. - */ -VLC_API int picture_Export( vlc_object_t *p_obj, block_t **pp_image, video_format_t *p_fmt, picture_t *p_picture, vlc_fourcc_t i_format, int i_override_width, int i_override_height ); - -/** - * This function will setup all fields of a picture_t without allocating any - * memory. - * XXX The memory must already be initialized. - * It does not need to be released. - * - * It will return VLC_EGENERIC if the core does not understand the requested - * format. - * - * It can be useful to get the properties of planes. - */ -VLC_API int picture_Setup( picture_t *, vlc_fourcc_t i_chroma, int i_width, int i_height, int i_sar_num, int i_sar_den ); - - -/** - * This function will blend a given subpicture onto a picture. - * - * The subpicture and all its region must: - * - be absolute. - * - not be ephemere. - * - not have the fade flag. - * - contains only picture (no text rendering). - */ -VLC_API void picture_BlendSubpicture( picture_t *, filter_t *p_blend, subpicture_t * ); - - -/***************************************************************************** - * Shortcuts to access image components - *****************************************************************************/ - -/* Plane indices */ -enum -{ - Y_PLANE = 0, - U_PLANE = 1, - V_PLANE = 2, - A_PLANE = 3, -}; - -/* Shortcuts */ -#define Y_PIXELS p[Y_PLANE].p_pixels -#define Y_PITCH p[Y_PLANE].i_pitch -#define U_PIXELS p[U_PLANE].p_pixels -#define U_PITCH p[U_PLANE].i_pitch -#define V_PIXELS p[V_PLANE].p_pixels -#define V_PITCH p[V_PLANE].i_pitch -#define A_PIXELS p[A_PLANE].p_pixels -#define A_PITCH p[A_PLANE].i_pitch - -/**@}*/ - -#endif /* VLC_PICTURE_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_picture_fifo.h b/source/vlc/cpp/include/vlc/plugins/vlc_picture_fifo.h deleted file mode 100644 index d337a3b0a..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_picture_fifo.h +++ /dev/null @@ -1,89 +0,0 @@ -/***************************************************************************** - * vlc_picture_fifo.h: picture fifo definitions - ***************************************************************************** - * Copyright (C) 2009 VLC authors and VideoLAN - * $Id: 73d1b20c279f628cf94bc7cfc83b2548878bcc07 $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_PICTURE_FIFO_H -#define VLC_PICTURE_FIFO_H 1 - -/** - * \file - * This file defines picture fifo structures and functions in vlc - */ - -#include - -/** - * Picture fifo handle - * - * It is thread safe (push/pop). - */ -typedef struct picture_fifo_t picture_fifo_t; - -/** - * It creates an empty picture_fifo_t. - */ -VLC_API picture_fifo_t * picture_fifo_New( void ) VLC_USED; - -/** - * It destroys a fifo created by picture_fifo_New. - * - * All pictures inside the fifo will be released by picture_Release. - */ -VLC_API void picture_fifo_Delete( picture_fifo_t * ); - -/** - * It retreives a picture_t from the fifo. - * - * If the fifo is empty, it return NULL without waiting. - */ -VLC_API picture_t * picture_fifo_Pop( picture_fifo_t * ) VLC_USED; - -/** - * It returns the first picture_t pointer from the fifo but does not - * remove it. The picture returned has been hold for you so you - * must call picture_Release on it. - * - * If the fifo is empty, it return NULL without waiting. - */ -VLC_API picture_t * picture_fifo_Peek( picture_fifo_t * ) VLC_USED; - -/** - * It saves a picture_t into the fifo. - */ -VLC_API void picture_fifo_Push( picture_fifo_t *, picture_t * ); - -/** - * It release all picture inside the fifo that have a lower or equal date - * if flush_before or higher or equal to if not flush_before than the given one. - * - * All pictures inside the fifo will be released by picture_Release. - */ -VLC_API void picture_fifo_Flush( picture_fifo_t *, mtime_t date, bool flush_before ); - -/** - * It applies a delta on all the picture timestamp. - */ -VLC_API void picture_fifo_OffsetDate( picture_fifo_t *, mtime_t delta ); - - -#endif /* VLC_PICTURE_FIFO_H */ - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_picture_pool.h b/source/vlc/cpp/include/vlc/plugins/vlc_picture_pool.h deleted file mode 100644 index 147d9c80b..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_picture_pool.h +++ /dev/null @@ -1,126 +0,0 @@ -/***************************************************************************** - * vlc_picture_pool.h: picture pool definitions - ***************************************************************************** - * Copyright (C) 2009 VLC authors and VideoLAN - * $Id: d4574dc5a1dfd2d873c6f286ee612462f886bb33 $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_PICTURE_POOL_H -#define VLC_PICTURE_POOL_H 1 - -/** - * \file - * This file defines picture pool structures and functions in vlc - */ - -#include - -/** - * Picture pool handle - * - * XXX it is not thread safe, all pool manipulations and picture_Release - * must be properly locked if needed. - */ -typedef struct picture_pool_t picture_pool_t; - -/** - * Picture pool configuration - */ -typedef struct { - int picture_count; - picture_t **picture; - - int (*lock)(picture_t *); - void (*unlock)(picture_t *); -} picture_pool_configuration_t; - -/** - * It creates a picture_pool_t wrapping the given configuration. - * - * It avoids useless picture creations/destructions. - * The given picture must not have a reference count greater than 1. - * The pool takes ownership of the picture and MUST not be used directly. - * When deleted, the pool will release the pictures using picture_Release. - * If defined, picture_pool_configuration_t::lock will be called before - * a picture is used, and picture_pool_configuration_t::unlock will be called - * as soon as a picture is unused. They are allowed to modify picture_t::p and - * access picture_t::p_sys. - */ -VLC_API picture_pool_t * picture_pool_NewExtended( const picture_pool_configuration_t * ) VLC_USED; - -/** - * It creates a picture_pool_t wrapping the given arrays of picture. - * - * It is provided as convenience. - */ -VLC_API picture_pool_t * picture_pool_New( int picture_count, picture_t *picture[] ) VLC_USED; - -/** - * It creates a picture_pool_t creating images using the given format. - * - * Provided for convenience. - */ -VLC_API picture_pool_t * picture_pool_NewFromFormat( const video_format_t *, int picture_count ) VLC_USED; - -/** - * It destroys a pool created by picture_pool_New. - * - * All pictures must already be released to the pool. The pool will then - * released them. - */ -VLC_API void picture_pool_Delete( picture_pool_t * ); - -/** - * It retreives a picture_t from a pool. - * - * The picture must be release by using picture_Release. - */ -VLC_API picture_t * picture_pool_Get( picture_pool_t * ) VLC_USED; - -/** - * It forces the next picture_pool_Get to return a picture even if no - * pictures are free. - * - * If b_reset is true, all pictures will be marked as free. - * - * It does it by releasing itself the oldest used picture if none is - * available. - * XXX it should be used with great care, the only reason you may need - * it is to workaround a bug. - */ -VLC_API void picture_pool_NonEmpty( picture_pool_t *, bool reset ); - -/** - * It reserves picture_count pictures from the given pool and returns - * a new pool with thoses pictures. - * - * The master pool must be full. - * The returned pool must be deleted before the master pool. - * When deleted, all pictures return to the master pool. - */ -VLC_API picture_pool_t * picture_pool_Reserve(picture_pool_t *, int picture_count) VLC_USED; - -/** - * It returns the size of the given pool. - */ -VLC_API int picture_pool_GetSize(picture_pool_t *); - - -#endif /* VLC_PICTURE_POOL_H */ - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_playlist.h b/source/vlc/cpp/include/vlc/plugins/vlc_playlist.h deleted file mode 100644 index 9d816332e..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_playlist.h +++ /dev/null @@ -1,426 +0,0 @@ -/***************************************************************************** - * vlc_playlist.h : Playlist functions - ***************************************************************************** - * Copyright (C) 1999-2004 VLC authors and VideoLAN - * $Id: 10108cb2842b00126466353057cb8975dd825817 $ - * - * Authors: Samuel Hocevar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_PLAYLIST_H_ -#define VLC_PLAYLIST_H_ - -# ifdef __cplusplus -extern "C" { -# endif - -#include -#include - -TYPEDEF_ARRAY(playlist_item_t*, playlist_item_array_t) - -/** - * \file - * This file contain structures and function prototypes related - * to the playlist in vlc - * - * \defgroup vlc_playlist Playlist - * - * The VLC playlist system has a tree structure. This allows advanced - * categorization, like for SAP streams (which are grouped by "sap groups"). - * - * The base structure for all playlist operations is the input_item_t. This - * contains all information needed to play a stream and get info, ie, mostly, - * mrl and metadata. This structure contains a unique i_id field. ids are - * not recycled when an item is destroyed. - * - * Input items are not used directly, but through playlist items. - * The playlist items are themselves in a tree structure. They only contain - * a link to the input item, a unique id and a few flags. the playlist - * item id is NOT the same as the input item id. - * Several playlist items can be attached to a single input item. The input - * item is refcounted and is automatically destroyed when it is not used - * anymore. - * - * The top-level items are the main media sources and include: - * playlist, media library, SAP, Shoutcast, devices, ... - * - * It is envisioned that a third tree will appear: VLM, but it's not done yet - * - * The playlist also stores, for utility purposes, an array of all input - * items, an array of all playlist items and an array of all playlist items - * and nodes (both are represented by the same structure). - * - * So, here is an example: - * \verbatim - * Inputs array - * - input 1 -> name = foo 1 uri = ... - * - input 2 -> name = foo 2 uri = ... - * - * Playlist items tree - * - playlist (id 1) - * - category 1 (id 2) - * - foo 2 (id 6 - input 2) - * - media library (id 2) - * - foo 1 (id 5 - input 1) - * \endverbatim - * - * Sometimes, an item creates subitems. This happens for the directory access - * for example. In that case, if the item is under the "playlist" top-level item - * and playlist is configured to be flat then the item will be deleted and - * replaced with new subitems. If the item is under another top-level item, it - * will be transformed to a node and removed from the list of all items without - * nodes. - * - * For "standard" item addition, you can use playlist_Add, playlist_AddExt - * (more options) or playlist_AddInput if you already created your input - * item. This will add the item at the root of "Playlist" or of "Media library" - * in each of the two trees. - * - * You can create nodes with playlist_NodeCreate and can create items from - * existing input items to be placed under any node with playlist_NodeAddInput. - * - * To delete an item, use playlist_DeleteFromInput( p_item ) which will - * remove all occurrences of the input. - * - * - * The playlist defines the following event variables: - * - * - "item-change": It will contain the input_item_t->i_id of a changed input - * item monitored by the playlist. - * item being played. - * - * - "playlist-item-append": It will contain a pointer to a playlist_add_t. - * - "playlist-item-deleted": It will contain the playlist_item_t->i_id of a - * deleted playlist_item_t. - * - * - "leaf-to-parent": It will contain the playlist_item_t->i_id of an item that is transformed - * into a node. - * - * The playlist contains rate-variable which is propagated to current input if available - * also rate-slower/rate-faster is in use - * - * XXX Be really carefull, playlist_item_t->i_id and input_item_t->i_id are not - * the same. Yes, the situation is pretty bad. - * - * @{ - */ - -/** Helper structure to export to file part of the playlist */ -typedef struct playlist_export_t -{ - VLC_COMMON_MEMBERS - const char *psz_filename; - FILE *p_file; - playlist_item_t *p_root; -} playlist_export_t; - -/** playlist item / node */ -struct playlist_item_t -{ - input_item_t *p_input; /**< Linked input item */ - - playlist_item_t **pp_children; /**< Children nodes/items */ - playlist_item_t *p_parent; /**< Item parent */ - int i_children; /**< Number of children, -1 if not a node */ - - int i_id; /**< Playlist item specific id */ - uint8_t i_flags; /**< Flags \see playlist_item_flags_e */ - - playlist_t *p_playlist; /**< Parent playlist */ -}; - -typedef enum { - PLAYLIST_SAVE_FLAG = 0x0001, /**< Must it be saved */ - PLAYLIST_SKIP_FLAG = 0x0002, /**< Must playlist skip after it ? */ - PLAYLIST_DBL_FLAG = 0x0004, /**< Is it disabled ? */ - PLAYLIST_RO_FLAG = 0x0008, /**< Write-enabled ? */ - PLAYLIST_REMOVE_FLAG = 0x0010, /**< Remove this item at the end */ - PLAYLIST_EXPANDED_FLAG = 0x0020, /**< Expanded node */ - PLAYLIST_SUBITEM_STOP_FLAG = 0x0040, /**< Must playlist stop if the item gets subitems ?*/ -} playlist_item_flags_e; - -/** Playlist status */ -typedef enum -{ PLAYLIST_STOPPED,PLAYLIST_RUNNING,PLAYLIST_PAUSED } playlist_status_t; - -/** Structure containing information about the playlist */ -struct playlist_t -{ - VLC_COMMON_MEMBERS - - playlist_item_array_t items; /**< Arrays of items */ - playlist_item_array_t all_items; /**< Array of items and nodes */ - - playlist_item_array_t current; /**< Items currently being played */ - int i_current_index; /**< Index in current array */ - - /* Predefined items */ - playlist_item_t * p_root; - playlist_item_t * p_playing; - playlist_item_t * p_media_library; - - //Phony ones, point to those above; - playlist_item_t * p_root_category; /**< Root of category tree */ - playlist_item_t * p_root_onelevel; /**< Root of onelevel tree */ - playlist_item_t * p_local_category; /** < "Playlist" in CATEGORY view */ - playlist_item_t * p_ml_category; /** < "Library" in CATEGORY view */ - playlist_item_t * p_local_onelevel; /** < "Playlist" in ONELEVEL view */ - playlist_item_t * p_ml_onelevel; /** < "Library" in ONELEVEL view */ -}; - -/** Helper to add an item */ -struct playlist_add_t -{ - int i_node; /**< Playist id of the parent node */ - int i_item; /**< Playist id of the playlist_item_t */ -}; - -/* A bit of macro magic to generate an enum out of the following list, - * and later, to generate a list of static functions out of the same list. - * There is also SORT_RANDOM, which is always last and handled specially. - */ -#define VLC_DEFINE_SORT_FUNCTIONS \ - DEF( SORT_ID )\ - DEF( SORT_TITLE )\ - DEF( SORT_TITLE_NODES_FIRST )\ - DEF( SORT_ARTIST )\ - DEF( SORT_GENRE )\ - DEF( SORT_DURATION )\ - DEF( SORT_TITLE_NUMERIC )\ - DEF( SORT_ALBUM )\ - DEF( SORT_TRACK_NUMBER )\ - DEF( SORT_DESCRIPTION )\ - DEF( SORT_RATING )\ - DEF( SORT_URI ) - -#define DEF( s ) s, -enum -{ - VLC_DEFINE_SORT_FUNCTIONS - SORT_RANDOM, - NUM_SORT_FNS=SORT_RANDOM -}; -#undef DEF -#ifndef VLC_INTERNAL_PLAYLIST_SORT_FUNCTIONS -#undef VLC_DEFINE_SORT_FUNCTIONS -#endif - -enum -{ - ORDER_NORMAL = 0, - ORDER_REVERSE = 1, -}; - -/* Used by playlist_Import */ -#define PLAYLIST_INSERT 0x0001 -#define PLAYLIST_APPEND 0x0002 -#define PLAYLIST_GO 0x0004 -#define PLAYLIST_PREPARSE 0x0008 -#define PLAYLIST_SPREPARSE 0x0010 -#define PLAYLIST_NO_REBUILD 0x0020 - -#define PLAYLIST_END -666 - -enum pl_locked_state -{ - pl_Locked = true, - pl_Unlocked = false -}; - -/***************************************************************************** - * Prototypes - *****************************************************************************/ - -/* Helpers */ -#define PL_LOCK playlist_Lock( p_playlist ) -#define PL_UNLOCK playlist_Unlock( p_playlist ) -#define PL_ASSERT_LOCKED playlist_AssertLocked( p_playlist ) - -VLC_API playlist_t * pl_Get( vlc_object_t * ); -#define pl_Get( a ) pl_Get( VLC_OBJECT(a) ) - -/* Playlist control */ -#define playlist_Play(p) playlist_Control(p,PLAYLIST_PLAY, pl_Unlocked ) -#define playlist_Pause(p) playlist_Control(p,PLAYLIST_PAUSE, pl_Unlocked ) -#define playlist_Stop(p) playlist_Control(p,PLAYLIST_STOP, pl_Unlocked ) -#define playlist_Next(p) playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, 1) -#define playlist_Prev(p) playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, -1) -#define playlist_Skip(p,i) playlist_Control(p,PLAYLIST_SKIP, pl_Unlocked, (i) ) - -VLC_API void playlist_Lock( playlist_t * ); -VLC_API void playlist_Unlock( playlist_t * ); -VLC_API void playlist_AssertLocked( playlist_t * ); -VLC_API void playlist_Deactivate( playlist_t * ); - -/** - * Do a playlist action. - * If there is something in the playlist then you can do playlist actions. - * Possible queries are listed in vlc_common.h - * \param p_playlist the playlist to do the command on - * \param i_query the command to do - * \param b_locked TRUE if playlist is locked when entering this function - * \param variable number of arguments - * \return VLC_SUCCESS or an error - */ -VLC_API int playlist_Control( playlist_t *p_playlist, int i_query, bool b_locked, ... ); - -/** Get current playing input. The object is retained. - */ -VLC_API input_thread_t * playlist_CurrentInput( playlist_t *p_playlist ) VLC_USED; - -/** Get the duration of all items in a node. - */ -VLC_API mtime_t playlist_GetNodeDuration( playlist_item_t * ); - -/** Clear the playlist - * \param b_locked TRUE if playlist is locked when entering this function - */ -VLC_API void playlist_Clear( playlist_t *, bool ); - -/** Enqueue an input item for preparsing */ -VLC_API int playlist_PreparseEnqueue(playlist_t *, input_item_t * ); - -/** Request the art for an input item to be fetched */ -VLC_API int playlist_AskForArtEnqueue(playlist_t *, input_item_t * ); - -/* Playlist sorting */ -VLC_API int playlist_TreeMove( playlist_t *, playlist_item_t *, playlist_item_t *, int ); -VLC_API int playlist_TreeMoveMany( playlist_t *, int, playlist_item_t **, playlist_item_t *, int ); -VLC_API int playlist_RecursiveNodeSort( playlist_t *, playlist_item_t *,int, int ); - -VLC_API playlist_item_t * playlist_CurrentPlayingItem( playlist_t * ) VLC_USED; -VLC_API int playlist_Status( playlist_t * ); - -/** - * Export a node of the playlist to a certain type of playlistfile - * \param p_playlist the playlist to export - * \param psz_filename the location where the exported file will be saved - * \param p_export_root the root node to export - * \param psz_type the type of playlist file to create (m3u, pls, ..) - * \return VLC_SUCCESS on success - */ -VLC_API int playlist_Export( playlist_t *p_playlist, const char *psz_name, playlist_item_t *p_export_root, const char *psz_type ); - -/** - * Open a playlist file, add its content to the current playlist - */ -VLC_API int playlist_Import( playlist_t *p_playlist, const char *psz_file ); - -/********************** Services discovery ***********************/ - -/** Add a list of comma-separated service discovery modules */ -VLC_API int playlist_ServicesDiscoveryAdd(playlist_t *, const char *); -/** Remove a services discovery module by name */ -VLC_API int playlist_ServicesDiscoveryRemove(playlist_t *, const char *); -/** Check whether a given SD is loaded */ -VLC_API bool playlist_IsServicesDiscoveryLoaded( playlist_t *,const char *) VLC_DEPRECATED; -/** Query a services discovery */ -VLC_API int playlist_ServicesDiscoveryControl( playlist_t *, const char *, int, ... ); - - - -/******************************************************** - * Item management - ********************************************************/ - -/*************************** Item deletion **************************/ -VLC_API int playlist_DeleteFromInput( playlist_t *, input_item_t *, bool ); - -/******************** Item addition ********************/ -VLC_API int playlist_Add( playlist_t *, const char *, const char *, int, int, bool, bool ); -VLC_API int playlist_AddExt( playlist_t *, const char *, const char *, int, int, mtime_t, int, const char *const *, unsigned, bool, bool ); -VLC_API int playlist_AddInput( playlist_t *, input_item_t *, int, int, bool, bool ); -VLC_API playlist_item_t * playlist_NodeAddInput( playlist_t *, input_item_t *, playlist_item_t *, int, int, bool ); -VLC_API int playlist_NodeAddCopy( playlist_t *, playlist_item_t *, playlist_item_t *, int ); - -/********************************** Item search *************************/ -VLC_API playlist_item_t * playlist_ItemGetById(playlist_t *, int ) VLC_USED; -VLC_API playlist_item_t * playlist_ItemGetByInput(playlist_t *,input_item_t * ) VLC_USED; - -VLC_API int playlist_LiveSearchUpdate(playlist_t *, playlist_item_t *, const char *, bool ); - -/******************************************************** - * Tree management - ********************************************************/ -/* Node management */ -VLC_API playlist_item_t * playlist_NodeCreate( playlist_t *, const char *, playlist_item_t * p_parent, int i_pos, int i_flags, input_item_t * ); -VLC_API int playlist_NodeAppend(playlist_t *,playlist_item_t*,playlist_item_t *); -VLC_API int playlist_NodeInsert(playlist_t *,playlist_item_t*,playlist_item_t *, int); -VLC_API int playlist_NodeRemoveItem(playlist_t *,playlist_item_t*,playlist_item_t *); -VLC_API playlist_item_t * playlist_ChildSearchName(playlist_item_t*, const char* ) VLC_USED; -VLC_API int playlist_NodeDelete( playlist_t *, playlist_item_t *, bool , bool ); - -VLC_API playlist_item_t * playlist_GetNextLeaf( playlist_t *p_playlist, playlist_item_t *p_root, playlist_item_t *p_item, bool b_ena, bool b_unplayed ) VLC_USED; -VLC_API playlist_item_t * playlist_GetPrevLeaf( playlist_t *p_playlist, playlist_item_t *p_root, playlist_item_t *p_item, bool b_ena, bool b_unplayed ) VLC_USED; - -/************************** - * Audio output management - **************************/ - -VLC_API audio_output_t *playlist_GetAout( playlist_t * ); - -#define AOUT_VOLUME_DEFAULT 256 -#define AOUT_VOLUME_MAX 512 - -VLC_API float playlist_VolumeGet( playlist_t * ); -VLC_API int playlist_VolumeSet( playlist_t *, float ); -VLC_API int playlist_VolumeUp( playlist_t *, int, float * ); -#define playlist_VolumeDown(a, b, c) playlist_VolumeUp(a, -(b), c) -VLC_API int playlist_MuteSet( playlist_t *, bool ); -VLC_API int playlist_MuteGet( playlist_t * ); - -static inline int playlist_MuteToggle( playlist_t *pl ) -{ - int val = playlist_MuteGet( pl ); - if (val >= 0) - val = playlist_MuteSet( pl, !val ); - return val; -} - -VLC_API void playlist_EnableAudioFilter( playlist_t *, const char *, bool ); - -/*********************************************************************** - * Inline functions - ***********************************************************************/ -/** Small helper tp get current playing input or NULL. Release the input after use. */ -#define pl_CurrentInput(a) __pl_CurrentInput( VLC_OBJECT(a) ) -static inline input_thread_t * __pl_CurrentInput( vlc_object_t * p_this ) -{ - return playlist_CurrentInput( pl_Get( p_this ) ); -} - -/** Tell if the playlist is empty */ -static inline bool playlist_IsEmpty( playlist_t *p_playlist ) -{ - PL_ASSERT_LOCKED; - return p_playlist->items.i_size == 0; -} - -/** Tell the number of items in the current playing context */ -static inline int playlist_CurrentSize( playlist_t *p_playlist ) -{ - PL_ASSERT_LOCKED; - return p_playlist->current.i_size; -} - -/** @} */ -# ifdef __cplusplus -} -# endif - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_plugin.h b/source/vlc/cpp/include/vlc/plugins/vlc_plugin.h deleted file mode 100644 index eff6edd60..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_plugin.h +++ /dev/null @@ -1,546 +0,0 @@ -/***************************************************************************** - * vlc_plugin.h : Macros used from within a module. - ***************************************************************************** - * Copyright (C) 2001-2006 VLC authors and VideoLAN - * Copyright © 2007-2009 Rémi Denis-Courmont - * - * Authors: Samuel Hocevar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef LIBVLC_MODULES_MACROS_H -# define LIBVLC_MODULES_MACROS_H 1 - -/** - * \file - * This file implements plugin (module) macros used to define a vlc module. - */ - -enum vlc_module_properties -{ - VLC_MODULE_CREATE, - VLC_CONFIG_CREATE, - - /* DO NOT EVER REMOVE, INSERT OR REPLACE ANY ITEM! It would break the ABI! - * Append new items at the end ONLY. */ - VLC_MODULE_CPU_REQUIREMENT=0x100, - VLC_MODULE_SHORTCUT, - VLC_MODULE_CAPABILITY, - VLC_MODULE_SCORE, - VLC_MODULE_CB_OPEN, - VLC_MODULE_CB_CLOSE, - VLC_MODULE_NO_UNLOAD, - VLC_MODULE_NAME, - VLC_MODULE_SHORTNAME, - VLC_MODULE_DESCRIPTION, - VLC_MODULE_HELP, - VLC_MODULE_TEXTDOMAIN, - /* Insert new VLC_MODULE_* here */ - - /* DO NOT EVER REMOVE, INSERT OR REPLACE ANY ITEM! It would break the ABI! - * Append new items at the end ONLY. */ - VLC_CONFIG_NAME=0x1000, - /* command line name (args=const char *) */ - - VLC_CONFIG_VALUE, - /* actual value (args=int/double/const char *) */ - - VLC_CONFIG_RANGE, - /* minimum value (args=int/double/const char * twice) */ - - VLC_CONFIG_ADVANCED, - /* enable advanced flag (args=none) */ - - VLC_CONFIG_VOLATILE, - /* don't write variable to storage (args=none) */ - - VLC_CONFIG_PERSISTENT_OBSOLETE, - /* unused (ignored) */ - - VLC_CONFIG_PRIVATE, - /* hide from user (args=none) */ - - VLC_CONFIG_REMOVED, - /* tag as no longer supported (args=none) */ - - VLC_CONFIG_CAPABILITY, - /* capability for a module or list thereof (args=const char*) */ - - VLC_CONFIG_SHORTCUT, - /* one-character (short) command line option name (args=char) */ - - VLC_CONFIG_OLDNAME_OBSOLETE, - /* unused (ignored) */ - - VLC_CONFIG_SAFE, - /* tag as modifiable by untrusted input item "sources" (args=none) */ - - VLC_CONFIG_DESC, - /* description (args=const char *, const char *, const char *) */ - - VLC_CONFIG_LIST_OBSOLETE, - /* unused (ignored) */ - - VLC_CONFIG_ADD_ACTION_OBSOLETE, - /* unused (ignored) */ - - VLC_CONFIG_LIST, - /* list of suggested values - * (args=size_t, const *, const char *const *) */ - - VLC_CONFIG_LIST_CB, - /* callback for suggested values - * (args=size_t (*)(vlc_object_t *, **, char ***)) */ - - /* Insert new VLC_CONFIG_* here */ -}; - -/* Configuration hint types */ -#define CONFIG_HINT_CATEGORY 0x02 /* Start of new category */ -#define CONFIG_HINT_SUBCATEGORY 0x03 /* Start of sub-category */ -#define CONFIG_HINT_SUBCATEGORY_END 0x04 /* End of sub-category */ -#define CONFIG_HINT_USAGE 0x05 /* Usage information */ - -#define CONFIG_CATEGORY 0x06 /* Set category */ -#define CONFIG_SUBCATEGORY 0x07 /* Set subcategory */ -#define CONFIG_SECTION 0x08 /* Start of new section */ - -/* Configuration item types */ -#define CONFIG_ITEM_FLOAT 0x20 /* Float option */ -#define CONFIG_ITEM_INTEGER 0x40 /* Integer option */ -#define CONFIG_ITEM_RGB 0x41 /* RGB color option */ -#define CONFIG_ITEM_BOOL 0x60 /* Bool option */ -#define CONFIG_ITEM_STRING 0x80 /* String option */ -#define CONFIG_ITEM_PASSWORD 0x81 /* Password option (*) */ -#define CONFIG_ITEM_KEY 0x82 /* Hot key option */ -#define CONFIG_ITEM_MODULE 0x84 /* Module option */ -#define CONFIG_ITEM_MODULE_CAT 0x85 /* Module option */ -#define CONFIG_ITEM_MODULE_LIST 0x86 /* Module option */ -#define CONFIG_ITEM_MODULE_LIST_CAT 0x87 /* Module option */ -#define CONFIG_ITEM_LOADFILE 0x8C /* Read file option */ -#define CONFIG_ITEM_SAVEFILE 0x8D /* Written file option */ -#define CONFIG_ITEM_DIRECTORY 0x8E /* Directory option */ -#define CONFIG_ITEM_FONT 0x8F /* Font option */ - -#define CONFIG_ITEM(x) (((x) & ~0xF) != 0) - -/* Categories and subcategories */ -#define CAT_INTERFACE 1 -#define SUBCAT_INTERFACE_GENERAL 101 -#define SUBCAT_INTERFACE_MAIN 102 -#define SUBCAT_INTERFACE_CONTROL 103 -#define SUBCAT_INTERFACE_HOTKEYS 104 - -#define CAT_AUDIO 2 -#define SUBCAT_AUDIO_GENERAL 201 -#define SUBCAT_AUDIO_AOUT 202 -#define SUBCAT_AUDIO_AFILTER 203 -#define SUBCAT_AUDIO_VISUAL 204 -#define SUBCAT_AUDIO_MISC 205 - -#define CAT_VIDEO 3 -#define SUBCAT_VIDEO_GENERAL 301 -#define SUBCAT_VIDEO_VOUT 302 -#define SUBCAT_VIDEO_VFILTER 303 -#define SUBCAT_VIDEO_SUBPIC 305 - -#define CAT_INPUT 4 -#define SUBCAT_INPUT_GENERAL 401 -#define SUBCAT_INPUT_ACCESS 402 -#define SUBCAT_INPUT_DEMUX 403 -#define SUBCAT_INPUT_VCODEC 404 -#define SUBCAT_INPUT_ACODEC 405 -#define SUBCAT_INPUT_SCODEC 406 -#define SUBCAT_INPUT_STREAM_FILTER 407 - -#define CAT_SOUT 5 -#define SUBCAT_SOUT_GENERAL 501 -#define SUBCAT_SOUT_STREAM 502 -#define SUBCAT_SOUT_MUX 503 -#define SUBCAT_SOUT_ACO 504 -#define SUBCAT_SOUT_PACKETIZER 505 -#define SUBCAT_SOUT_VOD 507 - -#define CAT_ADVANCED 6 -#define SUBCAT_ADVANCED_MISC 602 -#define SUBCAT_ADVANCED_NETWORK 603 - -#define CAT_PLAYLIST 7 -#define SUBCAT_PLAYLIST_GENERAL 701 -#define SUBCAT_PLAYLIST_SD 702 -#define SUBCAT_PLAYLIST_EXPORT 703 - - -/** - * Current plugin ABI version - */ -# define MODULE_SYMBOL 2_1_0a -# define MODULE_SUFFIX "__2_1_0a" - -/***************************************************************************** - * Add a few defines. You do not want to read this section. Really. - *****************************************************************************/ - -/* Explanation: - * - * if linking a module statically, we will need: - * #define MODULE_FUNC( zog ) module_foo_zog - * - * this can't easily be done with the C preprocessor, thus a few ugly hacks. - */ - -/* I need to do _this_ to change « foo bar » to « module_foo_bar » ! */ -#define CONCATENATE( y, z ) CRUDE_HACK( y, z ) -#define CRUDE_HACK( y, z ) y##__##z - -/* If the module is built-in, then we need to define foo_InitModule instead - * of InitModule. Same for Activate- and DeactivateModule. */ -#ifdef __PLUGIN__ -# define __VLC_SYMBOL( symbol ) CONCATENATE( symbol, MODULE_SYMBOL ) -#else -# define __VLC_SYMBOL( symbol ) CONCATENATE( symbol, MODULE_NAME ) -#endif - -#define CDECL_SYMBOL -#if defined (__PLUGIN__) -# if defined (_WIN32) -# define DLL_SYMBOL __declspec(dllexport) -# undef CDECL_SYMBOL -# define CDECL_SYMBOL __cdecl -# elif VLC_GCC_VERSION(4,0) -# define DLL_SYMBOL __attribute__((visibility("default"))) -# else -# define DLL_SYMBOL -# endif -#else -# define DLL_SYMBOL -#endif - -#if defined( __cplusplus ) -# define EXTERN_SYMBOL extern "C" -#else -# define EXTERN_SYMBOL -#endif - -typedef int (*vlc_set_cb) (void *, void *, int, ...); - -#define vlc_plugin_set(...) vlc_set (opaque, NULL, __VA_ARGS__) -#define vlc_module_set(...) vlc_set (opaque, module, __VA_ARGS__) -#define vlc_config_set(...) vlc_set (opaque, config, __VA_ARGS__) - -/* - * InitModule: this function is called once and only once, when the module - * is looked at for the first time. We get the useful data from it, for - * instance the module name, its shortcuts, its capabilities... we also create - * a copy of its config because the module can be unloaded at any time. - */ -#define vlc_module_begin() \ -EXTERN_SYMBOL DLL_SYMBOL \ -int CDECL_SYMBOL __VLC_SYMBOL(vlc_entry) (vlc_set_cb, void *); \ -EXTERN_SYMBOL DLL_SYMBOL \ -int CDECL_SYMBOL __VLC_SYMBOL(vlc_entry) (vlc_set_cb vlc_set, void *opaque) \ -{ \ - module_t *module; \ - module_config_t *config = NULL; \ - if (vlc_plugin_set (VLC_MODULE_CREATE, &module)) \ - goto error; \ - if (vlc_module_set (VLC_MODULE_NAME, (MODULE_STRING))) \ - goto error; - -#define vlc_module_end() \ - (void) config; \ - return 0; \ -error: \ - return -1; \ -} \ -VLC_METADATA_EXPORTS - -#define add_submodule( ) \ - if (vlc_plugin_set (VLC_MODULE_CREATE, &module)) \ - goto error; - -#define add_shortcut( ... ) \ -{ \ - const char *shortcuts[] = { __VA_ARGS__ }; \ - if (vlc_module_set (VLC_MODULE_SHORTCUT, \ - sizeof(shortcuts)/sizeof(shortcuts[0]), shortcuts)) \ - goto error; \ -} - -#define set_shortname( shortname ) \ - if (vlc_module_set (VLC_MODULE_SHORTNAME, (const char *)(shortname))) \ - goto error; - -#define set_description( desc ) \ - if (vlc_module_set (VLC_MODULE_DESCRIPTION, (const char *)(desc))) \ - goto error; - -#define set_help( help ) \ - if (vlc_module_set (VLC_MODULE_HELP, (const char *)(help))) \ - goto error; - -#define set_capability( cap, score ) \ - if (vlc_module_set (VLC_MODULE_CAPABILITY, (const char *)(cap)) \ - || vlc_module_set (VLC_MODULE_SCORE, (int)(score))) \ - goto error; - -#define set_callbacks( activate, deactivate ) \ - if (vlc_module_set (VLC_MODULE_CB_OPEN, activate) \ - || vlc_module_set (VLC_MODULE_CB_CLOSE, deactivate)) \ - goto error; - -#define cannot_unload_broken_library( ) \ - if (vlc_module_set (VLC_MODULE_NO_UNLOAD)) \ - goto error; - -#define set_text_domain( dom ) \ - if (vlc_plugin_set (VLC_MODULE_TEXTDOMAIN, (dom))) \ - goto error; - -/***************************************************************************** - * Macros used to build the configuration structure. - * - * Note that internally we support only 3 types of config data: int, float - * and string. - * The other types declared here just map to one of these 3 basic types but - * have the advantage of also providing very good hints to a configuration - * interface so as to make it more user friendly. - * The configuration structure also includes category hints. These hints can - * provide a configuration interface with some very useful data and again - * allow for a more user friendly interface. - *****************************************************************************/ - -#define add_type_inner( type ) \ - vlc_plugin_set (VLC_CONFIG_CREATE, (type), &config); - -#define add_typedesc_inner( type, text, longtext ) \ - add_type_inner( type ) \ - vlc_config_set (VLC_CONFIG_DESC, \ - (const char *)(text), (const char *)(longtext)); - -#define add_typeadv_inner( type, text, longtext, advc ) \ - add_typedesc_inner( type, text, longtext ) \ - if (advc) vlc_config_set (VLC_CONFIG_ADVANCED); - -#define add_typename_inner( type, name, text, longtext, advc ) \ - add_typeadv_inner( type, text, longtext, advc ) \ - vlc_config_set (VLC_CONFIG_NAME, (const char *)(name)); - -#define add_string_inner( type, name, text, longtext, advc, v ) \ - add_typename_inner( type, name, text, longtext, advc ) \ - vlc_config_set (VLC_CONFIG_VALUE, (const char *)(v)); - -#define add_int_inner( type, name, text, longtext, advc, v ) \ - add_typename_inner( type, name, text, longtext, advc ) \ - vlc_config_set (VLC_CONFIG_VALUE, (int64_t)(v)); - - -#define set_category( i_id ) \ - add_type_inner( CONFIG_CATEGORY ) \ - vlc_config_set (VLC_CONFIG_VALUE, (int64_t)(i_id)); - -#define set_subcategory( i_id ) \ - add_type_inner( CONFIG_SUBCATEGORY ) \ - vlc_config_set (VLC_CONFIG_VALUE, (int64_t)(i_id)); - -#define set_section( text, longtext ) \ - add_typedesc_inner( CONFIG_SECTION, text, longtext ) - -#define add_category_hint( text, longtext, advc ) \ - add_typeadv_inner( CONFIG_HINT_CATEGORY, text, longtext, advc ) - -#define add_subcategory_hint( text, longtext ) \ - add_typedesc_inner( CONFIG_HINT_SUBCATEGORY, text, longtext ) - -#define end_subcategory_hint \ - add_type_inner( CONFIG_HINT_SUBCATEGORY_END ) - -#define add_usage_hint( text ) \ - add_typedesc_inner( CONFIG_HINT_USAGE, text, NULL ) - -#define add_string( name, value, text, longtext, advc ) \ - add_string_inner( CONFIG_ITEM_STRING, name, text, longtext, advc, \ - value ) - -#define add_password( name, value, text, longtext, advc ) \ - add_string_inner( CONFIG_ITEM_PASSWORD, name, text, longtext, advc, \ - value ) - -#define add_loadfile( name, value, text, longtext, advc ) \ - add_string_inner( CONFIG_ITEM_LOADFILE, name, text, longtext, advc, \ - value ) - -#define add_savefile( name, value, text, longtext, advc ) \ - add_string_inner( CONFIG_ITEM_SAVEFILE, name, text, longtext, advc, \ - value ) - -#define add_directory( name, value, text, longtext, advc ) \ - add_string_inner( CONFIG_ITEM_DIRECTORY, name, text, longtext, advc, \ - value ) - -#define add_font( name, value, text, longtext, advc )\ - add_string_inner( CONFIG_ITEM_FONT, name, text, longtext, advc, \ - value ) - -#define add_module( name, psz_caps, value, text, longtext, advc ) \ - add_string_inner( CONFIG_ITEM_MODULE, name, text, longtext, advc, \ - value ) \ - vlc_config_set (VLC_CONFIG_CAPABILITY, (const char *)(psz_caps)); - -#define add_module_list( name, psz_caps, value, text, longtext, advc ) \ - add_string_inner( CONFIG_ITEM_MODULE_LIST, name, text, longtext, advc, \ - value ) \ - vlc_config_set (VLC_CONFIG_CAPABILITY, (const char *)(psz_caps)); - -#ifndef __PLUGIN__ -#define add_module_cat( name, i_subcategory, value, text, longtext, advc ) \ - add_string_inner( CONFIG_ITEM_MODULE_CAT, name, text, longtext, advc, \ - value ) \ - change_integer_range (i_subcategory /* gruik */, 0); - -#define add_module_list_cat( name, i_subcategory, value, text, longtext, advc ) \ - add_string_inner( CONFIG_ITEM_MODULE_LIST_CAT, name, text, longtext, \ - advc, value ) \ - change_integer_range (i_subcategory /* gruik */, 0); -#endif - -#define add_integer( name, value, text, longtext, advc ) \ - add_int_inner( CONFIG_ITEM_INTEGER, name, text, longtext, advc, value ) - -#define add_rgb( name, value, text, longtext, advc ) \ - add_int_inner( CONFIG_ITEM_RGB, name, text, longtext, advc, value ) \ - change_integer_range( 0, 0xFFFFFF ) - -#define add_key( name, value, text, longtext, advc ) \ - add_string_inner( CONFIG_ITEM_KEY, "global-" name, text, longtext, advc, \ - KEY_UNSET ) \ - add_string_inner( CONFIG_ITEM_KEY, name, text, longtext, advc, value ) - -#define add_integer_with_range( name, value, i_min, i_max, text, longtext, advc ) \ - add_integer( name, value, text, longtext, advc ) \ - change_integer_range( i_min, i_max ) - -#define add_float( name, v, text, longtext, advc ) \ - add_typename_inner( CONFIG_ITEM_FLOAT, name, text, longtext, advc ) \ - vlc_config_set (VLC_CONFIG_VALUE, (double)(v)); - -#define add_float_with_range( name, value, f_min, f_max, text, longtext, advc ) \ - add_float( name, value, text, longtext, advc ) \ - change_float_range( f_min, f_max ) - -#define add_bool( name, v, text, longtext, advc ) \ - add_typename_inner( CONFIG_ITEM_BOOL, name, text, longtext, advc ) \ - if (v) vlc_config_set (VLC_CONFIG_VALUE, (int64_t)true); - -/* For removed option */ -#define add_obsolete_inner( name, type ) \ - add_type_inner( type ) \ - vlc_config_set (VLC_CONFIG_NAME, (const char *)(name)); \ - vlc_config_set (VLC_CONFIG_REMOVED); - -#define add_obsolete_bool( name ) \ - add_obsolete_inner( name, CONFIG_ITEM_BOOL ) - -#define add_obsolete_integer( name ) \ - add_obsolete_inner( name, CONFIG_ITEM_INTEGER ) - -#define add_obsolete_float( name ) \ - add_obsolete_inner( name, CONFIG_ITEM_FLOAT ) - -#define add_obsolete_string( name ) \ - add_obsolete_inner( name, CONFIG_ITEM_STRING ) - -/* Modifier macros for the config options (used for fine tuning) */ - -#define change_short( ch ) \ - vlc_config_set (VLC_CONFIG_SHORTCUT, (int)(ch)); - -#define change_string_list( list, list_text ) \ - vlc_config_set (VLC_CONFIG_LIST, \ - (size_t)(sizeof (list) / sizeof (char *)), \ - (const char *const *)(list), \ - (const char *const *)(list_text)); - -#define change_string_cb( cb ) \ - vlc_config_set (VLC_CONFIG_LIST_CB, (cb)); - -#define change_integer_list( list, list_text ) \ - vlc_config_set (VLC_CONFIG_LIST, \ - (size_t)(sizeof (list) / sizeof (int)), \ - (const int *)(list), \ - (const char *const *)(list_text)); - -#define change_integer_cb( cb ) \ - vlc_config_set (VLC_CONFIG_LIST_CB, (cb)); - -#define change_integer_range( minv, maxv ) \ - vlc_config_set (VLC_CONFIG_RANGE, (int64_t)(minv), (int64_t)(maxv)); - -#define change_float_range( minv, maxv ) \ - vlc_config_set (VLC_CONFIG_RANGE, (double)(minv), (double)(maxv)); - -#define change_action_add( pf_action, text ) \ - (void)(pf_action, text); - -/* For options that are saved but hidden from the preferences panel */ -#define change_private() \ - vlc_config_set (VLC_CONFIG_PRIVATE); - -/* For options that cannot be saved in the configuration */ -#define change_volatile() \ - change_private() \ - vlc_config_set (VLC_CONFIG_VOLATILE); - -#define change_safe() \ - vlc_config_set (VLC_CONFIG_SAFE); - -/* Meta data plugin exports */ -#define VLC_META_EXPORT( name, value ) \ - EXTERN_SYMBOL DLL_SYMBOL const char * CDECL_SYMBOL \ - __VLC_SYMBOL(vlc_entry_ ## name) (void); \ - EXTERN_SYMBOL DLL_SYMBOL const char * CDECL_SYMBOL \ - __VLC_SYMBOL(vlc_entry_ ## name) (void) \ - { \ - return value; \ - } - -#if defined (__LIBVLC__) -# define VLC_COPYRIGHT_EXPORT VLC_META_EXPORT (copyright, \ - "\x43\x6f\x70\x79\x72\x69\x67\x68\x74\x20\x28\x43\x29\x20\x74\x68" \ - "\x65\x20\x56\x69\x64\x65\x6f\x4c\x41\x4e\x20\x56\x4c\x43\x20\x6d" \ - "\x65\x64\x69\x61\x20\x70\x6c\x61\x79\x65\x72\x20\x64\x65\x76\x65" \ - "\x6c\x6f\x70\x65\x72\x73" ) -# define VLC_LICENSE_EXPORT VLC_META_EXPORT (license, \ - "\x4c\x69\x63\x65\x6e\x73\x65\x64\x20\x75\x6e\x64\x65\x72\x20\x74" \ - "\x68\x65\x20\x74\x65\x72\x6d\x73\x20\x6f\x66\x20\x74\x68\x65\x20" \ - "\x47\x4e\x55\x20\x4c\x65\x73\x73\x65\x72\x20\x47\x65\x6e\x65\x72" \ - "\x61\x6c\x20\x50\x75\x62\x6c\x69\x63\x20\x4c\x69\x63\x65\x6e\x73" \ - "\x65\x2c\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x32\x2e\x31\x20\x6f" \ - "\x72\x20\x6c\x61\x74\x65\x72\x2e" ) -#else -# if !defined (VLC_COPYRIGHT_EXPORT) -# define VLC_COPYRIGHT_EXPORT -# endif -# if !defined (VLC_LICENSE_EXPORT) -# define VLC_LICENSE_EXPORT -# endif -#endif - -#define VLC_METADATA_EXPORTS \ - VLC_COPYRIGHT_EXPORT \ - VLC_LICENSE_EXPORT - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_probe.h b/source/vlc/cpp/include/vlc/plugins/vlc_probe.h deleted file mode 100644 index 99315047a..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_probe.h +++ /dev/null @@ -1,69 +0,0 @@ -/***************************************************************************** - * vlc_probe.h: service probing interface - ***************************************************************************** - * Copyright (C) 2009 Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_PROBE_H -# define VLC_PROBE_H 1 - -# include - -/** - * \file - * This file defines functions and structures to run-time probe VLC extensions - */ - -# ifdef __cplusplus -extern "C" { -# endif - -void *vlc_probe (vlc_object_t *, const char *, size_t *restrict); -#define vlc_probe(obj, cap, pcount) \ - vlc_probe(VLC_OBJECT(obj), cap, pcount) - -struct vlc_probe_t -{ - VLC_COMMON_MEMBERS - - void *list; - size_t count; -}; - -typedef struct vlc_probe_t vlc_probe_t; - -static inline int vlc_probe_add(vlc_probe_t *obj, const void *data, - size_t len) -{ - char *tab = (char *)realloc (obj->list, (obj->count + 1) * len); - - if (unlikely(tab == NULL)) - return VLC_ENOMEM; - memcpy(tab + (obj->count * len), data, len); - obj->list = tab; - obj->count++; - return VLC_SUCCESS; -} - -# define VLC_PROBE_CONTINUE VLC_EGENERIC -# define VLC_PROBE_STOP VLC_SUCCESS - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_rand.h b/source/vlc/cpp/include/vlc/plugins/vlc_rand.h deleted file mode 100644 index 761cee593..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_rand.h +++ /dev/null @@ -1,37 +0,0 @@ -/***************************************************************************** - * vlc_rand.h: RNG - ***************************************************************************** - * Copyright © 2007 Rémi Denis-Courmont - * $Id: 3ae95ac04c55f46d116481eb89255b013f6d1c32 $ - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_RAND_H -# define VLC_RAND_H - -/** - * \file - * This file defined random number generator function in vlc - */ - -VLC_API void vlc_rand_bytes(void *buf, size_t len); - -/* Interlocked (but not reproducible) functions for the POSIX PRNG */ -VLC_API double vlc_drand48(void) VLC_USED; -VLC_API long vlc_lrand48(void) VLC_USED; -VLC_API long vlc_mrand48(void) VLC_USED; - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_services_discovery.h b/source/vlc/cpp/include/vlc/plugins/vlc_services_discovery.h deleted file mode 100644 index 36522301e..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_services_discovery.h +++ /dev/null @@ -1,185 +0,0 @@ -/***************************************************************************** - * vlc_services_discovery.h : Services Discover functions - ***************************************************************************** - * Copyright (C) 1999-2004 VLC authors and VideoLAN - * $Id: d9c231b28f3ec075343e0f8016792b8fa33f60f5 $ - * - * Authors: Pierre d'Herbemont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_SERVICES_DISCOVERY_H_ -#define VLC_SERVICES_DISCOVERY_H_ - -#include -#include -#include - -/** - * \file - * This file lists functions and structures for service discovery (SD) in vlc - */ - -# ifdef __cplusplus -extern "C" { -# endif - -/** - * @{ - */ - -/** - * Main service discovery structure to build a SD module - */ -struct services_discovery_t -{ - VLC_COMMON_MEMBERS - module_t * p_module; /**< Loaded module */ - - /**< Event manager - * You should access it through setters, outside of the core */ - vlc_event_manager_t event_manager; - - char *psz_name; /**< Main name of the SD */ - config_chain_t *p_cfg; /**< Configuration for the SD */ - - /** Control function - * \see services_discovery_command_e - */ - int ( *pf_control ) ( services_discovery_t *, int, va_list ); - - services_discovery_sys_t *p_sys; /**< Custom private data */ -}; - -/** - * Service discovery categories - * \see vlc_sd_probe_Add - */ -enum services_discovery_category_e -{ - SD_CAT_DEVICES = 1, /**< Devices, like portable music players */ - SD_CAT_LAN, /**< LAN/WAN services, like Upnp or SAP */ - SD_CAT_INTERNET, /**< Internet or Website channels services */ - SD_CAT_MYCOMPUTER /**< Computer services, like Discs or Apps */ -}; - -/** - * Service discovery control commands - */ -enum services_discovery_command_e -{ - SD_CMD_SEARCH = 1, /**< arg1 = query */ - SD_CMD_DESCRIPTOR /**< arg1 = services_discovery_descriptor_t* */ -}; - -/** - * Service discovery capabilities - */ -enum services_discovery_capability_e -{ - SD_CAP_SEARCH = 1 /**< One can search in the SD */ -}; - -/** - * Service discovery descriptor - * \see services_discovery_command_e - */ -typedef struct -{ - char *psz_short_desc; /**< The short description, human-readable */ - char *psz_icon_url; /**< URL to the icon that represents it */ - char *psz_url; /**< URL for the service */ - int i_capabilities; /**< \see services_discovery_capability_e */ -} services_discovery_descriptor_t; - - -/*********************************************************************** - * Service Discovery - ***********************************************************************/ - -/** - * Ask for a research in the SD - * @param p_sd: the Service Discovery - * @param i_control: the command to issue - * @param args: the argument list - * @return VLC_SUCCESS in case of success, the error code overwise - */ -static inline int vlc_sd_control( services_discovery_t *p_sd, int i_control, va_list args ) -{ - if( p_sd->pf_control ) - return p_sd->pf_control( p_sd, i_control, args ); - else - return VLC_EGENERIC; -} - -/* Get the services discovery modules names to use in Create(), in a null - * terminated string array. Array and string must be freed after use. */ -VLC_API char ** vlc_sd_GetNames( vlc_object_t *, char ***, int ** ) VLC_USED; -#define vlc_sd_GetNames(obj, pln, pcat ) \ - vlc_sd_GetNames(VLC_OBJECT(obj), pln, pcat) - -/* Creation of a services_discovery object */ -VLC_API services_discovery_t * vlc_sd_Create( vlc_object_t *, const char * ) VLC_USED; -VLC_API bool vlc_sd_Start( services_discovery_t * ); -VLC_API void vlc_sd_Stop( services_discovery_t * ); -VLC_API void vlc_sd_Destroy( services_discovery_t * ); - -/** - * Helper to stop and destroy the Service Discovery - */ -static inline void vlc_sd_StopAndDestroy( services_discovery_t * p_this ) -{ - vlc_sd_Stop( p_this ); - vlc_sd_Destroy( p_this ); -} - -/* Read info from discovery object */ -VLC_API char * services_discovery_GetLocalizedName( services_discovery_t * p_this ) VLC_USED; - -/* Receive event notification (preferred way to get new items) */ -VLC_API vlc_event_manager_t * services_discovery_EventManager( services_discovery_t * p_this ) VLC_USED; - -/* Used by services_discovery to post update about their items */ - /* About the psz_category, it is a legacy way to add info to the item, - * for more options, directly set the (meta) data on the input item */ -VLC_API void services_discovery_AddItem( services_discovery_t * p_this, input_item_t * p_item, const char * psz_category ); -VLC_API void services_discovery_RemoveItem( services_discovery_t * p_this, input_item_t * p_item ); -VLC_API void services_discovery_RemoveAll( services_discovery_t * p_sd ); - - -/* SD probing */ - -VLC_API int vlc_sd_probe_Add(vlc_probe_t *, const char *, const char *, int category); - -#define VLC_SD_PROBE_SUBMODULE \ - add_submodule() \ - set_capability( "services probe", 100 ) \ - set_callbacks( vlc_sd_probe_Open, NULL ) - -#define VLC_SD_PROBE_HELPER(name, longname, cat) \ -static int vlc_sd_probe_Open (vlc_object_t *obj) \ -{ \ - return vlc_sd_probe_Add ((struct vlc_probe_t *)obj, \ - name "{longname=\"" longname "\"}", \ - longname, cat); \ -} - -/** @} */ -# ifdef __cplusplus -} -# endif - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_sout.h b/source/vlc/cpp/include/vlc/plugins/vlc_sout.h deleted file mode 100644 index 577ed94c8..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_sout.h +++ /dev/null @@ -1,251 +0,0 @@ -/***************************************************************************** - * vlc_sout.h : stream output module - ***************************************************************************** - * Copyright (C) 2002-2008 VLC authors and VideoLAN - * $Id: 87d8229baee6c6e09e9fe11e1ee4c4761d749af4 $ - * - * Authors: Christophe Massiot - * Laurent Aimar - * Eric Petit - * Jean-Paul Saman - * Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_SOUT_H_ -#define VLC_SOUT_H_ - -/** - * \file - * This file defines structures and functions for stream output in vlc - */ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -/** Stream output instance (FIXME: should be private to src/ to avoid - * invalid unsynchronized access) */ -struct sout_instance_t -{ - VLC_COMMON_MEMBERS - - char *psz_sout; - - /** count of output that can't control the space */ - int i_out_pace_nocontrol; - - vlc_mutex_t lock; - sout_stream_t *p_stream; -}; - -/**************************************************************************** - * sout_stream_id_t: opaque (private for all sout_stream_t) - ****************************************************************************/ -typedef struct sout_stream_id_t sout_stream_id_t; - -/** Stream output access_output */ -struct sout_access_out_t -{ - VLC_COMMON_MEMBERS - - module_t *p_module; - char *psz_access; - - char *psz_path; - sout_access_out_sys_t *p_sys; - int (*pf_seek)( sout_access_out_t *, off_t ); - ssize_t (*pf_read)( sout_access_out_t *, block_t * ); - ssize_t (*pf_write)( sout_access_out_t *, block_t * ); - int (*pf_control)( sout_access_out_t *, int, va_list ); - - config_chain_t *p_cfg; -}; - -enum access_out_query_e -{ - ACCESS_OUT_CONTROLS_PACE, /* arg1=bool *, can fail (assume true) */ -}; - -VLC_API sout_access_out_t * sout_AccessOutNew( vlc_object_t *, const char *psz_access, const char *psz_name ) VLC_USED; -#define sout_AccessOutNew( obj, access, name ) \ - sout_AccessOutNew( VLC_OBJECT(obj), access, name ) -VLC_API void sout_AccessOutDelete( sout_access_out_t * ); -VLC_API int sout_AccessOutSeek( sout_access_out_t *, off_t ); -VLC_API ssize_t sout_AccessOutRead( sout_access_out_t *, block_t * ); -VLC_API ssize_t sout_AccessOutWrite( sout_access_out_t *, block_t * ); -VLC_API int sout_AccessOutControl( sout_access_out_t *, int, ... ); - -static inline bool sout_AccessOutCanControlPace( sout_access_out_t *p_ao ) -{ - bool b; - if( sout_AccessOutControl( p_ao, ACCESS_OUT_CONTROLS_PACE, &b ) ) - return true; - return b; -} - -/** Muxer structure */ -struct sout_mux_t -{ - VLC_COMMON_MEMBERS - module_t *p_module; - - sout_instance_t *p_sout; - - char *psz_mux; - config_chain_t *p_cfg; - - sout_access_out_t *p_access; - - int (*pf_addstream)( sout_mux_t *, sout_input_t * ); - int (*pf_delstream)( sout_mux_t *, sout_input_t * ); - int (*pf_mux) ( sout_mux_t * ); - int (*pf_control) ( sout_mux_t *, int, va_list ); - - /* here are all inputs accepted by muxer */ - int i_nb_inputs; - sout_input_t **pp_inputs; - - /* mux private */ - sout_mux_sys_t *p_sys; - - /* XXX private to stream_output.c */ - /* if muxer doesn't support adding stream at any time then we first wait - * for stream then we refuse all stream and start muxing */ - bool b_add_stream_any_time; - bool b_waiting_stream; - /* we wait one second after first stream added */ - mtime_t i_add_stream_start; -}; - -enum sout_mux_query_e -{ - /* capabilities */ - MUX_CAN_ADD_STREAM_WHILE_MUXING, /* arg1= bool *, res=cannot fail */ - /* properties */ - MUX_GET_ADD_STREAM_WAIT, /* arg1= bool *, res=cannot fail */ - MUX_GET_MIME, /* arg1= char ** res=can fail */ -}; - -struct sout_input_t -{ - es_format_t *p_fmt; - block_fifo_t *p_fifo; - - void *p_sys; -}; - - -VLC_API sout_mux_t * sout_MuxNew( sout_instance_t*, const char *, sout_access_out_t * ) VLC_USED; -VLC_API sout_input_t * sout_MuxAddStream( sout_mux_t *, es_format_t * ) VLC_USED; -VLC_API void sout_MuxDeleteStream( sout_mux_t *, sout_input_t * ); -VLC_API void sout_MuxDelete( sout_mux_t * ); -VLC_API void sout_MuxSendBuffer( sout_mux_t *, sout_input_t *, block_t * ); -VLC_API int sout_MuxGetStream(sout_mux_t *, int , mtime_t *); - -static inline int sout_MuxControl( sout_mux_t *p_mux, int i_query, ... ) -{ - va_list args; - int i_result; - - va_start( args, i_query ); - i_result = p_mux->pf_control( p_mux, i_query, args ); - va_end( args ); - return i_result; -} - -/**************************************************************************** - * sout_stream: - ****************************************************************************/ -struct sout_stream_t -{ - VLC_COMMON_MEMBERS - - module_t *p_module; - sout_instance_t *p_sout; - - char *psz_name; - config_chain_t *p_cfg; - sout_stream_t *p_next; - - /* add, remove a stream */ - sout_stream_id_t *(*pf_add)( sout_stream_t *, es_format_t * ); - int (*pf_del)( sout_stream_t *, sout_stream_id_t * ); - /* manage a packet */ - int (*pf_send)( sout_stream_t *, sout_stream_id_t *, block_t* ); - - sout_stream_sys_t *p_sys; - bool pace_nocontrol; -}; - -VLC_API void sout_StreamChainDelete(sout_stream_t *p_first, sout_stream_t *p_last ); -VLC_API sout_stream_t *sout_StreamChainNew(sout_instance_t *p_sout, - char *psz_chain, sout_stream_t *p_next, sout_stream_t **p_last) VLC_USED; - -static inline sout_stream_id_t *sout_StreamIdAdd( sout_stream_t *s, es_format_t *fmt ) -{ - return s->pf_add( s, fmt ); -} -static inline int sout_StreamIdDel( sout_stream_t *s, sout_stream_id_t *id ) -{ - return s->pf_del( s, id ); -} -static inline int sout_StreamIdSend( sout_stream_t *s, sout_stream_id_t *id, block_t *b ) -{ - return s->pf_send( s, id, b ); -} - -/**************************************************************************** - * Encoder - ****************************************************************************/ - -VLC_API encoder_t * sout_EncoderCreate( vlc_object_t *obj ); -#define sout_EncoderCreate(o) sout_EncoderCreate(VLC_OBJECT(o)) - -/**************************************************************************** - * Announce handler - ****************************************************************************/ -VLC_API session_descriptor_t* sout_AnnounceRegisterSDP( vlc_object_t *, const char *, const char * ) VLC_USED; -VLC_API int sout_AnnounceUnRegister(vlc_object_t *,session_descriptor_t* ); -#define sout_AnnounceRegisterSDP(o, sdp, addr) \ - sout_AnnounceRegisterSDP(VLC_OBJECT (o), sdp, addr) -#define sout_AnnounceUnRegister(o, a) \ - sout_AnnounceUnRegister(VLC_OBJECT (o), a) - -/** SDP */ - -struct sockaddr; - -VLC_API char * vlc_sdp_Start( vlc_object_t *obj, const char *cfgpref, const struct sockaddr *src, size_t srclen, const struct sockaddr *addr, size_t addrlen ) VLC_USED; -VLC_API char * sdp_AddMedia(char **sdp, const char *type, const char *protocol, int dport, unsigned pt, bool bw_indep, unsigned bw, const char *ptname, unsigned clockrate, unsigned channels, const char *fmtp); -VLC_API char * sdp_AddAttribute(char **sdp, const char *name, const char *fmt, ...) VLC_FORMAT( 3, 4 ); - -/** Description module */ -typedef struct sout_description_data_t -{ - int i_es; - es_format_t **es; - vlc_sem_t *sem; -} sout_description_data_t; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_spu.h b/source/vlc/cpp/include/vlc/plugins/vlc_spu.h deleted file mode 100644 index cbd20ea61..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_spu.h +++ /dev/null @@ -1,112 +0,0 @@ -/***************************************************************************** - * vlc_spu.h: spu_t definition and functions. - ***************************************************************************** - * Copyright (C) 1999-2010 VLC authors and VideoLAN - * Copyright (C) 2010 Laurent Aimar - * $Id: d448d06f8c9f9c91d70239ff0d07cb5ceac06423 $ - * - * Authors: Gildas Bazin - * Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_SPU_H -#define VLC_SPU_H 1 - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/********************************************************************** - * Base SPU structures - **********************************************************************/ -/** - * \defgroup spu Subpicture Unit - * This module describes the programming interface for the subpicture unit. - * It includes functions allowing to create/destroy an spu, and render - * subpictures. - * @{ - */ - -typedef struct spu_private_t spu_private_t; - -/* Default subpicture channel ID */ -#define SPU_DEFAULT_CHANNEL (1) - -/** - * Subpicture unit descriptor - */ -struct spu_t -{ - VLC_COMMON_MEMBERS - - spu_private_t *p; -}; - -VLC_API spu_t * spu_Create( vlc_object_t * ); -#define spu_Create(a) spu_Create(VLC_OBJECT(a)) -VLC_API void spu_Destroy( spu_t * ); - -/** - * This function sends a subpicture to the spu_t core. - * - * You cannot use the provided subpicture anymore. The spu_t core - * will destroy it at its convenience. - */ -VLC_API void spu_PutSubpicture( spu_t *, subpicture_t * ); - -/** - * This function will return an unique subpicture containing the OSD and - * subtitles visibles at the requested date. - * - * \param p_chroma_list is a list of supported chroma for the output (can be NULL) - * \param p_fmt_dst is the format of the picture on which the return subpicture will be rendered. - * \param p_fmt_src is the format of the original(source) video. - * - * The returned value if non NULL must be released by subpicture_Delete(). - */ -VLC_API subpicture_t * spu_Render( spu_t *, const vlc_fourcc_t *p_chroma_list, const video_format_t *p_fmt_dst, const video_format_t *p_fmt_src, mtime_t render_subtitle_date, mtime_t render_osd_date, bool ignore_osd ); - -/** - * It registers a new SPU channel. - */ -VLC_API int spu_RegisterChannel( spu_t * ); - -/** - * It clears all subpictures associated to a SPU channel. - */ -VLC_API void spu_ClearChannel( spu_t *, int ); - -/** - * It changes the sub sources list - */ -VLC_API void spu_ChangeSources( spu_t *, const char * ); - -/** - * It changes the sub filters list - */ -VLC_API void spu_ChangeFilters( spu_t *, const char * ); - -/** @}*/ - -#ifdef __cplusplus -} -#endif - -#endif /* VLC_SPU_H */ - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_stream.h b/source/vlc/cpp/include/vlc/plugins/vlc_stream.h deleted file mode 100644 index 9c86df0ce..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_stream.h +++ /dev/null @@ -1,231 +0,0 @@ -/***************************************************************************** - * vlc_stream.h: Stream (between access and demux) descriptor and methods - ***************************************************************************** - * Copyright (C) 1999-2004 VLC authors and VideoLAN - * $Id: f77a843dc28d2731404f1d8d2dafc71c095bbea6 $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_STREAM_H -#define VLC_STREAM_H 1 - -#include - -/** - * \file - * This file defines structures and functions for stream (between access and demux) descriptor in vlc - */ - -# ifdef __cplusplus -extern "C" { -# endif - -/** - * \defgroup stream Stream - * - * This will allow you to easily handle read/seek in demuxer modules. - * @{ - */ - -/* Opaque definition for text reader context */ -typedef struct stream_text_t stream_text_t; - -/** - * stream_t definition - */ - -struct stream_t -{ - VLC_COMMON_MEMBERS - bool b_error; - - /* Module properties for stream filter */ - module_t *p_module; - - char *psz_access; - /* Real or virtual path (it can only be changed during stream_t opening) */ - char *psz_path; - - /* Stream source for stream filter */ - stream_t *p_source; - - /* */ - int (*pf_read) ( stream_t *, void *p_read, unsigned int i_read ); - int (*pf_peek) ( stream_t *, const uint8_t **pp_peek, unsigned int i_peek ); - int (*pf_control)( stream_t *, int i_query, va_list ); - - /* */ - void (*pf_destroy)( stream_t *); - - /* Private data for module */ - stream_sys_t *p_sys; - - /* Text reader state */ - stream_text_t *p_text; - - /* Weak link to parent input */ - input_thread_t *p_input; -}; - -/** - * Possible commands to send to stream_Control() and stream_vaControl() - */ -enum stream_query_e -{ - /* capabilities */ - STREAM_CAN_SEEK, /**< arg1= bool * res=cannot fail*/ - STREAM_CAN_FASTSEEK, /**< arg1= bool * res=cannot fail*/ - STREAM_CAN_PAUSE, /**< arg1= bool * res=cannot fail*/ - STREAM_CAN_CONTROL_PACE, /**< arg1= bool * res=cannot fail*/ - - /* */ - STREAM_SET_POSITION, /**< arg1= uint64_t res=can fail */ - STREAM_GET_POSITION, /**< arg1= uint64_t * res=cannot fail*/ - - STREAM_GET_SIZE, /**< arg1= uint64_t * res=cannot fail (0 if no sense)*/ - - /* Special for direct access control from demuxer. - * XXX: avoid using it by all means */ - STREAM_CONTROL_ACCESS, /* arg1= int i_access_query, args res: can fail - if access unreachable or access control answer */ - - /* You should update size of source if any and then update size - * FIXME find a way to avoid it */ - STREAM_UPDATE_SIZE, - - /* */ - STREAM_GET_TITLE_INFO = 0x102, /**< arg1=input_title_t*** arg2=int* res=can fail */ - STREAM_GET_META, /**< arg1= vlc_meta_t ** res=can fail */ - STREAM_GET_CONTENT_TYPE, /**< arg1= char ** res=can fail */ - STREAM_GET_SIGNAL, /**< arg1=double *pf_quality, arg2=double *pf_strength res=can fail */ - - STREAM_SET_PAUSE_STATE = 0x200, /**< arg1= bool res=can fail */ - STREAM_SET_TITLE, /**< arg1= int res=can fail */ - STREAM_SET_SEEKPOINT, /**< arg1= int res=can fail */ - - /* XXX only data read through stream_Read/Block will be recorded */ - STREAM_SET_RECORD_STATE, /**< arg1=bool, arg2=const char *psz_ext (if arg1 is true) res=can fail */ -}; - -VLC_API int stream_Read( stream_t *s, void *p_read, int i_read ); -VLC_API int stream_Peek( stream_t *s, const uint8_t **pp_peek, int i_peek ); -VLC_API int stream_vaControl( stream_t *s, int i_query, va_list args ); -VLC_API void stream_Delete( stream_t *s ); -VLC_API int stream_Control( stream_t *s, int i_query, ... ); -VLC_API block_t * stream_Block( stream_t *s, int i_size ); -VLC_API block_t * stream_BlockRemaining( stream_t *s, int i_max_size ); -VLC_API char * stream_ReadLine( stream_t * ); - -/** - * Get the current position in a stream - */ -static inline int64_t stream_Tell( stream_t *s ) -{ - uint64_t i_pos; - stream_Control( s, STREAM_GET_POSITION, &i_pos ); - if( i_pos >> 62 ) - return (int64_t)1 << 62; - return i_pos; -} - -/** - * Get the size of the stream. - */ -static inline int64_t stream_Size( stream_t *s ) -{ - uint64_t i_pos; - stream_Control( s, STREAM_GET_SIZE, &i_pos ); - if( i_pos >> 62 ) - return (int64_t)1 << 62; - return i_pos; -} - -static inline int stream_Seek( stream_t *s, uint64_t i_pos ) -{ - return stream_Control( s, STREAM_SET_POSITION, i_pos ); -} - -/** - * Get the Content-Type of a stream, or NULL if unknown. - * Result must be free()'d. - */ -static inline char *stream_ContentType( stream_t *s ) -{ - char *res; - if( stream_Control( s, STREAM_GET_CONTENT_TYPE, &res ) ) - return NULL; - return res; -} - -/** - * Create a special stream and a demuxer, this allows chaining demuxers - * You must delete it using stream_Delete. - */ -VLC_API stream_t * stream_DemuxNew( demux_t *p_demux, const char *psz_demux, es_out_t *out ); - -/** - * Send data to a stream handle created by stream_DemuxNew(). - */ -VLC_API void stream_DemuxSend( stream_t *s, block_t *p_block ); - -/** - * Perform a demux (i.e. DEMUX_...) control request on a stream handle - * created by stream_DemuxNew(). - */ -VLC_API int stream_DemuxControlVa( stream_t *s, int, va_list ); - -static inline int stream_DemuxControl( stream_t *s, int query, ... ) -{ - va_list ap; - int ret; - - va_start( ap, query ); - ret = stream_DemuxControlVa( s, query, ap ); - va_end( ap ); - return ret; -} - -/** - * Create a stream_t reading from memory. - * You must delete it using stream_Delete. - */ -VLC_API stream_t * stream_MemoryNew(vlc_object_t *p_obj, uint8_t *p_buffer, uint64_t i_size, bool b_preserve_memory ); -#define stream_MemoryNew( a, b, c, d ) stream_MemoryNew( VLC_OBJECT(a), b, c, d ) - -/** - * Create a stream_t reading from a URL. - * You must delete it using stream_Delete. - */ -VLC_API stream_t * stream_UrlNew(vlc_object_t *p_this, const char *psz_url ); -#define stream_UrlNew( a, b ) stream_UrlNew( VLC_OBJECT(a), b ) - - -/** - * Try to add a stream filter to an open stream. - * @return New stream to use, or NULL if the filter could not be added. - **/ -VLC_API stream_t* stream_FilterNew( stream_t *p_source, const char *psz_stream_filter ); -/** - * @} - */ - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_strings.h b/source/vlc/cpp/include/vlc/plugins/vlc_strings.h deleted file mode 100644 index 3160b1cf8..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_strings.h +++ /dev/null @@ -1,67 +0,0 @@ -/***************************************************************************** - * vlc_strings.h: String functions - ***************************************************************************** - * Copyright (C) 2006 VLC authors and VideoLAN - * $Id: 91592826f20551b2a5cf6f661ad437acded65d0d $ - * - * Authors: Antoine Cellerier - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_STRINGS_H -#define VLC_STRINGS_H 1 - -/** - * \file - * This file defines functions and structures handling misc strings - */ - -/** - * \defgroup strings Strings - * @{ - */ - -VLC_API void resolve_xml_special_chars( char *psz_value ); -VLC_API char * convert_xml_special_chars( const char *psz_content ); - -VLC_API char * vlc_b64_encode_binary( const uint8_t *, size_t ); -VLC_API char * vlc_b64_encode( const char * ); - -VLC_API size_t vlc_b64_decode_binary_to_buffer( uint8_t *p_dst, size_t i_dst_max, const char *psz_src ); -VLC_API size_t vlc_b64_decode_binary( uint8_t **pp_dst, const char *psz_src ); -VLC_API char * vlc_b64_decode( const char *psz_src ); - -VLC_API char * str_format_time( const char * ); -VLC_API char * str_format_meta( playlist_t *, const char * ); - -static inline char *str_format( playlist_t *pl, const char *fmt ) -{ - char *s1 = str_format_time( fmt ); - char *s2 = str_format_meta( pl, s1 ); - free( s1 ); - return s2; -} - -VLC_API void filename_sanitize( char * ); -VLC_API void path_sanitize( char * ); - -VLC_API time_t str_duration( const char * ); - -/** - * @} - */ - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_subpicture.h b/source/vlc/cpp/include/vlc/plugins/vlc_subpicture.h deleted file mode 100644 index 8d78bb46e..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_subpicture.h +++ /dev/null @@ -1,208 +0,0 @@ -/***************************************************************************** - * vlc_subpicture.h: subpicture definitions - ***************************************************************************** - * Copyright (C) 1999 - 2009 VLC authors and VideoLAN - * $Id: 6bfede171002b78b80c7635e87fdd51ea7d15ea4 $ - * - * Authors: Vincent Seguin - * Samuel Hocevar - * Olivier Aubert - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_SUBPICTURE_H -#define VLC_SUBPICTURE_H 1 - -/** - * \file - * This file defines subpicture structures and functions in vlc - */ - -#include -#include - -/** - * \defgroup subpicture Video Subpictures - * Subpictures are pictures that should be displayed on top of the video, like - * subtitles and OSD - * \ingroup video_output - * @{ - */ - -/** - * Video subtitle region spu core private - */ -typedef struct subpicture_region_private_t subpicture_region_private_t; - -/** - * Video subtitle region - * - * A subtitle region is defined by a picture (graphic) and its rendering - * coordinates. - * Subtitles contain a list of regions. - */ -struct subpicture_region_t -{ - video_format_t fmt; /**< format of the picture */ - picture_t *p_picture; /**< picture comprising this region */ - - int i_x; /**< position of region */ - int i_y; /**< position of region */ - int i_align; /**< alignment within a region */ - int i_alpha; /**< transparency */ - - char *psz_text; /**< text string comprising this region */ - char *psz_html; /**< HTML version of subtitle (NULL = use psz_text) */ - text_style_t *p_style; /**< a description of the text style formatting */ - bool b_renderbg; /**< render black background under text */ - - subpicture_region_t *p_next; /**< next region in the list */ - subpicture_region_private_t *p_private; /**< Private data for spu_t *only* */ -}; - -/* Subpicture region position flags */ -#define SUBPICTURE_ALIGN_LEFT 0x1 -#define SUBPICTURE_ALIGN_RIGHT 0x2 -#define SUBPICTURE_ALIGN_TOP 0x4 -#define SUBPICTURE_ALIGN_BOTTOM 0x8 -#define SUBPICTURE_ALIGN_LEAVETEXT 0x10 /**< Align the subpicture, but not the text inside */ -#define SUBPICTURE_ALIGN_MASK ( SUBPICTURE_ALIGN_LEFT|SUBPICTURE_ALIGN_RIGHT| \ - SUBPICTURE_ALIGN_TOP |SUBPICTURE_ALIGN_BOTTOM| \ - SUBPICTURE_ALIGN_LEAVETEXT ) -/** - * This function will create a new subpicture region. - * - * You must use subpicture_region_Delete to destroy it. - */ -VLC_API subpicture_region_t * subpicture_region_New( const video_format_t *p_fmt ); - -/** - * This function will destroy a subpicture region allocated by - * subpicture_region_New. - * - * You may give it NULL. - */ -VLC_API void subpicture_region_Delete( subpicture_region_t *p_region ); - -/** - * This function will destroy a list of subpicture regions allocated by - * subpicture_region_New. - * - * Provided for convenience. - */ -VLC_API void subpicture_region_ChainDelete( subpicture_region_t *p_head ); - -/** - * - */ -typedef struct subpicture_updater_sys_t subpicture_updater_sys_t; -typedef struct -{ - int (*pf_validate)( subpicture_t *, - bool has_src_changed, const video_format_t *p_fmt_src, - bool has_dst_changed, const video_format_t *p_fmt_dst, - mtime_t); - void (*pf_update) ( subpicture_t *, - const video_format_t *p_fmt_src, - const video_format_t *p_fmt_dst, - mtime_t ); - void (*pf_destroy) ( subpicture_t * ); - subpicture_updater_sys_t *p_sys; -} subpicture_updater_t; - -typedef struct subpicture_private_t subpicture_private_t; - -/** - * Video subtitle - * - * Any subtitle destined to be displayed by a video output thread should - * be stored in this structure from it's creation to it's effective display. - * Subtitle type and flags should only be modified by the output thread. Note - * that an empty subtitle MUST have its flags set to 0. - */ -struct subpicture_t -{ - /** \name Channel ID */ - /**@{*/ - int i_channel; /**< subpicture channel ID */ - /**@}*/ - - /** \name Type and flags - Should NOT be modified except by the vout thread */ - /**@{*/ - int64_t i_order; /** an increasing unique number */ - subpicture_t * p_next; /**< next subtitle to be displayed */ - /**@}*/ - - subpicture_region_t *p_region; /**< region list composing this subtitle */ - - /** \name Date properties */ - /**@{*/ - mtime_t i_start; /**< beginning of display date */ - mtime_t i_stop; /**< end of display date */ - bool b_ephemer; /**< If this flag is set to true the subtitle - will be displayed untill the next one appear */ - bool b_fade; /**< enable fading */ - /**@}*/ - - /** \name Display properties - * These properties are only indicative and may be - * changed by the video output thread, or simply ignored depending of the - * subtitle type. */ - /**@{*/ - bool b_subtitle; /**< the picture is a movie subtitle */ - bool b_absolute; /**< position is absolute */ - int i_original_picture_width; /**< original width of the movie */ - int i_original_picture_height;/**< original height of the movie */ - int i_alpha; /**< transparency */ - /**@}*/ - - subpicture_updater_t updater; - - subpicture_private_t *p_private; /* Reserved to the core */ -}; - -/** - * This function create a new empty subpicture. - * - * You must use subpicture_Delete to destroy it. - */ -VLC_API subpicture_t * subpicture_New( const subpicture_updater_t * ); - -/** - * This function delete a subpicture created by subpicture_New. - * You may give it NULL. - */ -VLC_API void subpicture_Delete( subpicture_t *p_subpic ); - -/** - * This function will create a subpicture having one region in the requested - * chroma showing the given picture. - * - * The picture_t given is not released nor used inside the - * returned subpicture_t. - */ -VLC_API subpicture_t * subpicture_NewFromPicture( vlc_object_t *, picture_t *, vlc_fourcc_t i_chroma ); - -/** - * This function will update the content of a subpicture created with - * a non NULL subpicture_updater_t. - */ -VLC_API void subpicture_Update( subpicture_t *, const video_format_t *src, const video_format_t *, mtime_t ); - -/**@}*/ - -#endif /* _VLC_VIDEO_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_text_style.h b/source/vlc/cpp/include/vlc/plugins/vlc_text_style.h deleted file mode 100644 index f39cdcda2..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_text_style.h +++ /dev/null @@ -1,104 +0,0 @@ -/***************************************************************************** - * vlc_text_style.h: text_style_t definition and helpers. - ***************************************************************************** - * Copyright (C) 1999-2010 VLC authors and VideoLAN - * $Id: 531411ae607308ad632cd90c63bd70756ebb51df $ - * - * Authors: Derk-Jan Hartman - * basOS G - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_TEXT_STYLE_H -#define VLC_TEXT_STYLE_H 1 - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Text style - * - * A text style is used to specify the formatting of text. - * A font renderer can use the supplied information to render the - * text specified. - */ -typedef struct -{ - char * psz_fontname; /**< The name of the font */ - int i_font_size; /**< The font size in pixels */ - int i_font_color; /**< The color of the text 0xRRGGBB - (native endianness) */ - int i_font_alpha; /**< The transparency of the text. - 0x00 is fully opaque, - 0xFF fully transparent */ - int i_style_flags; /**< Formatting style flags */ - int i_outline_color; /**< The color of the outline 0xRRGGBB */ - int i_outline_alpha; /**< The transparency of the outline. - 0x00 is fully opaque, - 0xFF fully transparent */ - int i_shadow_color; /**< The color of the shadow 0xRRGGBB */ - int i_shadow_alpha; /**< The transparency of the shadow. - 0x00 is fully opaque, - 0xFF fully transparent */ - int i_background_color;/**< The color of the background 0xRRGGBB */ - int i_background_alpha;/**< The transparency of the background. - 0x00 is fully opaque, - 0xFF fully transparent */ - int i_karaoke_background_color;/**< Background color for karaoke 0xRRGGBB */ - int i_karaoke_background_alpha;/**< The transparency of the karaoke bg. - 0x00 is fully opaque, - 0xFF fully transparent */ - int i_outline_width; /**< The width of the outline in pixels */ - int i_shadow_width; /**< The width of the shadow in pixels */ - int i_spacing; /**< The spaceing between glyphs in pixels */ -} text_style_t; - -/* Style flags for \ref text_style_t */ -#define STYLE_BOLD 1 -#define STYLE_ITALIC 2 -#define STYLE_OUTLINE 4 -#define STYLE_SHADOW 8 -#define STYLE_BACKGROUND 16 -#define STYLE_UNDERLINE 32 -#define STYLE_STRIKEOUT 64 - -/** - * Create a default text style - */ -VLC_API text_style_t * text_style_New( void ); - -/** - * Copy a text style into another - */ -VLC_API text_style_t * text_style_Copy( text_style_t *, const text_style_t * ); - -/** - * Duplicate a text style - */ -VLC_API text_style_t * text_style_Duplicate( const text_style_t * ); - -/** - * Delete a text style created by text_style_New or text_style_Duplicate - */ -VLC_API void text_style_Delete( text_style_t * ); - -#ifdef __cplusplus -} -#endif - -#endif /* VLC_TEXT_STYLE_H */ - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_threads.h b/source/vlc/cpp/include/vlc/plugins/vlc_threads.h deleted file mode 100644 index 1ffbae679..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_threads.h +++ /dev/null @@ -1,460 +0,0 @@ -/***************************************************************************** - * vlc_threads.h : threads implementation for the VideoLAN client - * This header provides portable declarations for mutexes & conditions - ***************************************************************************** - * Copyright (C) 1999, 2002 VLC authors and VideoLAN - * Copyright © 2007-2008 Rémi Denis-Courmont - * - * Authors: Jean-Marc Dressler - * Samuel Hocevar - * Gildas Bazin - * Christophe Massiot - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_THREADS_H_ -#define VLC_THREADS_H_ - -/** - * \file - * This file defines structures and functions for handling threads in vlc - * - */ - -#if defined (_WIN32) -# include -# ifndef ETIMEDOUT -# define ETIMEDOUT 10060 /* This is the value in winsock.h. */ -# endif - -typedef struct vlc_thread *vlc_thread_t; -typedef struct -{ - bool dynamic; - union - { - struct - { - bool locked; - unsigned long contention; - }; - CRITICAL_SECTION mutex; - }; -} vlc_mutex_t; -#define VLC_STATIC_MUTEX { false, { { false, 0 } } } -typedef struct -{ - HANDLE handle; - unsigned clock; -} vlc_cond_t; -#define VLC_STATIC_COND { 0, 0 } -typedef HANDLE vlc_sem_t; -#define LIBVLC_NEED_RWLOCK -typedef struct vlc_threadvar *vlc_threadvar_t; -typedef struct vlc_timer *vlc_timer_t; - -# define VLC_THREAD_PRIORITY_LOW 0 -# define VLC_THREAD_PRIORITY_INPUT THREAD_PRIORITY_ABOVE_NORMAL -# define VLC_THREAD_PRIORITY_AUDIO THREAD_PRIORITY_HIGHEST -# define VLC_THREAD_PRIORITY_VIDEO 0 -# define VLC_THREAD_PRIORITY_OUTPUT THREAD_PRIORITY_ABOVE_NORMAL -# define VLC_THREAD_PRIORITY_HIGHEST THREAD_PRIORITY_TIME_CRITICAL - -#elif defined (__OS2__) -# include - -typedef struct vlc_thread *vlc_thread_t; -typedef struct -{ - bool dynamic; - union - { - struct - { - bool locked; - unsigned long contention; - }; - HMTX hmtx; - }; -} vlc_mutex_t; -#define VLC_STATIC_MUTEX { false, { { false, 0 } } } -typedef struct -{ - HEV hev; - unsigned clock; -} vlc_cond_t; -#define VLC_STATIC_COND { 0, 0 } -#define LIBVLC_NEED_SEMAPHORE -#define LIBVLC_NEED_RWLOCK -typedef struct vlc_threadvar *vlc_threadvar_t; -typedef struct vlc_timer *vlc_timer_t; - -# define VLC_THREAD_PRIORITY_LOW 0 -# define VLC_THREAD_PRIORITY_INPUT \ - MAKESHORT(PRTYD_MAXIMUM / 2, PRTYC_REGULAR) -# define VLC_THREAD_PRIORITY_AUDIO MAKESHORT(PRTYD_MAXIMUM, PRTYC_REGULAR) -# define VLC_THREAD_PRIORITY_VIDEO 0 -# define VLC_THREAD_PRIORITY_OUTPUT \ - MAKESHORT(PRTYD_MAXIMUM / 2, PRTYC_REGULAR) -# define VLC_THREAD_PRIORITY_HIGHEST MAKESHORT(0, PRTYC_TIMECRITICAL) - -# define pthread_sigmask sigprocmask - -#elif defined (__ANDROID__) /* pthreads subset without pthread_cancel() */ -# include -# include -# include -# define LIBVLC_USE_PTHREAD_CLEANUP 1 -# define LIBVLC_NEED_SEMAPHORE -# define LIBVLC_NEED_RWLOCK - -typedef struct vlc_thread *vlc_thread_t; -typedef pthread_mutex_t vlc_mutex_t; -#define VLC_STATIC_MUTEX PTHREAD_MUTEX_INITIALIZER -typedef struct -{ - pthread_cond_t cond; - unsigned clock; -} vlc_cond_t; -#define VLC_STATIC_COND { PTHREAD_COND_INITIALIZER, CLOCK_REALTIME } - -typedef pthread_key_t vlc_threadvar_t; -typedef struct vlc_timer *vlc_timer_t; - -# define VLC_THREAD_PRIORITY_LOW 0 -# define VLC_THREAD_PRIORITY_INPUT 0 -# define VLC_THREAD_PRIORITY_AUDIO 0 -# define VLC_THREAD_PRIORITY_VIDEO 0 -# define VLC_THREAD_PRIORITY_OUTPUT 0 -# define VLC_THREAD_PRIORITY_HIGHEST 0 - -#elif defined (__APPLE__) -# define _APPLE_C_SOURCE 1 /* Proper pthread semantics on OSX */ -# include -# include -/* Unnamed POSIX semaphores not supported on Mac OS X */ -# include -# include -# define LIBVLC_USE_PTHREAD 1 -# define LIBVLC_USE_PTHREAD_CLEANUP 1 -# define LIBVLC_USE_PTHREAD_CANCEL 1 - -typedef pthread_t vlc_thread_t; -typedef pthread_mutex_t vlc_mutex_t; -#define VLC_STATIC_MUTEX PTHREAD_MUTEX_INITIALIZER -typedef pthread_cond_t vlc_cond_t; -#define VLC_STATIC_COND PTHREAD_COND_INITIALIZER -typedef semaphore_t vlc_sem_t; -typedef pthread_rwlock_t vlc_rwlock_t; -#define VLC_STATIC_RWLOCK PTHREAD_RWLOCK_INITIALIZER -typedef pthread_key_t vlc_threadvar_t; -typedef struct vlc_timer *vlc_timer_t; - -# define VLC_THREAD_PRIORITY_LOW 0 -# define VLC_THREAD_PRIORITY_INPUT 22 -# define VLC_THREAD_PRIORITY_AUDIO 22 -# define VLC_THREAD_PRIORITY_VIDEO 0 -# define VLC_THREAD_PRIORITY_OUTPUT 22 -# define VLC_THREAD_PRIORITY_HIGHEST 22 - -#else /* POSIX threads */ -# include /* _POSIX_SPIN_LOCKS */ -# include -# include -# define LIBVLC_USE_PTHREAD 1 -# define LIBVLC_USE_PTHREAD_CLEANUP 1 -# define LIBVLC_USE_PTHREAD_CANCEL 1 - -typedef pthread_t vlc_thread_t; -typedef pthread_mutex_t vlc_mutex_t; -#define VLC_STATIC_MUTEX PTHREAD_MUTEX_INITIALIZER -typedef pthread_cond_t vlc_cond_t; -#define VLC_STATIC_COND PTHREAD_COND_INITIALIZER -typedef sem_t vlc_sem_t; -typedef pthread_rwlock_t vlc_rwlock_t; -#define VLC_STATIC_RWLOCK PTHREAD_RWLOCK_INITIALIZER -typedef pthread_key_t vlc_threadvar_t; -typedef struct vlc_timer *vlc_timer_t; - -# define VLC_THREAD_PRIORITY_LOW 0 -# define VLC_THREAD_PRIORITY_INPUT 10 -# define VLC_THREAD_PRIORITY_AUDIO 5 -# define VLC_THREAD_PRIORITY_VIDEO 0 -# define VLC_THREAD_PRIORITY_OUTPUT 15 -# define VLC_THREAD_PRIORITY_HIGHEST 20 - -#endif - -#ifdef LIBVLC_NEED_SEMAPHORE -typedef struct vlc_sem -{ - vlc_mutex_t lock; - vlc_cond_t wait; - unsigned value; -} vlc_sem_t; -#endif - -#ifdef LIBVLC_NEED_RWLOCK -typedef struct vlc_rwlock -{ - vlc_mutex_t mutex; - vlc_cond_t wait; - long state; -} vlc_rwlock_t; -# define VLC_STATIC_RWLOCK { VLC_STATIC_MUTEX, VLC_STATIC_COND, 0 } -#endif - -/***************************************************************************** - * Function definitions - *****************************************************************************/ -VLC_API void vlc_mutex_init( vlc_mutex_t * ); -VLC_API void vlc_mutex_init_recursive( vlc_mutex_t * ); -VLC_API void vlc_mutex_destroy( vlc_mutex_t * ); -VLC_API void vlc_mutex_lock( vlc_mutex_t * ); -VLC_API int vlc_mutex_trylock( vlc_mutex_t * ) VLC_USED; -VLC_API void vlc_mutex_unlock( vlc_mutex_t * ); -VLC_API void vlc_cond_init( vlc_cond_t * ); -VLC_API void vlc_cond_init_daytime( vlc_cond_t * ); -VLC_API void vlc_cond_destroy( vlc_cond_t * ); -VLC_API void vlc_cond_signal(vlc_cond_t *); -VLC_API void vlc_cond_broadcast(vlc_cond_t *); -VLC_API void vlc_cond_wait(vlc_cond_t *, vlc_mutex_t *); -VLC_API int vlc_cond_timedwait(vlc_cond_t *, vlc_mutex_t *, mtime_t); -VLC_API void vlc_sem_init(vlc_sem_t *, unsigned); -VLC_API void vlc_sem_destroy(vlc_sem_t *); -VLC_API int vlc_sem_post(vlc_sem_t *); -VLC_API void vlc_sem_wait(vlc_sem_t *); - -VLC_API void vlc_rwlock_init(vlc_rwlock_t *); -VLC_API void vlc_rwlock_destroy(vlc_rwlock_t *); -VLC_API void vlc_rwlock_rdlock(vlc_rwlock_t *); -VLC_API void vlc_rwlock_wrlock(vlc_rwlock_t *); -VLC_API void vlc_rwlock_unlock(vlc_rwlock_t *); -VLC_API int vlc_threadvar_create(vlc_threadvar_t * , void (*) (void *) ); -VLC_API void vlc_threadvar_delete(vlc_threadvar_t *); -VLC_API int vlc_threadvar_set(vlc_threadvar_t, void *); -VLC_API void * vlc_threadvar_get(vlc_threadvar_t); - -VLC_API int vlc_clone(vlc_thread_t *, void * (*) (void *), void *, int) VLC_USED; -VLC_API void vlc_cancel(vlc_thread_t); -VLC_API void vlc_join(vlc_thread_t, void **); -VLC_API void vlc_control_cancel (int cmd, ...); - -VLC_API mtime_t mdate(void); -VLC_API void mwait(mtime_t deadline); -VLC_API void msleep(mtime_t delay); - -#define VLC_HARD_MIN_SLEEP 10000 /* 10 milliseconds = 1 tick at 100Hz */ -#define VLC_SOFT_MIN_SLEEP 9000000 /* 9 seconds */ - -#if VLC_GCC_VERSION(4,3) -/* Linux has 100, 250, 300 or 1000Hz - * - * HZ=100 by default on FreeBSD, but some architectures use a 1000Hz timer - */ - -static -__attribute__((unused)) -__attribute__((noinline)) -__attribute__((error("sorry, cannot sleep for such short a time"))) -mtime_t impossible_delay( mtime_t delay ) -{ - (void) delay; - return VLC_HARD_MIN_SLEEP; -} - -static -__attribute__((unused)) -__attribute__((noinline)) -__attribute__((warning("use proper event handling instead of short delay"))) -mtime_t harmful_delay( mtime_t delay ) -{ - return delay; -} - -# define check_delay( d ) \ - ((__builtin_constant_p(d < VLC_HARD_MIN_SLEEP) \ - && (d < VLC_HARD_MIN_SLEEP)) \ - ? impossible_delay(d) \ - : ((__builtin_constant_p(d < VLC_SOFT_MIN_SLEEP) \ - && (d < VLC_SOFT_MIN_SLEEP)) \ - ? harmful_delay(d) \ - : d)) - -static -__attribute__((unused)) -__attribute__((noinline)) -__attribute__((error("deadlines can not be constant"))) -mtime_t impossible_deadline( mtime_t deadline ) -{ - return deadline; -} - -# define check_deadline( d ) \ - (__builtin_constant_p(d) ? impossible_deadline(d) : d) -#else -# define check_delay(d) (d) -# define check_deadline(d) (d) -#endif - -#define msleep(d) msleep(check_delay(d)) -#define mwait(d) mwait(check_deadline(d)) - -VLC_API int vlc_timer_create(vlc_timer_t *, void (*) (void *), void *) VLC_USED; -VLC_API void vlc_timer_destroy(vlc_timer_t); -VLC_API void vlc_timer_schedule(vlc_timer_t, bool, mtime_t, mtime_t); -VLC_API unsigned vlc_timer_getoverrun(vlc_timer_t) VLC_USED; - -VLC_API unsigned vlc_GetCPUCount(void); - -VLC_API int vlc_savecancel(void); -VLC_API void vlc_restorecancel(int state); -VLC_API void vlc_testcancel(void); - -#if defined (LIBVLC_USE_PTHREAD_CLEANUP) -/** - * Registers a new procedure to run if the thread is cancelled (or otherwise - * exits prematurely). Any call to vlc_cleanup_push() must paired with a - * call to either vlc_cleanup_pop() or vlc_cleanup_run(). Branching into or out - * of the block between these two function calls is not allowed (read: it will - * likely crash the whole process). If multiple procedures are registered, - * they are handled in last-in first-out order. - * - * @param routine procedure to call if the thread ends - * @param arg argument for the procedure - */ -# define vlc_cleanup_push( routine, arg ) pthread_cleanup_push (routine, arg) - -/** - * Removes a cleanup procedure that was previously registered with - * vlc_cleanup_push(). - */ -# define vlc_cleanup_pop( ) pthread_cleanup_pop (0) - -/** - * Removes a cleanup procedure that was previously registered with - * vlc_cleanup_push(), and executes it. - */ -# define vlc_cleanup_run( ) pthread_cleanup_pop (1) - -#else -enum -{ - VLC_CLEANUP_PUSH, - VLC_CLEANUP_POP, -}; -typedef struct vlc_cleanup_t vlc_cleanup_t; - -struct vlc_cleanup_t -{ - vlc_cleanup_t *next; - void (*proc) (void *); - void *data; -}; - -/* This macros opens a code block on purpose. This is needed for multiple - * calls within a single function. This also prevent Win32 developers from - * writing code that would break on POSIX (POSIX opens a block as well). */ -# define vlc_cleanup_push( routine, arg ) \ - do { \ - vlc_cleanup_t vlc_cleanup_data = { NULL, routine, arg, }; \ - vlc_control_cancel (VLC_CLEANUP_PUSH, &vlc_cleanup_data) - -# define vlc_cleanup_pop( ) \ - vlc_control_cancel (VLC_CLEANUP_POP); \ - } while (0) - -# define vlc_cleanup_run( ) \ - vlc_control_cancel (VLC_CLEANUP_POP); \ - vlc_cleanup_data.proc (vlc_cleanup_data.data); \ - } while (0) - -#endif /* !LIBVLC_USE_PTHREAD_CLEANUO */ - -#ifndef LIBVLC_USE_PTHREAD_CANCEL -/* poll() with cancellation */ -# ifdef __OS2__ -int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout); -# else -static inline int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout) -{ - int val; - - do - { - int ugly_timeout = ((unsigned)timeout >= 50) ? 50 : timeout; - if (timeout >= 0) - timeout -= ugly_timeout; - - vlc_testcancel (); - val = poll (fds, nfds, ugly_timeout); - } - while (val == 0 && timeout != 0); - - return val; -} -# endif - -# define poll(u,n,t) vlc_poll(u, n, t) - -#endif /* LIBVLC_USE_PTHREAD_CANCEL */ - -static inline void vlc_cleanup_lock (void *lock) -{ - vlc_mutex_unlock ((vlc_mutex_t *)lock); -} -#define mutex_cleanup_push( lock ) vlc_cleanup_push (vlc_cleanup_lock, lock) - -#ifdef __cplusplus -/** - * Helper C++ class to lock a mutex. - * The mutex is locked when the object is created, and unlocked when the object - * is destroyed. - */ -class vlc_mutex_locker -{ - private: - vlc_mutex_t *lock; - public: - vlc_mutex_locker (vlc_mutex_t *m) : lock (m) - { - vlc_mutex_lock (lock); - } - - ~vlc_mutex_locker (void) - { - vlc_mutex_unlock (lock); - } -}; -#endif - -enum -{ - VLC_AVCODEC_MUTEX = 0, - VLC_GCRYPT_MUTEX, - VLC_XLIB_MUTEX, - VLC_MOSAIC_MUTEX, - VLC_HIGHLIGHT_MUTEX, - VLC_ATOMIC_MUTEX, - /* Insert new entry HERE */ - VLC_MAX_MUTEX -}; - -VLC_API void vlc_global_mutex( unsigned, bool ); -#define vlc_global_lock( n ) vlc_global_mutex( n, true ) -#define vlc_global_unlock( n ) vlc_global_mutex( n, false ) - -#endif /* !_VLC_THREADS_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_tls.h b/source/vlc/cpp/include/vlc/plugins/vlc_tls.h deleted file mode 100644 index e9db9cc4c..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_tls.h +++ /dev/null @@ -1,82 +0,0 @@ -/***************************************************************************** - * vlc_tls.h: Transport Layer Security API - ***************************************************************************** - * Copyright (C) 2004-2011 Rémi Denis-Courmont - * Copyright (C) 2005-2006 VLC authors and VideoLAN - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_TLS_H -# define VLC_TLS_H - -/** - * \file - * This file defines Transport Layer Security API (TLS) in vlc - */ - -# include - -typedef struct vlc_tls vlc_tls_t; -typedef struct vlc_tls_sys vlc_tls_sys_t; -typedef struct vlc_tls_creds vlc_tls_creds_t; -typedef struct vlc_tls_creds_sys vlc_tls_creds_sys_t; - -/** TLS session */ -struct vlc_tls -{ - VLC_COMMON_MEMBERS - - vlc_tls_sys_t *sys; - - struct virtual_socket_t sock; - int (*handshake) (vlc_tls_t *, const char *host, const char *service); -}; - -VLC_API vlc_tls_t *vlc_tls_ClientSessionCreate (vlc_tls_creds_t *, int fd, - const char *host, const char *service); -vlc_tls_t *vlc_tls_SessionCreate (vlc_tls_creds_t *, int fd, const char *host); -int vlc_tls_SessionHandshake (vlc_tls_t *, const char *host, const char *serv); -VLC_API void vlc_tls_SessionDelete (vlc_tls_t *); - -/* NOTE: It is assumed that a->sock.p_sys = a */ -# define tls_Send( a, b, c ) (((vlc_tls_t *)a)->sock.pf_send (a, b, c)) - -# define tls_Recv( a, b, c ) (((vlc_tls_t *)a)->sock.pf_recv (a, b, c)) - - -/** TLS credentials (certificate, private and trust settings) */ -struct vlc_tls_creds -{ - VLC_COMMON_MEMBERS - - module_t *module; - vlc_tls_creds_sys_t *sys; - - int (*add_CA) (vlc_tls_creds_t *, const char *path); - int (*add_CRL) (vlc_tls_creds_t *, const char *path); - - int (*open) (vlc_tls_creds_t *, vlc_tls_t *, int fd, const char *host); - void (*close) (vlc_tls_creds_t *, vlc_tls_t *); -}; - -VLC_API vlc_tls_creds_t *vlc_tls_ClientCreate (vlc_object_t *); -vlc_tls_creds_t *vlc_tls_ServerCreate (vlc_object_t *, - const char *cert, const char *key); -VLC_API void vlc_tls_Delete (vlc_tls_creds_t *); -int vlc_tls_ServerAddCA (vlc_tls_creds_t *srv, const char *path); -int vlc_tls_ServerAddCRL (vlc_tls_creds_t *srv, const char *path); - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_update.h b/source/vlc/cpp/include/vlc/plugins/vlc_update.h deleted file mode 100644 index 7972d3617..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_update.h +++ /dev/null @@ -1,70 +0,0 @@ -/***************************************************************************** - * vlc_update.h: VLC update download - ***************************************************************************** - * Copyright © 2005-2007 VLC authors and VideoLAN - * $Id: f7592212e7c5cc768e13ab835ad8132f92559fa4 $ - * - * Authors: Antoine Cellerier - * Rafaël Carré - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either release 2 of the License, or - * (at your option) any later release. - * - * 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_UPDATE_H -#define VLC_UPDATE_H - -/** - * \file - * This file defines update API in vlc - */ - -/** - * \defgroup update Update - * - * @{ - */ - -#ifdef UPDATE_CHECK - -/** - * Describes an update VLC release number - */ -struct update_release_t -{ - int i_major; ///< Version major - int i_minor; ///< Version minor - int i_revision; ///< Version revision - int i_extra; ///< Version extra - char* psz_url; ///< Download URL - char* psz_desc; ///< Release description -}; - -#endif /* UPDATE_CHECK */ - -typedef struct update_release_t update_release_t; - -VLC_API update_t * update_New( vlc_object_t * ); -#define update_New( a ) update_New( VLC_OBJECT( a ) ) -VLC_API void update_Delete( update_t * ); -VLC_API void update_Check( update_t *, void (*callback)( void*, bool ), void * ); -VLC_API bool update_NeedUpgrade( update_t * ); -VLC_API void update_Download( update_t *, const char* ); -VLC_API update_release_t* update_GetRelease( update_t * ); - -/** - * @} - */ - -#endif /* _VLC_UPDATE_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_url.h b/source/vlc/cpp/include/vlc/plugins/vlc_url.h deleted file mode 100644 index f548ef47f..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_url.h +++ /dev/null @@ -1,55 +0,0 @@ -/***************************************************************************** - * vlc_url.h: URL related macros - ***************************************************************************** - * Copyright (C) 2002-2006 VLC authors and VideoLAN - * $Id: 820250f963fbc31ff56ef1e866fe6bd020686ef0 $ - * - * Authors: Christophe Massiot - * Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_URL_H -# define VLC_URL_H - -/** - * \file - * This file defines functions for manipulating URL in vlc - */ - -VLC_API char *vlc_path2uri (const char *path, const char *scheme) VLC_MALLOC; - -struct vlc_url_t -{ - char *psz_protocol; - char *psz_username; - char *psz_password; - char *psz_host; - unsigned i_port; - char *psz_path; - char *psz_option; - - char *psz_buffer; /* to be freed */ -}; - -VLC_API char * decode_URI_duplicate( const char *psz ) VLC_MALLOC; -VLC_API char * decode_URI( char *psz ); -VLC_API char * encode_URI_component( const char *psz ) VLC_MALLOC; -VLC_API char * make_path( const char *url ) VLC_MALLOC; - -VLC_API void vlc_UrlParse (vlc_url_t *, const char *, unsigned char); -VLC_API void vlc_UrlClean (vlc_url_t *); -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_variables.h b/source/vlc/cpp/include/vlc/plugins/vlc_variables.h deleted file mode 100644 index 36a31d150..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_variables.h +++ /dev/null @@ -1,756 +0,0 @@ -/***************************************************************************** - * vlc_variables.h: variables handling - ***************************************************************************** - * Copyright (C) 2002-2004 VLC authors and VideoLAN - * $Id: 241185d2eb9a7314258ed8f523e607c7efcca600 $ - * - * Authors: Samuel Hocevar - * Gildas Bazin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_VARIABLES_H -#define VLC_VARIABLES_H 1 - -/** - * \file - * This file defines functions and structures for dynamic variables in vlc - */ - -/** - * \defgroup variables Variables - * - * Functions for using the object variables in vlc. - * - * Vlc have a very powerful "object variable" infrastructure useful - * for many things. - * - * @{ - */ - -#define VLC_VAR_TYPE 0x00ff -#define VLC_VAR_CLASS 0x00f0 -#define VLC_VAR_FLAGS 0xff00 - -/** - * \defgroup var_type Variable types - * These are the different types a vlc variable can have. - * @{ - */ -#define VLC_VAR_VOID 0x0010 -#define VLC_VAR_BOOL 0x0020 -#define VLC_VAR_INTEGER 0x0030 -#define VLC_VAR_HOTKEY 0x0031 -#define VLC_VAR_STRING 0x0040 -#define VLC_VAR_VARIABLE 0x0044 -#define VLC_VAR_FLOAT 0x0050 -#define VLC_VAR_TIME 0x0060 -#define VLC_VAR_ADDRESS 0x0070 -#define VLC_VAR_COORDS 0x00A0 -/**@}*/ - -/** \defgroup var_flags Additive flags - * These flags are added to the type field of the variable. Most as a result of - * a var_Change() call, but some may be added at creation time - * @{ - */ -#define VLC_VAR_HASCHOICE 0x0100 -#define VLC_VAR_HASMIN 0x0200 -#define VLC_VAR_HASMAX 0x0400 -#define VLC_VAR_HASSTEP 0x0800 - -#define VLC_VAR_ISCOMMAND 0x2000 - -/** Creation flag */ -/* If the variable is not found on the current module - search all parents and finally module config until found */ -#define VLC_VAR_DOINHERIT 0x8000 -/**@}*/ - -/** - * \defgroup var_action Variable actions - * These are the different actions that can be used with var_Change(). - * The parameters given are the meaning of the two last parameters of - * var_Change() when this action is being used. - * @{ - */ - -/** - * Set the minimum value of this variable - * \param p_val The new minimum value - * \param p_val2 Unused - */ -#define VLC_VAR_SETMIN 0x0010 -/** - * Set the maximum value of this variable - * \param p_val The new maximum value - * \param p_val2 Unused - */ -#define VLC_VAR_SETMAX 0x0011 -#define VLC_VAR_SETSTEP 0x0012 - -/** - * Set the value of this variable without triggering any callbacks - * \param p_val The new value - * \param p_val2 Unused - */ -#define VLC_VAR_SETVALUE 0x0013 - -#define VLC_VAR_SETTEXT 0x0014 -#define VLC_VAR_GETTEXT 0x0015 - -#define VLC_VAR_GETMIN 0x0016 -#define VLC_VAR_GETMAX 0x0017 -#define VLC_VAR_GETSTEP 0x0018 - -#define VLC_VAR_ADDCHOICE 0x0020 -#define VLC_VAR_DELCHOICE 0x0021 -#define VLC_VAR_CLEARCHOICES 0x0022 -#define VLC_VAR_SETDEFAULT 0x0023 -#define VLC_VAR_GETCHOICES 0x0024 -#define VLC_VAR_GETLIST 0x0025 -#define VLC_VAR_CHOICESCOUNT 0x0026 - -#define VLC_VAR_SETISCOMMAND 0x0040 -/**@}*/ - -/** \defgroup var_GetAndSet Variable actions - * These are the different actions that can be used with var_GetAndSet() - * @{ - */ -enum { - VLC_VAR_BOOL_TOGGLE, /**< Invert a boolean value (param ignored) */ - VLC_VAR_INTEGER_ADD, /**< Add parameter to an integer value */ - VLC_VAR_INTEGER_OR, /**< Binary OR over an integer bits field */ - VLC_VAR_INTEGER_NAND,/**< Binary NAND over an integer bits field */ -}; -/**@}*/ - -/***************************************************************************** - * Prototypes - *****************************************************************************/ -VLC_API int var_Create( vlc_object_t *, const char *, int ); -#define var_Create(a,b,c) var_Create( VLC_OBJECT(a), b, c ) - -VLC_API int var_Destroy( vlc_object_t *, const char * ); -#define var_Destroy(a,b) var_Destroy( VLC_OBJECT(a), b ) - -VLC_API int var_Change( vlc_object_t *, const char *, int, vlc_value_t *, vlc_value_t * ); -#define var_Change(a,b,c,d,e) var_Change( VLC_OBJECT(a), b, c, d, e ) - -VLC_API int var_Type( vlc_object_t *, const char * ) VLC_USED; -#define var_Type(a,b) var_Type( VLC_OBJECT(a), b ) - -VLC_API int var_Set( vlc_object_t *, const char *, vlc_value_t ); -#define var_Set(a,b,c) var_Set( VLC_OBJECT(a), b, c ) - -VLC_API int var_Get( vlc_object_t *, const char *, vlc_value_t * ); -#define var_Get(a,b,c) var_Get( VLC_OBJECT(a), b, c ) - -VLC_API int var_SetChecked( vlc_object_t *, const char *, int, vlc_value_t ); -#define var_SetChecked(o,n,t,v) var_SetChecked(VLC_OBJECT(o),n,t,v) -VLC_API int var_GetChecked( vlc_object_t *, const char *, int, vlc_value_t * ); -#define var_GetChecked(o,n,t,v) var_GetChecked(VLC_OBJECT(o),n,t,v) -VLC_API int var_GetAndSet( vlc_object_t *, const char *, int, vlc_value_t * ); - -VLC_API int var_Inherit( vlc_object_t *, const char *, int, vlc_value_t * ); - -VLC_API void var_FreeList( vlc_value_t *, vlc_value_t * ); - - -/***************************************************************************** - * Variable callbacks - ***************************************************************************** - * int MyCallback( vlc_object_t *p_this, - * char const *psz_variable, - * vlc_value_t oldvalue, - * vlc_value_t newvalue, - * void *p_data); - *****************************************************************************/ -VLC_API int var_AddCallback( vlc_object_t *, const char *, vlc_callback_t, void * ); -VLC_API int var_DelCallback( vlc_object_t *, const char *, vlc_callback_t, void * ); -VLC_API int var_TriggerCallback( vlc_object_t *, const char * ); - -#define var_AddCallback(a,b,c,d) var_AddCallback( VLC_OBJECT(a), b, c, d ) -#define var_DelCallback(a,b,c,d) var_DelCallback( VLC_OBJECT(a), b, c, d ) -#define var_TriggerCallback(a,b) var_TriggerCallback( VLC_OBJECT(a), b ) - -/***************************************************************************** - * helpers functions - *****************************************************************************/ - -/** - * Set the value of an integer variable - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - * \param i The new integer value of this variable - */ -static inline int var_SetInteger( vlc_object_t *p_obj, const char *psz_name, - int64_t i ) -{ - vlc_value_t val; - val.i_int = i; - return var_SetChecked( p_obj, psz_name, VLC_VAR_INTEGER, val ); -} - -/** - * Set the value of an boolean variable - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - * \param b The new boolean value of this variable - */ -static inline int var_SetBool( vlc_object_t *p_obj, const char *psz_name, bool b ) -{ - vlc_value_t val; - val.b_bool = b; - return var_SetChecked( p_obj, psz_name, VLC_VAR_BOOL, val ); -} - -/** - * Set the value of a time variable - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - * \param i The new time value of this variable - */ -static inline int var_SetTime( vlc_object_t *p_obj, const char *psz_name, int64_t i ) -{ - vlc_value_t val; - val.i_time = i; - return var_SetChecked( p_obj, psz_name, VLC_VAR_TIME, val ); -} - -static inline int var_SetCoords( vlc_object_t *obj, const char *name, - int32_t x, int32_t y ) -{ - vlc_value_t val; - val.coords.x = x; - val.coords.y = y; - return var_SetChecked (obj, name, VLC_VAR_COORDS, val); -} -#define var_SetCoords(o,n,x,y) var_SetCoords(VLC_OBJECT(o),n,x,y) - -/** - * Set the value of a float variable - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - * \param f The new float value of this variable - */ -static inline int var_SetFloat( vlc_object_t *p_obj, const char *psz_name, float f ) -{ - vlc_value_t val; - val.f_float = f; - return var_SetChecked( p_obj, psz_name, VLC_VAR_FLOAT, val ); -} - -/** - * Set the value of a string variable - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - * \param psz_string The new string value of this variable - */ -static inline int var_SetString( vlc_object_t *p_obj, const char *psz_name, const char *psz_string ) -{ - vlc_value_t val; - val.psz_string = (char *)psz_string; - return var_SetChecked( p_obj, psz_name, VLC_VAR_STRING, val ); -} - -/** - * Set the value of a pointer variable - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - * \param ptr The new pointer value of this variable - */ -static inline -int var_SetAddress( vlc_object_t *p_obj, const char *psz_name, void *ptr ) -{ - vlc_value_t val; - val.p_address = ptr; - return var_SetChecked( p_obj, psz_name, VLC_VAR_ADDRESS, val ); -} - -#define var_SetInteger(a,b,c) var_SetInteger( VLC_OBJECT(a),b,c) -#define var_SetBool(a,b,c) var_SetBool( VLC_OBJECT(a),b,c) -#define var_SetTime(a,b,c) var_SetTime( VLC_OBJECT(a),b,c) -#define var_SetFloat(a,b,c) var_SetFloat( VLC_OBJECT(a),b,c) -#define var_SetString(a,b,c) var_SetString( VLC_OBJECT(a),b,c) -#define var_SetAddress(o, n, p) var_SetAddress(VLC_OBJECT(o), n, p) - - -/** - * Get an integer value -* - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED -static inline int64_t var_GetInteger( vlc_object_t *p_obj, const char *psz_name ) -{ - vlc_value_t val; - if( !var_GetChecked( p_obj, psz_name, VLC_VAR_INTEGER, &val ) ) - return val.i_int; - else - return 0; -} - -/** - * Get a boolean value - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED -static inline bool var_GetBool( vlc_object_t *p_obj, const char *psz_name ) -{ - vlc_value_t val; val.b_bool = false; - - if( !var_GetChecked( p_obj, psz_name, VLC_VAR_BOOL, &val ) ) - return val.b_bool; - else - return false; -} - -/** - * Get a time value - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED -static inline int64_t var_GetTime( vlc_object_t *p_obj, const char *psz_name ) -{ - vlc_value_t val; val.i_time = 0L; - if( !var_GetChecked( p_obj, psz_name, VLC_VAR_TIME, &val ) ) - return val.i_time; - else - return 0; -} - -static inline void var_GetCoords( vlc_object_t *obj, const char *name, - int32_t *px, int32_t *py ) -{ - vlc_value_t val; - - if (likely(!var_GetChecked (obj, name, VLC_VAR_COORDS, &val))) - { - *px = val.coords.x; - *py = val.coords.y; - } - else - *px = *py = 0; -} -#define var_GetCoords(o,n,x,y) var_GetCoords(VLC_OBJECT(o),n,x,y) - -/** - * Get a float value - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED -static inline float var_GetFloat( vlc_object_t *p_obj, const char *psz_name ) -{ - vlc_value_t val; val.f_float = 0.0; - if( !var_GetChecked( p_obj, psz_name, VLC_VAR_FLOAT, &val ) ) - return val.f_float; - else - return 0.0; -} - -/** - * Get a string value - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED VLC_MALLOC -static inline char *var_GetString( vlc_object_t *p_obj, const char *psz_name ) -{ - vlc_value_t val; val.psz_string = NULL; - if( var_GetChecked( p_obj, psz_name, VLC_VAR_STRING, &val ) ) - return NULL; - else - return val.psz_string; -} - -VLC_USED VLC_MALLOC -static inline char *var_GetNonEmptyString( vlc_object_t *p_obj, const char *psz_name ) -{ - vlc_value_t val; - if( var_GetChecked( p_obj, psz_name, VLC_VAR_STRING, &val ) ) - return NULL; - if( val.psz_string && *val.psz_string ) - return val.psz_string; - free( val.psz_string ); - return NULL; -} - -VLC_USED -static inline void *var_GetAddress( vlc_object_t *p_obj, const char *psz_name ) -{ - vlc_value_t val; - if( var_GetChecked( p_obj, psz_name, VLC_VAR_ADDRESS, &val ) ) - return NULL; - else - return val.p_address; -} - -/** - * Increment an integer variable - * \param p_obj the object that holds the variable - * \param psz_name the name of the variable - */ -static inline int64_t var_IncInteger( vlc_object_t *p_obj, const char *psz_name ) -{ - vlc_value_t val; - val.i_int = 1; - var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_ADD, &val ); - return val.i_int; -} -#define var_IncInteger(a,b) var_IncInteger( VLC_OBJECT(a), b ) - -/** - * Decrement an integer variable - * \param p_obj the object that holds the variable - * \param psz_name the name of the variable - */ -static inline int64_t var_DecInteger( vlc_object_t *p_obj, const char *psz_name ) -{ - vlc_value_t val; - val.i_int = -1; - var_GetAndSet( p_obj, psz_name, VLC_VAR_INTEGER_ADD, &val ); - return val.i_int; -} -#define var_DecInteger(a,b) var_DecInteger( VLC_OBJECT(a), b ) - -static inline uint64_t var_OrInteger( vlc_object_t *obj, const char *name, - unsigned v ) -{ - vlc_value_t val; - val.i_int = v; - var_GetAndSet( obj, name, VLC_VAR_INTEGER_OR, &val ); - return val.i_int; -} -#define var_OrInteger(a,b,c) var_OrInteger(VLC_OBJECT(a),b,c) - -static inline uint64_t var_NAndInteger( vlc_object_t *obj, const char *name, - unsigned v ) -{ - vlc_value_t val; - val.i_int = v; - var_GetAndSet( obj, name, VLC_VAR_INTEGER_NAND, &val ); - return val.i_int; -} -#define var_NAndInteger(a,b,c) var_NAndInteger(VLC_OBJECT(a),b,c) - -/** - * Create a integer variable with inherit and get its value. - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED -static inline int64_t var_CreateGetInteger( vlc_object_t *p_obj, const char *psz_name ) -{ - var_Create( p_obj, psz_name, VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); - return var_GetInteger( p_obj, psz_name ); -} - -/** - * Create a boolean variable with inherit and get its value. - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED -static inline bool var_CreateGetBool( vlc_object_t *p_obj, const char *psz_name ) -{ - var_Create( p_obj, psz_name, VLC_VAR_BOOL | VLC_VAR_DOINHERIT ); - return var_GetBool( p_obj, psz_name ); -} - -/** - * Create a time variable with inherit and get its value. - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED -static inline int64_t var_CreateGetTime( vlc_object_t *p_obj, const char *psz_name ) -{ - var_Create( p_obj, psz_name, VLC_VAR_TIME | VLC_VAR_DOINHERIT ); - return var_GetTime( p_obj, psz_name ); -} - -/** - * Create a float variable with inherit and get its value. - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED -static inline float var_CreateGetFloat( vlc_object_t *p_obj, const char *psz_name ) -{ - var_Create( p_obj, psz_name, VLC_VAR_FLOAT | VLC_VAR_DOINHERIT ); - return var_GetFloat( p_obj, psz_name ); -} - -/** - * Create a string variable with inherit and get its value. - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED VLC_MALLOC -static inline char *var_CreateGetString( vlc_object_t *p_obj, - const char *psz_name ) -{ - var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT ); - return var_GetString( p_obj, psz_name ); -} - -VLC_USED VLC_MALLOC -static inline char *var_CreateGetNonEmptyString( vlc_object_t *p_obj, - const char *psz_name ) -{ - var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT ); - return var_GetNonEmptyString( p_obj, psz_name ); -} - -/** - * Create an address variable with inherit and get its value. - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED -static inline void *var_CreateGetAddress( vlc_object_t *p_obj, - const char *psz_name ) -{ - var_Create( p_obj, psz_name, VLC_VAR_ADDRESS | VLC_VAR_DOINHERIT ); - return var_GetAddress( p_obj, psz_name ); -} - -#define var_CreateGetInteger(a,b) var_CreateGetInteger( VLC_OBJECT(a),b) -#define var_CreateGetBool(a,b) var_CreateGetBool( VLC_OBJECT(a),b) -#define var_CreateGetTime(a,b) var_CreateGetTime( VLC_OBJECT(a),b) -#define var_CreateGetFloat(a,b) var_CreateGetFloat( VLC_OBJECT(a),b) -#define var_CreateGetString(a,b) var_CreateGetString( VLC_OBJECT(a),b) -#define var_CreateGetNonEmptyString(a,b) var_CreateGetNonEmptyString( VLC_OBJECT(a),b) -#define var_CreateGetAddress(a,b) var_CreateGetAddress( VLC_OBJECT(a),b) - -/** - * Create a integer command variable with inherit and get its value. - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED -static inline int64_t var_CreateGetIntegerCommand( vlc_object_t *p_obj, const char *psz_name ) -{ - var_Create( p_obj, psz_name, VLC_VAR_INTEGER | VLC_VAR_DOINHERIT - | VLC_VAR_ISCOMMAND ); - return var_GetInteger( p_obj, psz_name ); -} - -/** - * Create a boolean command variable with inherit and get its value. - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED -static inline bool var_CreateGetBoolCommand( vlc_object_t *p_obj, const char *psz_name ) -{ - var_Create( p_obj, psz_name, VLC_VAR_BOOL | VLC_VAR_DOINHERIT - | VLC_VAR_ISCOMMAND ); - return var_GetBool( p_obj, psz_name ); -} - -/** - * Create a time command variable with inherit and get its value. - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED -static inline int64_t var_CreateGetTimeCommand( vlc_object_t *p_obj, const char *psz_name ) -{ - var_Create( p_obj, psz_name, VLC_VAR_TIME | VLC_VAR_DOINHERIT - | VLC_VAR_ISCOMMAND ); - return var_GetTime( p_obj, psz_name ); -} - -/** - * Create a float command variable with inherit and get its value. - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED -static inline float var_CreateGetFloatCommand( vlc_object_t *p_obj, const char *psz_name ) -{ - var_Create( p_obj, psz_name, VLC_VAR_FLOAT | VLC_VAR_DOINHERIT - | VLC_VAR_ISCOMMAND ); - return var_GetFloat( p_obj, psz_name ); -} - -/** - * Create a string command variable with inherit and get its value. - * - * \param p_obj The object that holds the variable - * \param psz_name The name of the variable - */ -VLC_USED VLC_MALLOC -static inline char *var_CreateGetStringCommand( vlc_object_t *p_obj, - const char *psz_name ) -{ - var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT - | VLC_VAR_ISCOMMAND ); - return var_GetString( p_obj, psz_name ); -} - -VLC_USED VLC_MALLOC -static inline char *var_CreateGetNonEmptyStringCommand( vlc_object_t *p_obj, - const char *psz_name ) -{ - var_Create( p_obj, psz_name, VLC_VAR_STRING | VLC_VAR_DOINHERIT - | VLC_VAR_ISCOMMAND ); - return var_GetNonEmptyString( p_obj, psz_name ); -} - -#define var_CreateGetIntegerCommand(a,b) var_CreateGetIntegerCommand( VLC_OBJECT(a),b) -#define var_CreateGetBoolCommand(a,b) var_CreateGetBoolCommand( VLC_OBJECT(a),b) -#define var_CreateGetTimeCommand(a,b) var_CreateGetTimeCommand( VLC_OBJECT(a),b) -#define var_CreateGetFloatCommand(a,b) var_CreateGetFloatCommand( VLC_OBJECT(a),b) -#define var_CreateGetStringCommand(a,b) var_CreateGetStringCommand( VLC_OBJECT(a),b) -#define var_CreateGetNonEmptyStringCommand(a,b) var_CreateGetNonEmptyStringCommand( VLC_OBJECT(a),b) - -VLC_USED -static inline int var_CountChoices( vlc_object_t *p_obj, const char *psz_name ) -{ - vlc_value_t count; - if( var_Change( p_obj, psz_name, VLC_VAR_CHOICESCOUNT, &count, NULL ) ) - return 0; - return count.i_int; -} -#define var_CountChoices(a,b) var_CountChoices( VLC_OBJECT(a),b) - - -static inline bool var_ToggleBool( vlc_object_t *p_obj, const char *psz_name ) -{ - vlc_value_t val; - var_GetAndSet( p_obj, psz_name, VLC_VAR_BOOL_TOGGLE, &val ); - return val.b_bool; -} -#define var_ToggleBool(a,b) var_ToggleBool( VLC_OBJECT(a),b ) - - -VLC_USED -static inline bool var_InheritBool( vlc_object_t *obj, const char *name ) -{ - vlc_value_t val; - - if( var_Inherit( obj, name, VLC_VAR_BOOL, &val ) ) - val.b_bool = false; - return val.b_bool; -} -#define var_InheritBool(o, n) var_InheritBool(VLC_OBJECT(o), n) - -VLC_USED -static inline int64_t var_InheritInteger( vlc_object_t *obj, const char *name ) -{ - vlc_value_t val; - - if( var_Inherit( obj, name, VLC_VAR_INTEGER, &val ) ) - val.i_int = 0; - return val.i_int; -} -#define var_InheritInteger(o, n) var_InheritInteger(VLC_OBJECT(o), n) - -VLC_USED -static inline float var_InheritFloat( vlc_object_t *obj, const char *name ) -{ - vlc_value_t val; - - if( var_Inherit( obj, name, VLC_VAR_FLOAT, &val ) ) - val.f_float = 0.; - return val.f_float; -} -#define var_InheritFloat(o, n) var_InheritFloat(VLC_OBJECT(o), n) - -VLC_USED VLC_MALLOC -static inline char *var_InheritString( vlc_object_t *obj, const char *name ) -{ - vlc_value_t val; - - if( var_Inherit( obj, name, VLC_VAR_STRING, &val ) ) - val.psz_string = NULL; - else if( val.psz_string && !*val.psz_string ) - { - free( val.psz_string ); - val.psz_string = NULL; - } - return val.psz_string; -} -#define var_InheritString(o, n) var_InheritString(VLC_OBJECT(o), n) - -VLC_USED -static inline mtime_t var_InheritTime( vlc_object_t *obj, const char *name ) -{ - vlc_value_t val; - - if( var_Inherit( obj, name, VLC_VAR_TIME, &val ) ) - val.i_time = 0; - return val.i_time; -} -#define var_InheritTime(o, n) var_InheritTime(VLC_OBJECT(o), n) - -VLC_USED -static inline void *var_InheritAddress( vlc_object_t *obj, const char *name ) -{ - vlc_value_t val; - - if( var_Inherit( obj, name, VLC_VAR_ADDRESS, &val ) ) - val.p_address = NULL; - return val.p_address; -} -#define var_InheritAddress(o, n) var_InheritAddress(VLC_OBJECT(o), n) - -VLC_API int var_InheritURational( vlc_object_t *, unsigned *num, unsigned *den, const char *var ); -#define var_InheritURational(a,b,c,d) var_InheritURational(VLC_OBJECT(a), b, c, d) - -#define var_GetInteger(a,b) var_GetInteger( VLC_OBJECT(a),b) -#define var_GetBool(a,b) var_GetBool( VLC_OBJECT(a),b) -#define var_GetTime(a,b) var_GetTime( VLC_OBJECT(a),b) -#define var_GetFloat(a,b) var_GetFloat( VLC_OBJECT(a),b) -#define var_GetString(a,b) var_GetString( VLC_OBJECT(a),b) -#define var_GetNonEmptyString(a,b) var_GetNonEmptyString( VLC_OBJECT(a),b) -#define var_GetAddress(a,b) var_GetAddress( VLC_OBJECT(a),b) - -VLC_API int var_LocationParse(vlc_object_t *, const char *mrl, const char *prefix); -#define var_LocationParse(o, m, p) var_LocationParse(VLC_OBJECT(o), m, p) - -/** - * @} - */ -#endif /* _VLC_VARIABLES_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_video_splitter.h b/source/vlc/cpp/include/vlc/plugins/vlc_video_splitter.h deleted file mode 100644 index 419a4cabc..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_video_splitter.h +++ /dev/null @@ -1,158 +0,0 @@ -/***************************************************************************** - * vlc_video_splitter.h: "video splitter" related structures and functions - ***************************************************************************** - * Copyright (C) 2009 Laurent Aimar - * $Id: eb2bf00f85a3ee2df1c35a90f12da4099a95a463 $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_VIDEO_SPLITTER_H -#define VLC_VIDEO_SPLITTER_H 1 - -#include -#include -#include - -/** - * \file - * This file defines the structure and types used by video splitter filters. - */ - -typedef struct video_splitter_t video_splitter_t; -typedef struct video_splitter_sys_t video_splitter_sys_t; -typedef struct video_splitter_owner_t video_splitter_owner_t; - -/** Structure describing a video splitter output properties - */ -typedef struct -{ - /* Video format of the output */ - video_format_t fmt; - - /* Window hints */ - struct - { - /* Relative position. - * (0,0) is equal to the default position. - */ - int i_x; - int i_y; - - /* Alignment inside the window - */ - int i_align; - } window; - - /* Video output module - * Use NULL for default - */ - char *psz_module; - -} video_splitter_output_t; - -/** Structure describing a video splitter - */ -struct video_splitter_t -{ - VLC_COMMON_MEMBERS - - /* Module properties */ - module_t *p_module; - - /* configuration */ - config_chain_t *p_cfg; - - /* Input format - * It is filled by the creator and cannot be modified. - */ - video_format_t fmt; - - /* Output formats - * - * It can only be set in the open() function and must remain - * constant. - * The module is responsible for the allocation and deallocation. - */ - int i_output; - video_splitter_output_t *p_output; - - int (*pf_filter)( video_splitter_t *, picture_t *pp_dst[], - picture_t *p_src ); - int (*pf_mouse) ( video_splitter_t *, vlc_mouse_t *, - int i_index, - const vlc_mouse_t *p_old, const vlc_mouse_t *p_new ); - - video_splitter_sys_t *p_sys; - - /* Buffer allocation */ - int (*pf_picture_new) ( video_splitter_t *, picture_t *pp_picture[] ); - void (*pf_picture_del) ( video_splitter_t *, picture_t *pp_picture[] ); - video_splitter_owner_t *p_owner; -}; - -/** - * It will create an array of pictures suitable as output. - * - * You must either returned them through pf_filter or by calling - * video_splitter_DeletePicture. - * - * If VLC_SUCCESS is not returned, pp_picture values are undefined. - */ -static inline int video_splitter_NewPicture( video_splitter_t *p_splitter, - picture_t *pp_picture[] ) -{ - int i_ret = p_splitter->pf_picture_new( p_splitter, pp_picture ); - if( i_ret ) - msg_Warn( p_splitter, "can't get output pictures" ); - return i_ret; -} - -/** - * It will release an array of pictures created by video_splitter_NewPicture. - * Provided for convenience. - */ -static inline void video_splitter_DeletePicture( video_splitter_t *p_splitter, - picture_t *pp_picture[] ) -{ - p_splitter->pf_picture_del( p_splitter, pp_picture ); -} - -/* */ -VLC_API video_splitter_t * video_splitter_New( vlc_object_t *, const char *psz_name, const video_format_t * ); -VLC_API void video_splitter_Delete( video_splitter_t * ); - -static inline int video_splitter_Filter( video_splitter_t *p_splitter, - picture_t *pp_dst[], picture_t *p_src ) -{ - return p_splitter->pf_filter( p_splitter, pp_dst, p_src ); -} -static inline int video_splitter_Mouse( video_splitter_t *p_splitter, - vlc_mouse_t *p_mouse, - int i_index, - const vlc_mouse_t *p_old, const vlc_mouse_t *p_new ) -{ - if( !p_splitter->pf_mouse ) - { - *p_mouse = *p_new; - return VLC_SUCCESS; - } - return p_splitter->pf_mouse( p_splitter, p_mouse, i_index, p_old, p_new ); -} - -#endif /* VLC_VIDEO_SPLITTER_H */ - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_vlm.h b/source/vlc/cpp/include/vlc/plugins/vlc_vlm.h deleted file mode 100644 index 58680b63e..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_vlm.h +++ /dev/null @@ -1,369 +0,0 @@ -/***************************************************************************** - * vlc_vlm.h: VLM core structures - ***************************************************************************** - * Copyright (C) 2000, 2001 VLC authors and VideoLAN - * $Id: 11111da6edb9fbecaa750af4c2851a5f0c338f0b $ - * - * Authors: Simon Latapie - * Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_VLM_H -#define VLC_VLM_H 1 - -/** - * \file - * This file defines VLM core functions and structures in vlc - */ - -#include - -/** - * \defgroup server VLM - * VLM is the server core in vlc that allows streaming of multiple media streams - * at the same time. It provides broadcast, schedule and video on demand features - * for streaming using several streaming and network protocols. - * @{ - */ - -/** VLM media */ -typedef struct -{ - int64_t id; /*< numeric id for vlm_media_t item */ - bool b_enabled; /*< vlm_media_t is enabled */ - - char *psz_name; /*< descriptive name of vlm_media_t item */ - - int i_input; /*< number of input options */ - char **ppsz_input; /*< array of input options */ - - int i_option; /*< number of output options */ - char **ppsz_option; /*< array of output options */ - - char *psz_output; /*< */ - - bool b_vod; /*< vlm_media_t is of type VOD */ - struct - { - bool b_loop; /*< this vlc_media_t broadcast item should loop */ - } broadcast; /*< Broadcast specific information */ - struct - { - char *psz_mux; /*< name of muxer to use */ - } vod; /*< VOD specific information */ - -} vlm_media_t; - -/** VLM media instance */ -typedef struct -{ - char *psz_name; /*< vlm media instance descriptive name */ - - int64_t i_time; /*< vlm media instance vlm media current time */ - int64_t i_length; /*< vlm media instance vlm media item length */ - double d_position; /*< vlm media instance position in stream */ - bool b_paused; /*< vlm media instance is paused */ - int i_rate; // normal is INPUT_RATE_DEFAULT -} vlm_media_instance_t; - -#if 0 -typedef struct -{ - -} vlm_schedule_t -#endif - -/** VLM events - * You can catch vlm event by adding a callback on the variable "intf-event" - * of the VLM object. - * This variable is an address that will hold a vlm_event_t* value. - */ -enum vlm_event_type_e -{ - /* */ - VLM_EVENT_MEDIA_ADDED = 0x100, - VLM_EVENT_MEDIA_REMOVED, - VLM_EVENT_MEDIA_CHANGED, - - /* */ - VLM_EVENT_MEDIA_INSTANCE_STARTED = 0x200, - VLM_EVENT_MEDIA_INSTANCE_STOPPED, - VLM_EVENT_MEDIA_INSTANCE_STATE, -}; - -typedef struct -{ - int i_type; /* a vlm_event_type_e value */ - int64_t id; /* Media ID */ - const char *psz_name; /* Media name */ - const char *psz_instance_name; /* Instance name or NULL */ - input_state_e input_state; /* Input instance event type */ -} vlm_event_t; - -/** VLM control query */ -enum vlm_query_e -{ - /* --- Media control */ - /* Get all medias */ - VLM_GET_MEDIAS, /* arg1=vlm_media_t ***, int *pi_media */ - /* Delete all medias */ - VLM_CLEAR_MEDIAS, /* no arg */ - - /* Add a new media */ - VLM_ADD_MEDIA, /* arg1=vlm_media_t* arg2=int64_t *p_id res=can fail */ - /* Delete an existing media */ - VLM_DEL_MEDIA, /* arg1=int64_t id */ - /* Change properties of an existing media (all fields but id and b_vod) */ - VLM_CHANGE_MEDIA, /* arg1=vlm_media_t* res=can fail */ - /* Get 1 media by it's ID */ - VLM_GET_MEDIA, /* arg1=int64_t id arg2=vlm_media_t ** */ - /* Get media ID from its name */ - VLM_GET_MEDIA_ID, /* arg1=const char *psz_name arg2=int64_t* */ - - /* Media instance control XXX VOD control are for internal use only */ - /* Get all media instances */ - VLM_GET_MEDIA_INSTANCES, /* arg1=int64_t id arg2=vlm_media_instance_t *** arg3=int *pi_instance */ - /* Delete all media instances */ - VLM_CLEAR_MEDIA_INSTANCES, /* arg1=int64_t id */ - /* Control broadcast instance */ - VLM_START_MEDIA_BROADCAST_INSTANCE, /* arg1=int64_t id, arg2=const char *psz_instance_name, int i_input_index res=can fail */ - /* Control VOD instance */ - VLM_START_MEDIA_VOD_INSTANCE, /* arg1=int64_t id, arg2=const char *psz_instance_name, int i_input_index char *psz_vod_output res=can fail */ - /* Stop an instance */ - VLM_STOP_MEDIA_INSTANCE, /* arg1=int64_t id, arg2=const char *psz_instance_name res=can fail */ - /* Pause an instance */ - VLM_PAUSE_MEDIA_INSTANCE, /* arg1=int64_t id, arg2=const char *psz_instance_name res=can fail */ - /* Get instance position time (in microsecond) */ - VLM_GET_MEDIA_INSTANCE_TIME, /* arg1=int64_t id, arg2=const char *psz_instance_name arg3=int64_t * */ - /* Set instance position time (in microsecond) */ - VLM_SET_MEDIA_INSTANCE_TIME, /* arg1=int64_t id, arg2=const char *psz_instance_name arg3=int64_t */ - /* Get instance position ([0.0 .. 1.0]) */ - VLM_GET_MEDIA_INSTANCE_POSITION, /* arg1=int64_t id, arg2=const char *psz_instance_name arg3=double * */ - /* Set instance position ([0.0 .. 1.0]) */ - VLM_SET_MEDIA_INSTANCE_POSITION, /* arg1=int64_t id, arg2=const char *psz_instance_name arg3=double */ - - /* Schedule control */ - VLM_CLEAR_SCHEDULES, /* no arg */ - /* TODO: missing schedule control */ - - /* */ -}; - - -/* VLM specific - structures and functions */ - -/* ok, here is the structure of a vlm_message: - The parent node is ( name_of_the_command , NULL ), or - ( name_of_the_command , message_error ) on error. - If a node has children, it should not have a value (=NULL).*/ -struct vlm_message_t -{ - char *psz_name; /*< message name */ - char *psz_value; /*< message value */ - - int i_child; /*< number of child messages */ - vlm_message_t **child; /*< array of vlm_message_t */ -}; - - -#ifdef __cplusplus -extern "C" { -#endif - -VLC_API vlm_t * vlm_New( vlc_object_t * ); -#define vlm_New( a ) vlm_New( VLC_OBJECT(a) ) -VLC_API void vlm_Delete( vlm_t * ); -VLC_API int vlm_ExecuteCommand( vlm_t *, const char *, vlm_message_t ** ); -VLC_API int vlm_Control( vlm_t *p_vlm, int i_query, ... ); - -VLC_API vlm_message_t * vlm_MessageSimpleNew( const char * ); -VLC_API vlm_message_t * vlm_MessageNew( const char *, const char *, ... ) VLC_FORMAT( 2, 3 ); -VLC_API vlm_message_t * vlm_MessageAdd( vlm_message_t *, vlm_message_t * ); -VLC_API void vlm_MessageDelete( vlm_message_t * ); - -/* media helpers */ - -/** - * Initialize a vlm_media_t instance - * \param p_media vlm_media_t instance to initialize - */ -static inline void vlm_media_Init( vlm_media_t *p_media ) -{ - memset( p_media, 0, sizeof(vlm_media_t) ); - p_media->id = 0; // invalid id - p_media->psz_name = NULL; - TAB_INIT( p_media->i_input, p_media->ppsz_input ); - TAB_INIT( p_media->i_option, p_media->ppsz_option ); - p_media->psz_output = NULL; - p_media->b_vod = false; - - p_media->vod.psz_mux = NULL; - p_media->broadcast.b_loop = false; -} - -/** - * Copy a vlm_media_t instance into another vlm_media_t instance - * \param p_dst vlm_media_t instance to copy to - * \param p_src vlm_media_t instance to copy from - */ -static inline void -#ifndef __cplusplus -vlm_media_Copy( vlm_media_t *restrict p_dst, const vlm_media_t *restrict p_src ) -#else -vlm_media_Copy( vlm_media_t *p_dst, const vlm_media_t *p_src ) -#endif -{ - int i; - - memset( p_dst, 0, sizeof(vlm_media_t) ); - p_dst->id = p_src->id; - p_dst->b_enabled = p_src->b_enabled; - if( p_src->psz_name ) - p_dst->psz_name = strdup( p_src->psz_name ); - - for( i = 0; i < p_src->i_input; i++ ) - TAB_APPEND_CAST( (char**), p_dst->i_input, p_dst->ppsz_input, strdup(p_src->ppsz_input[i]) ); - for( i = 0; i < p_src->i_option; i++ ) - TAB_APPEND_CAST( (char**), p_dst->i_option, p_dst->ppsz_option, strdup(p_src->ppsz_option[i]) ); - - if( p_src->psz_output ) - p_dst->psz_output = strdup( p_src->psz_output ); - - p_dst->b_vod = p_src->b_vod; - if( p_src->b_vod ) - { - if( p_src->vod.psz_mux ) - p_dst->vod.psz_mux = strdup( p_src->vod.psz_mux ); - } - else - { - p_dst->broadcast.b_loop = p_src->broadcast.b_loop; - } -} - -/** - * Cleanup and release memory associated with this vlm_media_t instance. - * You still need to release p_media itself with vlm_media_Delete(). - * \param p_media vlm_media_t to cleanup - */ -static inline void vlm_media_Clean( vlm_media_t *p_media ) -{ - int i; - free( p_media->psz_name ); - - for( i = 0; i < p_media->i_input; i++ ) - free( p_media->ppsz_input[i]); - TAB_CLEAN(p_media->i_input, p_media->ppsz_input ); - - for( i = 0; i < p_media->i_option; i++ ) - free( p_media->ppsz_option[i]); - TAB_CLEAN(p_media->i_option, p_media->ppsz_option ); - - free( p_media->psz_output ); - if( p_media->b_vod ) - free( p_media->vod.psz_mux ); -} - -/** - * Allocate a new vlm_media_t instance - * \return vlm_media_t instance - */ -static inline vlm_media_t *vlm_media_New(void) -{ - vlm_media_t *p_media = (vlm_media_t *)malloc( sizeof(vlm_media_t) ); - if( p_media ) - vlm_media_Init( p_media ); - return p_media; -} - -/** - * Delete a vlm_media_t instance - * \param p_media vlm_media_t instance to delete - */ -static inline void vlm_media_Delete( vlm_media_t *p_media ) -{ - vlm_media_Clean( p_media ); - free( p_media ); -} - -/** - * Copy a vlm_media_t instance - * \param p_src vlm_media_t instance to copy - * \return vlm_media_t duplicate of p_src - */ -static inline vlm_media_t *vlm_media_Duplicate( vlm_media_t *p_src ) -{ - vlm_media_t *p_dst = vlm_media_New(); - if( p_dst ) - vlm_media_Copy( p_dst, p_src ); - return p_dst; -} - -/* media instance helpers */ -/** - * Initialize vlm_media_instance_t - * \param p_instance vlm_media_instance_t to initialize - */ -static inline void vlm_media_instance_Init( vlm_media_instance_t *p_instance ) -{ - memset( p_instance, 0, sizeof(vlm_media_instance_t) ); - p_instance->psz_name = NULL; - p_instance->i_time = 0; - p_instance->i_length = 0; - p_instance->d_position = 0.0; - p_instance->b_paused = false; - p_instance->i_rate = INPUT_RATE_DEFAULT; -} - -/** - * Cleanup vlm_media_instance_t - * \param p_instance vlm_media_instance_t to cleanup - */ -static inline void vlm_media_instance_Clean( vlm_media_instance_t *p_instance ) -{ - free( p_instance->psz_name ); -} - -/** - * Allocate a new vlm_media_instance_t - * \return a new vlm_media_instance_t - */ -static inline vlm_media_instance_t *vlm_media_instance_New(void) -{ - vlm_media_instance_t *p_instance = (vlm_media_instance_t *) malloc( sizeof(vlm_media_instance_t) ); - if( p_instance ) - vlm_media_instance_Init( p_instance ); - return p_instance; -} - -/** - * Delete a vlm_media_instance_t - * \param p_instance vlm_media_instance_t to delete - */ -static inline void vlm_media_instance_Delete( vlm_media_instance_t *p_instance ) -{ - vlm_media_instance_Clean( p_instance ); - free( p_instance ); -} - -#ifdef __cplusplus -} -#endif - -/**@}*/ - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_vod.h b/source/vlc/cpp/include/vlc/plugins/vlc_vod.h deleted file mode 100644 index 28e97cbef..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_vod.h +++ /dev/null @@ -1,84 +0,0 @@ -/***************************************************************************** - * vlc_vod.h: interface for VoD server modules - ***************************************************************************** - * Copyright (C) 2000, 2001 VLC authors and VideoLAN - * $Id: 2f094338a9ca3ea9e8236863bda9f549abe53687 $ - * - * Author: Gildas Bazin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_VOD_H -#define VLC_VOD_H 1 - -/** - * \file - * This file defines an interface for VOD server modules in vlc - */ - -/** - * \defgroup vod Video On Demand (VOD) - * \ingroup server - * Video On Demand (VOD) functionality is provided from VLM. - * @{ - */ - -struct vod_t -{ - VLC_COMMON_MEMBERS - - /* Module properties */ - module_t *p_module; - vod_sys_t *p_sys; - - vod_media_t * (*pf_media_new) ( vod_t *, const char *, input_item_t * ); - void (*pf_media_del) ( vod_t *, vod_media_t * ); - - /* Owner properties */ - int (*pf_media_control) ( void *, vod_media_t *, const char *, int, va_list ); - void *p_data; -}; - -static inline int vod_MediaControl( vod_t *p_vod, vod_media_t *p_media, - const char *psz_id, int i_query, ... ) -{ - va_list args; - int i_result; - - if( !p_vod->pf_media_control ) return VLC_EGENERIC; - - va_start( args, i_query ); - i_result = p_vod->pf_media_control( p_vod->p_data, p_media, psz_id, - i_query, args ); - va_end( args ); - return i_result; -} - -enum vod_query_e -{ - VOD_MEDIA_PLAY, /* arg1= char *, arg2= int64_t *, res= */ - VOD_MEDIA_PAUSE, /* arg1= int64_t * res= */ - VOD_MEDIA_STOP, /* arg1= res=can fail */ - VOD_MEDIA_SEEK, /* arg1= double res= */ - VOD_MEDIA_REWIND, /* arg1= double res= */ - VOD_MEDIA_FORWARD, /* arg1= double res= */ -}; - -/** - * @} - */ - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_vout.h b/source/vlc/cpp/include/vlc/plugins/vlc_vout.h deleted file mode 100644 index 5f71c124d..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_vout.h +++ /dev/null @@ -1,164 +0,0 @@ -/***************************************************************************** - * vlc_vout.h: common video definitions - ***************************************************************************** - * Copyright (C) 1999 - 2008 VLC authors and VideoLAN - * $Id: 2d6c180bfc1dcdf2d57277a44508dcda5d8f17de $ - * - * Authors: Vincent Seguin - * Samuel Hocevar - * Olivier Aubert - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_VOUT_H_ -#define VLC_VOUT_H_ 1 - -/** - * \file - * This file defines common video output structures and functions in vlc - */ - -#include -#include -#include - -/***************************************************************************** - * Prototypes - *****************************************************************************/ - -/** - * \defgroup video_output Video Output - * This module describes the programming interface for video output threads. - * It includes functions allowing to open a new thread, send pictures to a - * thread, and destroy a previously opened video output thread. - * @{ - */ - -/** - * Vout configuration - */ -typedef struct { - vout_thread_t *vout; - vlc_object_t *input; - bool change_fmt; - const video_format_t *fmt; - unsigned dpb_size; -} vout_configuration_t; - -/** - * Video output thread private structure - */ -typedef struct vout_thread_sys_t vout_thread_sys_t; - -/** - * Video output thread descriptor - * - * Any independent video output device, such as an X11 window or a GGI device, - * is represented by a video output thread, and described using the following - * structure. - */ -struct vout_thread_t { - VLC_COMMON_MEMBERS - - /* Private vout_thread data */ - vout_thread_sys_t *p; -}; - -/* Alignment flags */ -#define VOUT_ALIGN_LEFT 0x0001 -#define VOUT_ALIGN_RIGHT 0x0002 -#define VOUT_ALIGN_HMASK 0x0003 -#define VOUT_ALIGN_TOP 0x0004 -#define VOUT_ALIGN_BOTTOM 0x0008 -#define VOUT_ALIGN_VMASK 0x000C - -/***************************************************************************** - * Prototypes - *****************************************************************************/ - -/** - * Returns a suitable vout or release the given one. - * - * If cfg->fmt is non NULL and valid, a vout will be returned, reusing cfg->vout - * is possible, otherwise it returns NULL. - * If cfg->vout is not used, it will be closed and released. - * - * You can release the returned value either by vout_Request or vout_Close() - * followed by a vlc_object_release() or shorter vout_CloseAndRelease() - * - * \param object a vlc object - * \param cfg the video configuration requested. - * \return a vout - */ -VLC_API vout_thread_t * vout_Request( vlc_object_t *object, const vout_configuration_t *cfg ); -#define vout_Request(a,b) vout_Request(VLC_OBJECT(a),b) - -/** - * This function will close a vout created by vout_Request. - * The associated vout module is closed. - * Note: It is not released yet, you'll have to call vlc_object_release() - * or use the convenient vout_CloseAndRelease(). - * - * \param p_vout the vout to close - */ -VLC_API void vout_Close( vout_thread_t *p_vout ); - -/** - * This function will close a vout created by vout_Create - * and then release it. - * - * \param p_vout the vout to close and release - */ -static inline void vout_CloseAndRelease( vout_thread_t *p_vout ) -{ - vout_Close( p_vout ); - vlc_object_release( p_vout ); -} - -/** - * This function will handle a snapshot request. - * - * pp_image, pp_picture and p_fmt can be NULL otherwise they will be - * set with returned value in case of success. - * - * pp_image will hold an encoded picture in psz_format format. - * - * i_timeout specifies the time the function will wait for a snapshot to be - * available. - * - */ -VLC_API int vout_GetSnapshot( vout_thread_t *p_vout, - block_t **pp_image, picture_t **pp_picture, - video_format_t *p_fmt, - const char *psz_format, mtime_t i_timeout ); - -/* */ -VLC_API picture_t * vout_GetPicture( vout_thread_t * ); -VLC_API void vout_PutPicture( vout_thread_t *, picture_t * ); - -VLC_API void vout_HoldPicture( vout_thread_t *, picture_t * ); -VLC_API void vout_ReleasePicture( vout_thread_t *, picture_t * ); - -/* */ -VLC_API void vout_PutSubpicture( vout_thread_t *, subpicture_t * ); -VLC_API int vout_RegisterSubpictureChannel( vout_thread_t * ); -VLC_API void vout_FlushSubpictureChannel( vout_thread_t *, int ); - -VLC_API void vout_EnableFilter( vout_thread_t *, const char *,bool , bool ); - -/**@}*/ - -#endif /* _VLC_VIDEO_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_vout_display.h b/source/vlc/cpp/include/vlc/plugins/vlc_vout_display.h deleted file mode 100644 index cc183947f..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_vout_display.h +++ /dev/null @@ -1,440 +0,0 @@ -/***************************************************************************** - * vlc_vout_display.h: vout_display_t definitions - ***************************************************************************** - * Copyright (C) 2009 Laurent Aimar - * $Id: d99cf7eea9c1079754a3a47ea1df8ecd8e8d6163 $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_VOUT_DISPLAY_H -#define VLC_VOUT_DISPLAY_H 1 - -/** - * \file - * This file defines vout display structures and functions in vlc - */ - -#include -#include -#include -#include -#include -#include -#include - -/* XXX - * Do NOT use video_format_t::i_aspect but i_sar_num/den everywhere. i_aspect - * will be removed as soon as possible. - * - */ -typedef struct vout_display_t vout_display_t; -typedef struct vout_display_sys_t vout_display_sys_t; -typedef struct vout_display_owner_t vout_display_owner_t; -typedef struct vout_display_owner_sys_t vout_display_owner_sys_t; - -/** - * Possible alignments for vout_display. - */ -typedef enum -{ - VOUT_DISPLAY_ALIGN_CENTER, - /* */ - VOUT_DISPLAY_ALIGN_LEFT, - VOUT_DISPLAY_ALIGN_RIGHT, - /* */ - VOUT_DISPLAY_ALIGN_TOP, - VOUT_DISPLAY_ALIGN_BOTTOM, -} vout_display_align_t; - -/** - * Window management state. - */ -enum { - VOUT_WINDOW_STATE_NORMAL=0, - VOUT_WINDOW_STATE_ABOVE=1, - VOUT_WINDOW_STATE_BELOW=2, - VOUT_WINDOW_STACK_MASK=3, -}; - -/** - * Initial/Current configuration for a vout_display_t - */ -typedef struct { - bool is_fullscreen; /* Is the display fullscreen */ - - /* Display properties */ - struct { - /* Window title (may be NULL) */ - const char *title; - - /* Display size */ - unsigned width; - unsigned height; - - /* Display SAR */ - struct { - unsigned num; - unsigned den; - } sar; - } display; - - /* Alignment of the picture inside the display */ - struct { - int horizontal; - int vertical; - } align; - - /* Do we fill up the display with the video */ - bool is_display_filled; - - /* Zoom to use - * It will be applied to the whole display if b_display_filled is set, otherwise - * only on the video source */ - struct { - int num; - int den; - } zoom; - -} vout_display_cfg_t; - -/** - * Information from a vout_display_t to configure - * the core behaviour. - * - * By default they are all false or NULL. - * - */ -typedef struct { - bool is_slow; /* The picture memory has slow read/write */ - bool has_double_click; /* Is double-click generated */ - bool has_hide_mouse; /* Is mouse automatically hidden */ - bool has_pictures_invalid; /* Will VOUT_DISPLAY_EVENT_PICTURES_INVALID be used */ - bool has_event_thread; /* Will events (key at least) be emitted using an independent thread */ - const vlc_fourcc_t *subpicture_chromas; /* List of supported chromas for subpicture rendering. */ -} vout_display_info_t; - -/** - * Control query for vout_display_t - */ -enum { - /* Hide the mouse. It will be sent when - * vout_display_t::info.b_hide_mouse is false */ - VOUT_DISPLAY_HIDE_MOUSE, - - /* Ask to reset the internal buffers after a VOUT_DISPLAY_EVENT_PICTURES_INVALID - * request. - */ - VOUT_DISPLAY_RESET_PICTURES, - - /* Ask the module to acknowledge/refuse the fullscreen state change after - * being requested (externally or by VOUT_DISPLAY_EVENT_FULLSCREEN */ - VOUT_DISPLAY_CHANGE_FULLSCREEN, /* const vout_display_cfg_t *p_cfg */ - - /* Ask the module to acknowledge/refuse the window management state change - * after being requested externally or by VOUT_DISPLAY_WINDOW_STATE */ - VOUT_DISPLAY_CHANGE_WINDOW_STATE, /* unsigned state */ - - /* Ask the module to acknowledge/refuse the display size change requested - * (externally or by VOUT_DISPLAY_EVENT_DISPLAY_SIZE) */ - VOUT_DISPLAY_CHANGE_DISPLAY_SIZE, /* const vout_display_cfg_t *p_cfg, int is_forced */ - - /* Ask the module to acknowledge/refuse fill display state change after - * being requested externally */ - VOUT_DISPLAY_CHANGE_DISPLAY_FILLED, /* const vout_display_cfg_t *p_cfg */ - - /* Ask the module to acknowledge/refuse zoom change after being requested - * externally */ - VOUT_DISPLAY_CHANGE_ZOOM, /* const vout_display_cfg_t *p_cfg */ - - /* Ask the module to acknowledge/refuse source aspect ratio after being - * requested externally */ - VOUT_DISPLAY_CHANGE_SOURCE_ASPECT, /* const video_format_t *p_source */ - - /* Ask the module to acknowledge/refuse source crop change after being - * requested externally. - * The cropping requested is stored by video_format_t::i_x/y_offset and - * video_format_t::i_visible_width/height */ - VOUT_DISPLAY_CHANGE_SOURCE_CROP, /* const video_format_t *p_source */ - - /* Ask an opengl interface if available. */ - VOUT_DISPLAY_GET_OPENGL, /* vlc_gl_t ** */ -}; - -/** - * Event from vout_display_t - * - * Events modifiying the state may be sent multiple times. - * Only the transition will be retained and acted upon. - */ -enum { - /* TODO: - * ZOOM ? DISPLAY_FILLED ? ON_TOP ? - */ - /* */ - VOUT_DISPLAY_EVENT_PICTURES_INVALID, /* The buffer are now invalid and need to be changed */ - - VOUT_DISPLAY_EVENT_FULLSCREEN, - VOUT_DISPLAY_EVENT_WINDOW_STATE, - - VOUT_DISPLAY_EVENT_DISPLAY_SIZE, /* The display size need to change : int i_width, int i_height, bool is_fullscreen */ - - /* */ - VOUT_DISPLAY_EVENT_CLOSE, - VOUT_DISPLAY_EVENT_KEY, - - /* Full mouse state. - * You can use it OR use the other mouse events. The core will do - * the conversion. - */ - VOUT_DISPLAY_EVENT_MOUSE_STATE, - - /* Mouse event */ - VOUT_DISPLAY_EVENT_MOUSE_MOVED, - VOUT_DISPLAY_EVENT_MOUSE_PRESSED, - VOUT_DISPLAY_EVENT_MOUSE_RELEASED, - VOUT_DISPLAY_EVENT_MOUSE_DOUBLE_CLICK, -}; - -/** - * Vout owner structures - */ -struct vout_display_owner_t { - /* Private place holder for the vout_display_t creator - */ - vout_display_owner_sys_t *sys; - - /* Event coming from the module - * - * This function is set prior to the module instantiation and must not - * be overwritten nor used directly (use the vout_display_SendEvent* - * wrapper. - * - * You can send it at any time i.e. from any vout_display_t functions or - * from another thread. - * Be careful, it does not ensure correct serialization if it is used - * from multiple threads. - */ - void (*event)(vout_display_t *, int, va_list); - - /* Window management - * - * These functions are set prior to the module instantiation and must not - * be overwritten nor used directly (use the vout_display_*Window - * wrapper */ - vout_window_t *(*window_new)(vout_display_t *, const vout_window_cfg_t *); - void (*window_del)(vout_display_t *, vout_window_t *); -}; - -struct vout_display_t { - VLC_COMMON_MEMBERS - - /* Module */ - module_t *module; - - /* Initial and current configuration. - * You cannot modify it directly, you must use the appropriate events. - * - * It reflects the current values, i.e. after the event has been accepted - * and applied/configured if needed. - */ - const vout_display_cfg_t *cfg; - - /* video source format. - * - * Cropping is not requested while in the open function. - * You cannot change it. - */ - video_format_t source; - - /* picture_t format. - * - * You can only change it inside the module open function to - * match what you want, and when a VOUT_DISPLAY_RESET_PICTURES control - * request is made and succeeds. - * - * By default, it is equal to ::source except for the aspect ratio - * which is undefined(0) and is ignored. - */ - video_format_t fmt; - - /* Information - * - * You can only set them in the open function. - */ - vout_display_info_t info; - - /* Return a pointer over the current picture_pool_t* (mandatory). - * - * For performance reasons, it is best to provide at least count - * pictures but it is not mandatory. - * You can return NULL when you cannot/do not want to allocate - * pictures. - * The vout display module keeps the ownership of the pool and can - * destroy it only when closing or on invalid pictures control. - */ - picture_pool_t *(*pool)(vout_display_t *, unsigned count); - - /* Prepare a picture and an optional subpicture for display (optional). - * - * It is called before the next pf_display call to provide as much - * time as possible to prepare the given picture and the subpicture - * for display. - * You are guaranted that pf_display will always be called and using - * the exact same picture_t and subpicture_t. - * You cannot change the pixel content of the picture_t or of the - * subpicture_t. - */ - void (*prepare)(vout_display_t *, picture_t *, subpicture_t *); - - /* Display a picture and an optional subpicture (mandatory). - * - * The picture and the optional subpicture must be displayed as soon as - * possible. - * You cannot change the pixel content of the picture_t or of the - * subpicture_t. - * - * This function gives away the ownership of the picture and of the - * subpicture, so you must release them as soon as possible. - */ - void (*display)(vout_display_t *, picture_t *, subpicture_t *); - - /* Control on the module (mandatory) */ - int (*control)(vout_display_t *, int, va_list); - - /* Manage pending event (optional) */ - void (*manage)(vout_display_t *); - - /* Private place holder for the vout_display_t module (optional) - * - * A module is free to use it as it wishes. - */ - vout_display_sys_t *sys; - - /* Reserved for the vout_display_t owner. - * - * It must not be overwritten nor used directly by a module. - */ - vout_display_owner_t owner; -}; - -static inline void vout_display_SendEvent(vout_display_t *vd, int query, ...) -{ - va_list args; - va_start(args, query); - vd->owner.event(vd, query, args); - va_end(args); -} - -static inline void vout_display_SendEventDisplaySize(vout_display_t *vd, int width, int height, bool is_fullscreen) -{ - vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_DISPLAY_SIZE, width, height, is_fullscreen); -} -static inline void vout_display_SendEventPicturesInvalid(vout_display_t *vd) -{ - vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_PICTURES_INVALID); -} -static inline void vout_display_SendEventClose(vout_display_t *vd) -{ - vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_CLOSE); -} -static inline void vout_display_SendEventKey(vout_display_t *vd, int key) -{ - vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_KEY, key); -} -static inline void vout_display_SendEventFullscreen(vout_display_t *vd, bool is_fullscreen) -{ - vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_FULLSCREEN, is_fullscreen); -} -static inline void vout_display_SendWindowState(vout_display_t *vd, unsigned state) -{ - vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_WINDOW_STATE, state); -} -/* The mouse position (State and Moved event) must be expressed against vout_display_t::source unit */ -static inline void vout_display_SendEventMouseState(vout_display_t *vd, int x, int y, int button_mask) -{ - vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_MOUSE_STATE, x, y, button_mask); -} -static inline void vout_display_SendEventMouseMoved(vout_display_t *vd, int x, int y) -{ - vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_MOUSE_MOVED, x, y); -} -static inline void vout_display_SendEventMousePressed(vout_display_t *vd, int button) -{ - vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_MOUSE_PRESSED, button); -} -static inline void vout_display_SendEventMouseReleased(vout_display_t *vd, int button) -{ - vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_MOUSE_RELEASED, button); -} -static inline void vout_display_SendEventMouseDoubleClick(vout_display_t *vd) -{ - vout_display_SendEvent(vd, VOUT_DISPLAY_EVENT_MOUSE_DOUBLE_CLICK); -} - -/** - * Asks for a new window with the given configuration as hint. - * - * b_standalone/i_x/i_y may be overwritten by the core - */ -static inline vout_window_t *vout_display_NewWindow(vout_display_t *vd, const vout_window_cfg_t *cfg) -{ - return vd->owner.window_new(vd, cfg); -} -/** - * Deletes a window created by vout_display_NewWindow if window is non NULL - * or any unused windows otherwise. - */ -static inline void vout_display_DeleteWindow(vout_display_t *vd, - vout_window_t *window) -{ - vd->owner.window_del(vd, window); -} - -/** - * Computes the default display size given the source and - * the display configuration. - * - * This asssumes that the picture is already cropped. - */ -VLC_API void vout_display_GetDefaultDisplaySize(unsigned *width, unsigned *height, const video_format_t *source, const vout_display_cfg_t *); - - -/** - * Structure used to store the result of a vout_display_PlacePicture. - */ -typedef struct { - int x; - int y; - unsigned width; - unsigned height; -} vout_display_place_t; - -/** - * Computes how to place a picture inside the display to respect - * the given parameters. - * This assumes that cropping is done by an external mean. - * - * \param p_place Place inside the window (window pixel unit) - * \param p_source Video source format - * \param p_cfg Display configuration - * \param b_clip If true, prevent the video to go outside the display (break zoom). - */ -VLC_API void vout_display_PlacePicture(vout_display_place_t *place, const video_format_t *source, const vout_display_cfg_t *cfg, bool do_clipping); - -#endif /* VLC_VOUT_DISPLAY_H */ - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_vout_osd.h b/source/vlc/cpp/include/vlc/plugins/vlc_vout_osd.h deleted file mode 100644 index 8b2b27d8b..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_vout_osd.h +++ /dev/null @@ -1,98 +0,0 @@ -/***************************************************************************** - * vlc_vout_osd.h: vout OSD - ***************************************************************************** - * Copyright (C) 1999-2010 VLC authors and VideoLAN - * Copyright (C) 2004-2005 M2X - * $Id: 74d79379258cf0af1cdafcd45946c7b4cf23b01f $ - * - * Authors: Jean-Paul Saman - * Gildas Bazin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_VOUT_OSD_H -#define VLC_VOUT_OSD_H 1 - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * OSD menu position and picture type defines - */ -enum -{ - /* Icons */ - OSD_PLAY_ICON = 1, - OSD_PAUSE_ICON, - OSD_SPEAKER_ICON, - OSD_MUTE_ICON, - /* Sliders */ - OSD_HOR_SLIDER, - OSD_VERT_SLIDER, -}; - -/********************************************************************** - * Vout text and widget overlays - **********************************************************************/ -VLC_API int vout_OSDEpg( vout_thread_t *, input_item_t * ); - -/** - * \brief Write an informative message if the OSD option is enabled. - * \param vout The vout on which the message will be displayed - * \param channel Subpicture channel - * \param position Position of the text - * \param duration Duration of the text being displayed - * \param text Text to be displayed - */ -VLC_API void vout_OSDText( vout_thread_t *vout, int channel, int position, mtime_t duration, const char *text ); - -/** - * \brief Write an informative message at the default location, - * for the default duration and only if the OSD option is enabled. - * \param vout The vout on which the message will be displayed - * \param channel Subpicture channel - * \param format printf style formatting - * - * Provided for convenience. - */ -VLC_API void vout_OSDMessage( vout_thread_t *, int, const char *, ... ) VLC_FORMAT( 3, 4 ); - -/** - * Display a slider on the video output. - * \param p_this The object that called the function. - * \param i_channel Subpicture channel - * \param i_postion Current position in the slider - * \param i_type Types are: OSD_HOR_SLIDER and OSD_VERT_SLIDER. - */ -VLC_API void vout_OSDSlider( vout_thread_t *, int, int , short ); - -/** - * Display an Icon on the video output. - * \param p_this The object that called the function. - * \param i_channel Subpicture channel - * \param i_type Types are: OSD_PLAY_ICON, OSD_PAUSE_ICON, OSD_SPEAKER_ICON, OSD_MUTE_ICON - */ -VLC_API void vout_OSDIcon( vout_thread_t *, int, short ); - -#ifdef __cplusplus -} -#endif - -#endif /* VLC_VOUT_OSD_H */ - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_vout_window.h b/source/vlc/cpp/include/vlc/plugins/vlc_vout_window.h deleted file mode 100644 index eee95a00f..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_vout_window.h +++ /dev/null @@ -1,163 +0,0 @@ -/***************************************************************************** - * vlc_vout_window.h: vout_window_t definitions - ***************************************************************************** - * Copyright (C) 2008 Rémi Denis-Courmont - * Copyright (C) 2009 Laurent Aimar - * $Id: e7944685b6ca9092ca77ec20d5aff55d32929e6b $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_VOUT_WINDOW_H -#define VLC_VOUT_WINDOW_H 1 - -/** - * \file - * This file defines vout windows structures and functions in vlc - */ - -#include - -/* */ -typedef struct vout_window_t vout_window_t; -typedef struct vout_window_sys_t vout_window_sys_t; - - -/** - * Window handle type - */ -enum { - VOUT_WINDOW_TYPE_INVALID=0, - VOUT_WINDOW_TYPE_XID, - VOUT_WINDOW_TYPE_HWND, - VOUT_WINDOW_TYPE_NSOBJECT, -}; - -/** - * Control query for vout_window_t - */ -enum { - VOUT_WINDOW_SET_STATE, /* unsigned state */ - VOUT_WINDOW_SET_SIZE, /* unsigned i_width, unsigned i_height */ - VOUT_WINDOW_SET_FULLSCREEN, /* int b_fullscreen */ -}; - -typedef struct { - /* If true, a standalone window is requested */ - bool is_standalone; - - /* Window handle type */ - unsigned type; - - /* Window position hint */ - int x; - int y; - - /* Windows size hint */ - unsigned width; - unsigned height; - -} vout_window_cfg_t; - -/** - * FIXME do we need an event system in the window too ? - * or the window user will take care of it ? - */ -struct vout_window_t { - VLC_COMMON_MEMBERS - - /* window handle (mandatory) - * - * It must be filled in the open function. - */ - union { - void *hwnd; /* Win32 window handle */ - uint32_t xid; /* X11 windows ID */ - void *nsobject; /* Mac OSX view object */ - } handle; - - /* display server (mandatory) */ - union { - char *x11; /* X11 display (NULL = use default) */ - } display; - - /* Control on the module (mandatory) - * - * Do not use it directly; use vout_window_Control instead. - */ - int (*control)(vout_window_t *, int query, va_list); - - /* Private place holder for the vout_window_t module (optional) - * - * A module is free to use it as it wishes. - */ - vout_window_sys_t *sys; -}; - -/** - * Creates a new window. - * - * @param module plugin name (usually "$window") - * @note If you are inside a "vout display", you must use - / vout_display_NewWindow() and vout_display_DeleteWindow() instead. - * This enables recycling windows. - */ -VLC_API vout_window_t * vout_window_New(vlc_object_t *, const char *module, const vout_window_cfg_t *); - -/** - * Deletes a window created by vout_window_New(). - * - * @note See vout_window_New() about window recycling. - */ -VLC_API void vout_window_Delete(vout_window_t *); - - -/** - * Reconfigures a window. - * - * @note The vout_window_* wrappers should be used instead of this function. - * - * @warning The caller must own the window, as vout_window_t is not thread safe. - */ -VLC_API int vout_window_Control(vout_window_t *, int query, ...); - -/** - * Configures the window manager state for this window. - */ -static inline int vout_window_SetState(vout_window_t *window, unsigned state) -{ - return vout_window_Control(window, VOUT_WINDOW_SET_STATE, state); -} - -/** - * Configures the window display (i.e. inner/useful) size. - */ -static inline int vout_window_SetSize(vout_window_t *window, - unsigned width, unsigned height) -{ - return vout_window_Control(window, VOUT_WINDOW_SET_SIZE, width, height); -} - -/** - * Sets fullscreen mode. - */ -static inline int vout_window_SetFullScreen(vout_window_t *window, bool full) -{ - return vout_window_Control(window, VOUT_WINDOW_SET_FULLSCREEN, full); -} - -#endif /* VLC_VOUT_WINDOW_H */ diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_vout_wrapper.h b/source/vlc/cpp/include/vlc/plugins/vlc_vout_wrapper.h deleted file mode 100644 index 4aa367e9a..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_vout_wrapper.h +++ /dev/null @@ -1,98 +0,0 @@ -/***************************************************************************** - * vlc_vout_wrapper.h: definitions for vout wrappers (temporary) - ***************************************************************************** - * Copyright (C) 2009 Laurent Aimar - * $Id: 575a51f004a495cc40fdd2f340295e6e76b94410 $ - * - * Authors: Laurent Aimar - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_VOUT_WRAPPER_H -#define VLC_VOUT_WRAPPER_H 1 - -#include - -/* XXX DO NOT use it outside the vout module wrapper XXX */ - -/** - * It retreives a picture pool from the display - */ -static inline picture_pool_t *vout_display_Pool(vout_display_t *vd, unsigned count) -{ - return vd->pool(vd, count); -} - -/** - * It preparse a picture for display. - */ -static inline void vout_display_Prepare(vout_display_t *vd, - picture_t *picture, - subpicture_t *subpicture) -{ - if (vd->prepare ) - vd->prepare(vd, picture, subpicture); -} - -/** - * It display a picture. - */ -static inline void vout_display_Display(vout_display_t *vd, - picture_t *picture, - subpicture_t *subpicture) -{ - vd->display(vd, picture, subpicture); -} - -/** - * It holds a state for a vout display. - */ -typedef struct { - vout_display_cfg_t cfg; - unsigned wm_state; - struct { - int num; - int den; - } sar; -} vout_display_state_t; - -/** - * It creates a vout managed display. - */ -VLC_API vout_display_t * vout_NewDisplay( vout_thread_t *, const video_format_t *, const vout_display_state_t *, const char *psz_module, mtime_t i_double_click_timeout, mtime_t i_hide_timeout ); -/** - * It destroy a vout managed display. - */ -VLC_API void vout_DeleteDisplay(vout_display_t *, vout_display_state_t *); - -VLC_API bool vout_IsDisplayFiltered(vout_display_t *); -VLC_API picture_t * vout_FilterDisplay(vout_display_t *, picture_t *); -VLC_API bool vout_AreDisplayPicturesInvalid(vout_display_t *); - -VLC_API bool vout_ManageDisplay(vout_display_t *, bool allow_reset_pictures); - -VLC_API void vout_SetDisplayFullscreen(vout_display_t *, bool is_fullscreen); -VLC_API void vout_SetDisplayFilled(vout_display_t *, bool is_filled); -VLC_API void vout_SetDisplayZoom(vout_display_t *, int num, int den); -VLC_API void vout_SetWindowState(vout_display_t *, unsigned state); -VLC_API void vout_SetDisplayAspect(vout_display_t *, unsigned dar_num, unsigned dar_den); -VLC_API void vout_SetDisplayCrop(vout_display_t *, unsigned crop_num, unsigned crop_den, unsigned left, unsigned top, int right, int bottom); - -struct vlc_gl_t; -VLC_API struct vlc_gl_t * vout_GetDisplayOpengl(vout_display_t *); - -#endif /* VLC_VOUT_WRAPPER_H */ - diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_windows_interfaces.h b/source/vlc/cpp/include/vlc/plugins/vlc_windows_interfaces.h deleted file mode 100644 index e4c41f261..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_windows_interfaces.h +++ /dev/null @@ -1,231 +0,0 @@ -/***************************************************************************** - * vlc_windows_interfaces.h : Replacement for incomplete MinGW headers - **************************************************************************** - * - * Copyright (C) 2009-2010 VideoLAN - * - * Authors: Geoffroy Couprie - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef MINGW_WORKAROUNDS_H -#define MINGW_WORKAROUNDS_H - -#ifdef __MINGW32__ -# include <_mingw.h> -#endif - -#ifdef __MINGW64_VERSION_MAJOR /* mingw.org lacks this header */ -# include -#endif - -#include -#include -#include - -/* rpcndr.h defines small not only for idl */ -#undef small - -/* mingw.org fails to define this */ -#ifndef __ITaskbarList3_INTERFACE_DEFINED__ -#define __ITaskbarList3_INTERFACE_DEFINED__ -const GUID CLSID_TaskbarList ={ 0x56FDF344,0xFD6D,0x11d0,{0x95,0x8A,0x00,0x60,0x97,0xC9,0xA0,0x90}}; -const GUID IID_ITaskbarList3 = { 0xea1afb91,0x9e28,0x4b86,{0x90,0xe9,0x9e,0x9f,0x8a,0x5e,0xef,0xaf}}; - - -typedef enum TBPFLAG -{ - TBPF_NOPROGRESS = 0, - TBPF_INDETERMINATE = 0x1, - TBPF_NORMAL = 0x2, - TBPF_ERROR = 0x4, - TBPF_PAUSED = 0x8 -} TBPFLAG; - -typedef struct tagTHUMBBUTTON -{ - DWORD dwMask; - UINT iId; - UINT iBitmap; - HICON hIcon; - // WCHAR pszTip[ 260 ]; - wchar_t pszTip[ 260 ]; - DWORD dwFlags; -} THUMBBUTTON; - -typedef struct tagTHUMBBUTTON *LPTHUMBBUTTON; - -typedef enum THUMBBUTTONMASK { - THB_BITMAP = 0x1, - THB_ICON = 0x2, - THB_TOOLTIP = 0x4, - THB_FLAGS = 0x8 -} THUMBBUTTONMASK; - -typedef enum THUMBBUTTONFLAGS { - THBF_ENABLED = 0x0, - THBF_DISABLED = 0x1, - THBF_DISMISSONCLICK = 0x2, - THBF_NOBACKGROUND = 0x4, - THBF_HIDDEN = 0x8, - THBF_NONINTERACTIVE = 0x10 -} THUMBBUTTONFLAGS; - -#ifdef __cplusplus -interface ITaskbarList : public IUnknown { -public: - virtual HRESULT WINAPI HrInit(void) = 0; - virtual HRESULT WINAPI AddTab(HWND hwnd) = 0; - virtual HRESULT WINAPI DeleteTab(HWND hwnd) = 0; - virtual HRESULT WINAPI ActivateTab(HWND hwnd) = 0; - virtual HRESULT WINAPI SetActiveAlt(HWND hwnd) = 0; -}; - -interface ITaskbarList2 : public ITaskbarList { -public: - virtual HRESULT WINAPI MarkFullscreenWindow(HWND hwnd,WINBOOL fFullscreen) = 0; -}; - -interface ITaskbarList3 : public ITaskbarList2 -{ - virtual HRESULT STDMETHODCALLTYPE SetProgressValue( - HWND hwnd, - ULONGLONG ullCompleted, - ULONGLONG ullTotal) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetProgressState( - HWND hwnd, - TBPFLAG tbpFlags) = 0; - - virtual HRESULT STDMETHODCALLTYPE RegisterTab( - HWND hwndTab, - HWND hwndMDI) = 0; - - virtual HRESULT STDMETHODCALLTYPE UnregisterTab( - HWND hwndTab) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetTabOrder( - HWND hwndTab, - HWND hwndInsertBefore) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetTabActive( - HWND hwndTab, - HWND hwndMDI, - DWORD dwReserved) = 0; - - virtual HRESULT STDMETHODCALLTYPE ThumbBarAddButtons( - HWND hwnd, - UINT cButtons, - LPTHUMBBUTTON pButton) = 0; - - virtual HRESULT STDMETHODCALLTYPE ThumbBarUpdateButtons( - HWND hwnd, - UINT cButtons, - LPTHUMBBUTTON pButton) = 0; - - virtual HRESULT STDMETHODCALLTYPE ThumbBarSetImageList( - HWND hwnd, - HIMAGELIST himl) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetOverlayIcon( - HWND hwnd, - HICON hIcon, - LPCWSTR pszDescription) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetThumbnailTooltip( - HWND hwnd, - LPCWSTR pszTip) = 0; - - virtual HRESULT STDMETHODCALLTYPE SetThumbnailClip( - HWND hwnd, - RECT *prcClip) = 0; - -}; - -#else /* !__cplusplus */ - -struct ITaskbarList3Vtbl; -struct ITaskbarList3 { struct ITaskbarList3Vtbl* lpVtbl; }; -typedef struct ITaskbarList3 ITaskbarList3; - -struct ITaskbarList3Vtbl -{ - - long ( WINAPI *QueryInterface )(ITaskbarList3 * This, REFIID riid, void **ppvObject); - - long ( WINAPI *AddRef )(ITaskbarList3 *This); - - long ( WINAPI *Release )(ITaskbarList3 *This); - - long ( WINAPI *HrInit )(ITaskbarList3 *This); - - long ( WINAPI *AddTab )(ITaskbarList3 *This, HWND hwnd); - - long ( WINAPI *DeleteTab )(ITaskbarList3 *This, HWND hwnd); - - long ( WINAPI *ActivateTab )(ITaskbarList3 *This, HWND hwnd); - - long ( WINAPI *SetActiveAlt )(ITaskbarList3 *This, HWND hwnd); - - long ( WINAPI *MarkFullscreenWindow )(ITaskbarList3 *This, HWND hwnd, - BOOL fFullscreen); - - long ( WINAPI *SetProgressValue )(ITaskbarList3 *This, HWND hwnd, - ULONGLONG ullCompleted, ULONGLONG ullTotal); - - long ( WINAPI *SetProgressState )(ITaskbarList3 *This, HWND hwnd, - TBPFLAG tbpFlags); - - long ( WINAPI *RegisterTab )( ITaskbarList3 *This, HWND hwndTab, HWND hwndMDI); - - long ( WINAPI *UnregisterTab )(ITaskbarList3 *This, HWND hwndTab); - - long ( WINAPI *SetTabOrder )(ITaskbarList3 *This, HWND hwndTab, - HWND hwndInsertBefore); - - long ( WINAPI *SetTabActive )(ITaskbarList3 *This, HWND hwndTab, - HWND hwndMDI, DWORD dwReserved); - - long ( WINAPI *ThumbBarAddButtons )(ITaskbarList3 *This, HWND hwnd, - UINT cButtons, LPTHUMBBUTTON pButton); - - long ( WINAPI *ThumbBarUpdateButtons )(ITaskbarList3 *This, HWND hwnd, - UINT cButtons, LPTHUMBBUTTON pButton); - - long ( WINAPI *ThumbBarSetImageList )(ITaskbarList3 *This, HWND hwnd, - HIMAGELIST himl); - - long ( WINAPI *SetOverlayIcon )(ITaskbarList3 *This, HWND hwnd, - HICON hIcon, LPCWSTR pszDescription); - - long ( WINAPI *SetThumbnailTooltip )(ITaskbarList3 *This, HWND hwnd, - LPCWSTR pszTip); - - long ( WINAPI *SetThumbnailClip )(ITaskbarList3 *This, HWND hwnd, - RECT *prcClip); - -}; - -#endif /* __cplusplus */ -#endif /* __ITaskbarList3_INTERFACE_DEFINED__ */ - -/* mingw-w64 also fails to define these as of 2.0.1 */ - -#ifndef THBN_CLICKED -# define THBN_CLICKED 0x1800 -#endif - -#endif //MINGW_WORKAROUNDS_H diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_xlib.h b/source/vlc/cpp/include/vlc/plugins/vlc_xlib.h deleted file mode 100644 index b6818c15d..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_xlib.h +++ /dev/null @@ -1,57 +0,0 @@ -/***************************************************************************** - * vlc_xlib.h: initialization of Xlib - ***************************************************************************** - * Copyright (C) 2010 Rémi Denis-Courmont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_XLIB_H -# define VLC_XLIB_H 1 - -# include -# include -# include -# include - -static inline bool vlc_xlib_init (vlc_object_t *obj) -{ - if (!var_InheritBool (obj, "xlib")) - return false; - - bool ok = false; - - /* XInitThreads() can be called multiple times, - * but it is not reentrant, so we need this global lock. */ - vlc_global_lock (VLC_XLIB_MUTEX); - - if (_Xglobal_lock == NULL && unlikely(_XErrorFunction != NULL)) - /* (_Xglobal_lock == NULL) => Xlib threads not initialized */ - /* (_XErrorFunction != NULL) => Xlib already in use */ - fprintf (stderr, "%s:%u:%s: Xlib not initialized for threads.\n" - "This process is probably using LibVLC incorrectly.\n" - "Pass \"--no-xlib\" to libvlc_new() to fix this.\n", - __FILE__, __LINE__, __func__); - else if (XInitThreads ()) - ok = true; - - vlc_global_unlock (VLC_XLIB_MUTEX); - - if (!ok) - msg_Err (obj, "Xlib not initialized for threads"); - return ok; -} - -#endif diff --git a/source/vlc/cpp/include/vlc/plugins/vlc_xml.h b/source/vlc/cpp/include/vlc/plugins/vlc_xml.h deleted file mode 100644 index 3bb8312b7..000000000 --- a/source/vlc/cpp/include/vlc/plugins/vlc_xml.h +++ /dev/null @@ -1,120 +0,0 @@ -/***************************************************************************** - * vlc_xml.h: XML abstraction layer - ***************************************************************************** - * Copyright (C) 2004-2010 VLC authors and VideoLAN - * - * Author: Gildas Bazin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_XML_H -#define VLC_XML_H - -/** -* \file -* This file defines functions and structures to handle xml tags in vlc -* -*/ - -# ifdef __cplusplus -extern "C" { -# endif - -struct xml_t -{ - VLC_COMMON_MEMBERS - - /* Module properties */ - module_t *p_module; - xml_sys_t *p_sys; - - void (*pf_catalog_load) ( xml_t *, const char * ); - void (*pf_catalog_add) ( xml_t *, const char *, const char *, - const char * ); -}; - -VLC_API xml_t * xml_Create( vlc_object_t * ) VLC_USED; -#define xml_Create( a ) xml_Create( VLC_OBJECT(a) ) -VLC_API void xml_Delete( xml_t * ); - -static inline void xml_CatalogLoad( xml_t *xml, const char *catalog ) -{ - xml->pf_catalog_load( xml, catalog ); -} - -static inline void xml_CatalogAdd( xml_t *xml, const char *type, - const char *orig, const char *value ) -{ - xml->pf_catalog_add( xml, type, orig, value ); -} - - -struct xml_reader_t -{ - VLC_COMMON_MEMBERS - - xml_reader_sys_t *p_sys; - stream_t *p_stream; - module_t *p_module; - - int (*pf_next_node) ( xml_reader_t *, const char ** ); - const char *(*pf_next_attr) ( xml_reader_t *, const char ** ); - - int (*pf_use_dtd) ( xml_reader_t * ); - int (*pf_is_empty) ( xml_reader_t * ); -}; - -VLC_API xml_reader_t * xml_ReaderCreate(vlc_object_t *, stream_t *) VLC_USED; -#define xml_ReaderCreate( a, s ) xml_ReaderCreate(VLC_OBJECT(a), s) -VLC_API void xml_ReaderDelete(xml_reader_t *); -VLC_API xml_reader_t * xml_ReaderReset(xml_reader_t *, stream_t *) VLC_USED; - -static inline int xml_ReaderNextNode( xml_reader_t *reader, const char **pval ) -{ - return reader->pf_next_node( reader, pval ); -} - -static inline const char *xml_ReaderNextAttr( xml_reader_t *reader, - const char **pval ) -{ - return reader->pf_next_attr( reader, pval ); -} - -static inline int xml_ReaderUseDTD( xml_reader_t *reader ) -{ - return reader->pf_use_dtd( reader ); -} - -static inline int xml_ReaderIsEmptyElement( xml_reader_t *reader ) -{ - if(reader->pf_is_empty == NULL) - return -2; - - return reader->pf_is_empty( reader ); -} - -enum { - XML_READER_NONE=0, - XML_READER_STARTELEM, - XML_READER_ENDELEM, - XML_READER_TEXT, -}; - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/source/vlc/cpp/include/vlc/vlc.h b/source/vlc/cpp/include/vlc/vlc.h deleted file mode 100644 index a6eb47f53..000000000 --- a/source/vlc/cpp/include/vlc/vlc.h +++ /dev/null @@ -1,56 +0,0 @@ -/***************************************************************************** - * vlc.h: global header for libvlc - ***************************************************************************** - * Copyright (C) 1998-2008 VLC authors and VideoLAN - * $Id: 8f39094bd4b15c99288cecd001f76fcc10565daa $ - * - * Authors: Vincent Seguin - * Samuel Hocevar - * Gildas Bazin - * Derk-Jan Hartman - * Pierre d'Herbemont - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation; either version 2.1 of the License, or - * (at your option) any later version. - * - * This 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 Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser 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. - *****************************************************************************/ - -#ifndef VLC_VLC_H -#define VLC_VLC_H 1 - -/** - * \file - * This file defines libvlc new external API - */ - -# ifdef __cplusplus -extern "C" { -# endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -# ifdef __cplusplus -} -# endif - -#endif /* _VLC_VLC_H */ diff --git a/source/vlc/cpp/lib/libvlc.la b/source/vlc/cpp/lib/libvlc.la deleted file mode 100644 index a41e58d92..000000000 --- a/source/vlc/cpp/lib/libvlc.la +++ /dev/null @@ -1,41 +0,0 @@ -# libvlc.la - a libtool library file -# Generated by libtool (GNU libtool) 2.4.2 Debian-2.4.2-1.1 -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='../bin/libvlc.dll' - -# Names of this library. -library_names='libvlc.dll.a' - -# The name of the static archive. -old_library='' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='' - -# Libraries that this one depends upon. -dependency_libs=' -L/home/jb/vlc-2.1/contrib/i686-w64-mingw32/lib /home/jb/vlc-2.1/win32/_win32/lib/libvlccore.la /home/jb/vlc-2.1/contrib/i686-w64-mingw32/lib/libgpg-error.la -lwinmm /home/jb/vlc-2.1/contrib/i686-w64-mingw32/lib/libiconv.la -lws2_32' - -# Names of additional weak libraries provided by this library -weak_library_names='' - -# Version information for libvlc. -current=9 -age=4 -revision=0 - -# Is this an already installed library? -installed=yes - -# Should we warn about portability when linking against -modules? -shouldnotlink=no - -# Files to dlopen/dlpreopen -dlopen='' -dlpreopen='' - -# Directory that this library needs to be installed in: -libdir='/home/jb/vlc-2.1/win32/_win32/lib' diff --git a/source/vlc/cpp/lib/libvlc.lib b/source/vlc/cpp/lib/libvlc.lib deleted file mode 100644 index f399fed03ad9c580779303c549874cb6bf785da2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67372 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 S?$zz+j?w-PCrzSZ`+oq$Xmb$& diff --git a/source/vlc/cpp/lib/linux/libvlc.so.5 b/source/vlc/cpp/lib/linux/libvlc.so.5 deleted file mode 100644 index 8191e5e070cf60a54f367cb363934fc3b5f097ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109472 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 S?$zz+j?w-PCrzSZ`+oq$Xmb$& diff --git a/source/vlc/cpp/lib/linux/libvlc.so.5.4.0 b/source/vlc/cpp/lib/linux/libvlc.so.5.4.0 deleted file mode 100644 index 8191e5e070cf60a54f367cb363934fc3b5f097ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109472 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 S?$zz+j?w-PCrzSZ`+oq$Xmb$& diff --git a/source/vlc/cpp/lib/linux/libvlccore.so.7 b/source/vlc/cpp/lib/linux/libvlccore.so.7 deleted file mode 100644 index d74b619e1a6fde58ff139d85dfe1879302af327d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 925944 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

nZhe3-^tG=8YYTQyGq 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

_4T%1m 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�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≺RTy^3q5|V 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

i>G2qqrkU!C$!kb~kU76hi;GF_+&3vfxLE z$`Ntao(>-T^L_f~bGHES3w`*7T=2l&R_Md~`orm|Op-1?J%RiRe2(fGNs9ea;r%Oc zmlYEF<8rR@ix|O=5S1}vck}gmg*&a*;c@+1AmjBsL4)j5QTZ}Zxz<{&`uBL&M5v3++n--WS5d2b(e3a?*JtDPqb>GJc+ zH9Xn*sNjc4%KTcc>@Ha7qP*M9H}(S(!H4I(zrdC(826))e`m`=r_MV6OqbBh2~D|H>upvu_A0@L z{PO;8?Jmq);QmCv@}0}eOaz}7Z#sSFtT;Tl7cHdd&#R0Re43uT&(L2OervZx{Sy-U zabtd^G?(GnV?w6jla~SyowMTbTf2+UPe|y0J-)J-i~LCN1;|c7I%mb~mI{Ou?t$^FCKUY>e7oYdRZCxu#2@Of|!r>&h8 z_n*LJ0m~NZwWCV2ae5RlSDUBRE}LMLTBlw=;k|v@>s+K@6Z|kudEQUE#r?M~SC&^S zRGXDkUB8@=o!yO>;PcQsoVM1j6}I2{;>N9Ag_TzK7XGJwW!n`n^r8Ia&F!!zmo?aj)9g{|^t4-k~&1=qLh3LA}1>ssQ3 z-_SqIdV)gmIZ%!yeK;ljCh!GGkJj(w{mO@;{ZH^Cg~}N5;2!oj3fy1TI*av~n+ySE zL^qPGT&^rz=$#@kbZfa7kIzl;BN=Cmz;)xih4lViPHl|fGol-tY-_u;u$IDK$}ya8 zqr0+T=V!ghm}~She@~(R0=8sf1b>{l76m`HVlqU&yRo}$q1wUuYpZkGI?+Cw*^lWS z%UXQpL95g3UbGk$dP|IT<5?FTDS;T;7F&5RO;?c9COtD;cr&lL@~6mj9`|JKg;q)wAO8Wv)CZ!g3ngc(NuRz8zl>^?H0!S_0tBINI1bOvrHiP(VVlz0J~^m6o2MDCBbLIHku09 zB@3hYGj{>OkLH{$=F#p#Nn!K2dQ$DgOE*h5=i^7ax%jc*vtb*b>e*Rwcu0LiA)$Yv z2>m-*k1C85U~Oq(USSabPA+|};72mf7y;~pLJI$a>>x9OTQb4tNuN%;w#53Ekl?re zlNbMV>)*AU#9rNaGxZE1=6Tk6-}lKOAn`YXPF3GO9@r2Up|E)~FE znE$*(-%&{L`~DLj^p20?ZmpWZG+glMHqG-4Y)K)7-`YPX{=)754sEZH;P>sH4}bCY z2ltXf3cs~~PW*-2pRT^Cut`Ioo;E(@v=y)MQ|)B7Ev_EdIby&$ocPhrotwKiN4Kg4 zpQp{!X@M;(`0@)kBS2$d0!g0sJ-wvf~$gCS+q0!TZ2p8ph8U z$b-LB82{FtTbl~0_UCnc`)}R6bMw}iG6;T5bfzd^UsrfN-fNt8V;(bs4I~1n@c75} zsid$_Do%jl2MEgXQr?yCs$ECX{PVg6fzvvsZ-%v>5zbN_GZ-O8DAwwj#YfB2;7hiY)2tEUk#M}_yVgr~f_Q+WSg@I4d&`YrlbI_o_v3M;tM?$q#w>36+%XH5U4?;?U_ z=@`nRX!!vxDU6OE!+tYM#}<51{DK2M3z~^29_>sw{&uGrKc4;UjH^Fu!HHD&KPZp> zTfV19rG*8B6#ml9g_{dkO@N03#+Tf;J5yNh`12DfLIxS})wokXt9MRE z_k{#MKKE>~%PhdMr5sIlR$7=>SeTzh{xSV$3H@`k-8!))=knfiXB28MM(~3%+21gI zDJk4)v*K!m|@YyjAro6XXT2L6lpF;&K_`zJWzd`#Ag#rAmK694;Ms|#YDevvx zp!_!m%P;)7%73G9`Pb&(SXW5&FG2tHhV{oxjtvAqSgP!Az}`}rfd5t&#|nbaj&U&M zT8Z)#Quv+zEl>G@AIvrT8@O*NOu(P5{J>|&IGA#6iSiQ?{9gYW=P5t%gSlpZ1NSY3 z3HY;>ANcGT2UD)im+AlIe)&WH_Y67901*6OuG!y!rT>@v9phliwG!ng zB=yhQ#WbLK$`AZtuG!zfP5&P#{{a3>;0JTf{?=%o)fH^#zkOVN7H{n4 z_1`1->=;K=uHD-#EWdGjYt6!b{9dp6q#m!W#mj5=a@ipYew3(!Npw)o0W&L zev42bxSVK{Ci{jsSXT74Jt3PJfiX8KHKg#=)_L}Wj z;nv1x;r0`JQka|%r;URHh3&Q5w~G=W_?&2yI6R$nInSx zmkO_cgof+Sri3pQmOq7m{hg`d3)kOz`A)?`^|0EJ(bamZ+dby^h6u~}C-{s>N0Mzk zL~>C$FMf%j;72mf7_q$aaNR3xmc^224vzIty&vh6DS_HRXHY$|`g>nApU-Q0P zF3Vf+m!-Mrd$U{I{|C5B3ghU1BRl6{e|H-DrM@QkoZs6NuEZ{oYn_lIxBTf z=rEg4sAa)lRKFK}!*@{0LgIfYxE->?)0xUO4Svyv|DjBH#+74ZoAy^o>TmVjjxS0Q zU*#~P>dh5t9Js{^e&WZE`NK>%?tU20G|p!lSL4<}e1+ec#;dsd??*4yYVpj{+*0>y z+~thVOyi~!H@i>b&iwhzd3bNKIhY%gu?4d>oh*#`h%DYC=X}x9LmN$tgzi`U^C9^OgHkW8Yhj@M)epg z^CT@FJM~(x)5Z7W@w0fZ!zD68_~n`ID^cU{q}9=za&DY-K~5n+#-W66z1pd9Xxx1i z+E5!a-D^I5w7b6icyoQ{&f2}lo8|4hk*Ba5AGfOe^?jA7m%!CpoldWP>fiaM5}qB` z9$R@HKQ299csyT?9=puvx~=HAu^08R%~317&dv0qZq@2|knDav;22B?{Aj@|GtF12 z9hC}9F`gslZbb9Fz23=bZvh{COLL`Ac~21!`!Fg%DEwf}h;CospxIBbxPg$g{~&Fu zQUONWM~!a0->P>{UOA`6g+~odgs-g@J8lo zs}*;TSTD*a#9%Sh6X6NjclG@%$si-2yJQHEeCgpDz6Dl z&-=dTNV3&%`G22U=cn_$&wIb$j`mTXWxiW&HMVVQ-@a$-ww^uhJ2!1#c#yeqB0km_ zAK=|$jYFgAHco4BhdmIMx)2NZ4h~VH*zO?fXcD569HC*-8X1a?S)(!ai|iCK$xanO z%;RP_UB+}Q+8-U02!}_A#IK`g_mkLK@q+Hz@o}lfv|c*#3(EBrtBL6PmAv0$crdPN zzLKbR$Wx=TkMo;UBmIMWZ7r1AsT#+4Q9Q{a;buwCv*tVo|De zgc9d9U0x*YdfiZt#mDVYUT-@#Mu~`CZCz#`=g_bVN#w z@j{h;(G!i;s2DZ(sk^&ji0>?rOfLv?zJHPg70cEeWR=me!(LgY0@ zO5QscWwuHO7+R}xNtvpbv%sXpT zU6C4A9J%l~POi48soX%}{uxzORX>Er9xvxs#_EzZ{X+NvQ7jE%KdvH_IznHkb5LH2 zFm#|=U2EcX-S$pixv(Kj#b)0|N5|eCi}nrnyCXMF%BjUb|LPl8+joslj8&ImB<>V}sfcad#xTp9V;e{+h|oYOGRIN9+ifsA#@bJK`lFMUUb~Jmu;O?vK;cn3%E~ zMo%mac%cB8EHL>ewZY94RWc~pqTet&GIYT00ZitWhF!GXyr8gLdF7SW{Mm&bNFJ-z zKO!HJH?t5~dSF!=RU(G%tFFAtW`&HsD_N+LmmiYIa!)L-t?LXkxD6={hvwG^vG;d-U8vf=vc<2IIfBCVBe98yxAMe#=MlC+Sn zxvd_GykT@E^)GU@r%{kt_Bv~o-Ow;H+F;rDTk&!Fint75uD`W065ZE0!Zk^2jkGu@ZZM3dGF0Iv2)kBN9agWl!ES5ipt5f%dA}0(@3!pvNVGpZ zF*HthBHaf~O+geHj2l_Q%Dz<+!L>yRQ+U+D!(|GnwRLnn+H6V8m97f71Q;_F@KO^c zF4b15)z()x2vR^ zVqL*jdgDHOf0VK-Eg|Wr8We&Q?F;K}KYD&BeJNABBgz~P?DH}K9 z<(yCzW$S2Rux*Cs{nA9Pws+7=$v%j-JkK-P@IGtG%(AB>avzd*)K4>|LgK?6!9icC7EF z(&;!!10Gl1!vTAk%EwvZsEh|tQUzDMkj76&UKG65)jb208`Xm`bcl}JHxZp6nHU+0 zrj#+sG^Iw6WI({se%N>+y@_kp6i21Ay1IIs8pOmK;^POH_BB`A6bCcDuv_fCL!-T< zq!Ek{(3z5_GIWv@6Q3h)e_=Af&p5_LlB0c1`%5z)4AwUAw}4eXO7F-bMR7JTbYuxv_Egj_$5qSMC}g93P7A-qlR6 z6(eT5cQq^$?cOa;m>8|sLnlhX?rOwa7$~|$*QB+Z4l)`ap(l^4u_7%8-8#R8DgiU2 z3fs6zxN*rXL!}b@Hr8)M<|fkst7yo8f4!6BKC=<$)5 z;@`mdc#LEi7>$qbYL-#&?h<>QJv~7iKhW&IprYO3DGm?EFW{oRWy^NsVw@pJbOha! zKza{mwaToU5`xIS2+F(YTWJb*dwTAdwmaIW{9=agzP=0U-qBj5+ZTz1FW_*CdiQm) zg^7ry*{)sd;&d#1()dT@wOY6C4(wXjE6W|8U{|viNXp)-N{}1cm*9@JplLoR&a|X7 zUTS_pdm^K~cyx?%FYz1dBM33+ikjEOSwtL(#BVLQ85Dz(CPmfsu-(U$RtkZ<3EFe! zz6o05avwGDrQuL*5cO0k(uFg$zc+fIf$^RE{$}g=*pSsSG;VDl80;UH-dLJDYYPpr zbsMdntPs)AQ?Ez&j>vliT$O8;&b8X!wc^CJ%CT!LneDj$S-M6wh>z~;%Zfw{RK&z8 zc-5;W5Cqq2kaa-yvXmZt@^4t`(RhQJytqR7vA3|~cf&ZN*TRpCG`n&J>)`_p{GRcM zveH&6pNJ_bzk6ShOMz_YJJ2^I=da$*pJ`(nM(8Y!x+RBHUAeSpu3R>6uo)g}aJvR= zB8$R(EKs<5E;ku@11kyRqlKTY>~`ftQF5s83A*yJ!My`T20gBPyws1a$a(YTScAIB z+E2Rb{Rugw5Q)mnaBL{tS2$_5xm4c3_(d7YrYHk}z6NFm6MT0+vf0$H_P1S$rp(j( z8Gl4eQq8hnkDOuSqVR;2e7v7@DA_N))s@HiN$^;~_r0#1)uZAUPOn3L&%|)-TJnm0 zcUf9OVp*?ptK9$dRnexuf3wNQSOmeY)tx^I4HT*l%h z;k;SvH@fl#iBuu-(KsuBw9iGK%SB$)zPLsgE4dotH^c`cUM-UXV1|N9?%I_@UD6r2 z_FXRF%NUJ+QPZQ0WD}f*mSU(XcLSROs%%AEIji}@;UT3f|Ma@@_|PbmFi*cv^p%F+{eAfr3*;u-t(78INyC?-PZi(ey!DZ0pd@eFMZTad7i$-Ze4=+juVz^i zZ%oq;x79ZP;*Ns6BzNScvlAol7+qM8wjkd(I#inY$d(!TFw<(j zdY>!!Ci*3rf~!nAv#2i`}k#AUq^(g8SLU7jdV7 zO*$3_y_$WuE5C0d%nG~bb-5qe*uVfR9xEPASeBIU4Jrj$c#PX^?l_FmP_cYR%nb-F z$p+atWVR~qd17+hm3M^q5lVO0vaKN3@69z<0-n5+C6IzU?Vh|l+E39OFh(t&e7o9? zbZxX2_Mz^A&0K(t4JDq(A6z8_N=- ztB{+(-oZ*{nhYq2^#Y=_&pmdLNMI^4#!M1HN+;Wn-% z@>N!c+qjm<8>|kuaV?RrwmRI#wM5=%mFBl=xQ1O6N|oCXxnf$XuF@g4F?lm{9bVpQ zx5xsDr_C;@D_6739&gsM-N-viN+G*dM!uzV;B39k$hR_zvO8p`tUbB2SYB}6+GONG zMnATiE^7TQSI#J**qu9yC`CZ6MrY6SlCTk08O;P*K zfha!;P^g zQ%r6CdcwL-m1p-O^Q#?{=c0snjjTmpDw8X%J4S~l*aAt*#VEUg;p)+HVT{lW`UAbPa-Cs#sPW@S|t%CAx@ zDzZJy>Mcu^9HU{djr(|M&ZrI!(GsJ^BDYA@iEX{v&l-p)U_Q;PIAUpI{WNA3c45_q zDN&K7TC?k?bsM?eVZKc^lzbl?=b*f2G#oE6m9;3@3~G?w?IJZ#&f7N1%Gm%YZy`1~ zS+KyB3*$3~-_1954MfGSak4?KG`Qa~40(WY4hJh&sDhwsrVH2FX9Y6fF~5>PZ9EncSJHHhg#Ygw?JG=id=wY0n+) z-5a)TZ)XuPc0dgU?SJ^JecjDB-`K#e;03+o%2pyCaV ztzU6J(}DiM$p;#Z@G4P|mY~E?AGSfPjHT9>GZ(p1P^WU@<4k)+t&w9OT0GcWYK^mE zjgw6`?zwR-dwC-hlMQ=ECS1+vWVG+s)HZv(4Us4(EFzpBIiP1mw28{K-ig7X$oeuK zwFZM7a#3J?L))H?ZQb1Wx@*t&Z9BSK+t*)@&8{|Mdgsuph7Iup!@Z;I$FZO^qLzQ- zc7qtaW7Sx6XiP_3r*nfkyr#T%gC<+Rvi!`9URDB2%;IcFjIbOl#}-QrCSr1?uz`bc zefKH@y}zxN639dncxXt;bsnylb5YuXQI&K>=cFQ|>R=38_LEA3lvi0JC#m?ZWZbfm z@GE(AyidvGTmv`%c@6sk*+S3Sk|7*Iezb_3L=LvVFa=_+W{v`ywp$ z6-)ZV;Yi6dYrLh;6N3@iXB#Myvb!V4o=Rndy@Qbw?C9xUeyy*=$+)(V&aB2L9?=49ligJl^ zti-wD@sdEX@3@DBhGGjNa>&&bdXp=h78vX=DJ2W+uzX#T0xWYEI~ki8ikGC>eI*5l zVZ_kbc)TQF@i6D0*l;gR>$ns>+AkSG6?+hm=sIV@8)tX0#CTwIqQu8IM~LGk$sQl> z?PLG9v_!Kd6V+AIb$DM%QjLfAl7q!Qv3Wf@R#I8U_m2*Rhf88V5gRE99=n6ZZtz&* zDeD2fgC*%XdHs!Ri*3APU#~92s%5x05^adnC`MGofH4eazzuvR54L+j3+|1X_aqlG=3 z><-5lj~UdEN}mg}(}Vt7)~r#~gF|=VWveLg#6c)EMYGta@12kVusQ>x&qOwk za$0bl11xfO#*zcnjRWJuL;4#-L=KNBAGv_t!&W)#icB6ZY*Wl-is!-JF2NW)l^c=kna;T$+qMg|+}Z|Yss*LTB>(Hr`2 zxGvJ$LNR(~mn3eDb9>rG)jqx#w74@ z%MKCDtxTd#OgP8gE6o$7XK*|=$T@1xkL{&DV$LidSIop;>(RGy*p*4)0lF>Anp$zr zN%MF7E$5th{&wYO9-H0NdIc%z#$lCYd}7~zeWvbrHj?xvc3m0XjN&%{VP+#hvUMbu#o?})NGi_ZK? z))w5hMHU&j@E%u|y?=7DMZ(A5YFRnQaemsuKk|8}maF-@uIO^qF*-6jv3Gz89t$J~ zEHjN41HBqza;hNkf?W{xazn)vtMgXw+|e{B?wtYCyyR~totn=%KK^X}{QPB*W%;BiMgt`HZ@9JzT%BMqp=v}%8m`HLL9d`^fC`w zp>EJfYBE}v1JE>C9qMwHWRiE7Ugu01gCb>Wo*WhDM4F0 z=3~Mk`Of*^*wr?Tt4svdJp~;at*3*ue}D-WRY@v|gimX$z{w-$!({PF+vDoNa%)T5 z4fH>>wd{}$F!AC>lfP+_W0K+kC+0b$*@6j$(43UFNXwyNOJ9SrMq^oaE=#3|ueJ zS60NnP9QfF>IC9~z=)P*T}b0M@$c7mN2T#q(pEEEE)#BZB}X!(kg5Fe&j7#q(o8|Q zMmI1!ewChShtyfZ3kOagZ=)W`$xu1#%BoM8BcU=hlEzI>7^J=9)Sb#M%KrZaceR5o zxvB<~QXp08H+NTGwk!_tRqS(e4@(^mHRC?k4z4ndvC8(}!XKS3autg-;OZUQj=U6^ zO^Jvu>h)1x*}!N@+D{@w?;O8+^{*&jUM{*d)9XM?ma*wECa0~}OAjJ%jHYgz?<)Ds zcZR2)h7Of^bO!)sNHaoRHU60TW^qJ>K3=VP&@}UzP}drYn$iUtE#zN(d{Y}uSCP%4 zmVUKfmtsALfi{aH@zwH=#f6_et=qPCY}&Y|bK917tF3+eZ9Ut9N^b3G+th8XP;%~4 zwMFCi%6^krSsB;ri20v=0n4~=X~(S9YW+{o2CcT1o)#43I;Yjz(%OkP+wR=jwXLPi z>S^B+>}u(0-);qWZ0Oq5y1lcdTZ~(GY-!)x!#?1S?VDPy;HK7|9o;D1v8kl9>(pKZqq5eh|q~g}fSObGRS(cR;>Z`P}l-6jG zD0;nAlBQ8E#IW$CP6pZa)+X=zE}IcD)~q)dmASPdv9jervK41|LIGEuEyF(5&r_JW zqNcAF(^+s|)6-|^S9)(%p&EO-w%e^O+K#?1qa+-cR?cXVs^a1m#aUelvnKehaV|q} z@oJ1)P4c20br+b$Xth>h%qU1Bs)AVzoM?*rhB#|QFpZol9%p%4UD|4pB`}NaDwFq8 z0vg0@j4?YDchL9LyP_j|=>WUTO|jxx1k)LJdeqA3N`4cPOTqrtYi{Nx-`my6U@JHl z-pkxWhqi$giIqbWRzEwijJN5;xkMdil`uZO+?te~U(U%7ufI+udA!+@B_SZG(s-TK z-LqXl-crD=jqN?FI=Mx-D!6TX&#G;~o=w}fZs*7@hmfq+c=SF?Hdg7}*@WnhGO-$q z%7&tQlhV?cI4tRe>G||7zM3*%i=Jz~$DRci!1h)N505Op^9UlD3lO zQ4ak^V+}2`WM^Gk{W9BxeYFYvYW=LAP`H#^IdThIO5Do0dXmPGFB0`;l@86;c9!fX zWFJE(#A?62(!a)7pdDKGRv9w7%fQRYf#rI?iW0DXc{tuTIJn$?>#f!6-b@|txhvRC z3B`i0-1hQ@#>P9>v^F-j_3(P9&K`!GxL}hJjPx2C+qW*amzzWR`}gl(y?@Q>(XqXa zJ>89y;>vY?vFCm#p|G@?iSTl~Q@-$~dIAw0Q35Iha&->s)|K&fjrv>lx<nH3TnVnc!&?j_sz^0O$adUi>Uy&KFH&<1? zii`Uym!xvb*>-(R)3g;*$<;+lxfoksPv!w~4jg;Yh@9H9R3V7$>7-TACvuuqV`OSR zEhycG(kq&e=`pvo9p2oN?W7U8gU7h8eS2&7rVZ_@wzv1}2(IdBZ|Rn{e-(}XU8{mE zJGQs4qH@u6cDHP4?`iK=j`NRO$K2z*sW*vOUht`J^gB~ca+yf z266^K5MxhQfs;CxjdIYVajjYLCaOZb!4qS&C)$fW@(mM=B(V%e|rU0MUS%e>PZ z+iokh)uHy?3$j+-f}7bQq-~%cO`sLeASn_Woo&< zobO*oZ#(lldZVI2(_;7jsnk6^1eGf#vgIyqr^%5S^g5}^Oo*slL)v$(Ez1q`N9y*B z^%e9sxg%M5t=?iUmE>vkTK4iYT6<+;%rZ8Oh#S`8NIiqz*3prM@UPJQ8hS-t6jR~w z2qV@-N4id_@G%mQcK|YUq~$MLXl9ka+^my*6gf9iE|H1JY4oJ*vE*hmrgdNUuqf7N z&?blS$Cjhx0$?G!=W74k4#THWzs#Wze-7A?kfK+e*hmzA6aCN6qI!-F40z+I((77zL*v78;@DzeBllt z6MNb!lTq7SxVWcV&q7Hl7P1G1f?RhtWmOEZOgqR}lM(jTQBI%e_R)w7BNG)-Wr24p zaqvRg$QEsvVm&;_Sc)NBN%fbjgV-pZH|zOQu`}+JNn*H-OdMr~!D}m``s!R?SniJ- zZ^}EalSclnc;_#zFjbK@RT_(kwY9N@A@{_3{)x&zvGrCr6N?sp5x8el%XVuRW!W-N z|1t#c<(WyUjLJpWxN?I3B{$`4nJdy?n2VAPERb50T#Va0Hafx4r%S8D>nVxM$G9#c zi0U>;0EjkFMvq(GdRd=PJlVAWk4Itsdmx;{PtK?o;yd z^?n=6;q~lT3^mJHK=tYZk#H+zpImEJrp!;8y{VQ+Xp-3CA8%Ig`%x1P_J45Fjeq3Q z>fZH|Dk=eb*LQa}6U3JH(yVcph>Q8cSqUieuA((efp=UGl> zZ^6>@dEIcizRR4V#CKWGrqUd~{=D&`nXc>es&=bcaT_lxH9PH^3M z=Kz04-g@3ix14usHk^05+s`{sb)0vWZ#?h(0e|1+?}<(4omXx?@9gLAY5w}LFXijp zXMgt1Exp0F$_rn}VF^4d-0HhmCTxq+Fd@5Qrs%WrYBhBAM9^5XbeVe1xh;>EwUQ zb<4PofvKznLx~5r*yZM%v@z#N8 zoSuh0Bw9#yX^(@y5=p5S(j&<}tPE`AH4v2j=%kn0Ud~x&mo{$IlV|c`JiVqPCn$Ag z;WbcqHLM)QhP|@0dF7VomD}kY!&j@F7GB6f4>G`*8+RD0(wn;5zH)j~S4$HeQ~K2K z?`pfA-jw1buNAx6;)>aRdzUsjs4N|Hi{EZWi9>qKc=bUBB@2w@9eBJ9OV`gmQZcXA zjYFwui!@9&BVg8mqv};=+x4p)bb{ISD&5rUxUTjJN{Lkb_Dp2CoOIqZGBMm69kWag ztJgHHm^FxcO)cD|-}SKDtp*3pIgbco9*rF|g{Hoc3(^bl&N6CdJ^vV&x4Sj7Tzq6E z%W|OIs&CFSi!u?Ff?)3|4)<=ELdpqg8AVDmLe;cM%U5J3k9r?cnRYV|Q+j6R(j~^a z;bgYQ5-UqE^3Fp&5@}a&m?~{il`~?#mCoH;<}k}4g~RG*wMJKaS~s^G?I>!u-O{$m zmRo+L73F@ojPu;4#w+|RwMqPGs$Rm}%^tn@gga#`uu4Yx`MubSDr3iXkTc+@9Vii{nKjc!j=3EVC9O}&>vmZa3jwD7Kc51U_uLwgvG zj_(=m-$Nw!NV#CfC;3o+fLm-=H`dd|j}O2|_`uZ-^_=n>ySllaS5t7=BhEMTCW@;M z%7%gYm<~v}5Z@ENH@xS%>-Q*k;;w^QyvDx=XGN%>oflUZyDv_gUaMYLXbH1OSmPv# zWxbF01l?=zy0&3=Jt5%TL7W|oUTq)LA~&FMSHKvWCYP%iyh!8fVHqecC&$?6TCU3S za%geIgQ+(jW&ixxh+axq(a(M1>kD)WWSyp1`l;dl#to;3_9E%et4<0<_ z?3}l(YsJ;FaUjAvQNSQ%)yv&FM7}(oOSBCCK&%P!e!{T^z61NvhR0wGW?=@(CFtF!-VGwqT{IOXl z0Yh*aCSe*{AD?w{BL5`m$34t6Y=Su$gt1Q%KN$SOS?4$mJWl*z>T`sH`Z(;sfm;5}y{r4<}*bdC~{QeuO*F|DVKT1MdA8bC`!o;Ys|1)=w!X ztvvsX@&SXtpuWiSDax;Kj&QKrA3IICfcbgS1NzQV9$*rlgc)eH6OMC)M|d9hpwF3g zQZNKFB8T%ZTQTSC>>&J=b50V*;0(;dd6>L->BUe$AXS4SmbzoGi>-I_KD(=+(|S zF&KLJoRfhmcmn!;b58vx+I84A3B8Pc-z8C*@@eG?_aD@DUNq7wAVOHd$ zq~qQA1M6YxKFnbjW?^uQ@a-nNar}h=7=yWS;vvryq?M~JUHPZK_v zgjtw|Ct(&^dr1F}l7BD(J7F3QK>PQ}9~gwkVGL%)9L|gR#|UqTaKldMe~k2piH{S0 zn1d%^HbuC@mSz1R<}d?~!|YM~?ZH1UKnn1u;=5+v539~RJ&(Gp7Ou!j={x56r-mF!tZ1-!Sp{3F!t?a0&)qz&=dCEDZh>_eapn6AqYx zX_)>6`7nz49Q6xk;1o=p#vd3uOFI-Jd~g8T=ZG)N!z{GU6Al=&PCHHa@mzJDS>>t1$jKNrf@W3q0 zLI1n(=N-sl6HLJ%%)kK{c#v?xES!OPn1jJXryc8l^dav!w(>9l1BVHR$l(+Wy&HRC z4)bFE5dIw`e$WqdFbMtcA$%|ar(p`FVFu2?9Lzy$ig>{UY+WanO~we zMY=hJ6J}uy=B;@r1Fa?V&I#y)d1$|E-r4zH(zkZrIR-;7pLgbA$~W)SzYl+2G4D*m z*ekIo&(L~5?z{?fn1msif|D={kHPfoaR*wLqjv;z7=vjz1#>VBgKr=lFa)a}Mh*ke z_eR`>!R7PLG_Ez^89wf^AW-i zgU}A)9?ZZKFwjf-PGb&(Fc2Yp!YJtq{d+@L|2}fq33K<7 z-q0Gtf9Quc{mMy zPf;FV_8$qyr-{dxsShwPga6R_3jWG7JPAY4`V8@ebub4zVdAT}3$3TI2mSCE%shiV zn1|Le_|KGEXnzZLq5oOJ2Q%L#o}b13bI4%~=3o+9e?<6T9SrCrrQu%)(>PcP0Lbe8m~Z{tMCrHo*)G!WBXkC5AvA%%+unziR6AWH+#+ihPYtJ}&d0s`h z{t|a#6HLIJFxWtR<#`S1^F`7H`l0V8!U=6S4gD|;6Sojf7+i-t$9Z0leHhw6IR1*~ zjl>fsVFIS$G|Y9LadI%Y3HvYveSeKU^uy3*;t5l53Z`KSX5ev{hbKhdg};A8y2GGw z3;sYWNIt;O?dZWkH|{@4IAA9X-A_1R;(;^H49vhhw10tVCVzr!5qv%>!Y~y57_${`3SQx z3+<2N&zEo)HVHq0KQIe3FqR@6pCY|JN%}zFrzls@e*BD+gh`kc`KQtQNA#dy_{13} z1cOf!Uzqz6;Sl-Lr1zHz_qRz8n9UIn;SUJMKjH2V2?q?qAWXs-Ou;GPf1?jGFc1Ad z!Mz#62?H<(Ct>;p$^-QO5BkFYrT%^eck|>2%)@Dz{2BQG)3dnqRpN0P|6l?h6P_bK zVIJB~6Tb6=59WSJc%bDFKj??YVE|@f2%Z#LFFH-n;13MK3><(tn1H?|FFMmO0MjrC zXJ7`-!yNQ|4f|CuIy+&e=0zt3tz|Dd8EC^3&=2!42&=x1ztDy;*aQQYzUYKt7ABxo zi@z`gXJ8WMU>?@}Gx{&b9?Zi8%=lh(vhw^&!jnb+RWCXL=)demXA&mhw8&u^X5kDB zz4}GR`Uc^64e^KR*Ajl1c|GC$Cibp)(V2pQHxdu%dlUYC3wPiov~AoKu6)rs34_;Q z{w#XeVh-)KFFMCy4CY|)2IBo~(hY{7bra!%sda?oUwCdM95B^JykKx6@q$@+Qp`Ki z`wsDfbubHqFt`c-U=mKl6imZ3oPoa0#ODO|U_A`L08HFQ_+TF9V5kds|CR7UKg_|H zJa2i?Ny0ol4t=-d-oNqOO}@j>4*Z2lcwBe~?!g?a`!4Bl=Zj7!%)w(YIYRjn#t6@I zgcAl}>OSHv&u|(B#&8cN%&jgx-=jyc>3^KeQyLH@wle%$*W>2g2m0b>V=KTN@s zFbAvtgY-%eADDU&doXhtcXOD-0L;UkF!OHQ7x{b8gMlgH^L^s~KI#dK!4%BG6VU&D z%HI#L{~_$d&_{_cOu`II!4ok17~%LK_CHQ}fhib-c{l+5e}KPY4v)d?Cx|~xrm*)s z@rO3d!X}u5L70aF(E23l2!rq#Ou`Jz!4ohK^U(Jx!uuoqgMJut^DrgPpCP|t4*GtKJI8Pj=HUReKTCXI4yIx3k0{3{i3hY{{*Un&CO=2G zVG2%*IZVUgpAdg}{yg^n3w>zA;GdGt(4Qte@(ib75~g4l9*6dyVIPLzNtl7weGD`2tfJ z^k5cFL+kH}k32tx|Nn#eR|!8%!x+rNB($C;-=H66U;v&F`PT@?{}NBQ6Q5n|cFt(E1tr|AN2J_Z{4Y zxql;_<@tN)!B7tOp!I$7{pW=D2ZRd-VHzgj3{1lu^!<=@{{{X-KMcZ77=j^~fRiu< zr(qhVVIIyv-}ATw{cs*;U%>t;^5=gjZ!ifHFb9vp^iN5bS@d8%^#2_9VeB;KFaa|# z2~UW89{oAe@jULq{F1ZI42)HrbxuNmRxcIDd9A+;$>r~C7Uv<`r zLHlKAoeWIFJWN!db?VRHF6@Mv%g#E}(0=t;ognmIdDcn6*b2e{ z6Kl>ob!YK^?O7)PlQ0DRH=K2*U=XHY0v?BHn1#M3!gUUNupVY%2xe}^Uzmp{ps)F? zGYV@b+`Jj1Fg+<`XC!2k?>ka)w`htE1W zn1A%F<9`|PoF*S&=wpNz=Ac!L{m1YZW*^62nENd0C47Q(tXX2&UpVUwK5UNHR>?p?aX%D_69g?^ZWozVJ6{DFR$fXOcte=(oIUM=o?g?Pa1Gx!Jd z-^4!{_!i-X_P^rp%ZWE^f?2o|`o2s4!vLItsps(5hkZBz1K%T`VDLY1{}sePhyO7B zecXkCACR6f@k8vr5`Ug2oX`&^VH(cB+>c4`S7HCZ@E0cj8+Tz6W}*EP;&B<~(1!jO z(1QUOgTDVIKG23UFa@h#O}hLPe_l^?K~T33KR&A=n9HFa#5DQl2m8oj5RX1^z<&jl2iRMjr-X z0)}AlP3N41$a&vU8rr=7CeTD zPy^|{68UP}hoNTNgXwkn4>PwC-?xw+ZG<2C+OZEaa0UiD+HWI$t|eVy9SlG}48l$rf*}~&MS8$2oDuW8 zvA2rw?ZzKyy&d<3A;JSgu&M!j(1r=v1oLnw^o0pO4E0jJU>2T)fj+{qnskSqFatv{ z3nyU?CSe{PgRuzy!6clADd=m&KCFis7=T&06Z)d$1N6fb48Y?s1W&*uoQG*x=f^(u z!z}ECIT(U@I0>zO!UKKq7_?yq`r!$fg}&?XXD|N4AdJBrJTA`z#2bd7bv@|>>tGW4 zVG4G_Gz>v|knqCK@v zLpzQh^us(1z^WT~-iIEv_Mda6pgoCyFafO_c}`FtVGvAu5Dfh@?!!P9bC`hETk#*(!8G*44D5uVZxBBi_!j90V{iug{)OlyIFZ?d%Fb(Hn9@e!G{vQ%Pm_AAPVHR2&ki$Bd{BQCR`hG$>2wxzaFaWbK z1oJTSGs;IR@%#nl8~RTX515DbZRpS94)o6xUYLP1F!v(dmd8ck8;d;e+CjeuwJ?|u8whnWcdi{B)s*`ZQ z08GCDbC`q2VC;?PLElR5R&64jZ#nNY!PvF<1Cx#Cof9y_{j2)Tgy**NP6%e;B+SAj z%)w(Y4>Qo}!XEU&JPg9B+prI9n0niJCk8Wja|aA&-;N&4^&#&f9R0{)8s?z2m+)=D z9Qt8k;yma1@NYly-%5BVxmO1B51e;WF#8_dgPBhe?`_DBo_BUa`CO*{WsCeB-PV#x z-;&FhT~d|AXa({s_#1fZDJS-FzSR0UYU?(?yk>t@!g}lLZ@Fg8isfQeblUg}22VL# zMbJ{~J5*88Ra+$w`nP-{FoF4yTHgmM+H30`scf&cA6~klw*JUPEw%oKE^eu9 zI&{hA+U%0bp{nZICS)zO^&4vK4YhUH*-%^6S%dYp{5`>6viFqpA&CNJM=I{9t$V1l zrPe;QbYrc*;#hU9-BMdeNU+r=wsbgU$zZ*y7q|QLzNv8p3SxX%A3BaEwxq@@m?r2k>; z`)`_cOp+nd`SKX@`ZDq-klSVC&mgZWBYz&bZ-HF$?Huwd}Jhw@CZjw84%$HP)Tj!5_(lKOGz;)>h9L~y=Lg?NS_evL4Gox&t0 z4_$O*>BE(eNGw%-d=~e7&9jcG+bUnTdig4{Q^x#Kv0y$TU$&I;fW2b5k1VB5oA|WVhPZ7~t*SZc?p1SL zVa1)taHnqltn(4RYk#*%`BVN<&nJqj<83v)JW@V&wc4n2U$<6fv`*7=O*Z|kKOZ+N(J^O2>8E~0qTB%9Vom%k^(fArtvl|R*< zma8{ywZY0IOKO{17qzD17avLIr5Cftw1IdV_a3PTdgZT>Ule6uKjC%SY9J+)Lt~O23|3`##FG^aso6fM$?O znb7GPs;;fl^;*nVVLp%fpl4pO9fdABv?@u5F3dYSXPvJ}Ia29BeLPgTvDU79H(6bG zo64E(D&f|lauEHKn`WH{O+9+JVv`py%H5%hHr56zBb8<2A?flY_M5iMI?G?pL!rEt zs|P!1Y`#@Zaa&vwbVjQ7?`5<%y`|+%q@wJdT!rW$=|4<&qU=*7^x zQuHWAzkr@cAIC(7twnTy#f5Wke>LrbQ$f@1;Vq!n7_jKcc@~U7v3&pZN~gT z%9pN()Z_BwxVG9@#qyrh(dp@=4Ff{Dt494 zHq#G^zg@NT5AT|FZdv4Sp}mmw7)Q_d;H-04^cJRv<_%}x3_-<4c^rIXPtLk z*#F;K;QwtjyQ*Kh8~ZayemnbJlK<%4&xqGgOZmCtRpg)8_wt|i(Tod< z=H*{rkpHUPl6K;5?4RI{dSU)rm`_L(&Tzt}WiIKF#NS7;7x*~+k@0s?`@cXn&Ksqvy(50XX1`*f}nUNj0L21&QIGT%5l>->qypW^k*LceL&e}WZ{ zQ%o1HW}1N`L9q_wUg+^zhhePuk#IhSd?)f>h_nz+`f)R^l|;=f2$oc3(jI+L z%FE)2>-mL*?;!3?ety>3;icn(_K5hIbzzwau3;Sm2_t%Dc)GVEUvNi0l8(>d-qfGY zIv*GJ%x5ip9=Y$&W}WjQ56gJF^7ochf2p?W_L^4y-64_=dEQ*Jxwh&{%BI-6;|CdtaM?2;ETLV!PqzRURD1qe&jZEVyMSM2hnfh zof&U8`F}*#<=k=czv@IFhgE^O0z01*_j#AbMsa{}AF9~H^23&zZo)6=@eJnEm`hrl zcF(Lo?8LDSm2!8mSYf`3mRxtYma-ur@94N(`mrt2&vttKqG|_KIrPf)!%|P$zC=m< zGDYzj%Hr2(B)(27@y{}7Wlgc_OJ9EGYhV9oabLm}!Ts2iv(9D_kgg_OsKOs6V=;@+yuDPR9M>%82!_bb|c=Bj0q$@F{T-a*{k`Q^gAV^KP(a<^I9XIV30 zrc=f}-TmtJPr`?LYF!Z<@1S0YKhGo2l=!3CZM9#qD1QSLLHt?V&KB*btd+|6PqPkN z)5ZB)-o0SOBW2yw-GB<;Vcg5(-e+)bVg7pkF`FnQqn(x-(xaX-O|4r^uTW})unK>U;*bC9v(AM0ui63CPOA2!;x63~Fz-|Gm+(G| zeggevqHjJ@k6u7NiCnb{xKq52tm+YQduM4iQu(vujkG7&t0_&-1?#M)eGFCBmrqVT zFp+SK<6ek&4#gyFh4zVkLMh{>yKAlS_GUz_jla)fZyI~5zbM$F3{?6HeddOeK9kno z?A(YedR}%4chcXOb^1lHARXND7Nc;nU`s-yK;d%ROG)3gEU4wMFUwu-N8;6m`~-5< zKdJCxU9Er1#1UROl0U%ZcC#;vOS+xX8r zqk2orzbY49-hPj%XCdArSGEFdtm#6&cpj$%D)X76_!Ib-S?9A7PL-~#bE)XDm{Xk8ctpk_BJV+-L@wQ*`w{t&(HFO+9l6u!A2#}LG4imH zKZg7m?f|7P<1}gCo?ToUwQO0kwy37#0q@C%MW}!r)3YgUMCvY!|dv7=HnejC49a_q? zU0PbzT#B*iKaalk<6lo-%I{@Vct864_`Wc_ZajZyLEucYs@9i!uph&|U+k;)O3m|b ztF?6lF0GK1^MmM3qW4bGE2N8>-*-y7(Ed*9O5*iHtu=R)c1&WIkA(Xf+&hMQ<02^J zPlYDvWp z%GL)RVkt6LT*dmyPiCFf5}=ZN+^Is#G)kp=8+tZ+gQBP6MY@@J+UDB8zT#!C4$ddo z(G(_j}4uH(F{czki{17%4|R_4L>OGwW;@zYF=S_P^QqCF+b;#f*>S+hO!$ z=oj*>(B3cTe`H#HR+8zpYY0)3K#1c=6srRNA-)ee7b#S1hHU&s3>x_u=&!9J3dhP$kK-|YCm#u+o4M;4^_&#I%8w;zX$!qMRQKK*I#dz^r0O!=b#Gp zOxD$xm5+{Yhon9q#l2+JoWpXij04%_*XvzRBA-V78IhCU=KPErx0rr4Q1MXdw0Q-p zr?BUH*<8^)#q6)!akrUQ?b;PYz6rgDP5CcgpR3F<=rXO?rkaYd_aKKL_(;0l%|BB$ zb52+Uh4z#A38$6BE|VZNNW)mdbp-tx^b76nMl;U8+Y6VBQ=ULCi{8zA7k3X;(6Eo{ zIhDBcEarL4rC1gDOUf}nGPA)hjLxAqkKS$*zv6uWHUHt{pNeP6!o%ho_H9bKP{}Fr zx2u8uwc0toUZ=vf!#kH|x>;2|#?kYm_o!EYRQXWjMpZs(M9le7Y45HkrJELy+q8?4 z9#7$3;^lL?Use8&d+n=~pXV``chRy81y?jFQwEqY1xzTxGcim#gY7TOmxUkX{`fEN z4raJ#!s)IvP`(Mbj4#(=^c;Hg=(*#|mstN~f?U$0sD?+E2Ix7Z{1$h_ zdSRpscY1Kg|N1#+i1iiS4;T8M!g$8ihgbzisLNCb(=bZ7kK$hN<~ipBeAnTAj~8yK z-%nvK??zrK=H?^v=a3&q&Ni?25&0>jUo4mOT*d@>2L1PowkrRsTv1gkSPqlyR@+cw zs@6HypwbvF)x%867$ef(=$*nw{wD3 zDzmPl67J7oZxVY9@4S!5pF*BQUK}5(C(j|DM!sIOReWe?Rr@yJR%g{uEnUNUAbP6a ztMCwScOR<1wBSno)}k-(oc@rwtLDk?^WrDz*n@fO7TzH%=E^^t3yp!OHvPn6Zr)r0#J$tX0?&?&5?pL2cKg&C-&#NC{IAzO ztMXWGokI3me^-Wui`(bTHQ@`iOOmf${4>QnwO1H_Ons!^J;Xf*f8{e&Wt*T9MKV>l z8|$!l7<-A9Ip+z!OL{Hphb7V8y`a-I=^^#@De;_lbXS>n#I$p?$Hn&zh+4%zEUvbu zW0r6%yMgkLJ7K;{ILf%4o;iB`Mr73NI~(*HJA-%!%~14pr!=qKMqpxOtwzwf4b(Bqv>YNz=s zTB?114tvwsdzq5xe=Y;3kSEK?mo-s;%g9$C7yn;X8t)iwR08vh^_9lFqd)^K|g{19~u4PagMw1b~lB(c)zK= zW^92(&j%&EPvBk-_X_QQk^kPk0`W|rZ+ISk-vIAO_v#hx$f9#>8*9^*a++x20z+F( z1^eOUM?1QFwy~fW8k}?fT|6ZHiqEU5{WKXt{6py|PU`zX>{am_1#x4qc>IQy5WR(W zPjX|;eML_?UQc4bQ-15f*e`Cc@%JIQZ^S+W=a$VtO%Dh+*RW?=BH2=NSE)dkiz{xS zJ;8m3jiy`_`dMn5?#9H7kK{|2(a(rLm7{`w#pg@=$B*m(SOkBm+McZbWvb&h=5XBO?Rs7UnY(Wneh$A z#q$ORz3zR)cc>CeQPM7mXS&_#!F~w)#r0L%iy`C#$YY|2rQ-c(HQ$zU(p?%Z3CdCa zNnwvy3KW+w*5MwK^*q@>2vpX}Jb@(fVx)I$rQSa;_J`*d?Z=%%K8?J%y^;EQ83RVq z|IgC#(t`bNcRouSTxPnaX9GGtBDfcb%{jHW?S8J{%R%H#$X_i&N|WqYRv86?W<6%i zj~MfZs5`?i~<-)8^4_@16Q zpA)P|m+jR|1jW5JChDp9oO6jcu2Alkn-9zVk6)CZ4;R)m9>u-T*F{d7ybrId3JgQ2Nw?HrXyCT5+^8tR#!{`_HUtYZ(Bs|3(7{@Sb>nT!R zeH6=jemEXr{DFHP5kaul=A6PyvQ+8b{_C{}T*Z1#54R6bh1z^Vz1v}9~3v)-%U zN5GX9Ne10tn0dYA^Fi!QVebo`J=I_6al}2kR+AAOHJrgPw#}_4J+62X`&AFlIX`-- z_!ZWfWgYR~%11+wD*ooBJ1 z#{LPj{$73^r{eqq`)xIquQ8p7=cYMbr}t@AwbEX{e@@@iC!dSY{}s;5t9DcNm3EYC zEu{X9<4z2B0w#W@{;B;jR^Us<6_Soe(NCcNw9$W9(!;a|YWyhkS)JEe~vmy1{j7( zGKqwsrDh<*Qy5?Z!$abzSP;=p60{hxQbomxN-HX+RH;QXMpRT(nx-vURE%lGN|iE? z^?u)y`6*oxAV(?7i21T6^ua*WPCz9;_UcH@!}j?icK@xLor# zFzOze9@mXAj_9?v(q8xTEuBkC=q2*s_{Qd4%#*4vx`DI@5<8*S`@s3)M(4wH`cY=y`>zaX_wKoJpIeiQv6p(hLH*=&2uO^gOX&)o~X1AM#c{tMLy^g?~`f@66Z8Ew!| z%F)p2q2JA2HH-PgN10zbeYaaA^X4SKk|Td1IRaG14(-*L`7$a-r3mt>hjfnet*yx3 zn_lNk+BN?~S--r#`i&q+#hCL@6~y0%p*QtG=5x{u{Zjp(0I&PR`Qp4-AGt{V_ZD88 zJ#7#Ai0IYNhQIfpFFq}9&kOPg{5`SoHdRpN@~O#^h0yDR-r3KbFTOjYJrnsR{$5(y za@SWEYQ@TB%fL~CTKS=0_qp@MZ_5CC!TxP>%IrK3sRAnVYo;SBe;fMUDb~qKWnVo1K|6>ZCqb9xmIr(OCQ(^ejNOT3T%4v zAI18N{0H$rh5t_Zn>{wM>x=Gb{JZ$Jn7tpaFkG$NUPhu!uJurlklDV59Lvq zR&8j;DtaxyH^t%W39^^)y@dZ`5AWxfAUpDFqOnu$bc}G15$@+1?PTK<<3z0Qur5EG z*-l|yUiqBXj=lXC=i_})16nkT?959`2P)|^9fUth_?2Ft_p&Ylp4e?%FHO%2yYg#G=aY(ej(9tW zw_Ajgb~pW(HuC|P^MAtoyQT}Pd<}ESAMyS*E+2BBbe~{X;RA4giDDiYMf}!7{C&SU zU)<*Drsvg({L>HvKa?Ld;1hJU^FipGh0fBa@sRZIq(7Rxw()irdRpQ9Mf$h$RRz)7 z!cdW;&5T}!9mU35zJPKy~VE=&5)T*K4TOcF8PUfq!!MKu_vfK9)emUXowBhXs(%bZ=fK3Fu;0ki_4Sh$b|b1a(K8zecZP6J5bllq z5Bc-;-A1-(dAP_9BD&LVpgfoI4Z1k|jX{5H46B)twQ;DGaE*jB`NSb7(Z1e=;BDYq z2F!tLcCUQ&fp>zh70zo(11u@fuj2Va`TEda!tWvcpD4WXEBfCy*~P>Bq9-M$B=1fT zUf(86rz<&m27D6u>-nF<7AAW`-Q8i|g#2r6B)|AyCx4S;H%+eVP5c}1-*gfG4*d6B zz+d&*ga2bu`qobDTh@G_F=)N2PxZ5%gsZ)5D4rMHi&3b&pXCQKyP2(zpCJAY;=fbn zpq$&Z7`%o0YRPv;?X2>S6K})RUiHMAHpBU`O)j61+gC3*7$2L0ZtJv-JWXa!{ASVr|nnP z{@`c9)Al#vXTXQcaMgE}2BPYr)cXe}=Og|?`>KnluQRJRq@IF(tCjdI#J75clrE*W z5PTCjX4?1?-Uq%X10MiC3SM5Gz2L{e%gb{Z{ILxD1o$cN^7=Xh{zL{|bu;xf@zcS5iB zsY99iOcVYG@!x^}Sw%n|+{-%)CH+Hhi~W7+C?vXPh}Skbo38w8SWtLk{5P5F+A3!Q z{`-jE@8g8ef6K<5$ZlA8Ju-Vnr5+f@LzSZ+dXMqV)W70?Y5k%Jc?Vz=-Vyy*Fe^Xt zx@w2Q`#VXyP~Xf4{pHSfdkZLZB2CQ{?+o#F5%1d~l*H3IyWXOjV?A?@-v0BWs%{SR zjCurSYDAF7e59bbT!HPcOT&!uN*4A$ir{Rv&!gim?@o|__yHy zJo)=2d_Q;_xTdwyrG7i;;h!OpvH~0ug9Q|+PX^q zdu5e7pUUNud~BXid%Y07QGoTQXun)<)D112Zo+LQob@~7SM+A@Cv&Cep#iW?has>; zzl-Oedx>9L&o^bCMmogLwoll8?)J%N^Mz}&_Zh_W&Oz_U?+?Z2H@N&{-skeVgPGOm z%E~?0*o-i-2)FsX_^kCd=G(6vD*jgWV0>%y0_2LHFFKo3Ankn7baZyjE-U3*MHjuD z&^s=AQv*FOZz5-t{v@_N6EZ4|8G`Ww!+aA@%{+Ok*&mUT+6qnMc3pA^P4RNra>%j z^Bm2y_7iRf;UvzZOZ777@sCyUVDcf0uYBK6SK&pP4rl2lgcTrORHatV?uE$Pw+$7q zjP0?E>%LFS)@9S_^y-D(4D+&|GopGs2t9oZK01dX{oX@tXF_Ev>0EQ|eL{4^SboRn z#Z~EGu=@M?Z9?-#=8cFGTIN6TA-mWul+(Bl3{f5W-r+gp|XIPn+k7%JHxsP>)Gg**q}!2iIHw%!P9Ie*^-f8SKfeA5WpLA+hW zdx_$aZ^q-$_&kbkPZ#`!zwOUR$_0O=*MkdRLYTPNf4%Jo*h{f#c!0# zg{0o#1~{sukIu??o2c*yO=H%3|c(2a#`aeOWrj--({#^SQ442O(EkFRVN6%=8EgrG2E+PdZco ze5m*audj-BF}>5%>CFEIa+UjXW>&KwI7924t=DKc;EahQrH6qjCCZ-0k8`A(`w;W% zI9=YGN$*=u#v{G#v0*}1`5>WdD|hQ1j2|B!iqBEaUf0wRejD@XAf#!IQ0>&yrz+9w ztCGZ-Uf|AF4}j|~-nsS+e|pVDzqp`U95W8P4mUmuSGHvSW@Ztqa> zBXK^^!!D#xbQQK-toCT){m%5Hq(2zH#QNoX zv$aU(M}JY-Az(?Hr%65zkk0VFq2fIL2f1(KD!qWc{VoybRvpUZ>VLpzIWip~VhT=c@YokyxRH#S5D!kT=)D9iXu+MyMC_ab$ z;_|F;z4#<+x~vTw84bY#aTZL%TuT2K=^y(1Q2bq-bovP&MDn!otZY7=Sv@~9d9$-+ zJ?VEW$3Av&D1I-K?*Ls#N19oEJ-^ph>p1&h{~}!N7t-r4{n2o4>tj3dZ^8e^ zDpM(@Wd-`emxjWAebZAo zKlS>70#a#%Uh`JSDTHe#++&0jJ4ToAdEm!0@E-7^8TeN4BW3tB=C3a&o4ud&ByNvE8T^J zTR^yX$LVJ2Yc^iaLeE%!kz{S&vmbi9zJ(oB8L{?G^s=({W}lW$uq}}yk@~0Drmv1e zukF}S@#mhulJ}$OvuaIK4E=agPNrlR%%0%ELtAxM9B5`WXK{K2bH8(VKMdXmK3y1v+mc@#=UerE68{DG+rB5+ z>vUY|%xaDtrRmn$f0PNf9ED%|m`k+(LFJydn*9Pl7z*b}Cgrw%zc#97rOl=EItV|N z@Ph&fpKfoo-sruNd&A@=Zf~=rOU?`se;@JhQhdte-+f?TM1E$dWd`n<==FXIu7WAu zLE@by-nRu2Fo|p9~eR;J@su z(K&Lv!HBkci}(%OQ-{B#rUIN|hZ&s4kKIJvWr zdW=pt7I*pshv>4CKUJ%cC+dFa96kNNqoaJEgU*qkCHpeAX`h zawwepVRVS(=T&KT__=g6lg9LI;x(*AA0ggUPd_c!%Jlqp-d`=8lfF@D88C%W^!lN< z{om92a@qKpp8t2{&t_8deb?%D$DlX;H|!sg9%%Bz+Ji|#VW=uv)5lAf@jv0G4zr#T zpctRB4*mzfE`_TPHh?bxXIaVUqu)ksZt|i7|6TZhLH^XM+i~d`em>qTM&&;*wd{!Q zR;4$Byih!o<2vavT;kWg_&4HzgP^2b?9bT{nI|p%W6B@lo)z;IqSEZL+DPn%%sH}y z`+v5WEB&fI#+Ol-1D5`hIDOSqJ^r2ezf|edCM)n2-VDARyvcFBWh8ta_>K&`2mBDY z+Ddem5nkon3Vs}Xj_{;>9G!NLF|+!k=z_`EfOIHxqsz;a3Vs>XR`x=J!UnB9tsrsJwl|J4L)# zDIVk9A|&eEYNp^kDt|j=c%Cp^vHrLpd=j{=W6=H^h#`7|;Emw7@xMIZ@;{A#Fa9r* zzwtM(a4`1j94)0+#Q?S$|5wQ0FY)L!@O|Jrgjqa>KvZ7Y57?JJG1C!d{AxNBmjq_c$7HU~wodbs#BxA&y&e5O}Z zH+mmr^8{+P+|K6;p7J#goyTe@-_xUfncXOBUNl?htR8+!X1jkSV<4M0&eV!wHC*iM9c)x_#+(UhWzdQnQMZX?=Gx)27m(gERMqlkZ zkMKJP|6YZ+enS;Fb8F};iQugw$C88ft{_G%2+nLcK)Y9gIM(&_rW z;o=0Z58vm4-lOkNZ=R&{8|qSeAyIPsxyOk&xZ;(%=B}xN<`1LU9JaG+jF}8cMPrf1@w`;La>}T2f zxQ#0+bIn`P&t5$opHosXe<$BtCNc}kSb&;F{0`zzZyqjQ&HvC2i5{tT>cM{o{@1&I z@_q>W1%r4E{hx4MgnNEW=M8E?yOhs^?*DNi$vA_MaeEB3ka)8+6%}3nM`FkLzwGukkg*CHq9xUOnK`!M_#D zgR=QfvW~=fTPQp`yOYFv++pbLYZ>8I*(HZC4J{U=x5#d*WqvS+{OdVAi~vzvvo7|h5ug( zDrpaG-S7^^ewXO4f~j8~-b{Ij_b~yCSTHqm_7@TZh9wYKs@oJFiUQh4lsTK_B7w z%w*j2ew*ei^f!CYZ9?Hyj4mat6*fAP8>k0cE<#822BCMn9lpAZ2a`9+I8$~W?~Ri; zUs|{$TfelKbU!4f!0?^(hKpZxea7ecrWYo5X0u!Cec-2LvnemCs`MH13nTIkSvW~s zd3KWij`_nylc`o7>nDj`YVyAbsCy)?b~B=IJ#9uDV)lP_J$|2gm$@Rta% z{C7p!H~%SHX@C5GFZNH~x0PII!oLgu`R*UTk6M>+k9vvHSxC5Dg!}WD4kw;Yx}}=e zNbP;Re*CAd84mldC|COZQf69xDW%2Av!C!Y2tQTy{A$1*1aARv7M9Sl@c?^PcbZN; zLCz7rlkhhxy!BVNZ`Qpz*6k%Pr@aIF9^uk@veIh;-wci!(bJKjv^Vl;&9@_lZ2Z= zxaj>9@5hNgoAe{S?)=qE)yt$~n3p$fV}5YgaPis7pI@q{R`9M2d?EPq47?A#Hv=C4 z-;{yx1>anTx03E*@a^E3GrV7C$qAEFb0>Gfn=>knBBE3EPTJ>xNk{e20i9v!r1?{L zH+XJsCEgD{DFfdLUJIV)yCz8N2cHW5^$9!}ANhN(o%x62;fZY~-;Ez;SBtMs6Ys#f z;rLwR@ZG%5>Na{~TeVgLLi^TiC;x<-$a8e5AJ>DQ1-JZ=?w0(`vAj^9Yjyu<|98dw z7j0$&x>(5s*fp{~;%_DX@xI|=y~<_s+16*<<9V0ysqbIu)poDScBI%J%k;RO&jV(J zS3e#n-RKN5xI=`SR*2F~#<{ZffDVjNg=c8KTsh9!`k(sA z0Q9!Mt+alH?*-osei{FxOa1mR_$Kh#RXmVS9~aH;V&h`rT4p?T2xmOWGfOJ}o_aJ= z;@_%2f&LcsCm}}1-aBLb*j8oVVc}@R%km#D)y6D#*mu)P{MxO<#TUo?YxSSJXO@ij z?0TuUoi-nosIsc6Fg6pL$kN zy18oxknit8PF=zS^^pA@pZCMg!Yi}&K4$levwhU%)t-H%Q+wZV$-2I^Klmi@rw}H( zRKC67Iq+A+^=o`)-{CNQ)auvt!Th741I2n2uc+9_y+Z7K=0+d{Tp7-@5`2ZO1Gc*PeA_~#rI42PVm|t zrTG!QAAAycO%xbc`5Xk#fj0=Zd@haUv*gcdr}vQ8U$*>_3eZ|9ey*!7JfG$)mrBvb zQ01%jKIFxFe0*S9sP${*Wg++`@DctiU;Z9G{VMtoiw^y{>JnfB!^ZtUB!h%tFQk9aM_``Yx7UUok+e#JVBz&g|jFw<_;m=pFg8+n22#O&(K^h40cdJ`*=FYV~-6@CT0gdWMB3e|B!DH53Iylq3O;V`ALhbo_n11XMAlq z{?0^Vk6Ia3s)eh65B&Du2-iWl<%CnS2Yxqwf_9o8(^G%xBU~@xmMWZI!Uw>Qf;UDW zZZr2@@KfLo-hX|ZGdbh$J9X-lJtg{;j}K~x)5Jgii1RW1lkaJu`E~HU;b5PslA-?V z!27VHJI0HWio;!-(BKmarXdSTTPm!^;`}ew+cDyAC;p2SAFk6VApA7=9`I)d+{&eKbsT&j_}>Um`k&b; z68$aGyYnB(>P<~VZQV)zeADN{>3V2nk9AzcbTtIMwV!wkh<9(SKboC9>Ho>N&U;+> zLX-5zO2drFC$;4<=kR(G_&-;Qq?NbKE}x`l`(@ubiS)qA z>@u;PtoePg(WAq~{!;m6^_S=+{vKFY{=rOY>@V1#>0t*MUMP7R_YW)m$IyS{@^T2P z%-*!S+V>>>!}zzx<38uh+*@E?Rr+0o&it{;0p9o3s9x(I;O8IH>*sfnLb#MpEB>|k z|29qs`B1U{&gM76l?jD$y%{xcDJujrOgut4dCxO_#{YIn{G25TYwT)7}q%Lhm}23wfgh;Mf7nj!)K>$Oa~E zUM#?V9R4%I4Z0?wZQNK${N+Eyjw!&(W8*M-dDu-M`8x%#t%Tb_xEl2Xzm)!N@a?CD zi+2h$c~Dlbc5Z@>ftypIpDF%H;vXXZ#?tuouYoGwBJ%UmXJZ=SJGo`E&S}J%whR6t z{(i+r9@3vaL>aBY8i1Pd-~MCPODFSSCMD}0tQoeH#X)XLqiXFiGj2FE)mIHxK8e&X*tUlRW_3O6T-f4@I>$mP_}1?l)_ zRG$AFF8;mJr#{o?0W1kzh3-eJOA$0;ES`KDuFa1cK7f3=WTbd9mLI0Cl*voe>tq*S zmThKd7P^%VU%B9Ca!hh+C+XBaZKU`z=1W0N!RHrQ*SjryUC-J{^>!M1XP-S%9P$2{ zeoxfavEZY^E!0@a03Q0K_@MsJ&?lcW65C7RgSJQjh<{u0KZU>PJv{4DyoKPy;I9@y zb#CE6y-02-UO)a*r;U`%>#h9YwczJsdqz^viCndDN$012ft+Uy3(3Bm)6hF|D>DTF^r_+0%+k!4H|AK9<_ z^-u^xxF*|U3d=8F}^DX(my1;Ox)J!fm?dH$#juh)O?zNZh^G1yL zKJUVW{KJUaM_AD~h6U!^6#hHG?%zlJQ&)|Y@2AIZqx0-K^KZ8aRp@`J_q~Mgym}<_ zTq?EQApXbke^wO_v}1aIRq`Ej|3318358wKBPz#rOfZ}ulF>0G1H_jNEM#nd@kl)H zteDp^zWDi?+D3~;o{@?RlqTr)LvL5ZNb0+>$+>HgV#iD!3>50Yo8R(rka)+5mwb1} z`iJRF);|~ye1Cx*o~YM}Gjd{lT~9u$7%(@#e5Cw+7RIUk8>5Mf`fCH>juOuFOP+P9 zURuFVfqyaPucW`0>5)1Y`?s07G3giVF*~8x`THYboq=(8o{y9J!54sEX(@*vS2S85wvVcqjPtl|HW#Eb#CH;0wU75)Pe3j_(EU1vmN1d_}v1MgK7Pc5n?7(It6u z0(>+05`iYykSEc(tsJQuI4Z;tovJ;^N5W4Hko~suI}Q9O_+PplzE9^=ruSLFq+2Fp z(kyJlqFk;)gbAqVbVH}{)g#3Q*YhuAf9lL1giM*GJ2j8p51py69Z7x1olzT=E7GHm z;Xeca%Ski3RKC-Du*ZO_7||tsd`}3UF1PS09|_^pc1Yn3;G$o{|L9WxX$5Zt|EfTf z-?lD;o{iDits;_RJ%oFVa5C40@h~5M$WQbK@NawFNSOcA{u*7>o_oQ&z!xf>wI}qq z>3kgR?`phzavgRCZ&cAaLHHenf04pNryDv={5=D{4}89G=(rvL9k+8stf$PLrF_?a z6nR5D^&Qc>lUlz{(|hV(?c0ifu4SYsC*&^~_jGO&t&|pI%z=}~FiHnGG5~?)&>3_( zE?=!*mhEHE`)z-k*)N0IV&l|F=sf|w7v@90(t3}r4`{F%DAWFf8O`c_+Q(?G>qg@F z#6aHqQLv9C3Zo6Rs^1R6w_QI{+@t&(A4K}T?Y{?sQ)gGRozcg1@~ZmXO1uNayH4?t zQ(N@v9y_8VzTS)fDg4uXr*=N9{DEJic(0#at9hUDaRNNoI#PU>aN`&3mhpQcb_zk# z06re6ZEN--e~4E-A;k0b;zYl-@y+xE-tU-nfrB4H1Bl*2=uMqDQv3s_=k;&v5{%2* z7u%VKjY=%2_Cbge#3XGu^!7t<(yWo0~r1*un9vGL?>7>Wk-a@sK;nQ?wW`bEV_GAnkv#Zx-1t(oys<)k_ ze|AnfecI2{PxLjnA9od&W*0NGgJi~O=ylB5PJK1Mv8x~^3twb_-;#M{(6?P*vrm_g@5HA zuTh(Zqx1&|KXvs;@l!rtT_pX^$;b1BZ)T@&5?$lNN$73r9SPs7;aQjPbKs}I)9Vbv zYd*z%y$siQQV(8x*GLibTAIIY9HdH0zmpKePOyIwZxiv>DxQ^J@9|?bLeM~#ci#E}n! zHXcv;H1XELr;2a+)(j+EO1H`V)A`Z()B!$Bx^|A7$*DxHl-VtG4$6^CZsdJYMCAoW zC-48HbDaDwSC*`N^g3U6_Vu6^mN-kgvD)zr@g}YNpT$#o>-VGH5${r^=a=fa8GHu# zGGXMy^?KyqK$V^A$~d`Y;#+Ner>7GFx#01q;r0`MIq_MB^!MIkb=df4H~x>|-zWbY zwSMgTof`A=OyPw=I`A4KTw@>Y73&3M^H1xyZkOvVOwaB%fpJA|%3tuaaisWnrE;oF z4{~~4g|*rA!hT=XQ#bT>Y+`;L>!IY&+sowcE!f|FmqDha#e(2fJ?$m_k$bQQ@;~&C zn`8a39%vB%hXmSEw<=1C6=4f;Rf_PyE14O(MB?>+lE_#KQKusRKN z1N}~awR;LAsZyd3-Pq zghfq~53JHreOqajKu_&+5c-Y%BgM~XqDRoQo|^PCm-}q0`bB0(3lmF~uj(_j&wJ4? zTuvwZSqpzk+p03)v|v%Q{!jR>og*dhqp5B>z?Xyng8#Y2@%+m6BiTM8SwB9C8uT!Q ze1uXSqr$%(x`gNs5P$0XMvAqH@0YbdcrEz-!c0F(`ibHV;=dXHo0NaQR8J?t4?U39 z`^x%7vfjma8Onf4Yg+NxWAn zZ&YSnztf50wHt+3zIPJ7i}2?aK51V*MsaUd*|=`saXysUzM=n!-f8I7?iwj>yik8m z>R~pU@CvtOcWBF^=rw&7dH8{m;?1!>n&{`2KcnaN)Xu_(vem~>v7)yXdYykhQe?T# z%A3(&TI_UedR*K&wD?uhe-t^`-A_Po5A?1UKz(n~VQRjAM*MUR{{#5{e(aCPUSUjb z=h;p99Q_ynl`c;!>@}26@0WIB2q-t#u)6VqEY!XRpum(N9t(I0GEZGs(m>3Sx83C9 z(4LXv^)5FDB>&@iY@^=GPV1ZbM|eh}QDWp#XSGUabWTI($VW$t&v7~x`bW%DJ^Pv?bRR}2}F9O;AJo_%hIGI@X;(f3*Eu)lkC@UqL~sjN9l2h^o_ z`-yk-|03RL;+_2;#uNWdV?sCelOx5yk>Zocp+pZzX~;LNlb;G@(|(wdL;Ed^pxET>wpKh2Ax9qR>C)aaisVHC5nCeR@zMX zLhv^5*#YP6im>0P4}3HDtA$%XO4bF{&vxR!=K}uHcMjrz1b;hM3cYX(FI_Yi>L)}x zi^w){pCsJymqt?Wm6<&bt<+AJj3&xD4l4YoM9TM+zaoE!Sx*unzl1k{ZwI&agcRNi zz5_f+oZw;Q_wX7fqDy!mxag;Gm1_We6ZjkjwtivxML54D8YV4&2MM=_aIaH1zeM*K z_)+j{g&}9}@^&~4p8K0pzEC}ngAWt_a)q~cNZyB)|FlEFKWiQ&|7Q2kif`q2|JRDX zU*fMm@H+ByyD%#!{AK$S^SqK!su1)MWG~@634h+@PsMwwHXdmcixlX1bYUjNT)PBf zvkg_M82LZzKGE)q}OyoXH3Bg^3JW!Q{iXzVL^G ze{?41wbk(-rFVw-hmN=&Z}m?8tlqohY7bgd&?BaO5q=`P%`+{%e7v!^33|==PyNbB zIJd;;nH;CQ`Y@}v(GKxNrNjH@pH|W(BGl=asgIeo%j@LM0st%e>?us zKJ@$Y)<4_z;>MY{y%K&{Ncde3SF8tEcpdZ<3ms^yzYGw5(%?wRd$_{)g6GO`<@Yf7 zF!XoxKjb%mHyNI#lQxy#llX5U-mT&n5@X-S$MB~`_`Sa5H+yBym%gOYUdMk0$mH%$yoh9C*iszT`e(*z&j1-?PjQsIhpw+`p z@FU=__ONmken0pV8TcT0?bp2@c^rj53El>Njbn0zp9Aj&e^VJ=^Ec!Ne0~aV;(tAO z?&wIdML7M`zc;|XXaBy-?WUKbtt9hc$@7K8n?$^)#r-w^S!*Au<6)b0u8(kA33rxo zw(lMK74nUx3cio??zEgDCFC0&KH+4bIXc|01VJBX<7EkCs-5a#oOJhn)7RN~)}``J zVd8!O9QN_@(y#qHm!>c3{PzcpXgnR6M$iu8&G^yO*ttumV%qSjf~XgFKxFy_zGi`QI~7aeKPYL(P6+?JhA~m@h*WWs94hQfY&$PWLnNRt8Pv?c~d2QA6DwZR#<9k|4zvC;&j~|VM z{hp4CKf1xsf_DnD{*8`Ou|M`LrL5@j)erU(KljgG-jaU6yl{4qwc>|kgquXTXTBl!%R|uX# zZq0+!ewg5) zz9?PvewZvY&|s!8Gi?~}CTKJ9juOw#HBI_QvR-KR0qY;K{C*}={PLlkxmg`YdEt^= z*-JWmepNbO6n+?d7kHxr`X&4X_<=H9d~rtk1;1Tk%lMoD0+lpji)bDodi9SWzle8* z;`t@K8GIQ0c@c;!d>(l2Z0UScc#nsFCjX;L{a~wye~v)v8hd3d9~5t|`&Y@|FX4xs zo_Hp@gr5MfBmHzb!q0$D2Y*Hs7*}$$3IW#${s9SdYe(dBdcQ|v=fOT)DC925Y)LcF zs66waw|Us@CuXmIZ%KLjBv402ipo=T)$?Znd=mJL0*!BNKGkmL;kld_-yKwb3HMc( zSLyMrZ2d#~&}|z`Z_|##U!$H+#OqCzLiN=Iz6X4v`d3+f zCF7~Dzw{PflfOth>aSa&cVK*^_}WVXJwJ!s))n;0ahFuqVU@3ggg-K2w8YLO{22Hl z@U*_r1b$ld!B6l%@O`rGr4@P9@w7l!DEq$av~Qq)^0LSA$_q1tJcCylAI{;w8Go6D0-xEqh%m)m z;6~S*cuOIYlnSQ$ZTKeqSyNi?>U*u=Iq;o0Dv!%+(;LaU)mqC^d9wxD#m~rbm=n2PwWa)z6HIfjmF>i zO6SMQL%Xx5r$pgx)q(0INT8>B>xSNyTYnSe4*gnIHua-^@L|$ndCKbzQ%QQC0_Dac zUP6^^BW#^ZpGK?5v<>$$=q;!nEp8Q%$PaD7WLoG7l56Ho1Q{p%A;QBB-Y`?Yfvv2j5*vivQC-Z1pO_mqfUd&a&s zpLd+f7joH*X`HU{VL$Y?Pah568MSdzOJ3^QiQcGkoFLqu7mXGtYa*1CBavH)USjW6 z9>|^;8mB1T`tQ&`XN(qEMoaS*@*@A?h^@pI9fTVuT)V>IOOGIPvg!oAxCj5~e=u77 zfc!20ycI)p=!Lp#tHTg)tNUr`c?yqIQB9F=3rcll`^4f`$FpT8x)+{yrI`eGCQwfI{b)Z_kLs`Lc<{ec^3yNncN+Ng*Nzr%@p0Mpj6|+le=z%k7Ef=Z^rebndfOJ9|P{MF>g zm79uZo;o}F8jJl8@%o8(hEH-e-GPTNQ-dR0Hb-UmI)e;I$p^k#=4Bi3I!v+1=$Zyxk=ZKK7$xa4}MDg0I(Twzc!tfZ`FS?1k8#=q7v!D>@r1ktn&-U@7OWTZRRH`+oi|@&{ z^BCv!L%Qk&<)4ebn9Nq?)-?;I_T@n7|o z9>qW-@e+Qvk=>O{H^dr_y zzCah5T}{LBT81{KUK>so4&z!Y;m;CYycF~RA zeM7X*d&{NybFzX^U2mPBKQ^CKyuHNhT9EE1CU+Qbf<1>(v|Q|%96L$8L&Uoi8quXZ zo&&Fa!)Wp2RXkAN*?bl6=eRCgt_Q&*daW$%^#0Lkk>NJoA5H&{`_H@RKS;K?|J-2P z{n9pLBdGe{3B9w>`>E(zJ;n7&+o_`VUaKFT1V02GeP7%8it*Op ze}^x$k7-9f|Le*LRT#HKr~dEZ&)Y|f$M_%mv+aAQe75gRQxZhp#h5^Q=6k&XNhx+-jE6OJ;)BP%76k=pBXLzxw!GG4C)r z;QC5$;ht=DJG7YSP5TGN=bq8x+n*K6b&-B@^W?KP7e1bC7cx#2y&mZ8dpq@{{N14b zZ|`lRk7!h#{V;s}h|G*yJfG!HeEd|8ZT>iyGpZ&%j2&wsBo0IG&>z$OK0e&5_cKfD zuO-hsuB86h6pSz{f#&KvZY2o2ub@ATg}3GJK=1PUtXN-%Cv4xGzQI|(iO=oIqSFnX z-fg4t_gdZF!Fz{(4oOVsLzQ%bnb!DaKXe{@=V+0h9f z0bxrtoGZC84!up=M@#nM2%qv#w*6C_l_1{7u!Xw{>$d&E_aVVy|8#vW(p>E)vpdi zZ|Vm}ixW%7lY}0hzjpp8TuEJJ4J67})sN8kKZO1j+bNQKmD!W+T%`RM84spGZyxk^ zd~!6kzgRob!liuo;eP;sh9R$K=B@rdUs-yZ_k1?1KGnX5q0{!M(c(Wl9dBP-=gKb% znnET@0$I`!Gn;>lQU zGS9!aKtFSNXZtw{bLkEe1wky4(OK2krV#|yT>I|(Ug-6Hezf?$xSf;wO2%u;cRTjY zuV&|tg{J+P{A3+ka&@-RwC6UxPh@&T;WDqaSdk3!P4SNr|L7s?z%DP->zAg7vVWma zXe%dR78T{M=EwB^FDCYsE%_vW;@bxNpTPffE}wiHvv!5PpQqHWC8CWaqV87OywEWI zhfdd*M~hcX1VGND=R0P%wDHjBoTaOk)3GU{@_QIMGX_V)eow1U?XV4((m9F$a{N#D zye>PxGTqF{NG1%tN~iuO{CsmX-ml4gC_WHg{;l}8;C~(e!+a@N{-SZQ8~-yGcc)x-9nd}!c-G0$cm=j75|7blw z{l0VAd{%EJ-%qcoTpnwyW^+}>VKA=OG?7m8PpRKyqhWt@GQKdDZ>iFoEzx;Duqv%% z=5vz|eZ<>LylcHad|XfF0f`*adxASMd#z6_RNg_+`?k*mY}`uZx5OPjZtybyQ%br8w1xCzrj zTW@Lp8S%e28uks)!v0+#t+&h#qYpj6!%G(S5dIM1HT*}H%Dol*0Qfxut$(mylGfv? zSG{Cg(jDymA5`c#V}YW|bpm>)plAF2ZJt3OvkP-pfTj;RIi#>ny9eWWhO@Qt=M)s| z<0sIYO4~W%&qNPu=RNI06T&WorOdu2zUh|2{%A4}PwTPPAE~iztaq{=q;-|AWm4ny zz{xY%cv!}ss@Fm2AA$ZQ{Esf_2PeS~f!`}I>7TSO=X+6~>Xi(;Hh_pdNS|bp3Hne$0H}Q@WFWv4+qaXaJ=y^S- z?GrYhuuisRVm#u-T~ZlVxepV6!9UO+l^?%E_XKz+xbc(mrR^iozDed9%AoP3{v)FJ zpL*G*p7>LqVEiV2muQy8XM%~qC5rgAnQ%u5_g8WMA&cpKqVVn8%Gj38g4z^X!pd6c zQ@#hFH{+kMbH()N|LOCVwOSQz^N;yHjQ^^SW5nNnvQ&Q&-P7Qk!T**2;)9CycC!Q7 zXFlWc8Uv$s3Gq?=zhK|~;b{4LkBnAZs@7Y5#^y+~htDH?C*hBIdj6iR@tuSN2TCQ3 z;__AbA0XZn#JfWA{1Uzw{4Dr0BM{fxAAC3iKLMWm(P+tjQH4JPJ{9~qWpt{jm^$!$ z89ohM;nR3GVVb~e!Kb<&lqgPG4M$#TGK+Z~Sqo zyy*b%0G|&2=~B6wjE^QaO;5*;&L;c}wZn&tu>To)+kY}zyiZA6`8)Nh0jh<1VBmYD zJ4m>*g!@~Cv+<*>-`vDF#@3FKPB&AhFqCLqrtqoWr<_5*`YGdw=vlgpW4%)8HR0cj z|2tKYq?gvOlJ>W9-lTc|pH*c_bkktOPg|jP;1|q`<9f4kKN)XKuW))@7d)R3iJqaa zdH-r6oin7f{mf|UTr}jOpQFY3J&3Brj2p@CR^rwF5`H2c%cyDjVS0a}uiwPbwX;%N zcRfvf(*vEhUyhc1-$41=3f=<#W~ZOt?`Z3rZM5I~(&a4CJ50RoW%SfOC%`v@Uz$;$ zW%{o&ovmL6_A-5-{@=*ozhU=^`+L$p$$Z`HJag&qv$FepIJZUexKH%{eKfq!p73j; zcZpv)I=X~kgV`z9L;Qop-$DEl{s(zZetdpy<7S7(&7MFYHEJ#nNPDzMj9HwigHqvq z5b|NV01X-s0?fcwpY^{&KK^>N_)#zay?IFZKAp(EUATr)mt}`M}ai`jzQj zu1|O6zn7Vi^MU$7!&&6p@M!!!sq}o(*6C~^}k4YDw>rZVw&65JQ ztuUZ=tmi%koqf=GSaeG2H@`2^TP1(a5w3H5wD^7R7is?Ud0%6G1pdQvAJk0d?x}fP z({C7W|8q3FSJsLBfm+nK*#SQFx9R;YdJ{Ta^6zo~Zwj*d&ok!Ows)IP4&Z;3_>(+e z>HSLipM)krM%jpB?N9i9#nIyDMGrZW)-yS0L>v$+rV4+C@H28_@%dXN_V7mo{ivjB z$7$#2?-RyK^d-r!Ch$7&2V(hU_ZX8B$w)ZU8!MmyE^lvsTzIHF=O8 z$4oAs{@kQJ0ju5W1hKEGIN%Rhz2f5zCduZ>@o*$SZqk7ycdQ--V zb6wu}Ijq($Vm%2uYNxyU?)X3IkzR{;pWC#sGW8bUZw1A$PBRYOLzj;gpH?cz%I0gl zog=%Hf2W(Qm+4!{JgftSbko$a;>To&vT~bTETiY;<~+h@W|!MUnEJzR=sot_v9J$a zndTDT9R%-sUeXTO<3AcPrug^-{%7(3V@0s`?DYPSjN_5LPxPur=|9gO%hWTJk9zmN zSM=zA`R(DozGm>F#OrpPeB7SS$3pz4){PZg zI!$2v-QT_wY4k8hg?^5<=nBs)+dhFW$`pL7`Z!Iz#utnQdyK`4_Q~qNX^-aF}`91zm#Phwfc|+2FwNJVG0`rDKWA;SQ%As`nNoRQaSn>AKbh7HDRpRvo9V?+3DM#I&t&wPU z&Yu(gdhpr|ycv8FczJ&2f#=HbCZHbhVe(`8t<@`flJ-d+$!ihLJL2qWw%WR3dZxXP zzn6H&q4#=dgmN%nw|+0-A57RjO*Osmgwk(xeZkU+`@7V)5P@Am(O;46;I1j6e-ZDC z0+8S7by)^af1hMA3K*06cw)<(1cW7(7*Umq-a_adf*$6%it!+^!$kY%*|C?U82XEt zs=xivTk!I+a89A=C+Io8{=mkJrxtc2IO@PCGvlF&R`J1U;?@2BSUB&(;!*T%1zV>? zaCq=ggKF<7xe0uKp|V{Yz}w1j$(vU27Vu^KXMCuW?IyiHvm5^%_(yVG-&Irn^n>pL zZ;Rz(mR-s0ew+uKFHDeJtTcF7Io02eiC)uKuRy@j)z_XS|>jM9pLJt12J-%kw)8e0y2?Dqj=$ z<_x?8d{Y^&cIgK11%HLoPwKmUa%1wna^-Wt(|eA>kxv?J`6rT)<2mirS}7-%hy|Y zj*x8eT8?Qk66Tu6y_4|0*V0~IU)k&RbC`MzR*Ho-eGa&M z@!`5^^^Y^qopIe*@m3{de8z_lJzep8&1J}E{6DCU4xgppBTCk}Odsjcd}MAmLolB> zlBuYuO~lWAq;p`-SXc)joeH@MlX2cxr*U+wRT7a)@edOJ)c<9Cwfi~Z*S3$9oTo3o zs(A|h3;sv^5935)|B6m##4=@)U3}6^_!)#h?BTQDw=h0oo~Y&7$~jsz|5v^Sptlct z&k{YqdT{rG9{`WOvs&>TDyuIYaiyI|<>SPhYD{6}Am4gp+FH&g*b9`8DSQCuNJnWt zRNe;gqu`HM@nCX@#&LV}P0{|;@52N%R zb}}q~1DBZm@$biW7EX%YD%IaPGI(UvY?wHRUrv)w@2z9uT&gU7W1skziAz)CH?2%O zT`G4y8~!#E|LL*(O7!&h_`Lz^7qSOni@BhfGzqFppF5D=Kaj|m_&w-%T#TN| zHweAs(EFY;Z0$n+eBV&~-o*!LgtVF5=e;Ul)l;dT+s49ooQa>#Peu7!@{ecc$Jd9H zpLx*hS}<1pCm&bR@{3W>_X!ssfmsukiIp1lg?i%eBz|t;Sn&_|ALP5)v$6W$87*5_ zxWj~-O1P^l!YzoyO~dar;pzzYJP)@euP@GpOa4`pgMXCXmi)TdUwm4Re~Z#79S^eX zx!O#8M#EQSPoJ&xW-5nI&qo990O?G66M9@cu9+U!KKX2TRo{m;vz(~i4imoZ_Oap& z=SyENN$WE$bExC=68v@5`Qv4fb(ALP)o@VbjIOb8?y-%lUhj=iakBxtme}$YObE() zKX)tf_7KlrBue-v+m6+l|9WQi*!R*i>W9}2ZdAvwtWe`P)!QKH*DV<<{_=NuuzX{$ znv=X&T6oDsS*uKLtDNTuf9l<1;T#6?>*F!Xq~2#dG9l0FXp&!$Vq6ZEV)1oDE%p5; ziM~`(-`Wi-VVCY_zF@3$dx*dMzW-Ue>JNK~cbs_J`5($>@9}FtBNIp_if;EjMz|UG zkA-t+?A)b+n2*ITXYfCS{}ItKIbrgfa&N1O<-~@v{KK{&goy>Z@t^9w8G$%`$5{Lw zmI2PKitI63!lwRWL8|n72)~^0J4(|xevQ|iXO(g1b=90Ck>+4U4t9*g(Ax*S?+dVY zG`o(iQ|8|nR6!chT0s5$4B;2NXDqB+lesNxviqGNJ|*Ms+hPc6fn zGr}vKc^>}53UBRjFEgEB$P^#-;eQr-(fcvJpT^z?uzJw?)lbUW!51t<{~+;q{OMTn zC8BTTSQeKnnU5)z&$TZykoH za9g|CC7X%2-~(gDzav^nyhimPmsW1SlN{|K{G>k{E3ys4+AFPJmhErXIQoeTj57$M z3_0QRZ7V>-_NJe~BufaOuQmLHeuvuX9>4ztoZdR9ThCBzk#g z_I$+pf%y3x^o~4;KEwa$GX8%S`W<*}1mcQc>%kTNqwzS?9`FB(`Sl}ZQo{LF@~fNp zjr-E}XgS)9RJHj&-zKSe@OK@?*6yRfMNA&_JHhp9^Yd_h018ypuvk?$K}Y6zf9{<#wXaB zE56&pdusUyG8;X$Pi!~zmVbtIIIs7#URE|AlM!m@BH6R|uFgQO?Z8-ku5rmcl#L|n zvB*o#c?|y%-tE;JBbWkmshygxfFGbUSAfY2U&pAsk%&PzaCOl5x0~>%2wygzHvK8l zcTIo3aq@vn3g@IiRccB`Qtf&WdYeB#R(!Y8H~IR3*Ui^FDcB=VHcg~Xfj*S_C^ zVVVQ8SoV_jADxN2AOAM|f8+f+TTgDEyl0|Lk1LoO^GLV(+3@FA#){*L&pCS)@o7We-`JaH z3tPp9&|9lll%cb~L(McpYA1AS2b1=@Pxj38d+vd5bv`wHAX~%?^6~`n&wg#J_>Q>! ziGLxxmKjkpn&0O~l3(?Fu(9#zSn(nCLo}hnb}E$doPmhC2z%VD{}b-$H_#8IK$tu! z8z<6ox~uRViRntUHYkj0*WJ*2?7L&dH+uh1?}sbsqvqaW+x%cww(DB`ogiNBdt=4# z#PMuDq3O5chfj(hV*U1dHpV39?OxPF+->#S4D&XS&JWFMp;dZ(dx;AdmSmui71 zi!amq3yTfcXYyrGr#965O3;)@o?TbI_?Hq zP54&u7VxJkpkLPh;4?DtgW!!B_%ZP58Te`NI`Fh!Bl_du%Fhg?Nq#iz7e3{AAwScF zqm}<5xazS1d;#I>Ci7tR*qb3&Y`@gatmzjXs=hFXOV0H}Z~D{5<8kVLBIgwUF!3in zeY|*?_qPkgADWOMC;N#%PW;E7Fm-H@#C>vElbDxukWMi%K!KRvS zeq}pdTg_}OJ9XE8Ucmh4MdPXUc9V;;KX}WaDbCV5mn(m?lKRU+;!XX%@nT=hUuENg zjfei;4DU((PWJghHX?}Le(1HmY`plR%cA_ubWDPu71OJ^GXk=|m*ICx^E_QWxKgGOnb9bq`QJjtbJmBtwW&TI}`Md7^v%6=% z73ltpKTkato~xDwx5nKm?nddAyU%g|M_wP|jk$ZJ<5#)+5_hk0x5eEKcgyKU&u?)5 zMeZ(hx5wRHcc1d(kp4!0ev7-?-F=U{5#7lBsN+|+g!rHG=g+wNd3Wdj4#oklFZ%Nl zcaOUJJ$D~<_aEIo?QWD_x%>aR{(kQ1eW(!fd!{V?e|%*qXU}!P{dJjtdH#mo|F`a5 zvNXgiZ|^CNztG*N+);f*bpLWR#Q&tbpI%rKd1bo2Z9(bS?Cy>m!gJk?!9Cz^?@b== z4}*JZiHEb7aoITRAWJx#Np-ix#i6+wiAF_|n{>rG)3U>)DR4yDPWu zt`)gOJ&OZ=WfXo@ZqcgccALlVML0Cpk~X(pFL!+T-MQs=F9BZ_@c%Cgzb?0E9kjUZ zx<0}QyCK|$&yDcAbBpdKJhxr9MEE_qMfVV%+pae`zIah?@uHP>8@|->CF^rb)~^G< zD}-Mag^6K_gs;gh=?%BxS4DVVZppfE8~!rKm#)bzT@-G^UlrkZ=9aDqx8bji z@D<>z?KXT?gs;slrLQcF+Wm$IzZ)#v7XDVpS1!t}qX(Ba2x)$ z2w$IDzMk;hc74}z`sa#uJ-HQkc)$CH2w$IDu`=8i{-+VXB)5Wk({0zUB79M9#p-Yy zJ{IBK;NdoW;=csGU9mE^qBq=zPmb`u+=@QvaNBjc<9BYz-MMHZ_lAH!Kf)K~?(AJ{ zw|Pu=d}R-O5^lq^A%j5xy$7a(TE7zdgcN8?M)>Mn4`tGA*JmRf8Y{wW z_~8g&oa^bk$8N*F>G-OZxm7E>bE_8J5$OC~gf9mRw|V?1!h68OZTJ%rz9P43Eq7F| ze~a+7VBxm#=OcVwZq>R)_}v}S9gpy3xmCyk-F98_uYqq@^?`-k@TW%jn%t^29(sQ!k2-q zvD@(1M>t`Z^xAFs8zY>s@RV-5x+8pbZuM&Xxb4~y;fo0yZo{`n_}#hHjLW+1`heqW z?#QjVV};#@|3!qa&8?xmbldg$2ww#jZo@z0^My6txi#y;ZTMeD;n#tO+wgBW-n%H* zOMlmG*AERZL8a^pGSBf*jl>{|8;~z8~sYR zT_cX)wLW*(`XzQ7KH(REuXwl%omID8wT@Ew=B1AQMe6%b%ZYhUv0PHtr5O9w{C53ZrvT;Pdgl6&KR|J1Gw|g ztx@$6e#JE$M%bKCW$2q*ly zjdmOUl?Y#-TSt58w(DCFPS}mm=eFwy5l-D~q#n5K`X|Tx?#}fgCw1F(I>Hx$t+Lzj ze~s`yuy7lGHo}+W`p{`~+cgy7%W{3oR@!a&e?~ZAmxbH#OU?v-?jtYg+Pdv}isOsd zp#OL0`d0XS>KRe^6<}-aw(!r1@HM$U_*}PLFOP7rb>TLAMue{eCl0q=uZwVKGY0Cm zYj%WFruE@A{H6%snCsg}p1AFLz2obb<<_qVx8ZM$@RhmsE7#g>cz1+@!3(yI73?KXUOgs;injeOH>*T)>cXA$$Ga2x)q2w$JOhq;>W z|J5~PR^X!vPGyZh`|LmWZhzKR8eRMRIofl1%%6Q(F82$6j-)MH1q_&g8a`ScL~MP<(w5z2st=R>|uO%Cy&H4>ip`15D44bMlW1pgMNA3blq zKKSo=X7F!v|LA%DKL-EJPOr`FkzM|L|EZ?LVP9p0xjjdU(?Q z6YAkf`%kEcC+$C>9-g%SgnD?={uAoqN&8QzhbQenp&p*J|AcyY(*6_b;Ys^XsD~%* zKcOC;wEu*9c+&n8>f!&D{b%v2-a1hn|HB$196e9;eJj!PGs>P{;Lp9QS6TeVvgfw4 z=dQBnyZw3Dilr9+J^p-W?-E-9I_&#rdhgg|{vV9vFSF;*xqsh^rAu>MA9w%0WsA)J zfIn~Q4f#9l&kCEqUb?)`EYLq(9?Gxh9sUQb0XN<>R@eyz&#rxEW%gC&#x$Zez{rxU!M4vJ@>vs^pp6#zhCxTMlX~np%==NepdYCd5xvl9H+m= zfcSaMGNa!S`L9`K^)Wwrw)RUs8@;88|0boE_=hE;-pGGluldLHH-;7OcSimjS6TY+ zNuG`Vp7?pmVrAen{;afg&3sL0|M0}`)?gW}bvMFyY;lX}1^j#MVh2zQqxil5 zMf?N*g@5ON;eYDC@Q?CQUcL$L(Q7a1W!qKB`$Jp2i%a?bJ}gy&#Y<=j#a7unTwwJ$X!vb)z_5d!Ev1znd0C+Bc( z`sn~f_|*O3Im&0P*T-cZFG}yX#gPA9p9&sDe~$8fHuC>i@E`GKJImT>{r|z)^wdzF z<$2xUe6h{l2i$$o-G|(L#N9{Tecavi?oJ#JlrMMpDtE7Ocb2>J-CgSL26wl)`+&O- zy8Dp3kGT7&yN|nj-rb3um8h9z2o_BX5XER#) z-Mz})Yuugne@Z)l*CxU^jNc%|Mcb`(kwc`kP>-}p)7Dn)V*dgOPNsLci;1>rNzzco zAvlyy;#9;bQ|KrTad62Xr3gZCCIcWcEVu&Zz#`ZHcfdWc4R*i-&{T5Ht~YxA`#VEZ^Y%$=1pGN?^GD!Yknt|N z%Qn7=PcW|{?}4qm_WUyFBd&MH9{0iSZJS>OJ+O)MttFHL_7-iv3Ho677RmuVu(bd^ z*h7EWpXvG8LZ+C_&c@MPY9X45XX11?ola(^<2YMLMPYg_PGy2PiDbo%Z0Y`|#0zSr zTD@8iBQL0I)RW**Wh;ob%4_jWS-N6!rLb1=g7|5rCW~SW>s5QEkyLACSw&>Rkjcxr zYO)q;AX1yMxHBkMWa(;9PsC~mvTD67=QiR{mLvyBDKE>_*OPoH7AUO}}MP?Gs+F|D}$GK9ln~{?PuJ zc;pSIf=f>Rn&kWP%uPLg1~~;oK;OXUeHJqz32g)Q^dY2o-$rV^8bdw(K}wEk*?;x$ zHS{<1F%n`nbdOp2y)MsFPeJ`__z03lhV5q@c~A7}QJAMsA)BaB+pnI5?U$t4w0rEE z9-uEG>5EuD_3ZycM^B$c(wC`Ty`8Hs$uVsr{S2CAV&xFtMD7-<}ic+ zzaxXJIQk>}A0;Oz=?HBB)UnjMqo;2s&#LXUrdIh3dXAr;u@0E*;`3zG_)LH=gxY`V zdoQh{Cx1$m7_oTVD;ql>$rhX49Ab9zLCULdGY?>Ji+#NJCoqXyZN?gb%?0v zJVNt=`gfw$7E-^9d5GN$>fby17W6IXPbMW`VDkskn*1m)y?0qZef0Jfy(;oEB^Vf9 zclMw6(PxPnZ2$hSeV^VRw)zLAlz%(w$uEwc^CI4e)gN-g14U3res%PGPUwwV{lwYf z_k5H?e3OKh#s2$aw*8mKto{cld?4^a;#3k&73LK683uxGtmawwVCWL+|2=q6(ysmw D&j&i) diff --git a/source/vlc/cpp/lib/linux/libvlccore.so.7.0.0 b/source/vlc/cpp/lib/linux/libvlccore.so.7.0.0 deleted file mode 100644 index d74b619e1a6fde58ff139d85dfe1879302af327d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 925944 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

nZhe3-^tG=8YYTQyGq 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

_4T%1m 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�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≺RTy^3q5|V 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

i>G2qqrkU!C$!kb~kU76hi;GF_+&3vfxLE z$`Ntao(>-T^L_f~bGHES3w`*7T=2l&R_Md~`orm|Op-1?J%RiRe2(fGNs9ea;r%Oc zmlYEF<8rR@ix|O=5S1}vck}gmg*&a*;c@+1AmjBsL4)j5QTZ}Zxz<{&`uBL&M5v3++n--WS5d2b(e3a?*JtDPqb>GJc+ zH9Xn*sNjc4%KTcc>@Ha7qP*M9H}(S(!H4I(zrdC(826))e`m`=r_MV6OqbBh2~D|H>upvu_A0@L z{PO;8?Jmq);QmCv@}0}eOaz}7Z#sSFtT;Tl7cHdd&#R0Re43uT&(L2OervZx{Sy-U zabtd^G?(GnV?w6jla~SyowMTbTf2+UPe|y0J-)J-i~LCN1;|c7I%mb~mI{Ou?t$^FCKUY>e7oYdRZCxu#2@Of|!r>&h8 z_n*LJ0m~NZwWCV2ae5RlSDUBRE}LMLTBlw=;k|v@>s+K@6Z|kudEQUE#r?M~SC&^S zRGXDkUB8@=o!yO>;PcQsoVM1j6}I2{;>N9Ag_TzK7XGJwW!n`n^r8Ia&F!!zmo?aj)9g{|^t4-k~&1=qLh3LA}1>ssQ3 z-_SqIdV)gmIZ%!yeK;ljCh!GGkJj(w{mO@;{ZH^Cg~}N5;2!oj3fy1TI*av~n+ySE zL^qPGT&^rz=$#@kbZfa7kIzl;BN=Cmz;)xih4lViPHl|fGol-tY-_u;u$IDK$}ya8 zqr0+T=V!ghm}~She@~(R0=8sf1b>{l76m`HVlqU&yRo}$q1wUuYpZkGI?+Cw*^lWS z%UXQpL95g3UbGk$dP|IT<5?FTDS;T;7F&5RO;?c9COtD;cr&lL@~6mj9`|JKg;q)wAO8Wv)CZ!g3ngc(NuRz8zl>^?H0!S_0tBINI1bOvrHiP(VVlz0J~^m6o2MDCBbLIHku09 zB@3hYGj{>OkLH{$=F#p#Nn!K2dQ$DgOE*h5=i^7ax%jc*vtb*b>e*Rwcu0LiA)$Yv z2>m-*k1C85U~Oq(USSabPA+|};72mf7y;~pLJI$a>>x9OTQb4tNuN%;w#53Ekl?re zlNbMV>)*AU#9rNaGxZE1=6Tk6-}lKOAn`YXPF3GO9@r2Up|E)~FE znE$*(-%&{L`~DLj^p20?ZmpWZG+glMHqG-4Y)K)7-`YPX{=)754sEZH;P>sH4}bCY z2ltXf3cs~~PW*-2pRT^Cut`Ioo;E(@v=y)MQ|)B7Ev_EdIby&$ocPhrotwKiN4Kg4 zpQp{!X@M;(`0@)kBS2$d0!g0sJ-wvf~$gCS+q0!TZ2p8ph8U z$b-LB82{FtTbl~0_UCnc`)}R6bMw}iG6;T5bfzd^UsrfN-fNt8V;(bs4I~1n@c75} zsid$_Do%jl2MEgXQr?yCs$ECX{PVg6fzvvsZ-%v>5zbN_GZ-O8DAwwj#YfB2;7hiY)2tEUk#M}_yVgr~f_Q+WSg@I4d&`YrlbI_o_v3M;tM?$q#w>36+%XH5U4?;?U_ z=@`nRX!!vxDU6OE!+tYM#}<51{DK2M3z~^29_>sw{&uGrKc4;UjH^Fu!HHD&KPZp> zTfV19rG*8B6#ml9g_{dkO@N03#+Tf;J5yNh`12DfLIxS})wokXt9MRE z_k{#MKKE>~%PhdMr5sIlR$7=>SeTzh{xSV$3H@`k-8!))=knfiXB28MM(~3%+21gI zDJk4)v*K!m|@YyjAro6XXT2L6lpF;&K_`zJWzd`#Ag#rAmK694;Ms|#YDevvx zp!_!m%P;)7%73G9`Pb&(SXW5&FG2tHhV{oxjtvAqSgP!Az}`}rfd5t&#|nbaj&U&M zT8Z)#Quv+zEl>G@AIvrT8@O*NOu(P5{J>|&IGA#6iSiQ?{9gYW=P5t%gSlpZ1NSY3 z3HY;>ANcGT2UD)im+AlIe)&WH_Y67901*6OuG!y!rT>@v9phliwG!ng zB=yhQ#WbLK$`AZtuG!zfP5&P#{{a3>;0JTf{?=%o)fH^#zkOVN7H{n4 z_1`1->=;K=uHD-#EWdGjYt6!b{9dp6q#m!W#mj5=a@ipYew3(!Npw)o0W&L zev42bxSVK{Ci{jsSXT74Jt3PJfiX8KHKg#=)_L}Wj z;nv1x;r0`JQka|%r;URHh3&Q5w~G=W_?&2yI6R$nInSx zmkO_cgof+Sri3pQmOq7m{hg`d3)kOz`A)?`^|0EJ(bamZ+dby^h6u~}C-{s>N0Mzk zL~>C$FMf%j;72mf7_q$aaNR3xmc^224vzIty&vh6DS_HRXHY$|`g>nApU-Q0P zF3Vf+m!-Mrd$U{I{|C5B3ghU1BRl6{e|H-DrM@QkoZs6NuEZ{oYn_lIxBTf z=rEg4sAa)lRKFK}!*@{0LgIfYxE->?)0xUO4Svyv|DjBH#+74ZoAy^o>TmVjjxS0Q zU*#~P>dh5t9Js{^e&WZE`NK>%?tU20G|p!lSL4<}e1+ec#;dsd??*4yYVpj{+*0>y z+~thVOyi~!H@i>b&iwhzd3bNKIhY%gu?4d>oh*#`h%DYC=X}x9LmN$tgzi`U^C9^OgHkW8Yhj@M)epg z^CT@FJM~(x)5Z7W@w0fZ!zD68_~n`ID^cU{q}9=za&DY-K~5n+#-W66z1pd9Xxx1i z+E5!a-D^I5w7b6icyoQ{&f2}lo8|4hk*Ba5AGfOe^?jA7m%!CpoldWP>fiaM5}qB` z9$R@HKQ299csyT?9=puvx~=HAu^08R%~317&dv0qZq@2|knDav;22B?{Aj@|GtF12 z9hC}9F`gslZbb9Fz23=bZvh{COLL`Ac~21!`!Fg%DEwf}h;CospxIBbxPg$g{~&Fu zQUONWM~!a0->P>{UOA`6g+~odgs-g@J8lo zs}*;TSTD*a#9%Sh6X6NjclG@%$si-2yJQHEeCgpDz6Dl z&-=dTNV3&%`G22U=cn_$&wIb$j`mTXWxiW&HMVVQ-@a$-ww^uhJ2!1#c#yeqB0km_ zAK=|$jYFgAHco4BhdmIMx)2NZ4h~VH*zO?fXcD569HC*-8X1a?S)(!ai|iCK$xanO z%;RP_UB+}Q+8-U02!}_A#IK`g_mkLK@q+Hz@o}lfv|c*#3(EBrtBL6PmAv0$crdPN zzLKbR$Wx=TkMo;UBmIMWZ7r1AsT#+4Q9Q{a;buwCv*tVo|De zgc9d9U0x*YdfiZt#mDVYUT-@#Mu~`CZCz#`=g_bVN#w z@j{h;(G!i;s2DZ(sk^&ji0>?rOfLv?zJHPg70cEeWR=me!(LgY0@ zO5QscWwuHO7+R}xNtvpbv%sXpT zU6C4A9J%l~POi48soX%}{uxzORX>Er9xvxs#_EzZ{X+NvQ7jE%KdvH_IznHkb5LH2 zFm#|=U2EcX-S$pixv(Kj#b)0|N5|eCi}nrnyCXMF%BjUb|LPl8+joslj8&ImB<>V}sfcad#xTp9V;e{+h|oYOGRIN9+ifsA#@bJK`lFMUUb~Jmu;O?vK;cn3%E~ zMo%mac%cB8EHL>ewZY94RWc~pqTet&GIYT00ZitWhF!GXyr8gLdF7SW{Mm&bNFJ-z zKO!HJH?t5~dSF!=RU(G%tFFAtW`&HsD_N+LmmiYIa!)L-t?LXkxD6={hvwG^vG;d-U8vf=vc<2IIfBCVBe98yxAMe#=MlC+Sn zxvd_GykT@E^)GU@r%{kt_Bv~o-Ow;H+F;rDTk&!Fint75uD`W065ZE0!Zk^2jkGu@ZZM3dGF0Iv2)kBN9agWl!ES5ipt5f%dA}0(@3!pvNVGpZ zF*HthBHaf~O+geHj2l_Q%Dz<+!L>yRQ+U+D!(|GnwRLnn+H6V8m97f71Q;_F@KO^c zF4b15)z()x2vR^ zVqL*jdgDHOf0VK-Eg|Wr8We&Q?F;K}KYD&BeJNABBgz~P?DH}K9 z<(yCzW$S2Rux*Cs{nA9Pws+7=$v%j-JkK-P@IGtG%(AB>avzd*)K4>|LgK?6!9icC7EF z(&;!!10Gl1!vTAk%EwvZsEh|tQUzDMkj76&UKG65)jb208`Xm`bcl}JHxZp6nHU+0 zrj#+sG^Iw6WI({se%N>+y@_kp6i21Ay1IIs8pOmK;^POH_BB`A6bCcDuv_fCL!-T< zq!Ek{(3z5_GIWv@6Q3h)e_=Af&p5_LlB0c1`%5z)4AwUAw}4eXO7F-bMR7JTbYuxv_Egj_$5qSMC}g93P7A-qlR6 z6(eT5cQq^$?cOa;m>8|sLnlhX?rOwa7$~|$*QB+Z4l)`ap(l^4u_7%8-8#R8DgiU2 z3fs6zxN*rXL!}b@Hr8)M<|fkst7yo8f4!6BKC=<$)5 z;@`mdc#LEi7>$qbYL-#&?h<>QJv~7iKhW&IprYO3DGm?EFW{oRWy^NsVw@pJbOha! zKza{mwaToU5`xIS2+F(YTWJb*dwTAdwmaIW{9=agzP=0U-qBj5+ZTz1FW_*CdiQm) zg^7ry*{)sd;&d#1()dT@wOY6C4(wXjE6W|8U{|viNXp)-N{}1cm*9@JplLoR&a|X7 zUTS_pdm^K~cyx?%FYz1dBM33+ikjEOSwtL(#BVLQ85Dz(CPmfsu-(U$RtkZ<3EFe! zz6o05avwGDrQuL*5cO0k(uFg$zc+fIf$^RE{$}g=*pSsSG;VDl80;UH-dLJDYYPpr zbsMdntPs)AQ?Ez&j>vliT$O8;&b8X!wc^CJ%CT!LneDj$S-M6wh>z~;%Zfw{RK&z8 zc-5;W5Cqq2kaa-yvXmZt@^4t`(RhQJytqR7vA3|~cf&ZN*TRpCG`n&J>)`_p{GRcM zveH&6pNJ_bzk6ShOMz_YJJ2^I=da$*pJ`(nM(8Y!x+RBHUAeSpu3R>6uo)g}aJvR= zB8$R(EKs<5E;ku@11kyRqlKTY>~`ftQF5s83A*yJ!My`T20gBPyws1a$a(YTScAIB z+E2Rb{Rugw5Q)mnaBL{tS2$_5xm4c3_(d7YrYHk}z6NFm6MT0+vf0$H_P1S$rp(j( z8Gl4eQq8hnkDOuSqVR;2e7v7@DA_N))s@HiN$^;~_r0#1)uZAUPOn3L&%|)-TJnm0 zcUf9OVp*?ptK9$dRnexuf3wNQSOmeY)tx^I4HT*l%h z;k;SvH@fl#iBuu-(KsuBw9iGK%SB$)zPLsgE4dotH^c`cUM-UXV1|N9?%I_@UD6r2 z_FXRF%NUJ+QPZQ0WD}f*mSU(XcLSROs%%AEIji}@;UT3f|Ma@@_|PbmFi*cv^p%F+{eAfr3*;u-t(78INyC?-PZi(ey!DZ0pd@eFMZTad7i$-Ze4=+juVz^i zZ%oq;x79ZP;*Ns6BzNScvlAol7+qM8wjkd(I#inY$d(!TFw<(j zdY>!!Ci*3rf~!nAv#2i`}k#AUq^(g8SLU7jdV7 zO*$3_y_$WuE5C0d%nG~bb-5qe*uVfR9xEPASeBIU4Jrj$c#PX^?l_FmP_cYR%nb-F z$p+atWVR~qd17+hm3M^q5lVO0vaKN3@69z<0-n5+C6IzU?Vh|l+E39OFh(t&e7o9? zbZxX2_Mz^A&0K(t4JDq(A6z8_N=- ztB{+(-oZ*{nhYq2^#Y=_&pmdLNMI^4#!M1HN+;Wn-% z@>N!c+qjm<8>|kuaV?RrwmRI#wM5=%mFBl=xQ1O6N|oCXxnf$XuF@g4F?lm{9bVpQ zx5xsDr_C;@D_6739&gsM-N-viN+G*dM!uzV;B39k$hR_zvO8p`tUbB2SYB}6+GONG zMnATiE^7TQSI#J**qu9yC`CZ6MrY6SlCTk08O;P*K zfha!;P^g zQ%r6CdcwL-m1p-O^Q#?{=c0snjjTmpDw8X%J4S~l*aAt*#VEUg;p)+HVT{lW`UAbPa-Cs#sPW@S|t%CAx@ zDzZJy>Mcu^9HU{djr(|M&ZrI!(GsJ^BDYA@iEX{v&l-p)U_Q;PIAUpI{WNA3c45_q zDN&K7TC?k?bsM?eVZKc^lzbl?=b*f2G#oE6m9;3@3~G?w?IJZ#&f7N1%Gm%YZy`1~ zS+KyB3*$3~-_1954MfGSak4?KG`Qa~40(WY4hJh&sDhwsrVH2FX9Y6fF~5>PZ9EncSJHHhg#Ygw?JG=id=wY0n+) z-5a)TZ)XuPc0dgU?SJ^JecjDB-`K#e;03+o%2pyCaV ztzU6J(}DiM$p;#Z@G4P|mY~E?AGSfPjHT9>GZ(p1P^WU@<4k)+t&w9OT0GcWYK^mE zjgw6`?zwR-dwC-hlMQ=ECS1+vWVG+s)HZv(4Us4(EFzpBIiP1mw28{K-ig7X$oeuK zwFZM7a#3J?L))H?ZQb1Wx@*t&Z9BSK+t*)@&8{|Mdgsuph7Iup!@Z;I$FZO^qLzQ- zc7qtaW7Sx6XiP_3r*nfkyr#T%gC<+Rvi!`9URDB2%;IcFjIbOl#}-QrCSr1?uz`bc zefKH@y}zxN639dncxXt;bsnylb5YuXQI&K>=cFQ|>R=38_LEA3lvi0JC#m?ZWZbfm z@GE(AyidvGTmv`%c@6sk*+S3Sk|7*Iezb_3L=LvVFa=_+W{v`ywp$ z6-)ZV;Yi6dYrLh;6N3@iXB#Myvb!V4o=Rndy@Qbw?C9xUeyy*=$+)(V&aB2L9?=49ligJl^ zti-wD@sdEX@3@DBhGGjNa>&&bdXp=h78vX=DJ2W+uzX#T0xWYEI~ki8ikGC>eI*5l zVZ_kbc)TQF@i6D0*l;gR>$ns>+AkSG6?+hm=sIV@8)tX0#CTwIqQu8IM~LGk$sQl> z?PLG9v_!Kd6V+AIb$DM%QjLfAl7q!Qv3Wf@R#I8U_m2*Rhf88V5gRE99=n6ZZtz&* zDeD2fgC*%XdHs!Ri*3APU#~92s%5x05^adnC`MGofH4eazzuvR54L+j3+|1X_aqlG=3 z><-5lj~UdEN}mg}(}Vt7)~r#~gF|=VWveLg#6c)EMYGta@12kVusQ>x&qOwk za$0bl11xfO#*zcnjRWJuL;4#-L=KNBAGv_t!&W)#icB6ZY*Wl-is!-JF2NW)l^c=kna;T$+qMg|+}Z|Yss*LTB>(Hr`2 zxGvJ$LNR(~mn3eDb9>rG)jqx#w74@ z%MKCDtxTd#OgP8gE6o$7XK*|=$T@1xkL{&DV$LidSIop;>(RGy*p*4)0lF>Anp$zr zN%MF7E$5th{&wYO9-H0NdIc%z#$lCYd}7~zeWvbrHj?xvc3m0XjN&%{VP+#hvUMbu#o?})NGi_ZK? z))w5hMHU&j@E%u|y?=7DMZ(A5YFRnQaemsuKk|8}maF-@uIO^qF*-6jv3Gz89t$J~ zEHjN41HBqza;hNkf?W{xazn)vtMgXw+|e{B?wtYCyyR~totn=%KK^X}{QPB*W%;BiMgt`HZ@9JzT%BMqp=v}%8m`HLL9d`^fC`w zp>EJfYBE}v1JE>C9qMwHWRiE7Ugu01gCb>Wo*WhDM4F0 z=3~Mk`Of*^*wr?Tt4svdJp~;at*3*ue}D-WRY@v|gimX$z{w-$!({PF+vDoNa%)T5 z4fH>>wd{}$F!AC>lfP+_W0K+kC+0b$*@6j$(43UFNXwyNOJ9SrMq^oaE=#3|ueJ zS60NnP9QfF>IC9~z=)P*T}b0M@$c7mN2T#q(pEEEE)#BZB}X!(kg5Fe&j7#q(o8|Q zMmI1!ewChShtyfZ3kOagZ=)W`$xu1#%BoM8BcU=hlEzI>7^J=9)Sb#M%KrZaceR5o zxvB<~QXp08H+NTGwk!_tRqS(e4@(^mHRC?k4z4ndvC8(}!XKS3autg-;OZUQj=U6^ zO^Jvu>h)1x*}!N@+D{@w?;O8+^{*&jUM{*d)9XM?ma*wECa0~}OAjJ%jHYgz?<)Ds zcZR2)h7Of^bO!)sNHaoRHU60TW^qJ>K3=VP&@}UzP}drYn$iUtE#zN(d{Y}uSCP%4 zmVUKfmtsALfi{aH@zwH=#f6_et=qPCY}&Y|bK917tF3+eZ9Ut9N^b3G+th8XP;%~4 zwMFCi%6^krSsB;ri20v=0n4~=X~(S9YW+{o2CcT1o)#43I;Yjz(%OkP+wR=jwXLPi z>S^B+>}u(0-);qWZ0Oq5y1lcdTZ~(GY-!)x!#?1S?VDPy;HK7|9o;D1v8kl9>(pKZqq5eh|q~g}fSObGRS(cR;>Z`P}l-6jG zD0;nAlBQ8E#IW$CP6pZa)+X=zE}IcD)~q)dmASPdv9jervK41|LIGEuEyF(5&r_JW zqNcAF(^+s|)6-|^S9)(%p&EO-w%e^O+K#?1qa+-cR?cXVs^a1m#aUelvnKehaV|q} z@oJ1)P4c20br+b$Xth>h%qU1Bs)AVzoM?*rhB#|QFpZol9%p%4UD|4pB`}NaDwFq8 z0vg0@j4?YDchL9LyP_j|=>WUTO|jxx1k)LJdeqA3N`4cPOTqrtYi{Nx-`my6U@JHl z-pkxWhqi$giIqbWRzEwijJN5;xkMdil`uZO+?te~U(U%7ufI+udA!+@B_SZG(s-TK z-LqXl-crD=jqN?FI=Mx-D!6TX&#G;~o=w}fZs*7@hmfq+c=SF?Hdg7}*@WnhGO-$q z%7&tQlhV?cI4tRe>G||7zM3*%i=Jz~$DRci!1h)N505Op^9UlD3lO zQ4ak^V+}2`WM^Gk{W9BxeYFYvYW=LAP`H#^IdThIO5Do0dXmPGFB0`;l@86;c9!fX zWFJE(#A?62(!a)7pdDKGRv9w7%fQRYf#rI?iW0DXc{tuTIJn$?>#f!6-b@|txhvRC z3B`i0-1hQ@#>P9>v^F-j_3(P9&K`!GxL}hJjPx2C+qW*amzzWR`}gl(y?@Q>(XqXa zJ>89y;>vY?vFCm#p|G@?iSTl~Q@-$~dIAw0Q35Iha&->s)|K&fjrv>lx<nH3TnVnc!&?j_sz^0O$adUi>Uy&KFH&<1? zii`Uym!xvb*>-(R)3g;*$<;+lxfoksPv!w~4jg;Yh@9H9R3V7$>7-TACvuuqV`OSR zEhycG(kq&e=`pvo9p2oN?W7U8gU7h8eS2&7rVZ_@wzv1}2(IdBZ|Rn{e-(}XU8{mE zJGQs4qH@u6cDHP4?`iK=j`NRO$K2z*sW*vOUht`J^gB~ca+yf z266^K5MxhQfs;CxjdIYVajjYLCaOZb!4qS&C)$fW@(mM=B(V%e|rU0MUS%e>PZ z+iokh)uHy?3$j+-f}7bQq-~%cO`sLeASn_Woo&< zobO*oZ#(lldZVI2(_;7jsnk6^1eGf#vgIyqr^%5S^g5}^Oo*slL)v$(Ez1q`N9y*B z^%e9sxg%M5t=?iUmE>vkTK4iYT6<+;%rZ8Oh#S`8NIiqz*3prM@UPJQ8hS-t6jR~w z2qV@-N4id_@G%mQcK|YUq~$MLXl9ka+^my*6gf9iE|H1JY4oJ*vE*hmrgdNUuqf7N z&?blS$Cjhx0$?G!=W74k4#THWzs#Wze-7A?kfK+e*hmzA6aCN6qI!-F40z+I((77zL*v78;@DzeBllt z6MNb!lTq7SxVWcV&q7Hl7P1G1f?RhtWmOEZOgqR}lM(jTQBI%e_R)w7BNG)-Wr24p zaqvRg$QEsvVm&;_Sc)NBN%fbjgV-pZH|zOQu`}+JNn*H-OdMr~!D}m``s!R?SniJ- zZ^}EalSclnc;_#zFjbK@RT_(kwY9N@A@{_3{)x&zvGrCr6N?sp5x8el%XVuRW!W-N z|1t#c<(WyUjLJpWxN?I3B{$`4nJdy?n2VAPERb50T#Va0Hafx4r%S8D>nVxM$G9#c zi0U>;0EjkFMvq(GdRd=PJlVAWk4Itsdmx;{PtK?o;yd z^?n=6;q~lT3^mJHK=tYZk#H+zpImEJrp!;8y{VQ+Xp-3CA8%Ig`%x1P_J45Fjeq3Q z>fZH|Dk=eb*LQa}6U3JH(yVcph>Q8cSqUieuA((efp=UGl> zZ^6>@dEIcizRR4V#CKWGrqUd~{=D&`nXc>es&=bcaT_lxH9PH^3M z=Kz04-g@3ix14usHk^05+s`{sb)0vWZ#?h(0e|1+?}<(4omXx?@9gLAY5w}LFXijp zXMgt1Exp0F$_rn}VF^4d-0HhmCTxq+Fd@5Qrs%WrYBhBAM9^5XbeVe1xh;>EwUQ zb<4PofvKznLx~5r*yZM%v@z#N8 zoSuh0Bw9#yX^(@y5=p5S(j&<}tPE`AH4v2j=%kn0Ud~x&mo{$IlV|c`JiVqPCn$Ag z;WbcqHLM)QhP|@0dF7VomD}kY!&j@F7GB6f4>G`*8+RD0(wn;5zH)j~S4$HeQ~K2K z?`pfA-jw1buNAx6;)>aRdzUsjs4N|Hi{EZWi9>qKc=bUBB@2w@9eBJ9OV`gmQZcXA zjYFwui!@9&BVg8mqv};=+x4p)bb{ISD&5rUxUTjJN{Lkb_Dp2CoOIqZGBMm69kWag ztJgHHm^FxcO)cD|-}SKDtp*3pIgbco9*rF|g{Hoc3(^bl&N6CdJ^vV&x4Sj7Tzq6E z%W|OIs&CFSi!u?Ff?)3|4)<=ELdpqg8AVDmLe;cM%U5J3k9r?cnRYV|Q+j6R(j~^a z;bgYQ5-UqE^3Fp&5@}a&m?~{il`~?#mCoH;<}k}4g~RG*wMJKaS~s^G?I>!u-O{$m zmRo+L73F@ojPu;4#w+|RwMqPGs$Rm}%^tn@gga#`uu4Yx`MubSDr3iXkTc+@9Vii{nKjc!j=3EVC9O}&>vmZa3jwD7Kc51U_uLwgvG zj_(=m-$Nw!NV#CfC;3o+fLm-=H`dd|j}O2|_`uZ-^_=n>ySllaS5t7=BhEMTCW@;M z%7%gYm<~v}5Z@ENH@xS%>-Q*k;;w^QyvDx=XGN%>oflUZyDv_gUaMYLXbH1OSmPv# zWxbF01l?=zy0&3=Jt5%TL7W|oUTq)LA~&FMSHKvWCYP%iyh!8fVHqecC&$?6TCU3S za%geIgQ+(jW&ixxh+axq(a(M1>kD)WWSyp1`l;dl#to;3_9E%et4<0<_ z?3}l(YsJ;FaUjAvQNSQ%)yv&FM7}(oOSBCCK&%P!e!{T^z61NvhR0wGW?=@(CFtF!-VGwqT{IOXl z0Yh*aCSe*{AD?w{BL5`m$34t6Y=Su$gt1Q%KN$SOS?4$mJWl*z>T`sH`Z(;sfm;5}y{r4<}*bdC~{QeuO*F|DVKT1MdA8bC`!o;Ys|1)=w!X ztvvsX@&SXtpuWiSDax;Kj&QKrA3IICfcbgS1NzQV9$*rlgc)eH6OMC)M|d9hpwF3g zQZNKFB8T%ZTQTSC>>&J=b50V*;0(;dd6>L->BUe$AXS4SmbzoGi>-I_KD(=+(|S zF&KLJoRfhmcmn!;b58vx+I84A3B8Pc-z8C*@@eG?_aD@DUNq7wAVOHd$ zq~qQA1M6YxKFnbjW?^uQ@a-nNar}h=7=yWS;vvryq?M~JUHPZK_v zgjtw|Ct(&^dr1F}l7BD(J7F3QK>PQ}9~gwkVGL%)9L|gR#|UqTaKldMe~k2piH{S0 zn1d%^HbuC@mSz1R<}d?~!|YM~?ZH1UKnn1u;=5+v539~RJ&(Gp7Ou!j={x56r-mF!tZ1-!Sp{3F!t?a0&)qz&=dCEDZh>_eapn6AqYx zX_)>6`7nz49Q6xk;1o=p#vd3uOFI-Jd~g8T=ZG)N!z{GU6Al=&PCHHa@mzJDS>>t1$jKNrf@W3q0 zLI1n(=N-sl6HLJ%%)kK{c#v?xES!OPn1jJXryc8l^dav!w(>9l1BVHR$l(+Wy&HRC z4)bFE5dIw`e$WqdFbMtcA$%|ar(p`FVFu2?9Lzy$ig>{UY+WanO~we zMY=hJ6J}uy=B;@r1Fa?V&I#y)d1$|E-r4zH(zkZrIR-;7pLgbA$~W)SzYl+2G4D*m z*ekIo&(L~5?z{?fn1msif|D={kHPfoaR*wLqjv;z7=vjz1#>VBgKr=lFa)a}Mh*ke z_eR`>!R7PLG_Ez^89wf^AW-i zgU}A)9?ZZKFwjf-PGb&(Fc2Yp!YJtq{d+@L|2}fq33K<7 z-q0Gtf9Quc{mMy zPf;FV_8$qyr-{dxsShwPga6R_3jWG7JPAY4`V8@ebub4zVdAT}3$3TI2mSCE%shiV zn1|Le_|KGEXnzZLq5oOJ2Q%L#o}b13bI4%~=3o+9e?<6T9SrCrrQu%)(>PcP0Lbe8m~Z{tMCrHo*)G!WBXkC5AvA%%+unziR6AWH+#+ihPYtJ}&d0s`h z{t|a#6HLIJFxWtR<#`S1^F`7H`l0V8!U=6S4gD|;6Sojf7+i-t$9Z0leHhw6IR1*~ zjl>fsVFIS$G|Y9LadI%Y3HvYveSeKU^uy3*;t5l53Z`KSX5ev{hbKhdg};A8y2GGw z3;sYWNIt;O?dZWkH|{@4IAA9X-A_1R;(;^H49vhhw10tVCVzr!5qv%>!Y~y57_${`3SQx z3+<2N&zEo)HVHq0KQIe3FqR@6pCY|JN%}zFrzls@e*BD+gh`kc`KQtQNA#dy_{13} z1cOf!Uzqz6;Sl-Lr1zHz_qRz8n9UIn;SUJMKjH2V2?q?qAWXs-Ou;GPf1?jGFc1Ad z!Mz#62?H<(Ct>;p$^-QO5BkFYrT%^eck|>2%)@Dz{2BQG)3dnqRpN0P|6l?h6P_bK zVIJB~6Tb6=59WSJc%bDFKj??YVE|@f2%Z#LFFH-n;13MK3><(tn1H?|FFMmO0MjrC zXJ7`-!yNQ|4f|CuIy+&e=0zt3tz|Dd8EC^3&=2!42&=x1ztDy;*aQQYzUYKt7ABxo zi@z`gXJ8WMU>?@}Gx{&b9?Zi8%=lh(vhw^&!jnb+RWCXL=)demXA&mhw8&u^X5kDB zz4}GR`Uc^64e^KR*Ajl1c|GC$Cibp)(V2pQHxdu%dlUYC3wPiov~AoKu6)rs34_;Q z{w#XeVh-)KFFMCy4CY|)2IBo~(hY{7bra!%sda?oUwCdM95B^JykKx6@q$@+Qp`Ki z`wsDfbubHqFt`c-U=mKl6imZ3oPoa0#ODO|U_A`L08HFQ_+TF9V5kds|CR7UKg_|H zJa2i?Ny0ol4t=-d-oNqOO}@j>4*Z2lcwBe~?!g?a`!4Bl=Zj7!%)w(YIYRjn#t6@I zgcAl}>OSHv&u|(B#&8cN%&jgx-=jyc>3^KeQyLH@wle%$*W>2g2m0b>V=KTN@s zFbAvtgY-%eADDU&doXhtcXOD-0L;UkF!OHQ7x{b8gMlgH^L^s~KI#dK!4%BG6VU&D z%HI#L{~_$d&_{_cOu`II!4ok17~%LK_CHQ}fhib-c{l+5e}KPY4v)d?Cx|~xrm*)s z@rO3d!X}u5L70aF(E23l2!rq#Ou`Jz!4ohK^U(Jx!uuoqgMJut^DrgPpCP|t4*GtKJI8Pj=HUReKTCXI4yIx3k0{3{i3hY{{*Un&CO=2G zVG2%*IZVUgpAdg}{yg^n3w>zA;GdGt(4Qte@(ib75~g4l9*6dyVIPLzNtl7weGD`2tfJ z^k5cFL+kH}k32tx|Nn#eR|!8%!x+rNB($C;-=H66U;v&F`PT@?{}NBQ6Q5n|cFt(E1tr|AN2J_Z{4Y zxql;_<@tN)!B7tOp!I$7{pW=D2ZRd-VHzgj3{1lu^!<=@{{{X-KMcZ77=j^~fRiu< zr(qhVVIIyv-}ATw{cs*;U%>t;^5=gjZ!ifHFb9vp^iN5bS@d8%^#2_9VeB;KFaa|# z2~UW89{oAe@jULq{F1ZI42)HrbxuNmRxcIDd9A+;$>r~C7Uv<`r zLHlKAoeWIFJWN!db?VRHF6@Mv%g#E}(0=t;ognmIdDcn6*b2e{ z6Kl>ob!YK^?O7)PlQ0DRH=K2*U=XHY0v?BHn1#M3!gUUNupVY%2xe}^Uzmp{ps)F? zGYV@b+`Jj1Fg+<`XC!2k?>ka)w`htE1W zn1A%F<9`|PoF*S&=wpNz=Ac!L{m1YZW*^62nENd0C47Q(tXX2&UpVUwK5UNHR>?p?aX%D_69g?^ZWozVJ6{DFR$fXOcte=(oIUM=o?g?Pa1Gx!Jd z-^4!{_!i-X_P^rp%ZWE^f?2o|`o2s4!vLItsps(5hkZBz1K%T`VDLY1{}sePhyO7B zecXkCACR6f@k8vr5`Ug2oX`&^VH(cB+>c4`S7HCZ@E0cj8+Tz6W}*EP;&B<~(1!jO z(1QUOgTDVIKG23UFa@h#O}hLPe_l^?K~T33KR&A=n9HFa#5DQl2m8oj5RX1^z<&jl2iRMjr-X z0)}AlP3N41$a&vU8rr=7CeTD zPy^|{68UP}hoNTNgXwkn4>PwC-?xw+ZG<2C+OZEaa0UiD+HWI$t|eVy9SlG}48l$rf*}~&MS8$2oDuW8 zvA2rw?ZzKyy&d<3A;JSgu&M!j(1r=v1oLnw^o0pO4E0jJU>2T)fj+{qnskSqFatv{ z3nyU?CSe{PgRuzy!6clADd=m&KCFis7=T&06Z)d$1N6fb48Y?s1W&*uoQG*x=f^(u z!z}ECIT(U@I0>zO!UKKq7_?yq`r!$fg}&?XXD|N4AdJBrJTA`z#2bd7bv@|>>tGW4 zVG4G_Gz>v|knqCK@v zLpzQh^us(1z^WT~-iIEv_Mda6pgoCyFafO_c}`FtVGvAu5Dfh@?!!P9bC`hETk#*(!8G*44D5uVZxBBi_!j90V{iug{)OlyIFZ?d%Fb(Hn9@e!G{vQ%Pm_AAPVHR2&ki$Bd{BQCR`hG$>2wxzaFaWbK z1oJTSGs;IR@%#nl8~RTX515DbZRpS94)o6xUYLP1F!v(dmd8ck8;d;e+CjeuwJ?|u8whnWcdi{B)s*`ZQ z08GCDbC`q2VC;?PLElR5R&64jZ#nNY!PvF<1Cx#Cof9y_{j2)Tgy**NP6%e;B+SAj z%)w(Y4>Qo}!XEU&JPg9B+prI9n0niJCk8Wja|aA&-;N&4^&#&f9R0{)8s?z2m+)=D z9Qt8k;yma1@NYly-%5BVxmO1B51e;WF#8_dgPBhe?`_DBo_BUa`CO*{WsCeB-PV#x z-;&FhT~d|AXa({s_#1fZDJS-FzSR0UYU?(?yk>t@!g}lLZ@Fg8isfQeblUg}22VL# zMbJ{~J5*88Ra+$w`nP-{FoF4yTHgmM+H30`scf&cA6~klw*JUPEw%oKE^eu9 zI&{hA+U%0bp{nZICS)zO^&4vK4YhUH*-%^6S%dYp{5`>6viFqpA&CNJM=I{9t$V1l zrPe;QbYrc*;#hU9-BMdeNU+r=wsbgU$zZ*y7q|QLzNv8p3SxX%A3BaEwxq@@m?r2k>; z`)`_cOp+nd`SKX@`ZDq-klSVC&mgZWBYz&bZ-HF$?Huwd}Jhw@CZjw84%$HP)Tj!5_(lKOGz;)>h9L~y=Lg?NS_evL4Gox&t0 z4_$O*>BE(eNGw%-d=~e7&9jcG+bUnTdig4{Q^x#Kv0y$TU$&I;fW2b5k1VB5oA|WVhPZ7~t*SZc?p1SL zVa1)taHnqltn(4RYk#*%`BVN<&nJqj<83v)JW@V&wc4n2U$<6fv`*7=O*Z|kKOZ+N(J^O2>8E~0qTB%9Vom%k^(fArtvl|R*< zma8{ywZY0IOKO{17qzD17avLIr5Cftw1IdV_a3PTdgZT>Ule6uKjC%SY9J+)Lt~O23|3`##FG^aso6fM$?O znb7GPs;;fl^;*nVVLp%fpl4pO9fdABv?@u5F3dYSXPvJ}Ia29BeLPgTvDU79H(6bG zo64E(D&f|lauEHKn`WH{O+9+JVv`py%H5%hHr56zBb8<2A?flY_M5iMI?G?pL!rEt zs|P!1Y`#@Zaa&vwbVjQ7?`5<%y`|+%q@wJdT!rW$=|4<&qU=*7^x zQuHWAzkr@cAIC(7twnTy#f5Wke>LrbQ$f@1;Vq!n7_jKcc@~U7v3&pZN~gT z%9pN()Z_BwxVG9@#qyrh(dp@=4Ff{Dt494 zHq#G^zg@NT5AT|FZdv4Sp}mmw7)Q_d;H-04^cJRv<_%}x3_-<4c^rIXPtLk z*#F;K;QwtjyQ*Kh8~ZayemnbJlK<%4&xqGgOZmCtRpg)8_wt|i(Tod< z=H*{rkpHUPl6K;5?4RI{dSU)rm`_L(&Tzt}WiIKF#NS7;7x*~+k@0s?`@cXn&Ksqvy(50XX1`*f}nUNj0L21&QIGT%5l>->qypW^k*LceL&e}WZ{ zQ%o1HW}1N`L9q_wUg+^zhhePuk#IhSd?)f>h_nz+`f)R^l|;=f2$oc3(jI+L z%FE)2>-mL*?;!3?ety>3;icn(_K5hIbzzwau3;Sm2_t%Dc)GVEUvNi0l8(>d-qfGY zIv*GJ%x5ip9=Y$&W}WjQ56gJF^7ochf2p?W_L^4y-64_=dEQ*Jxwh&{%BI-6;|CdtaM?2;ETLV!PqzRURD1qe&jZEVyMSM2hnfh zof&U8`F}*#<=k=czv@IFhgE^O0z01*_j#AbMsa{}AF9~H^23&zZo)6=@eJnEm`hrl zcF(Lo?8LDSm2!8mSYf`3mRxtYma-ur@94N(`mrt2&vttKqG|_KIrPf)!%|P$zC=m< zGDYzj%Hr2(B)(27@y{}7Wlgc_OJ9EGYhV9oabLm}!Ts2iv(9D_kgg_OsKOs6V=;@+yuDPR9M>%82!_bb|c=Bj0q$@F{T-a*{k`Q^gAV^KP(a<^I9XIV30 zrc=f}-TmtJPr`?LYF!Z<@1S0YKhGo2l=!3CZM9#qD1QSLLHt?V&KB*btd+|6PqPkN z)5ZB)-o0SOBW2yw-GB<;Vcg5(-e+)bVg7pkF`FnQqn(x-(xaX-O|4r^uTW})unK>U;*bC9v(AM0ui63CPOA2!;x63~Fz-|Gm+(G| zeggevqHjJ@k6u7NiCnb{xKq52tm+YQduM4iQu(vujkG7&t0_&-1?#M)eGFCBmrqVT zFp+SK<6ek&4#gyFh4zVkLMh{>yKAlS_GUz_jla)fZyI~5zbM$F3{?6HeddOeK9kno z?A(YedR}%4chcXOb^1lHARXND7Nc;nU`s-yK;d%ROG)3gEU4wMFUwu-N8;6m`~-5< zKdJCxU9Er1#1UROl0U%ZcC#;vOS+xX8r zqk2orzbY49-hPj%XCdArSGEFdtm#6&cpj$%D)X76_!Ib-S?9A7PL-~#bE)XDm{Xk8ctpk_BJV+-L@wQ*`w{t&(HFO+9l6u!A2#}LG4imH zKZg7m?f|7P<1}gCo?ToUwQO0kwy37#0q@C%MW}!r)3YgUMCvY!|dv7=HnejC49a_q? zU0PbzT#B*iKaalk<6lo-%I{@Vct864_`Wc_ZajZyLEucYs@9i!uph&|U+k;)O3m|b ztF?6lF0GK1^MmM3qW4bGE2N8>-*-y7(Ed*9O5*iHtu=R)c1&WIkA(Xf+&hMQ<02^J zPlYDvWp z%GL)RVkt6LT*dmyPiCFf5}=ZN+^Is#G)kp=8+tZ+gQBP6MY@@J+UDB8zT#!C4$ddo z(G(_j}4uH(F{czki{17%4|R_4L>OGwW;@zYF=S_P^QqCF+b;#f*>S+hO!$ z=oj*>(B3cTe`H#HR+8zpYY0)3K#1c=6srRNA-)ee7b#S1hHU&s3>x_u=&!9J3dhP$kK-|YCm#u+o4M;4^_&#I%8w;zX$!qMRQKK*I#dz^r0O!=b#Gp zOxD$xm5+{Yhon9q#l2+JoWpXij04%_*XvzRBA-V78IhCU=KPErx0rr4Q1MXdw0Q-p zr?BUH*<8^)#q6)!akrUQ?b;PYz6rgDP5CcgpR3F<=rXO?rkaYd_aKKL_(;0l%|BB$ zb52+Uh4z#A38$6BE|VZNNW)mdbp-tx^b76nMl;U8+Y6VBQ=ULCi{8zA7k3X;(6Eo{ zIhDBcEarL4rC1gDOUf}nGPA)hjLxAqkKS$*zv6uWHUHt{pNeP6!o%ho_H9bKP{}Fr zx2u8uwc0toUZ=vf!#kH|x>;2|#?kYm_o!EYRQXWjMpZs(M9le7Y45HkrJELy+q8?4 z9#7$3;^lL?Use8&d+n=~pXV``chRy81y?jFQwEqY1xzTxGcim#gY7TOmxUkX{`fEN z4raJ#!s)IvP`(Mbj4#(=^c;Hg=(*#|mstN~f?U$0sD?+E2Ix7Z{1$h_ zdSRpscY1Kg|N1#+i1iiS4;T8M!g$8ihgbzisLNCb(=bZ7kK$hN<~ipBeAnTAj~8yK z-%nvK??zrK=H?^v=a3&q&Ni?25&0>jUo4mOT*d@>2L1PowkrRsTv1gkSPqlyR@+cw zs@6HypwbvF)x%867$ef(=$*nw{wD3 zDzmPl67J7oZxVY9@4S!5pF*BQUK}5(C(j|DM!sIOReWe?Rr@yJR%g{uEnUNUAbP6a ztMCwScOR<1wBSno)}k-(oc@rwtLDk?^WrDz*n@fO7TzH%=E^^t3yp!OHvPn6Zr)r0#J$tX0?&?&5?pL2cKg&C-&#NC{IAzO ztMXWGokI3me^-Wui`(bTHQ@`iOOmf${4>QnwO1H_Ons!^J;Xf*f8{e&Wt*T9MKV>l z8|$!l7<-A9Ip+z!OL{Hphb7V8y`a-I=^^#@De;_lbXS>n#I$p?$Hn&zh+4%zEUvbu zW0r6%yMgkLJ7K;{ILf%4o;iB`Mr73NI~(*HJA-%!%~14pr!=qKMqpxOtwzwf4b(Bqv>YNz=s zTB?114tvwsdzq5xe=Y;3kSEK?mo-s;%g9$C7yn;X8t)iwR08vh^_9lFqd)^K|g{19~u4PagMw1b~lB(c)zK= zW^92(&j%&EPvBk-_X_QQk^kPk0`W|rZ+ISk-vIAO_v#hx$f9#>8*9^*a++x20z+F( z1^eOUM?1QFwy~fW8k}?fT|6ZHiqEU5{WKXt{6py|PU`zX>{am_1#x4qc>IQy5WR(W zPjX|;eML_?UQc4bQ-15f*e`Cc@%JIQZ^S+W=a$VtO%Dh+*RW?=BH2=NSE)dkiz{xS zJ;8m3jiy`_`dMn5?#9H7kK{|2(a(rLm7{`w#pg@=$B*m(SOkBm+McZbWvb&h=5XBO?Rs7UnY(Wneh$A z#q$ORz3zR)cc>CeQPM7mXS&_#!F~w)#r0L%iy`C#$YY|2rQ-c(HQ$zU(p?%Z3CdCa zNnwvy3KW+w*5MwK^*q@>2vpX}Jb@(fVx)I$rQSa;_J`*d?Z=%%K8?J%y^;EQ83RVq z|IgC#(t`bNcRouSTxPnaX9GGtBDfcb%{jHW?S8J{%R%H#$X_i&N|WqYRv86?W<6%i zj~MfZs5`?i~<-)8^4_@16Q zpA)P|m+jR|1jW5JChDp9oO6jcu2Alkn-9zVk6)CZ4;R)m9>u-T*F{d7ybrId3JgQ2Nw?HrXyCT5+^8tR#!{`_HUtYZ(Bs|3(7{@Sb>nT!R zeH6=jemEXr{DFHP5kaul=A6PyvQ+8b{_C{}T*Z1#54R6bh1z^Vz1v}9~3v)-%U zN5GX9Ne10tn0dYA^Fi!QVebo`J=I_6al}2kR+AAOHJrgPw#}_4J+62X`&AFlIX`-- z_!ZWfWgYR~%11+wD*ooBJ1 z#{LPj{$73^r{eqq`)xIquQ8p7=cYMbr}t@AwbEX{e@@@iC!dSY{}s;5t9DcNm3EYC zEu{X9<4z2B0w#W@{;B;jR^Us<6_Soe(NCcNw9$W9(!;a|YWyhkS)JEe~vmy1{j7( zGKqwsrDh<*Qy5?Z!$abzSP;=p60{hxQbomxN-HX+RH;QXMpRT(nx-vURE%lGN|iE? z^?u)y`6*oxAV(?7i21T6^ua*WPCz9;_UcH@!}j?icK@xLor# zFzOze9@mXAj_9?v(q8xTEuBkC=q2*s_{Qd4%#*4vx`DI@5<8*S`@s3)M(4wH`cY=y`>zaX_wKoJpIeiQv6p(hLH*=&2uO^gOX&)o~X1AM#c{tMLy^g?~`f@66Z8Ew!| z%F)p2q2JA2HH-PgN10zbeYaaA^X4SKk|Td1IRaG14(-*L`7$a-r3mt>hjfnet*yx3 zn_lNk+BN?~S--r#`i&q+#hCL@6~y0%p*QtG=5x{u{Zjp(0I&PR`Qp4-AGt{V_ZD88 zJ#7#Ai0IYNhQIfpFFq}9&kOPg{5`SoHdRpN@~O#^h0yDR-r3KbFTOjYJrnsR{$5(y za@SWEYQ@TB%fL~CTKS=0_qp@MZ_5CC!TxP>%IrK3sRAnVYo;SBe;fMUDb~qKWnVo1K|6>ZCqb9xmIr(OCQ(^ejNOT3T%4v zAI18N{0H$rh5t_Zn>{wM>x=Gb{JZ$Jn7tpaFkG$NUPhu!uJurlklDV59Lvq zR&8j;DtaxyH^t%W39^^)y@dZ`5AWxfAUpDFqOnu$bc}G15$@+1?PTK<<3z0Qur5EG z*-l|yUiqBXj=lXC=i_})16nkT?959`2P)|^9fUth_?2Ft_p&Ylp4e?%FHO%2yYg#G=aY(ej(9tW zw_Ajgb~pW(HuC|P^MAtoyQT}Pd<}ESAMyS*E+2BBbe~{X;RA4giDDiYMf}!7{C&SU zU)<*Drsvg({L>HvKa?Ld;1hJU^FipGh0fBa@sRZIq(7Rxw()irdRpQ9Mf$h$RRz)7 z!cdW;&5T}!9mU35zJPKy~VE=&5)T*K4TOcF8PUfq!!MKu_vfK9)emUXowBhXs(%bZ=fK3Fu;0ki_4Sh$b|b1a(K8zecZP6J5bllq z5Bc-;-A1-(dAP_9BD&LVpgfoI4Z1k|jX{5H46B)twQ;DGaE*jB`NSb7(Z1e=;BDYq z2F!tLcCUQ&fp>zh70zo(11u@fuj2Va`TEda!tWvcpD4WXEBfCy*~P>Bq9-M$B=1fT zUf(86rz<&m27D6u>-nF<7AAW`-Q8i|g#2r6B)|AyCx4S;H%+eVP5c}1-*gfG4*d6B zz+d&*ga2bu`qobDTh@G_F=)N2PxZ5%gsZ)5D4rMHi&3b&pXCQKyP2(zpCJAY;=fbn zpq$&Z7`%o0YRPv;?X2>S6K})RUiHMAHpBU`O)j61+gC3*7$2L0ZtJv-JWXa!{ASVr|nnP z{@`c9)Al#vXTXQcaMgE}2BPYr)cXe}=Og|?`>KnluQRJRq@IF(tCjdI#J75clrE*W z5PTCjX4?1?-Uq%X10MiC3SM5Gz2L{e%gb{Z{ILxD1o$cN^7=Xh{zL{|bu;xf@zcS5iB zsY99iOcVYG@!x^}Sw%n|+{-%)CH+Hhi~W7+C?vXPh}Skbo38w8SWtLk{5P5F+A3!Q z{`-jE@8g8ef6K<5$ZlA8Ju-Vnr5+f@LzSZ+dXMqV)W70?Y5k%Jc?Vz=-Vyy*Fe^Xt zx@w2Q`#VXyP~Xf4{pHSfdkZLZB2CQ{?+o#F5%1d~l*H3IyWXOjV?A?@-v0BWs%{SR zjCurSYDAF7e59bbT!HPcOT&!uN*4A$ir{Rv&!gim?@o|__yHy zJo)=2d_Q;_xTdwyrG7i;;h!OpvH~0ug9Q|+PX^q zdu5e7pUUNud~BXid%Y07QGoTQXun)<)D112Zo+LQob@~7SM+A@Cv&Cep#iW?has>; zzl-Oedx>9L&o^bCMmogLwoll8?)J%N^Mz}&_Zh_W&Oz_U?+?Z2H@N&{-skeVgPGOm z%E~?0*o-i-2)FsX_^kCd=G(6vD*jgWV0>%y0_2LHFFKo3Ankn7baZyjE-U3*MHjuD z&^s=AQv*FOZz5-t{v@_N6EZ4|8G`Ww!+aA@%{+Ok*&mUT+6qnMc3pA^P4RNra>%j z^Bm2y_7iRf;UvzZOZ777@sCyUVDcf0uYBK6SK&pP4rl2lgcTrORHatV?uE$Pw+$7q zjP0?E>%LFS)@9S_^y-D(4D+&|GopGs2t9oZK01dX{oX@tXF_Ev>0EQ|eL{4^SboRn z#Z~EGu=@M?Z9?-#=8cFGTIN6TA-mWul+(Bl3{f5W-r+gp|XIPn+k7%JHxsP>)Gg**q}!2iIHw%!P9Ie*^-f8SKfeA5WpLA+hW zdx_$aZ^q-$_&kbkPZ#`!zwOUR$_0O=*MkdRLYTPNf4%Jo*h{f#c!0# zg{0o#1~{sukIu??o2c*yO=H%3|c(2a#`aeOWrj--({#^SQ442O(EkFRVN6%=8EgrG2E+PdZco ze5m*audj-BF}>5%>CFEIa+UjXW>&KwI7924t=DKc;EahQrH6qjCCZ-0k8`A(`w;W% zI9=YGN$*=u#v{G#v0*}1`5>WdD|hQ1j2|B!iqBEaUf0wRejD@XAf#!IQ0>&yrz+9w ztCGZ-Uf|AF4}j|~-nsS+e|pVDzqp`U95W8P4mUmuSGHvSW@Ztqa> zBXK^^!!D#xbQQK-toCT){m%5Hq(2zH#QNoX zv$aU(M}JY-Az(?Hr%65zkk0VFq2fIL2f1(KD!qWc{VoybRvpUZ>VLpzIWip~VhT=c@YokyxRH#S5D!kT=)D9iXu+MyMC_ab$ z;_|F;z4#<+x~vTw84bY#aTZL%TuT2K=^y(1Q2bq-bovP&MDn!otZY7=Sv@~9d9$-+ zJ?VEW$3Av&D1I-K?*Ls#N19oEJ-^ph>p1&h{~}!N7t-r4{n2o4>tj3dZ^8e^ zDpM(@Wd-`emxjWAebZAo zKlS>70#a#%Uh`JSDTHe#++&0jJ4ToAdEm!0@E-7^8TeN4BW3tB=C3a&o4ud&ByNvE8T^J zTR^yX$LVJ2Yc^iaLeE%!kz{S&vmbi9zJ(oB8L{?G^s=({W}lW$uq}}yk@~0Drmv1e zukF}S@#mhulJ}$OvuaIK4E=agPNrlR%%0%ELtAxM9B5`WXK{K2bH8(VKMdXmK3y1v+mc@#=UerE68{DG+rB5+ z>vUY|%xaDtrRmn$f0PNf9ED%|m`k+(LFJydn*9Pl7z*b}Cgrw%zc#97rOl=EItV|N z@Ph&fpKfoo-sruNd&A@=Zf~=rOU?`se;@JhQhdte-+f?TM1E$dWd`n<==FXIu7WAu zLE@by-nRu2Fo|p9~eR;J@su z(K&Lv!HBkci}(%OQ-{B#rUIN|hZ&s4kKIJvWr zdW=pt7I*pshv>4CKUJ%cC+dFa96kNNqoaJEgU*qkCHpeAX`h zawwepVRVS(=T&KT__=g6lg9LI;x(*AA0ggUPd_c!%Jlqp-d`=8lfF@D88C%W^!lN< z{om92a@qKpp8t2{&t_8deb?%D$DlX;H|!sg9%%Bz+Ji|#VW=uv)5lAf@jv0G4zr#T zpctRB4*mzfE`_TPHh?bxXIaVUqu)ksZt|i7|6TZhLH^XM+i~d`em>qTM&&;*wd{!Q zR;4$Byih!o<2vavT;kWg_&4HzgP^2b?9bT{nI|p%W6B@lo)z;IqSEZL+DPn%%sH}y z`+v5WEB&fI#+Ol-1D5`hIDOSqJ^r2ezf|edCM)n2-VDARyvcFBWh8ta_>K&`2mBDY z+Ddem5nkon3Vs}Xj_{;>9G!NLF|+!k=z_`EfOIHxqsz;a3Vs>XR`x=J!UnB9tsrsJwl|J4L)# zDIVk9A|&eEYNp^kDt|j=c%Cp^vHrLpd=j{=W6=H^h#`7|;Emw7@xMIZ@;{A#Fa9r* zzwtM(a4`1j94)0+#Q?S$|5wQ0FY)L!@O|Jrgjqa>KvZ7Y57?JJG1C!d{AxNBmjq_c$7HU~wodbs#BxA&y&e5O}Z zH+mmr^8{+P+|K6;p7J#goyTe@-_xUfncXOBUNl?htR8+!X1jkSV<4M0&eV!wHC*iM9c)x_#+(UhWzdQnQMZX?=Gx)27m(gERMqlkZ zkMKJP|6YZ+enS;Fb8F};iQugw$C88ft{_G%2+nLcK)Y9gIM(&_rW z;o=0Z58vm4-lOkNZ=R&{8|qSeAyIPsxyOk&xZ;(%=B}xN<`1LU9JaG+jF}8cMPrf1@w`;La>}T2f zxQ#0+bIn`P&t5$opHosXe<$BtCNc}kSb&;F{0`zzZyqjQ&HvC2i5{tT>cM{o{@1&I z@_q>W1%r4E{hx4MgnNEW=M8E?yOhs^?*DNi$vA_MaeEB3ka)8+6%}3nM`FkLzwGukkg*CHq9xUOnK`!M_#D zgR=QfvW~=fTPQp`yOYFv++pbLYZ>8I*(HZC4J{U=x5#d*WqvS+{OdVAi~vzvvo7|h5ug( zDrpaG-S7^^ewXO4f~j8~-b{Ij_b~yCSTHqm_7@TZh9wYKs@oJFiUQh4lsTK_B7w z%w*j2ew*ei^f!CYZ9?Hyj4mat6*fAP8>k0cE<#822BCMn9lpAZ2a`9+I8$~W?~Ri; zUs|{$TfelKbU!4f!0?^(hKpZxea7ecrWYo5X0u!Cec-2LvnemCs`MH13nTIkSvW~s zd3KWij`_nylc`o7>nDj`YVyAbsCy)?b~B=IJ#9uDV)lP_J$|2gm$@Rta% z{C7p!H~%SHX@C5GFZNH~x0PII!oLgu`R*UTk6M>+k9vvHSxC5Dg!}WD4kw;Yx}}=e zNbP;Re*CAd84mldC|COZQf69xDW%2Av!C!Y2tQTy{A$1*1aARv7M9Sl@c?^PcbZN; zLCz7rlkhhxy!BVNZ`Qpz*6k%Pr@aIF9^uk@veIh;-wci!(bJKjv^Vl;&9@_lZ2Z= zxaj>9@5hNgoAe{S?)=qE)yt$~n3p$fV}5YgaPis7pI@q{R`9M2d?EPq47?A#Hv=C4 z-;{yx1>anTx03E*@a^E3GrV7C$qAEFb0>Gfn=>knBBE3EPTJ>xNk{e20i9v!r1?{L zH+XJsCEgD{DFfdLUJIV)yCz8N2cHW5^$9!}ANhN(o%x62;fZY~-;Ez;SBtMs6Ys#f z;rLwR@ZG%5>Na{~TeVgLLi^TiC;x<-$a8e5AJ>DQ1-JZ=?w0(`vAj^9Yjyu<|98dw z7j0$&x>(5s*fp{~;%_DX@xI|=y~<_s+16*<<9V0ysqbIu)poDScBI%J%k;RO&jV(J zS3e#n-RKN5xI=`SR*2F~#<{ZffDVjNg=c8KTsh9!`k(sA z0Q9!Mt+alH?*-osei{FxOa1mR_$Kh#RXmVS9~aH;V&h`rT4p?T2xmOWGfOJ}o_aJ= z;@_%2f&LcsCm}}1-aBLb*j8oVVc}@R%km#D)y6D#*mu)P{MxO<#TUo?YxSSJXO@ij z?0TuUoi-nosIsc6Fg6pL$kN zy18oxknit8PF=zS^^pA@pZCMg!Yi}&K4$levwhU%)t-H%Q+wZV$-2I^Klmi@rw}H( zRKC67Iq+A+^=o`)-{CNQ)auvt!Th741I2n2uc+9_y+Z7K=0+d{Tp7-@5`2ZO1Gc*PeA_~#rI42PVm|t zrTG!QAAAycO%xbc`5Xk#fj0=Zd@haUv*gcdr}vQ8U$*>_3eZ|9ey*!7JfG$)mrBvb zQ01%jKIFxFe0*S9sP${*Wg++`@DctiU;Z9G{VMtoiw^y{>JnfB!^ZtUB!h%tFQk9aM_``Yx7UUok+e#JVBz&g|jFw<_;m=pFg8+n22#O&(K^h40cdJ`*=FYV~-6@CT0gdWMB3e|B!DH53Iylq3O;V`ALhbo_n11XMAlq z{?0^Vk6Ia3s)eh65B&Du2-iWl<%CnS2Yxqwf_9o8(^G%xBU~@xmMWZI!Uw>Qf;UDW zZZr2@@KfLo-hX|ZGdbh$J9X-lJtg{;j}K~x)5Jgii1RW1lkaJu`E~HU;b5PslA-?V z!27VHJI0HWio;!-(BKmarXdSTTPm!^;`}ew+cDyAC;p2SAFk6VApA7=9`I)d+{&eKbsT&j_}>Um`k&b; z68$aGyYnB(>P<~VZQV)zeADN{>3V2nk9AzcbTtIMwV!wkh<9(SKboC9>Ho>N&U;+> zLX-5zO2drFC$;4<=kR(G_&-;Qq?NbKE}x`l`(@ubiS)qA z>@u;PtoePg(WAq~{!;m6^_S=+{vKFY{=rOY>@V1#>0t*MUMP7R_YW)m$IyS{@^T2P z%-*!S+V>>>!}zzx<38uh+*@E?Rr+0o&it{;0p9o3s9x(I;O8IH>*sfnLb#MpEB>|k z|29qs`B1U{&gM76l?jD$y%{xcDJujrOgut4dCxO_#{YIn{G25TYwT)7}q%Lhm}23wfgh;Mf7nj!)K>$Oa~E zUM#?V9R4%I4Z0?wZQNK${N+Eyjw!&(W8*M-dDu-M`8x%#t%Tb_xEl2Xzm)!N@a?CD zi+2h$c~Dlbc5Z@>ftypIpDF%H;vXXZ#?tuouYoGwBJ%UmXJZ=SJGo`E&S}J%whR6t z{(i+r9@3vaL>aBY8i1Pd-~MCPODFSSCMD}0tQoeH#X)XLqiXFiGj2FE)mIHxK8e&X*tUlRW_3O6T-f4@I>$mP_}1?l)_ zRG$AFF8;mJr#{o?0W1kzh3-eJOA$0;ES`KDuFa1cK7f3=WTbd9mLI0Cl*voe>tq*S zmThKd7P^%VU%B9Ca!hh+C+XBaZKU`z=1W0N!RHrQ*SjryUC-J{^>!M1XP-S%9P$2{ zeoxfavEZY^E!0@a03Q0K_@MsJ&?lcW65C7RgSJQjh<{u0KZU>PJv{4DyoKPy;I9@y zb#CE6y-02-UO)a*r;U`%>#h9YwczJsdqz^viCndDN$012ft+Uy3(3Bm)6hF|D>DTF^r_+0%+k!4H|AK9<_ z^-u^xxF*|U3d=8F}^DX(my1;Ox)J!fm?dH$#juh)O?zNZh^G1yL zKJUVW{KJUaM_AD~h6U!^6#hHG?%zlJQ&)|Y@2AIZqx0-K^KZ8aRp@`J_q~Mgym}<_ zTq?EQApXbke^wO_v}1aIRq`Ej|3318358wKBPz#rOfZ}ulF>0G1H_jNEM#nd@kl)H zteDp^zWDi?+D3~;o{@?RlqTr)LvL5ZNb0+>$+>HgV#iD!3>50Yo8R(rka)+5mwb1} z`iJRF);|~ye1Cx*o~YM}Gjd{lT~9u$7%(@#e5Cw+7RIUk8>5Mf`fCH>juOuFOP+P9 zURuFVfqyaPucW`0>5)1Y`?s07G3giVF*~8x`THYboq=(8o{y9J!54sEX(@*vS2S85wvVcqjPtl|HW#Eb#CH;0wU75)Pe3j_(EU1vmN1d_}v1MgK7Pc5n?7(It6u z0(>+05`iYykSEc(tsJQuI4Z;tovJ;^N5W4Hko~suI}Q9O_+PplzE9^=ruSLFq+2Fp z(kyJlqFk;)gbAqVbVH}{)g#3Q*YhuAf9lL1giM*GJ2j8p51py69Z7x1olzT=E7GHm z;Xeca%Ski3RKC-Du*ZO_7||tsd`}3UF1PS09|_^pc1Yn3;G$o{|L9WxX$5Zt|EfTf z-?lD;o{iDits;_RJ%oFVa5C40@h~5M$WQbK@NawFNSOcA{u*7>o_oQ&z!xf>wI}qq z>3kgR?`phzavgRCZ&cAaLHHenf04pNryDv={5=D{4}89G=(rvL9k+8stf$PLrF_?a z6nR5D^&Qc>lUlz{(|hV(?c0ifu4SYsC*&^~_jGO&t&|pI%z=}~FiHnGG5~?)&>3_( zE?=!*mhEHE`)z-k*)N0IV&l|F=sf|w7v@90(t3}r4`{F%DAWFf8O`c_+Q(?G>qg@F z#6aHqQLv9C3Zo6Rs^1R6w_QI{+@t&(A4K}T?Y{?sQ)gGRozcg1@~ZmXO1uNayH4?t zQ(N@v9y_8VzTS)fDg4uXr*=N9{DEJic(0#at9hUDaRNNoI#PU>aN`&3mhpQcb_zk# z06re6ZEN--e~4E-A;k0b;zYl-@y+xE-tU-nfrB4H1Bl*2=uMqDQv3s_=k;&v5{%2* z7u%VKjY=%2_Cbge#3XGu^!7t<(yWo0~r1*un9vGL?>7>Wk-a@sK;nQ?wW`bEV_GAnkv#Zx-1t(oys<)k_ ze|AnfecI2{PxLjnA9od&W*0NGgJi~O=ylB5PJK1Mv8x~^3twb_-;#M{(6?P*vrm_g@5HA zuTh(Zqx1&|KXvs;@l!rtT_pX^$;b1BZ)T@&5?$lNN$73r9SPs7;aQjPbKs}I)9Vbv zYd*z%y$siQQV(8x*GLibTAIIY9HdH0zmpKePOyIwZxiv>DxQ^J@9|?bLeM~#ci#E}n! zHXcv;H1XELr;2a+)(j+EO1H`V)A`Z()B!$Bx^|A7$*DxHl-VtG4$6^CZsdJYMCAoW zC-48HbDaDwSC*`N^g3U6_Vu6^mN-kgvD)zr@g}YNpT$#o>-VGH5${r^=a=fa8GHu# zGGXMy^?KyqK$V^A$~d`Y;#+Ner>7GFx#01q;r0`MIq_MB^!MIkb=df4H~x>|-zWbY zwSMgTof`A=OyPw=I`A4KTw@>Y73&3M^H1xyZkOvVOwaB%fpJA|%3tuaaisWnrE;oF z4{~~4g|*rA!hT=XQ#bT>Y+`;L>!IY&+sowcE!f|FmqDha#e(2fJ?$m_k$bQQ@;~&C zn`8a39%vB%hXmSEw<=1C6=4f;Rf_PyE14O(MB?>+lE_#KQKusRKN z1N}~awR;LAsZyd3-Pq zghfq~53JHreOqajKu_&+5c-Y%BgM~XqDRoQo|^PCm-}q0`bB0(3lmF~uj(_j&wJ4? zTuvwZSqpzk+p03)v|v%Q{!jR>og*dhqp5B>z?Xyng8#Y2@%+m6BiTM8SwB9C8uT!Q ze1uXSqr$%(x`gNs5P$0XMvAqH@0YbdcrEz-!c0F(`ibHV;=dXHo0NaQR8J?t4?U39 z`^x%7vfjma8Onf4Yg+NxWAn zZ&YSnztf50wHt+3zIPJ7i}2?aK51V*MsaUd*|=`saXysUzM=n!-f8I7?iwj>yik8m z>R~pU@CvtOcWBF^=rw&7dH8{m;?1!>n&{`2KcnaN)Xu_(vem~>v7)yXdYykhQe?T# z%A3(&TI_UedR*K&wD?uhe-t^`-A_Po5A?1UKz(n~VQRjAM*MUR{{#5{e(aCPUSUjb z=h;p99Q_ynl`c;!>@}26@0WIB2q-t#u)6VqEY!XRpum(N9t(I0GEZGs(m>3Sx83C9 z(4LXv^)5FDB>&@iY@^=GPV1ZbM|eh}QDWp#XSGUabWTI($VW$t&v7~x`bW%DJ^Pv?bRR}2}F9O;AJo_%hIGI@X;(f3*Eu)lkC@UqL~sjN9l2h^o_ z`-yk-|03RL;+_2;#uNWdV?sCelOx5yk>Zocp+pZzX~;LNlb;G@(|(wdL;Ed^pxET>wpKh2Ax9qR>C)aaisVHC5nCeR@zMX zLhv^5*#YP6im>0P4}3HDtA$%XO4bF{&vxR!=K}uHcMjrz1b;hM3cYX(FI_Yi>L)}x zi^w){pCsJymqt?Wm6<&bt<+AJj3&xD4l4YoM9TM+zaoE!Sx*unzl1k{ZwI&agcRNi zz5_f+oZw;Q_wX7fqDy!mxag;Gm1_We6ZjkjwtivxML54D8YV4&2MM=_aIaH1zeM*K z_)+j{g&}9}@^&~4p8K0pzEC}ngAWt_a)q~cNZyB)|FlEFKWiQ&|7Q2kif`q2|JRDX zU*fMm@H+ByyD%#!{AK$S^SqK!su1)MWG~@634h+@PsMwwHXdmcixlX1bYUjNT)PBf zvkg_M82LZzKGE)q}OyoXH3Bg^3JW!Q{iXzVL^G ze{?41wbk(-rFVw-hmN=&Z}m?8tlqohY7bgd&?BaO5q=`P%`+{%e7v!^33|==PyNbB zIJd;;nH;CQ`Y@}v(GKxNrNjH@pH|W(BGl=asgIeo%j@LM0st%e>?us zKJ@$Y)<4_z;>MY{y%K&{Ncde3SF8tEcpdZ<3ms^yzYGw5(%?wRd$_{)g6GO`<@Yf7 zF!XoxKjb%mHyNI#lQxy#llX5U-mT&n5@X-S$MB~`_`Sa5H+yBym%gOYUdMk0$mH%$yoh9C*iszT`e(*z&j1-?PjQsIhpw+`p z@FU=__ONmken0pV8TcT0?bp2@c^rj53El>Njbn0zp9Aj&e^VJ=^Ec!Ne0~aV;(tAO z?&wIdML7M`zc;|XXaBy-?WUKbtt9hc$@7K8n?$^)#r-w^S!*Au<6)b0u8(kA33rxo zw(lMK74nUx3cio??zEgDCFC0&KH+4bIXc|01VJBX<7EkCs-5a#oOJhn)7RN~)}``J zVd8!O9QN_@(y#qHm!>c3{PzcpXgnR6M$iu8&G^yO*ttumV%qSjf~XgFKxFy_zGi`QI~7aeKPYL(P6+?JhA~m@h*WWs94hQfY&$PWLnNRt8Pv?c~d2QA6DwZR#<9k|4zvC;&j~|VM z{hp4CKf1xsf_DnD{*8`Ou|M`LrL5@j)erU(KljgG-jaU6yl{4qwc>|kgquXTXTBl!%R|uX# zZq0+!ewg5) zz9?PvewZvY&|s!8Gi?~}CTKJ9juOw#HBI_QvR-KR0qY;K{C*}={PLlkxmg`YdEt^= z*-JWmepNbO6n+?d7kHxr`X&4X_<=H9d~rtk1;1Tk%lMoD0+lpji)bDodi9SWzle8* z;`t@K8GIQ0c@c;!d>(l2Z0UScc#nsFCjX;L{a~wye~v)v8hd3d9~5t|`&Y@|FX4xs zo_Hp@gr5MfBmHzb!q0$D2Y*Hs7*}$$3IW#${s9SdYe(dBdcQ|v=fOT)DC925Y)LcF zs66waw|Us@CuXmIZ%KLjBv402ipo=T)$?Znd=mJL0*!BNKGkmL;kld_-yKwb3HMc( zSLyMrZ2d#~&}|z`Z_|##U!$H+#OqCzLiN=Iz6X4v`d3+f zCF7~Dzw{PflfOth>aSa&cVK*^_}WVXJwJ!s))n;0ahFuqVU@3ggg-K2w8YLO{22Hl z@U*_r1b$ld!B6l%@O`rGr4@P9@w7l!DEq$av~Qq)^0LSA$_q1tJcCylAI{;w8Go6D0-xEqh%m)m z;6~S*cuOIYlnSQ$ZTKeqSyNi?>U*u=Iq;o0Dv!%+(;LaU)mqC^d9wxD#m~rbm=n2PwWa)z6HIfjmF>i zO6SMQL%Xx5r$pgx)q(0INT8>B>xSNyTYnSe4*gnIHua-^@L|$ndCKbzQ%QQC0_Dac zUP6^^BW#^ZpGK?5v<>$$=q;!nEp8Q%$PaD7WLoG7l56Ho1Q{p%A;QBB-Y`?Yfvv2j5*vivQC-Z1pO_mqfUd&a&s zpLd+f7joH*X`HU{VL$Y?Pah568MSdzOJ3^QiQcGkoFLqu7mXGtYa*1CBavH)USjW6 z9>|^;8mB1T`tQ&`XN(qEMoaS*@*@A?h^@pI9fTVuT)V>IOOGIPvg!oAxCj5~e=u77 zfc!20ycI)p=!Lp#tHTg)tNUr`c?yqIQB9F=3rcll`^4f`$FpT8x)+{yrI`eGCQwfI{b)Z_kLs`Lc<{ec^3yNncN+Ng*Nzr%@p0Mpj6|+le=z%k7Ef=Z^rebndfOJ9|P{MF>g zm79uZo;o}F8jJl8@%o8(hEH-e-GPTNQ-dR0Hb-UmI)e;I$p^k#=4Bi3I!v+1=$Zyxk=ZKK7$xa4}MDg0I(Twzc!tfZ`FS?1k8#=q7v!D>@r1ktn&-U@7OWTZRRH`+oi|@&{ z^BCv!L%Qk&<)4ebn9Nq?)-?;I_T@n7|o z9>qW-@e+Qvk=>O{H^dr_y zzCah5T}{LBT81{KUK>so4&z!Y;m;CYycF~RA zeM7X*d&{NybFzX^U2mPBKQ^CKyuHNhT9EE1CU+Qbf<1>(v|Q|%96L$8L&Uoi8quXZ zo&&Fa!)Wp2RXkAN*?bl6=eRCgt_Q&*daW$%^#0Lkk>NJoA5H&{`_H@RKS;K?|J-2P z{n9pLBdGe{3B9w>`>E(zJ;n7&+o_`VUaKFT1V02GeP7%8it*Op ze}^x$k7-9f|Le*LRT#HKr~dEZ&)Y|f$M_%mv+aAQe75gRQxZhp#h5^Q=6k&XNhx+-jE6OJ;)BP%76k=pBXLzxw!GG4C)r z;QC5$;ht=DJG7YSP5TGN=bq8x+n*K6b&-B@^W?KP7e1bC7cx#2y&mZ8dpq@{{N14b zZ|`lRk7!h#{V;s}h|G*yJfG!HeEd|8ZT>iyGpZ&%j2&wsBo0IG&>z$OK0e&5_cKfD zuO-hsuB86h6pSz{f#&KvZY2o2ub@ATg}3GJK=1PUtXN-%Cv4xGzQI|(iO=oIqSFnX z-fg4t_gdZF!Fz{(4oOVsLzQ%bnb!DaKXe{@=V+0h9f z0bxrtoGZC84!up=M@#nM2%qv#w*6C_l_1{7u!Xw{>$d&E_aVVy|8#vW(p>E)vpdi zZ|Vm}ixW%7lY}0hzjpp8TuEJJ4J67})sN8kKZO1j+bNQKmD!W+T%`RM84spGZyxk^ zd~!6kzgRob!liuo;eP;sh9R$K=B@rdUs-yZ_k1?1KGnX5q0{!M(c(Wl9dBP-=gKb% znnET@0$I`!Gn;>lQU zGS9!aKtFSNXZtw{bLkEe1wky4(OK2krV#|yT>I|(Ug-6Hezf?$xSf;wO2%u;cRTjY zuV&|tg{J+P{A3+ka&@-RwC6UxPh@&T;WDqaSdk3!P4SNr|L7s?z%DP->zAg7vVWma zXe%dR78T{M=EwB^FDCYsE%_vW;@bxNpTPffE}wiHvv!5PpQqHWC8CWaqV87OywEWI zhfdd*M~hcX1VGND=R0P%wDHjBoTaOk)3GU{@_QIMGX_V)eow1U?XV4((m9F$a{N#D zye>PxGTqF{NG1%tN~iuO{CsmX-ml4gC_WHg{;l}8;C~(e!+a@N{-SZQ8~-yGcc)x-9nd}!c-G0$cm=j75|7blw z{l0VAd{%EJ-%qcoTpnwyW^+}>VKA=OG?7m8PpRKyqhWt@GQKdDZ>iFoEzx;Duqv%% z=5vz|eZ<>LylcHad|XfF0f`*adxASMd#z6_RNg_+`?k*mY}`uZx5OPjZtybyQ%br8w1xCzrj zTW@Lp8S%e28uks)!v0+#t+&h#qYpj6!%G(S5dIM1HT*}H%Dol*0Qfxut$(mylGfv? zSG{Cg(jDymA5`c#V}YW|bpm>)plAF2ZJt3OvkP-pfTj;RIi#>ny9eWWhO@Qt=M)s| z<0sIYO4~W%&qNPu=RNI06T&WorOdu2zUh|2{%A4}PwTPPAE~iztaq{=q;-|AWm4ny zz{xY%cv!}ss@Fm2AA$ZQ{Esf_2PeS~f!`}I>7TSO=X+6~>Xi(;Hh_pdNS|bp3Hne$0H}Q@WFWv4+qaXaJ=y^S- z?GrYhuuisRVm#u-T~ZlVxepV6!9UO+l^?%E_XKz+xbc(mrR^iozDed9%AoP3{v)FJ zpL*G*p7>LqVEiV2muQy8XM%~qC5rgAnQ%u5_g8WMA&cpKqVVn8%Gj38g4z^X!pd6c zQ@#hFH{+kMbH()N|LOCVwOSQz^N;yHjQ^^SW5nNnvQ&Q&-P7Qk!T**2;)9CycC!Q7 zXFlWc8Uv$s3Gq?=zhK|~;b{4LkBnAZs@7Y5#^y+~htDH?C*hBIdj6iR@tuSN2TCQ3 z;__AbA0XZn#JfWA{1Uzw{4Dr0BM{fxAAC3iKLMWm(P+tjQH4JPJ{9~qWpt{jm^$!$ z89ohM;nR3GVVb~e!Kb<&lqgPG4M$#TGK+Z~Sqo zyy*b%0G|&2=~B6wjE^QaO;5*;&L;c}wZn&tu>To)+kY}zyiZA6`8)Nh0jh<1VBmYD zJ4m>*g!@~Cv+<*>-`vDF#@3FKPB&AhFqCLqrtqoWr<_5*`YGdw=vlgpW4%)8HR0cj z|2tKYq?gvOlJ>W9-lTc|pH*c_bkktOPg|jP;1|q`<9f4kKN)XKuW))@7d)R3iJqaa zdH-r6oin7f{mf|UTr}jOpQFY3J&3Brj2p@CR^rwF5`H2c%cyDjVS0a}uiwPbwX;%N zcRfvf(*vEhUyhc1-$41=3f=<#W~ZOt?`Z3rZM5I~(&a4CJ50RoW%SfOC%`v@Uz$;$ zW%{o&ovmL6_A-5-{@=*ozhU=^`+L$p$$Z`HJag&qv$FepIJZUexKH%{eKfq!p73j; zcZpv)I=X~kgV`z9L;Qop-$DEl{s(zZetdpy<7S7(&7MFYHEJ#nNPDzMj9HwigHqvq z5b|NV01X-s0?fcwpY^{&KK^>N_)#zay?IFZKAp(EUATr)mt}`M}ai`jzQj zu1|O6zn7Vi^MU$7!&&6p@M!!!sq}o(*6C~^}k4YDw>rZVw&65JQ ztuUZ=tmi%koqf=GSaeG2H@`2^TP1(a5w3H5wD^7R7is?Ud0%6G1pdQvAJk0d?x}fP z({C7W|8q3FSJsLBfm+nK*#SQFx9R;YdJ{Ta^6zo~Zwj*d&ok!Ows)IP4&Z;3_>(+e z>HSLipM)krM%jpB?N9i9#nIyDMGrZW)-yS0L>v$+rV4+C@H28_@%dXN_V7mo{ivjB z$7$#2?-RyK^d-r!Ch$7&2V(hU_ZX8B$w)ZU8!MmyE^lvsTzIHF=O8 z$4oAs{@kQJ0ju5W1hKEGIN%Rhz2f5zCduZ>@o*$SZqk7ycdQ--V zb6wu}Ijq($Vm%2uYNxyU?)X3IkzR{;pWC#sGW8bUZw1A$PBRYOLzj;gpH?cz%I0gl zog=%Hf2W(Qm+4!{JgftSbko$a;>To&vT~bTETiY;<~+h@W|!MUnEJzR=sot_v9J$a zndTDT9R%-sUeXTO<3AcPrug^-{%7(3V@0s`?DYPSjN_5LPxPur=|9gO%hWTJk9zmN zSM=zA`R(DozGm>F#OrpPeB7SS$3pz4){PZg zI!$2v-QT_wY4k8hg?^5<=nBs)+dhFW$`pL7`Z!Iz#utnQdyK`4_Q~qNX^-aF}`91zm#Phwfc|+2FwNJVG0`rDKWA;SQ%As`nNoRQaSn>AKbh7HDRpRvo9V?+3DM#I&t&wPU z&Yu(gdhpr|ycv8FczJ&2f#=HbCZHbhVe(`8t<@`flJ-d+$!ihLJL2qWw%WR3dZxXP zzn6H&q4#=dgmN%nw|+0-A57RjO*Osmgwk(xeZkU+`@7V)5P@Am(O;46;I1j6e-ZDC z0+8S7by)^af1hMA3K*06cw)<(1cW7(7*Umq-a_adf*$6%it!+^!$kY%*|C?U82XEt zs=xivTk!I+a89A=C+Io8{=mkJrxtc2IO@PCGvlF&R`J1U;?@2BSUB&(;!*T%1zV>? zaCq=ggKF<7xe0uKp|V{Yz}w1j$(vU27Vu^KXMCuW?IyiHvm5^%_(yVG-&Irn^n>pL zZ;Rz(mR-s0ew+uKFHDeJtTcF7Io02eiC)uKuRy@j)z_XS|>jM9pLJt12J-%kw)8e0y2?Dqj=$ z<_x?8d{Y^&cIgK11%HLoPwKmUa%1wna^-Wt(|eA>kxv?J`6rT)<2mirS}7-%hy|Y zj*x8eT8?Qk66Tu6y_4|0*V0~IU)k&RbC`MzR*Ho-eGa&M z@!`5^^^Y^qopIe*@m3{de8z_lJzep8&1J}E{6DCU4xgppBTCk}Odsjcd}MAmLolB> zlBuYuO~lWAq;p`-SXc)joeH@MlX2cxr*U+wRT7a)@edOJ)c<9Cwfi~Z*S3$9oTo3o zs(A|h3;sv^5935)|B6m##4=@)U3}6^_!)#h?BTQDw=h0oo~Y&7$~jsz|5v^Sptlct z&k{YqdT{rG9{`WOvs&>TDyuIYaiyI|<>SPhYD{6}Am4gp+FH&g*b9`8DSQCuNJnWt zRNe;gqu`HM@nCX@#&LV}P0{|;@52N%R zb}}q~1DBZm@$biW7EX%YD%IaPGI(UvY?wHRUrv)w@2z9uT&gU7W1skziAz)CH?2%O zT`G4y8~!#E|LL*(O7!&h_`Lz^7qSOni@BhfGzqFppF5D=Kaj|m_&w-%T#TN| zHweAs(EFY;Z0$n+eBV&~-o*!LgtVF5=e;Ul)l;dT+s49ooQa>#Peu7!@{ecc$Jd9H zpLx*hS}<1pCm&bR@{3W>_X!ssfmsukiIp1lg?i%eBz|t;Sn&_|ALP5)v$6W$87*5_ zxWj~-O1P^l!YzoyO~dar;pzzYJP)@euP@GpOa4`pgMXCXmi)TdUwm4Re~Z#79S^eX zx!O#8M#EQSPoJ&xW-5nI&qo990O?G66M9@cu9+U!KKX2TRo{m;vz(~i4imoZ_Oap& z=SyENN$WE$bExC=68v@5`Qv4fb(ALP)o@VbjIOb8?y-%lUhj=iakBxtme}$YObE() zKX)tf_7KlrBue-v+m6+l|9WQi*!R*i>W9}2ZdAvwtWe`P)!QKH*DV<<{_=NuuzX{$ znv=X&T6oDsS*uKLtDNTuf9l<1;T#6?>*F!Xq~2#dG9l0FXp&!$Vq6ZEV)1oDE%p5; ziM~`(-`Wi-VVCY_zF@3$dx*dMzW-Ue>JNK~cbs_J`5($>@9}FtBNIp_if;EjMz|UG zkA-t+?A)b+n2*ITXYfCS{}ItKIbrgfa&N1O<-~@v{KK{&goy>Z@t^9w8G$%`$5{Lw zmI2PKitI63!lwRWL8|n72)~^0J4(|xevQ|iXO(g1b=90Ck>+4U4t9*g(Ax*S?+dVY zG`o(iQ|8|nR6!chT0s5$4B;2NXDqB+lesNxviqGNJ|*Ms+hPc6fn zGr}vKc^>}53UBRjFEgEB$P^#-;eQr-(fcvJpT^z?uzJw?)lbUW!51t<{~+;q{OMTn zC8BTTSQeKnnU5)z&$TZykoH za9g|CC7X%2-~(gDzav^nyhimPmsW1SlN{|K{G>k{E3ys4+AFPJmhErXIQoeTj57$M z3_0QRZ7V>-_NJe~BufaOuQmLHeuvuX9>4ztoZdR9ThCBzk#g z_I$+pf%y3x^o~4;KEwa$GX8%S`W<*}1mcQc>%kTNqwzS?9`FB(`Sl}ZQo{LF@~fNp zjr-E}XgS)9RJHj&-zKSe@OK@?*6yRfMNA&_JHhp9^Yd_h018ypuvk?$K}Y6zf9{<#wXaB zE56&pdusUyG8;X$Pi!~zmVbtIIIs7#URE|AlM!m@BH6R|uFgQO?Z8-ku5rmcl#L|n zvB*o#c?|y%-tE;JBbWkmshygxfFGbUSAfY2U&pAsk%&PzaCOl5x0~>%2wygzHvK8l zcTIo3aq@vn3g@IiRccB`Qtf&WdYeB#R(!Y8H~IR3*Ui^FDcB=VHcg~Xfj*S_C^ zVVVQ8SoV_jADxN2AOAM|f8+f+TTgDEyl0|Lk1LoO^GLV(+3@FA#){*L&pCS)@o7We-`JaH z3tPp9&|9lll%cb~L(McpYA1AS2b1=@Pxj38d+vd5bv`wHAX~%?^6~`n&wg#J_>Q>! ziGLxxmKjkpn&0O~l3(?Fu(9#zSn(nCLo}hnb}E$doPmhC2z%VD{}b-$H_#8IK$tu! z8z<6ox~uRViRntUHYkj0*WJ*2?7L&dH+uh1?}sbsqvqaW+x%cww(DB`ogiNBdt=4# z#PMuDq3O5chfj(hV*U1dHpV39?OxPF+->#S4D&XS&JWFMp;dZ(dx;AdmSmui71 zi!amq3yTfcXYyrGr#965O3;)@o?TbI_?Hq zP54&u7VxJkpkLPh;4?DtgW!!B_%ZP58Te`NI`Fh!Bl_du%Fhg?Nq#iz7e3{AAwScF zqm}<5xazS1d;#I>Ci7tR*qb3&Y`@gatmzjXs=hFXOV0H}Z~D{5<8kVLBIgwUF!3in zeY|*?_qPkgADWOMC;N#%PW;E7Fm-H@#C>vElbDxukWMi%K!KRvS zeq}pdTg_}OJ9XE8Ucmh4MdPXUc9V;;KX}WaDbCV5mn(m?lKRU+;!XX%@nT=hUuENg zjfei;4DU((PWJghHX?}Le(1HmY`plR%cA_ubWDPu71OJ^GXk=|m*ICx^E_QWxKgGOnb9bq`QJjtbJmBtwW&TI}`Md7^v%6=% z73ltpKTkato~xDwx5nKm?nddAyU%g|M_wP|jk$ZJ<5#)+5_hk0x5eEKcgyKU&u?)5 zMeZ(hx5wRHcc1d(kp4!0ev7-?-F=U{5#7lBsN+|+g!rHG=g+wNd3Wdj4#oklFZ%Nl zcaOUJJ$D~<_aEIo?QWD_x%>aR{(kQ1eW(!fd!{V?e|%*qXU}!P{dJjtdH#mo|F`a5 zvNXgiZ|^CNztG*N+);f*bpLWR#Q&tbpI%rKd1bo2Z9(bS?Cy>m!gJk?!9Cz^?@b== z4}*JZiHEb7aoITRAWJx#Np-ix#i6+wiAF_|n{>rG)3U>)DR4yDPWu zt`)gOJ&OZ=WfXo@ZqcgccALlVML0Cpk~X(pFL!+T-MQs=F9BZ_@c%Cgzb?0E9kjUZ zx<0}QyCK|$&yDcAbBpdKJhxr9MEE_qMfVV%+pae`zIah?@uHP>8@|->CF^rb)~^G< zD}-Mag^6K_gs;gh=?%BxS4DVVZppfE8~!rKm#)bzT@-G^UlrkZ=9aDqx8bji z@D<>z?KXT?gs;slrLQcF+Wm$IzZ)#v7XDVpS1!t}qX(Ba2x)$ z2w$IDzMk;hc74}z`sa#uJ-HQkc)$CH2w$IDu`=8i{-+VXB)5Wk({0zUB79M9#p-Yy zJ{IBK;NdoW;=csGU9mE^qBq=zPmb`u+=@QvaNBjc<9BYz-MMHZ_lAH!Kf)K~?(AJ{ zw|Pu=d}R-O5^lq^A%j5xy$7a(TE7zdgcN8?M)>Mn4`tGA*JmRf8Y{wW z_~8g&oa^bk$8N*F>G-OZxm7E>bE_8J5$OC~gf9mRw|V?1!h68OZTJ%rz9P43Eq7F| ze~a+7VBxm#=OcVwZq>R)_}v}S9gpy3xmCyk-F98_uYqq@^?`-k@TW%jn%t^29(sQ!k2-q zvD@(1M>t`Z^xAFs8zY>s@RV-5x+8pbZuM&Xxb4~y;fo0yZo{`n_}#hHjLW+1`heqW z?#QjVV};#@|3!qa&8?xmbldg$2ww#jZo@z0^My6txi#y;ZTMeD;n#tO+wgBW-n%H* zOMlmG*AERZL8a^pGSBf*jl>{|8;~z8~sYR zT_cX)wLW*(`XzQ7KH(REuXwl%omID8wT@Ew=B1AQMe6%b%ZYhUv0PHtr5O9w{C53ZrvT;Pdgl6&KR|J1Gw|g ztx@$6e#JE$M%bKCW$2q*ly zjdmOUl?Y#-TSt58w(DCFPS}mm=eFwy5l-D~q#n5K`X|Tx?#}fgCw1F(I>Hx$t+Lzj ze~s`yuy7lGHo}+W`p{`~+cgy7%W{3oR@!a&e?~ZAmxbH#OU?v-?jtYg+Pdv}isOsd zp#OL0`d0XS>KRe^6<}-aw(!r1@HM$U_*}PLFOP7rb>TLAMue{eCl0q=uZwVKGY0Cm zYj%WFruE@A{H6%snCsg}p1AFLz2obb<<_qVx8ZM$@RhmsE7#g>cz1+@!3(yI73?KXUOgs;injeOH>*T)>cXA$$Ga2x)q2w$JOhq;>W z|J5~PR^X!vPGyZh`|LmWZhzKR8eRMRIofl1%%6Q(F82$6j-)MH1q_&g8a`ScL~MP<(w5z2st=R>|uO%Cy&H4>ip`15D44bMlW1pgMNA3blq zKKSo=X7F!v|LA%DKL-EJPOr`FkzM|L|EZ?LVP9p0xjjdU(?Q z6YAkf`%kEcC+$C>9-g%SgnD?={uAoqN&8QzhbQenp&p*J|AcyY(*6_b;Ys^XsD~%* zKcOC;wEu*9c+&n8>f!&D{b%v2-a1hn|HB$196e9;eJj!PGs>P{;Lp9QS6TeVvgfw4 z=dQBnyZw3Dilr9+J^p-W?-E-9I_&#rdhgg|{vV9vFSF;*xqsh^rAu>MA9w%0WsA)J zfIn~Q4f#9l&kCEqUb?)`EYLq(9?Gxh9sUQb0XN<>R@eyz&#rxEW%gC&#x$Zez{rxU!M4vJ@>vs^pp6#zhCxTMlX~np%==NepdYCd5xvl9H+m= zfcSaMGNa!S`L9`K^)Wwrw)RUs8@;88|0boE_=hE;-pGGluldLHH-;7OcSimjS6TY+ zNuG`Vp7?pmVrAen{;afg&3sL0|M0}`)?gW}bvMFyY;lX}1^j#MVh2zQqxil5 zMf?N*g@5ON;eYDC@Q?CQUcL$L(Q7a1W!qKB`$Jp2i%a?bJ}gy&#Y<=j#a7unTwwJ$X!vb)z_5d!Ev1znd0C+Bc( z`sn~f_|*O3Im&0P*T-cZFG}yX#gPA9p9&sDe~$8fHuC>i@E`GKJImT>{r|z)^wdzF z<$2xUe6h{l2i$$o-G|(L#N9{Tecavi?oJ#JlrMMpDtE7Ocb2>J-CgSL26wl)`+&O- zy8Dp3kGT7&yN|nj-rb3um8h9z2o_BX5XER#) z-Mz})Yuugne@Z)l*CxU^jNc%|Mcb`(kwc`kP>-}p)7Dn)V*dgOPNsLci;1>rNzzco zAvlyy;#9;bQ|KrTad62Xr3gZCCIcWcEVu&Zz#`ZHcfdWc4R*i-&{T5Ht~YxA`#VEZ^Y%$=1pGN?^GD!Yknt|N z%Qn7=PcW|{?}4qm_WUyFBd&MH9{0iSZJS>OJ+O)MttFHL_7-iv3Ho677RmuVu(bd^ z*h7EWpXvG8LZ+C_&c@MPY9X45XX11?ola(^<2YMLMPYg_PGy2PiDbo%Z0Y`|#0zSr zTD@8iBQL0I)RW**Wh;ob%4_jWS-N6!rLb1=g7|5rCW~SW>s5QEkyLACSw&>Rkjcxr zYO)q;AX1yMxHBkMWa(;9PsC~mvTD67=QiR{mLvyBDKE>_*OPoH7AUO}}MP?Gs+F|D}$GK9ln~{?PuJ zc;pSIf=f>Rn&kWP%uPLg1~~;oK;OXUeHJqz32g)Q^dY2o-$rV^8bdw(K}wEk*?;x$ zHS{<1F%n`nbdOp2y)MsFPeJ`__z03lhV5q@c~A7}QJAMsA)BaB+pnI5?U$t4w0rEE z9-uEG>5EuD_3ZycM^B$c(wC`Ty`8Hs$uVsr{S2CAV&xFtMD7-<}ic+ zzaxXJIQk>}A0;Oz=?HBB)UnjMqo;2s&#LXUrdIh3dXAr;u@0E*;`3zG_)LH=gxY`V zdoQh{Cx1$m7_oTVD;ql>$rhX49Ab9zLCULdGY?>Ji+#NJCoqXyZN?gb%?0v zJVNt=`gfw$7E-^9d5GN$>fby17W6IXPbMW`VDkskn*1m)y?0qZef0Jfy(;oEB^Vf9 zclMw6(PxPnZ2$hSeV^VRw)zLAlz%(w$uEwc^CI4e)gN-g14U3res%PGPUwwV{lwYf z_k5H?e3OKh#s2$aw*8mKto{cld?4^a;#3k&73LK683uxGtmawwVCWL+|2=q6(ysmw D&j&i) diff --git a/source/vlc/cpp/lib/pkgconfig/libvlc.pc b/source/vlc/cpp/lib/pkgconfig/libvlc.pc deleted file mode 100644 index 561d009d9..000000000 --- a/source/vlc/cpp/lib/pkgconfig/libvlc.pc +++ /dev/null @@ -1,11 +0,0 @@ -prefix=/home/jb/vlc-2.1/win32/_win32 -exec_prefix=${prefix} -libdir=${exec_prefix}/lib -includedir=${prefix}/include - -Name: LibVLC control API -Description: VLC media player external control library -Version: 2.1.3 -Cflags: -I${includedir} -Libs: -L${libdir} -lvlc -Libs.private: -lvlccore diff --git a/source/vlc/cpp/lib/pkgconfig/vlc-plugin.pc b/source/vlc/cpp/lib/pkgconfig/vlc-plugin.pc deleted file mode 100644 index 9e92144fb..000000000 --- a/source/vlc/cpp/lib/pkgconfig/vlc-plugin.pc +++ /dev/null @@ -1,24 +0,0 @@ -prefix=/home/jb/vlc-2.1/win32/_win32 -exec_prefix=${prefix} -includedir=${prefix}/include -datarootdir=${prefix}/share -libdir=${exec_prefix}/lib -datadir=${datarootdir} -pkgincludedir=${prefix}/include/vlc -pkgdatadir=${datadir}/vlc -pkglibdir=${libdir}/vlc -pluginsdir=${pkglibdir}/plugins - -Name: VLC plugin API -Description: VLC media player plugin interface -Version: 2.1.3 -Cflags: -I${includedir} -I${pkgincludedir}/plugins \ - -D__PLUGIN__ \ - -D_FILE_OFFSET_BITS=64 \ - \ - -D_REENTRANT \ - -D_THREAD_SAFE -Libs: -L${libdir} -lvlccore -Libs.private: -L/home/jb/vlc-2.1/contrib/i686-w64-mingw32/lib -lgcrypt -lgpg-error -lwinmm \ - -L/home/jb/vlc-2.1/contrib/i686-w64-mingw32/lib -lintl -L/home/jb/vlc-2.1/contrib/i686-w64-mingw32/lib -liconv -L/home/jb/vlc-2.1/contrib/i686-w64-mingw32/lib -liconv \ - -lws2_32 -lm diff --git a/source/vlc/cpp/src/LibVLC.cpp b/source/vlc/cpp/src/LibVLC.cpp deleted file mode 100644 index 46c63870f..000000000 --- a/source/vlc/cpp/src/LibVLC.cpp +++ /dev/null @@ -1,485 +0,0 @@ -#include -#include -#include -#include -#include - -using std::string; -using namespace std; - -///////////////////////////////////////////////////////////////////////////////////// - -LibVLC::LibVLC(void) -{ - char const *Args[] = - { - //"--aout", "amem", - "--drop-late-frames", - "--ignore-config", - "--intf", "dummy", - "--no-disable-screensaver", - "--no-snapshot-preview", - "--no-stats", - "--no-video-title-show", - "--text-renderer", "dummy", - "--quiet", - #if PLATFORM_LINUX -"--no-xlib", -#endif - -#if DEBUG -"--verbose=2" -#else -#endif - //"--no-xlib", //no xlib if linux - //"--vout", "vmem" - //"--avcodec-hw=dxva2", - //"--verbose=2" - }; - - int Argc = sizeof(Args) / sizeof(*Args); - // libVlcInstance = libvlc_new(Argc, Args); - libVlcInstance = libvlc_new(0, NULL); - -} - -LibVLC::~LibVLC(void) -{ - libvlc_event_detach( eventManager, libvlc_MediaPlayerSnapshotTaken, callbacks, this ); - libvlc_event_detach( eventManager, libvlc_MediaPlayerTimeChanged, callbacks, this ); - libvlc_event_detach( eventManager, libvlc_MediaPlayerPlaying, callbacks, this ); - libvlc_event_detach( eventManager, libvlc_MediaPlayerPaused, callbacks, this ); - libvlc_event_detach( eventManager, libvlc_MediaPlayerStopped, callbacks, this ); - libvlc_event_detach( eventManager, libvlc_MediaPlayerEndReached, callbacks, this ); - libvlc_event_detach( eventManager, libvlc_MediaPlayerPositionChanged, callbacks, this ); - - libvlc_media_player_release( libVlcMediaPlayer ); - libvlc_release( libVlcInstance ); - - delete libVlcInstance; - delete libVlcMediaItem; - delete libVlcMediaPlayer; - - delete ctx.pixeldata; -} - -LibVLC* LibVLC::create() -{ - return new LibVLC; -} - -///////////////////////////////////////////////////////////////////////////////////// - -static void *lock(void *data, void **p_pixels) -{ - t_ctx *ctx = (t_ctx*)data; - ctx->imagemutex.lock(); - if (ctx->bufferFlip) - *p_pixels = ctx->pixeldata; - else - *p_pixels = ctx->pixeldata2; - ctx->bufferFlip = !(ctx->bufferFlip); - return NULL; -} - -static void unlock(void *data, void *id, void *const *p_pixels) -{ - t_ctx *ctx = (t_ctx *)data; - ctx->imagemutex.unlock(); -} - -static void display(void *opaque, void *picture) -{ - //t_ctx *ctx = (t_ctx *)data; - //self->flags[15]=1; - //std::cout << "display " << self << std::endl; -} - -static unsigned format_setup(void** opaque, char* chroma, unsigned* width, unsigned* height, unsigned* pitches, unsigned* lines) -{ - //LibVLC* self = reinterpret_cast( opaque ); - struct ctx *callback = reinterpret_cast(*opaque); - - unsigned _w = (*width); - unsigned _h = (*height); - unsigned _pitch = _w*4; - unsigned _frame = _w*_h*4; - - (*pitches) = _pitch; - (*lines) = _h; - memcpy(chroma, "RV32", 4); - - if (callback->pixeldata != 0) - delete callback->pixeldata; - if (callback->pixeldata2 != 0) - delete callback->pixeldata2; - - callback->pixeldata = new unsigned char[_frame]; - callback->pixeldata2 = new unsigned char[_frame]; - return 1; -} - -static void format_cleanup(void *opaque) -{ -} - -///////////////////////////////////////////////////////////////////////////////////// - -uint8_t* LibVLC::getPixelData() -{ - //return pixels; - if (ctx.bufferFlip) - return ctx.pixeldata2; - else - return ctx.pixeldata; -} - -void LibVLC::setPath(const char* path) -{ - std::cout << "settin' path: " << path << std::endl; - - //libVlcMediaItem = libvlc_media_new_path(libVlcInstance, path); - libVlcMediaItem = libvlc_media_new_location(libVlcInstance, path); - //libVlcMediaItem = libvlc_media_new_location(libVlcInstance, "file:///C:\\Program Files (x86)\\Xms Client 3\\resources\\downloaded\\files\\ac079337-dbd1-11e6-a59e-f681aa9a2e27.mp4"); - libVlcMediaPlayer = libvlc_media_player_new_from_media(libVlcMediaItem); - libvlc_media_parse(libVlcMediaItem); - libvlc_media_release(libVlcMediaItem); - useHWacceleration(true); - - if (libVlcMediaItem!=nullptr) - { - std::string sa = "input-repeat="; - sa += std::to_string(repeat); - libvlc_media_add_option(libVlcMediaItem, sa.c_str() ); - //if (repeat==-1) - //libvlc_media_add_option(libVlcMediaItem, "input-repeat=-1" ); - //else if (repeat==0) - //libvlc_media_add_option(libVlcMediaItem, "input-repeat=0" ); - //std::cout << "Num repeats: " << sa << std::endl; - } -} - -void LibVLC::play() -{ - libvlc_media_player_play(libVlcMediaPlayer); -} - -void LibVLC::play(const char* path) -{ - setPath(path); - ctx.pixeldata = 0; - ctx.pixeldata2 = 0; - - libvlc_video_set_format_callbacks(libVlcMediaPlayer, format_setup, format_cleanup); - libvlc_video_set_callbacks(libVlcMediaPlayer, lock, unlock, display, &ctx); - eventManager = libvlc_media_player_event_manager( libVlcMediaPlayer ); - registerEvents(); - libvlc_media_player_play(libVlcMediaPlayer); - libvlc_audio_set_volume(libVlcMediaPlayer, 0); -} - -void LibVLC::playInWindow() -{ - //libvlc_video_set_format_callbacks(libVlcMediaPlayer, format_setup, format_cleanup); - ctx.pixeldata = 0; - ctx.pixeldata2 = 0; - eventManager = libvlc_media_player_event_manager( libVlcMediaPlayer ); - registerEvents(); - libvlc_media_player_play(libVlcMediaPlayer); - //libvlc_audio_set_volume(libVlcMediaPlayer, 0); -} - -void LibVLC::playInWindow(const char* path) -{ - setPath(path); - ctx.pixeldata = 0; - ctx.pixeldata2 = 0; - //libvlc_video_set_format_callbacks(libVlcMediaPlayer, format_setup, format_cleanup); - eventManager = libvlc_media_player_event_manager( libVlcMediaPlayer ); - registerEvents(); - libvlc_media_player_play(libVlcMediaPlayer); - //libvlc_audio_set_volume(libVlcMediaPlayer, 0); -} - -void LibVLC::setInitProps() -{ - setVolume(1); -} - -void LibVLC::stop() -{ - libvlc_media_player_stop(libVlcMediaPlayer); -} - -void LibVLC::fullscreen(bool fullscreen) -{ - libvlc_set_fullscreen(libVlcMediaPlayer, fullscreen); -} - -void LibVLC::pause() -{ - libvlc_media_player_pause(libVlcMediaPlayer); -} - -void LibVLC::resume() -{ - libvlc_media_player_pause( libVlcMediaPlayer ); -} - -libvlc_time_t LibVLC::getLength() -{ - return libvlc_media_player_get_length(libVlcMediaPlayer); -} - -libvlc_time_t LibVLC::getDuration() -{ - return libvlc_media_get_duration(libVlcMediaItem); -} - -int LibVLC::getWidth() -{ - return libvlc_video_get_width(libVlcMediaPlayer); -} - -int LibVLC::getHeight() -{ - return libvlc_video_get_height(libVlcMediaPlayer); -} - -int LibVLC::isPlaying() -{ - return libvlc_media_player_is_playing(libVlcMediaPlayer); -} - -void LibVLC::setRepeat(int numRepeats) -{ - repeat = numRepeats; -/* if (libVlcMediaItem!=nullptr) - { - std::string sa = "input-repeat="; - sa += std::to_string(repeat); - //libvlc_media_add_option(libVlcMediaItem, sa.c_str() ); - if (repeat==-1) - libvlc_media_add_option(libVlcMediaItem, "input-repeat=-1" ); - else if (repeat==0) - libvlc_media_add_option(libVlcMediaItem, "input-repeat=0" ); - //std::cout << "Num repeats: " << sa << std::endl; - } - */ -} - -int LibVLC::getRepeat() -{ - return repeat; -} - -const char* LibVLC::getLastError() -{ - return libvlc_errmsg(); -} - -void LibVLC::setVolume(float volume) -{ - if (volume > 100) - volume = 100.0; - - // vol = volume; - - if (libVlcMediaPlayer != NULL && libVlcMediaPlayer != nullptr) - { - try - { - libvlc_audio_set_volume(libVlcMediaPlayer, volume); - } - catch(int e) - { - std::cout << "there was an error with volume: " << e << std::endl; - } - } -} - -float LibVLC::getVolume() -{ - float volume = libvlc_audio_get_volume( libVlcMediaPlayer ); - return volume; -} - -libvlc_time_t LibVLC::getTime() -{ - if (libVlcMediaPlayer!=NULL && libVlcMediaPlayer!=nullptr) - { - try - { - int64_t t = libvlc_media_player_get_time( libVlcMediaPlayer ); - return t; - } - catch(int e) - { - return 0; - } - } - else - return 0; -} - -void LibVLC::setTime(libvlc_time_t time) -{ - libvlc_media_player_set_time(libVlcMediaPlayer, time); -} - -float LibVLC::getPosition() -{ - return libvlc_media_player_get_position( libVlcMediaPlayer ); -} - -void LibVLC::setPosition(float pos) -{ - libvlc_media_player_set_position(libVlcMediaPlayer, pos); -} - -bool LibVLC::isSeekable() -{ - return ( libvlc_media_player_is_seekable( libVlcMediaPlayer ) == 1 ); -} - -void LibVLC::openMedia(const char* mediaPathName) -{ - libVlcMediaItem = libvlc_media_new_location(libVlcInstance, mediaPathName); - //libVlcMediaItem = libvlc_media_new_path(libVlcInstance, mediaPathName); - libvlc_media_player_set_media(libVlcMediaPlayer, libVlcMediaItem); -} - -//void MediaPlayer::setMedia( Media* media ) -//{ - //libvlc_media_player_set_media( m_internalPtr, media->getInternalPtr() ); -//} - -//void -//MediaPlayer::getSize( quint32 *outWidth, quint32 *outHeight ) -//{ - //libvlc_video_get_size( m_internalPtr, 0, outWidth, outHeight ); -//} - -float LibVLC::getFPS() -{ - return libvlc_media_player_get_fps( libVlcMediaPlayer ); -} - -void LibVLC::nextFrame() -{ - libvlc_media_player_next_frame( libVlcMediaPlayer ); -} - -bool LibVLC::hasVout() -{ - return libvlc_media_player_has_vout( libVlcMediaPlayer ); -} -/* -void LibVLC::setXwindow(uint32_t drawable) -{ - libvlc_media_player_set_xwindow(*this, drawable); -} - -uint32_t LibVLC::xwindow() -{ - return libvlc_media_player_get_xwindow(*this); -} - -void LibVLC::setHwnd(void * drawable) -{ - libvlc_media_player_set_hwnd(*this, drawable); -} - -void* LibVLC::hwnd() -{ - return libvlc_media_player_get_hwnd(*this); -}*/ - -///////////////////////////////////////////////////////////////////////////////////// - -void LibVLC::useHWacceleration(bool hwAcc) -{ - if (hwAcc) - { - libvlc_media_add_option(libVlcMediaItem, ":hwdec=vaapi"); - libvlc_media_add_option(libVlcMediaItem, ":ffmpeg-hw"); - libvlc_media_add_option(libVlcMediaItem, ":avcodec-hw=dxva2.lo"); - libvlc_media_add_option(libVlcMediaItem, ":avcodec-hw=any"); - libvlc_media_add_option(libVlcMediaItem, ":avcodec-hw=dxva2"); - libvlc_media_add_option(libVlcMediaItem, "--avcodec-hw=dxva2"); - libvlc_media_add_option(libVlcMediaItem, ":avcodec-hw=vaapi"); - } -} - -///////////////////////////////////////////////////////////////////////////////////// - -void LibVLC::registerEvents() -{ - libvlc_event_attach( eventManager, libvlc_MediaPlayerPlaying, callbacks, this ); - libvlc_event_attach( eventManager, libvlc_MediaPlayerSnapshotTaken, callbacks, this ); - libvlc_event_attach( eventManager, libvlc_MediaPlayerTimeChanged, callbacks, this ); - libvlc_event_attach( eventManager, libvlc_MediaPlayerPlaying, callbacks, this ); - libvlc_event_attach( eventManager, libvlc_MediaPlayerPaused, callbacks, this ); - libvlc_event_attach( eventManager, libvlc_MediaPlayerStopped, callbacks, this ); - libvlc_event_attach( eventManager, libvlc_MediaPlayerEndReached, callbacks, this ); - libvlc_event_attach( eventManager, libvlc_MediaPlayerPositionChanged, callbacks, this ); - libvlc_event_attach( eventManager, libvlc_MediaPlayerLengthChanged, callbacks, this ); - libvlc_event_attach( eventManager, libvlc_MediaPlayerEncounteredError,callbacks, this ); - libvlc_event_attach( eventManager, libvlc_MediaPlayerPausableChanged, callbacks, this ); - libvlc_event_attach( eventManager, libvlc_MediaPlayerSeekableChanged, callbacks, this ); -} - -void LibVLC::callbacks( const libvlc_event_t* event, void* ptr ) -{ - LibVLC* self = reinterpret_cast( ptr ); - - switch ( event->type ) - { - case libvlc_MediaPlayerPlaying: - self->flags[1]=1; - self->setInitProps(); - break; - case libvlc_MediaPlayerPaused: - self->flags[2]=1; - break; - case libvlc_MediaPlayerStopped: - self->flags[3]=1; - break; - case libvlc_MediaPlayerEndReached: - self->flags[4]=1; - break; - case libvlc_MediaPlayerTimeChanged: - self->flags[5]=event->u.media_player_time_changed.new_time; - break; - case libvlc_MediaPlayerPositionChanged: - self->flags[6]=event->u.media_player_position_changed.new_position; - break; - case libvlc_MediaPlayerLengthChanged: - self->flags[7]=event->u.media_player_length_changed.new_length; - break; - case libvlc_MediaPlayerSnapshotTaken: - break; - case libvlc_MediaPlayerEncounteredError: - self->flags[9]=1; - - break; - case libvlc_MediaPlayerSeekableChanged: - self->flags[10]=1; - break; - case libvlc_MediaPlayerOpening: - self->flags[11]=1; - break; - case libvlc_MediaPlayerBuffering: - self->flags[12]=1; - break; - case libvlc_MediaPlayerForward: - self->flags[13]=1; - break; - case libvlc_MediaPlayerBackward: - self->flags[14]=1; - break; - default: - break; - } - -} \ No newline at end of file diff --git a/source/vlc/cpp/src/LibVLC.h b/source/vlc/cpp/src/LibVLC.h deleted file mode 100644 index c0a2ec7b8..000000000 --- a/source/vlc/cpp/src/LibVLC.h +++ /dev/null @@ -1,78 +0,0 @@ -#ifndef LIBVLC_H -#define LIBVLC_H - -#include "vlc/vlc.h" -#include - -struct libvlc_instance_t; -struct libvlc_media_t; -struct libvlc_media_player_t; - -typedef struct ctx -{ - unsigned char *pixeldata; - unsigned char *pixeldata2; - std::mutex imagemutex; - bool bufferFlip = false; -} t_ctx; - -class LibVLC -{ - public: - LibVLC(); - ~LibVLC(); - static LibVLC* create(); - - void setPath(const char * path); - void play(); - void play(const char * path); - void playInWindow(); - void playInWindow(const char * path); - void stop(); - void fullscreen(bool fullscreen); - void togglePause(); - void pause(); - void resume(); - libvlc_time_t getLength(); - libvlc_time_t getDuration(); - int getWidth(); - int getHeight(); - int isPlaying(); - void useHWacceleration(bool hwAcc); - //char *str LibVLC::getMeta(libvlc_media_t media); - uint8_t* getPixelData(); - void setVolume(float volume); - float getVolume(); - //void setCallback(cpp::Function callback, int cbIndex); - libvlc_time_t getTime(); // This caused building issues. - void setTime(libvlc_time_t time); - float getPosition(); - void setPosition(float pos); - bool isSeekable(); - float getFps(); - void nextFrame(); - bool hasVout(); - void setRepeat(int numRepeats); - int getRepeat(); - const char* getLastError(); - float getFPS(); - void openMedia(const char* mediaPathName); - int flags[16]={-1}; - void setFormat(char* chroma, unsigned* width, unsigned* height, unsigned* pitches, unsigned* lines); - void setInitProps(); // This caused building issues. - t_ctx ctx; - - private: - libvlc_instance_t* libVlcInstance; - libvlc_media_t* libVlcMediaItem; - libvlc_media_player_t* libVlcMediaPlayer; - libvlc_event_manager_t* eventManager; - static void callbacks( const libvlc_event_t* event, void* self ); - void registerEvents(); - int repeat; - int callbackIndex; - cpp::Function vlcCallbackMth; - // float vol = 1.0; -- why was this made??? wtf -}; - -#endif \ No newline at end of file From 275baaee30f826c0bd3cf7675d6a34d146020450 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 19:12:41 +0200 Subject: [PATCH 032/114] It's the same thing like first one but with different name --- source/Main.hx | 1 - 1 file changed, 1 deletion(-) diff --git a/source/Main.hx b/source/Main.hx index bf1564a05..2b56d1c96 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -92,7 +92,6 @@ class Main extends Sprite #if android AndroidTools.requestPermission(Permissions.READ_EXTERNAL_STORAGE); - AndroidTools.requestPermission(Permissions.WRITE_EXTERNAL_STORAGE); //if (!FileSystem.exists(getPath2 + Application.current.meta.get("packageName"))) //FileSystem.createDirectory(getPath2 + Application.current.meta.get("packageName")); From 13b398e643c7c84562375edf2e148ba653278adf Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 20:56:05 +0200 Subject: [PATCH 033/114] Create Main.hx --- source/Main.hx | 6 ------ 1 file changed, 6 deletions(-) diff --git a/source/Main.hx b/source/Main.hx index 2b56d1c96..392a9635f 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -93,12 +93,6 @@ class Main extends Sprite #if android AndroidTools.requestPermission(Permissions.READ_EXTERNAL_STORAGE); - //if (!FileSystem.exists(getPath2 + Application.current.meta.get("packageName"))) - //FileSystem.createDirectory(getPath2 + Application.current.meta.get("packageName")); - - //if (!FileSystem.exists(getPath1 + "/files/")) - //FileSystem.createDirectory(getPath1 + "/files/"); - //For Stupid Kids if (!FileSystem.exists("/storage/emulated/0/Android/data/" + Application.current.meta.get("packageName"))) { From 5eb2f127259f7834506ce84d4adfca6949f8ad00 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 21:00:49 +0200 Subject: [PATCH 034/114] Update ChartingState.hx --- source/editors/ChartingState.hx | 48 ++------------------------------- 1 file changed, 2 insertions(+), 46 deletions(-) diff --git a/source/editors/ChartingState.hx b/source/editors/ChartingState.hx index 18bbb00df..fd4fb5164 100644 --- a/source/editors/ChartingState.hx +++ b/source/editors/ChartingState.hx @@ -36,7 +36,6 @@ import lime.utils.Assets; import openfl.events.Event; import openfl.events.IOErrorEvent; import openfl.media.Sound; -import openfl.net.FileReference; import openfl.utils.ByteArray; import openfl.utils.Assets as OpenFlAssets; import lime.media.AudioBuffer; @@ -2591,13 +2590,8 @@ class ChartingState extends MusicBeatState if ((data != null) && (data.length > 0)) { - _file = new FileReference(); - _file.addEventListener(Event.COMPLETE, onSaveComplete); - _file.addEventListener(Event.CANCEL, onSaveCancel); - _file.addEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file.save(data.trim(), Paths.formatToSongPath(_song.song) + ".json"); + openfl.system.System.setClipboard(data.trim()); } - openfl.system.System.setClipboard(data.trim()); } function sortByTime(Obj1:Array, Obj2:Array):Int @@ -2633,46 +2627,8 @@ class ChartingState extends MusicBeatState if ((data != null) && (data.length > 0)) { - _file = new FileReference(); - _file.addEventListener(Event.COMPLETE, onSaveComplete); - _file.addEventListener(Event.CANCEL, onSaveCancel); - _file.addEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file.save(data.trim(), "events.json"); + openfl.system.System.setClipboard(data.trim()); } - - openfl.system.System.setClipboard(data.trim()); - } - - function onSaveComplete(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - FlxG.log.notice("Successfully saved LEVEL DATA."); - } - - /** - * Called when the save file dialog is cancelled. - */ - function onSaveCancel(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - } - - /** - * Called if there is an error while saving the gameplay recording. - */ - function onSaveError(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - FlxG.log.error("Problem saving Level data"); } } From 4fd24d086e9f10bc32ec7209e6c950ed0c24a44c Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 21:51:21 +0200 Subject: [PATCH 035/114] Update ChartingState.hx --- source/editors/ChartingState.hx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/source/editors/ChartingState.hx b/source/editors/ChartingState.hx index fd4fb5164..ce0f6fcc1 100644 --- a/source/editors/ChartingState.hx +++ b/source/editors/ChartingState.hx @@ -33,8 +33,6 @@ import flixel.util.FlxColor; import haxe.Json; import haxe.format.JsonParser; import lime.utils.Assets; -import openfl.events.Event; -import openfl.events.IOErrorEvent; import openfl.media.Sound; import openfl.utils.ByteArray; import openfl.utils.Assets as OpenFlAssets; @@ -82,8 +80,6 @@ class ChartingState extends MusicBeatState ['Change Scroll Speed', "Value 1: Target value\nValue 2: Time it takes to change fully"] ]; - var _file:FileReference; - var UI_box:FlxUITabMenu; /** From 5dd40f63263a1ff99bf4dea03d305a8f67772e56 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 21:52:43 +0200 Subject: [PATCH 036/114] All will start here --- .../editors/DialogueCharacterEditorState.hx | 103 ++---------------- 1 file changed, 10 insertions(+), 93 deletions(-) diff --git a/source/editors/DialogueCharacterEditorState.hx b/source/editors/DialogueCharacterEditorState.hx index 35d404069..6bd087b2c 100644 --- a/source/editors/DialogueCharacterEditorState.hx +++ b/source/editors/DialogueCharacterEditorState.hx @@ -20,10 +20,6 @@ import flixel.addons.ui.FlxUIInputText; import flixel.addons.ui.FlxUINumericStepper; import flixel.addons.ui.FlxUITabMenu; import flixel.ui.FlxButton; -import openfl.net.FileReference; -import openfl.events.Event; -import openfl.events.IOErrorEvent; -import flash.net.FileFilter; import haxe.Json; import DialogueBoxPsych; import flixel.FlxCamera; @@ -31,6 +27,7 @@ import flixel.group.FlxSpriteGroup; import lime.system.Clipboard; #if sys import sys.io.File; +import sys.FileSystem; #end using StringTools; @@ -666,27 +663,17 @@ class DialogueCharacterEditorState extends MusicBeatState super.update(elapsed); } - var _file:FileReference = null; function loadCharacter() { - var jsonFilter:FileFilter = new FileFilter('JSON', 'json'); - _file = new FileReference(); - _file.addEventListener(Event.SELECT, onLoadComplete); - _file.addEventListener(Event.CANCEL, onLoadCancel); - _file.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); - _file.browse([jsonFilter]); + var path:String = Main.getDataPath() + "yourthings/yourdialoguecharacter.json"; + if (FileSystem.exists(path)) + { + File.getContent(path); + LoadCheck(path); + } } - function onLoadComplete(_):Void + function LoadCheck(fullpath:String):Void { - _file.removeEventListener(Event.SELECT, onLoadComplete); - _file.removeEventListener(Event.CANCEL, onLoadCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError); - - #if sys - var fullPath:String = null; - @:privateAccess - if(_file.__path != null) fullPath = _file.__path; - if(fullPath != null) { var rawJson:String = File.getContent(fullPath); if(rawJson != null) { @@ -705,88 +692,18 @@ class DialogueCharacterEditorState extends MusicBeatState scaleStepper.value = character.jsonFile.scale; xStepper.value = character.jsonFile.position[0]; yStepper.value = character.jsonFile.position[1]; - _file = null; return; } } - } - _file = null; - #else - trace("File couldn't be loaded! You aren't on Desktop, are you?"); - #end - } - - /** - * Called when the save file dialog is cancelled. - */ - function onLoadCancel(_):Void - { - _file.removeEventListener(Event.SELECT, onLoadComplete); - _file.removeEventListener(Event.CANCEL, onLoadCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError); - _file = null; - trace("Cancelled file loading."); - } - - /** - * Called if there is an error while saving the gameplay recording. - */ - function onLoadError(_):Void - { - _file.removeEventListener(Event.SELECT, onLoadComplete); - _file.removeEventListener(Event.CANCEL, onLoadCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError); - _file = null; - trace("Problem loading file"); + } } function saveCharacter() { var data:String = Json.stringify(character.jsonFile, "\t"); if (data.length > 0) { - var splittedImage:Array = imageInputText.text.trim().split('_'); - var characterName:String = splittedImage[0].toLowerCase().replace(' ', ''); - - _file = new FileReference(); - _file.addEventListener(Event.COMPLETE, onSaveComplete); - _file.addEventListener(Event.CANCEL, onSaveCancel); - _file.addEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file.save(data, characterName + ".json"); + openfl.system.System.setClipboard(data.trim()); } - - openfl.system.System.setClipboard(data.trim()); - } - - function onSaveComplete(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - FlxG.log.notice("Successfully saved file."); - } - - /** - * Called when the save file dialog is cancelled. - */ - function onSaveCancel(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - } - - /** - * Called if there is an error while saving the gameplay recording. - */ - function onSaveError(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - FlxG.log.error("Problem saving file"); } function ClipboardAdd(prefix:String = ''):String { From 14bf17f82ef3553a1b2bae52abdd621a767a86d2 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 21:57:59 +0200 Subject: [PATCH 037/114] A little fix --- source/editors/DialogueCharacterEditorState.hx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/source/editors/DialogueCharacterEditorState.hx b/source/editors/DialogueCharacterEditorState.hx index 6bd087b2c..fb2b1d5c3 100644 --- a/source/editors/DialogueCharacterEditorState.hx +++ b/source/editors/DialogueCharacterEditorState.hx @@ -667,14 +667,15 @@ class DialogueCharacterEditorState extends MusicBeatState var path:String = Main.getDataPath() + "yourthings/yourdialoguecharacter.json"; if (FileSystem.exists(path)) { - File.getContent(path); - LoadCheck(path); + LoadCheck(); } } - function LoadCheck(fullpath:String):Void + function LoadCheck():Void { - if(fullPath != null) { + var path:String = Main.getDataPath() + "yourthings/yourdialoguecharacter.json"; + if (FileSystem.exists(path)) + { var rawJson:String = File.getContent(fullPath); if(rawJson != null) { var loadedChar:DialogueCharacterFile = cast Json.parse(rawJson); From 6ecc902755e543768bb15aa6782d6e9d0408e466 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:05:43 +0200 Subject: [PATCH 038/114] Update DialogueEditorState.hx --- source/editors/DialogueEditorState.hx | 103 +++----------------------- 1 file changed, 12 insertions(+), 91 deletions(-) diff --git a/source/editors/DialogueEditorState.hx b/source/editors/DialogueEditorState.hx index 57cf55b41..4aef1a92b 100644 --- a/source/editors/DialogueEditorState.hx +++ b/source/editors/DialogueEditorState.hx @@ -20,15 +20,12 @@ import flixel.addons.ui.FlxUIInputText; import flixel.addons.ui.FlxUINumericStepper; import flixel.addons.ui.FlxUITabMenu; import flixel.ui.FlxButton; -import openfl.net.FileReference; -import openfl.events.Event; -import openfl.events.IOErrorEvent; -import flash.net.FileFilter; import haxe.Json; import DialogueBoxPsych; import lime.system.Clipboard; #if sys import sys.io.File; +import sus.FileSystem #end using StringTools; @@ -441,29 +438,20 @@ class DialogueEditorState extends MusicBeatState return text; } - var _file:FileReference = null; function loadDialogue() { - var jsonFilter:FileFilter = new FileFilter('JSON', 'json'); - _file = new FileReference(); - _file.addEventListener(Event.SELECT, onLoadComplete); - _file.addEventListener(Event.CANCEL, onLoadCancel); - _file.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); - _file.browse([jsonFilter]); + var path:String = Main.getDataPath() + "yourthings/yourdialogue.json"; + if (FileSystem.exists(path)) + { + LoadCheck(); + } } - function onLoadComplete(_):Void + function LoadCheck():Void { - _file.removeEventListener(Event.SELECT, onLoadComplete); - _file.removeEventListener(Event.CANCEL, onLoadCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError); - - #if sys - var fullPath:String = null; - @:privateAccess - if(_file.__path != null) fullPath = _file.__path; - - if(fullPath != null) { - var rawJson:String = File.getContent(fullPath); + var path:String = Main.getDataPath() + "yourthings/yourdialogue.json"; + if (FileSystem.exists(path)) + { + var rawJson:String = File.getContent(path); if(rawJson != null) { var loadedDialog:DialogueFile = cast Json.parse(rawJson); if(loadedDialog.dialogue != null && loadedDialog.dialogue.length > 0) //Make sure it's really a dialogue file @@ -472,84 +460,17 @@ class DialogueEditorState extends MusicBeatState trace("Successfully loaded file: " + cutName); dialogueFile = loadedDialog; changeText(); - _file = null; return; } } } - _file = null; - #else - trace("File couldn't be loaded! You aren't on Desktop, are you?"); - #end - } - - /** - * Called when the save file dialog is cancelled. - */ - function onLoadCancel(_):Void - { - _file.removeEventListener(Event.SELECT, onLoadComplete); - _file.removeEventListener(Event.CANCEL, onLoadCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError); - _file = null; - trace("Cancelled file loading."); - } - - /** - * Called if there is an error while saving the gameplay recording. - */ - function onLoadError(_):Void - { - _file.removeEventListener(Event.SELECT, onLoadComplete); - _file.removeEventListener(Event.CANCEL, onLoadCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError); - _file = null; - trace("Problem loading file"); } function saveDialogue() { var data:String = Json.stringify(dialogueFile, "\t"); if (data.length > 0) { - _file = new FileReference(); - _file.addEventListener(Event.COMPLETE, onSaveComplete); - _file.addEventListener(Event.CANCEL, onSaveCancel); - _file.addEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file.save(data, "dialogue.json"); + openfl.system.System.setClipboard(data.trim()); } - - openfl.system.System.setClipboard(data.trim()); - } - - function onSaveComplete(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - FlxG.log.notice("Successfully saved file."); - } - - /** - * Called when the save file dialog is cancelled. - */ - function onSaveCancel(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - } - - /** - * Called if there is an error while saving the gameplay recording. - */ - function onSaveError(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - FlxG.log.error("Problem saving file"); } } From a695bf0613f5a5dba8e5d9aedf48c23d0bae452a Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:10:34 +0200 Subject: [PATCH 039/114] Update DialogueCharacterEditorState.hx --- source/editors/DialogueCharacterEditorState.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/editors/DialogueCharacterEditorState.hx b/source/editors/DialogueCharacterEditorState.hx index fb2b1d5c3..b2b15f307 100644 --- a/source/editors/DialogueCharacterEditorState.hx +++ b/source/editors/DialogueCharacterEditorState.hx @@ -676,7 +676,7 @@ class DialogueCharacterEditorState extends MusicBeatState var path:String = Main.getDataPath() + "yourthings/yourdialoguecharacter.json"; if (FileSystem.exists(path)) { - var rawJson:String = File.getContent(fullPath); + var rawJson:String = File.getContent(path); if(rawJson != null) { var loadedChar:DialogueCharacterFile = cast Json.parse(rawJson); if(loadedChar.dialogue_pos != null) //Make sure it's really a dialogue character From 36037ca1899214d459ba05b6c9094d342fd580a7 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:12:33 +0200 Subject: [PATCH 040/114] Update DialogueCharacterEditorState.hx --- source/editors/DialogueCharacterEditorState.hx | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/editors/DialogueCharacterEditorState.hx b/source/editors/DialogueCharacterEditorState.hx index b2b15f307..7e5b8182c 100644 --- a/source/editors/DialogueCharacterEditorState.hx +++ b/source/editors/DialogueCharacterEditorState.hx @@ -25,10 +25,8 @@ import DialogueBoxPsych; import flixel.FlxCamera; import flixel.group.FlxSpriteGroup; import lime.system.Clipboard; -#if sys import sys.io.File; import sys.FileSystem; -#end using StringTools; From 36d65fd5f96329a5cec54340c391893151edd5c1 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:13:09 +0200 Subject: [PATCH 041/114] Update DialogueEditorState.hx --- source/editors/DialogueEditorState.hx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/editors/DialogueEditorState.hx b/source/editors/DialogueEditorState.hx index 4aef1a92b..f804be97d 100644 --- a/source/editors/DialogueEditorState.hx +++ b/source/editors/DialogueEditorState.hx @@ -23,10 +23,8 @@ import flixel.ui.FlxButton; import haxe.Json; import DialogueBoxPsych; import lime.system.Clipboard; -#if sys import sys.io.File; -import sus.FileSystem -#end +import sys.FileSystem; using StringTools; From cf305c98154d6792346fe71a16c9d4c6b2665e52 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:16:22 +0200 Subject: [PATCH 042/114] Update MenuCharacterEditorState.hx --- source/editors/MenuCharacterEditorState.hx | 106 +++------------------ 1 file changed, 12 insertions(+), 94 deletions(-) diff --git a/source/editors/MenuCharacterEditorState.hx b/source/editors/MenuCharacterEditorState.hx index ed573fcee..f801d1188 100644 --- a/source/editors/MenuCharacterEditorState.hx +++ b/source/editors/MenuCharacterEditorState.hx @@ -21,13 +21,10 @@ import flixel.addons.ui.FlxUINumericStepper; import flixel.addons.ui.FlxUITabMenu; import flixel.ui.FlxButton; import MenuCharacter; -import openfl.net.FileReference; -import openfl.events.Event; -import openfl.events.IOErrorEvent; -import flash.net.FileFilter; import haxe.Json; #if sys import sys.io.File; +import sys.FileSystem #end using StringTools; @@ -330,29 +327,20 @@ class MenuCharacterEditorState extends MusicBeatState txtOffsets.text = '' + characterFile.position; } - var _file:FileReference = null; function loadCharacter() { - var jsonFilter:FileFilter = new FileFilter('JSON', 'json'); - _file = new FileReference(); - _file.addEventListener(Event.SELECT, onLoadComplete); - _file.addEventListener(Event.CANCEL, onLoadCancel); - _file.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); - _file.browse([jsonFilter]); + var path:String = Main.getDataPath() + "yourthings/yourmenucharacter.json"; + if (FileSystem.exists(path)) + { + LoadCheck(); + } } - function onLoadComplete(_):Void + function LoadCheck():Void { - _file.removeEventListener(Event.SELECT, onLoadComplete); - _file.removeEventListener(Event.CANCEL, onLoadCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError); - - #if sys - var fullPath:String = null; - @:privateAccess - if(_file.__path != null) fullPath = _file.__path; - - if(fullPath != null) { - var rawJson:String = File.getContent(fullPath); + var path:String = Main.getDataPath() + "yourthings/yourmenucharacter.json"; + if (FileSystem.exists(path)) + { + var rawJson:String = File.getContent(path); if(rawJson != null) { var loadedChar:MenuCharacterFile = cast Json.parse(rawJson); if(loadedChar.idle_anim != null && loadedChar.confirm_anim != null) //Make sure it's really a character @@ -366,87 +354,17 @@ class MenuCharacterEditorState extends MusicBeatState confirmInputText.text = characterFile.image; scaleStepper.value = characterFile.scale; updateOffset(); - _file = null; return; } } } - _file = null; - #else - trace("File couldn't be loaded! You aren't on Desktop, are you?"); - #end - } - - /** - * Called when the save file dialog is cancelled. - */ - function onLoadCancel(_):Void - { - _file.removeEventListener(Event.SELECT, onLoadComplete); - _file.removeEventListener(Event.CANCEL, onLoadCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError); - _file = null; - trace("Cancelled file loading."); - } - - /** - * Called if there is an error while saving the gameplay recording. - */ - function onLoadError(_):Void - { - _file.removeEventListener(Event.SELECT, onLoadComplete); - _file.removeEventListener(Event.CANCEL, onLoadCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError); - _file = null; - trace("Problem loading file"); } function saveCharacter() { var data:String = Json.stringify(characterFile, "\t"); if (data.length > 0) { - var splittedImage:Array = imageInputText.text.trim().split('_'); - var characterName:String = splittedImage[splittedImage.length-1].toLowerCase().replace(' ', ''); - - _file = new FileReference(); - _file.addEventListener(Event.COMPLETE, onSaveComplete); - _file.addEventListener(Event.CANCEL, onSaveCancel); - _file.addEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file.save(data, characterName + ".json"); + openfl.system.System.setClipboard(data.trim()); } - - openfl.system.System.setClipboard(data.trim()); - } - - function onSaveComplete(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - FlxG.log.notice("Successfully saved file."); - } - - /** - * Called when the save file dialog is cancelled. - */ - function onSaveCancel(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - } - - /** - * Called if there is an error while saving the gameplay recording. - */ - function onSaveError(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - FlxG.log.error("Problem saving file"); } } From 6029ddf86073a2ac5d8245e2613d96cb2ed763ed Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:21:32 +0200 Subject: [PATCH 043/114] Update WeekEditorState.hx --- source/editors/WeekEditorState.hx | 104 ++++-------------------------- 1 file changed, 11 insertions(+), 93 deletions(-) diff --git a/source/editors/WeekEditorState.hx b/source/editors/WeekEditorState.hx index a13b4c1db..dc06bed8e 100644 --- a/source/editors/WeekEditorState.hx +++ b/source/editors/WeekEditorState.hx @@ -21,16 +21,10 @@ import flixel.addons.ui.FlxUIInputText; import flixel.addons.ui.FlxUINumericStepper; import flixel.addons.ui.FlxUITabMenu; import flixel.ui.FlxButton; -import openfl.net.FileReference; -import openfl.events.Event; -import openfl.events.IOErrorEvent; -import flash.net.FileFilter; import lime.system.Clipboard; import haxe.Json; -#if sys import sys.io.File; import sys.FileSystem; -#end import WeekData; using StringTools; @@ -462,31 +456,22 @@ class WeekEditorState extends MusicBeatState lock.x = weekThing.width + 10 + weekThing.x; } - private static var _file:FileReference; public static function loadWeek() { - var jsonFilter:FileFilter = new FileFilter('JSON', 'json'); - _file = new FileReference(); - _file.addEventListener(Event.SELECT, onLoadComplete); - _file.addEventListener(Event.CANCEL, onLoadCancel); - _file.addEventListener(IOErrorEvent.IO_ERROR, onLoadError); - _file.browse([jsonFilter]); + var path:String = Main.getDataPath() + "yourthings/yourweek.json"; + if (FileSystem.exists(path)) + { + LoadCheck(); + } } public static var loadedWeek:WeekFile = null; public static var loadError:Bool = false; - private static function onLoadComplete(_):Void + private static function LoadCheck():Void { - _file.removeEventListener(Event.SELECT, onLoadComplete); - _file.removeEventListener(Event.CANCEL, onLoadCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError); - - #if sys - var fullPath:String = null; - @:privateAccess - if(_file.__path != null) fullPath = _file.__path; - - if(fullPath != null) { - var rawJson:String = File.getContent(fullPath); + var path:String = Main.getDataPath() + "yourthings/yourweek.json"; + if (FileSystem.exists(path)) + { + var rawJson:String = File.getContent(path); if(rawJson != null) { loadedWeek = cast Json.parse(rawJson); if(loadedWeek.weekCharacters != null && loadedWeek.weekName != null) //Make sure it's really a week @@ -496,87 +481,20 @@ class WeekEditorState extends MusicBeatState loadError = false; weekFileName = cutName; - _file = null; return; } } } loadError = true; loadedWeek = null; - _file = null; - #else - trace("File couldn't be loaded! You aren't on Desktop, are you?"); - #end - } - - /** - * Called when the save file dialog is cancelled. - */ - private static function onLoadCancel(_):Void - { - _file.removeEventListener(Event.SELECT, onLoadComplete); - _file.removeEventListener(Event.CANCEL, onLoadCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError); - _file = null; - trace("Cancelled file loading."); - } - - /** - * Called if there is an error while saving the gameplay recording. - */ - private static function onLoadError(_):Void - { - _file.removeEventListener(Event.SELECT, onLoadComplete); - _file.removeEventListener(Event.CANCEL, onLoadCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onLoadError); - _file = null; - trace("Problem loading file"); } public static function saveWeek(weekFile:WeekFile) { var data:String = Json.stringify(weekFile, "\t"); if (data.length > 0) { - _file = new FileReference(); - _file.addEventListener(Event.COMPLETE, onSaveComplete); - _file.addEventListener(Event.CANCEL, onSaveCancel); - _file.addEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file.save(data, weekFileName + ".json"); + openfl.system.System.setClipboard(data.trim()); } - - openfl.system.System.setClipboard(data.trim()); - } - - private static function onSaveComplete(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - FlxG.log.notice("Successfully saved file."); - } - - /** - * Called when the save file dialog is cancelled. - */ - private static function onSaveCancel(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - } - - /** - * Called if there is an error while saving the gameplay recording. - */ - private static function onSaveError(_):Void - { - _file.removeEventListener(Event.COMPLETE, onSaveComplete); - _file.removeEventListener(Event.CANCEL, onSaveCancel); - _file.removeEventListener(IOErrorEvent.IO_ERROR, onSaveError); - _file = null; - FlxG.log.error("Problem saving file"); } } From 5118e5afe73cb7b7979dacf8a3d192ae2b4fca5c Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:22:20 +0200 Subject: [PATCH 044/114] Update MenuCharacterEditorState.hx --- source/editors/MenuCharacterEditorState.hx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/editors/MenuCharacterEditorState.hx b/source/editors/MenuCharacterEditorState.hx index f801d1188..549fcd60c 100644 --- a/source/editors/MenuCharacterEditorState.hx +++ b/source/editors/MenuCharacterEditorState.hx @@ -22,10 +22,8 @@ import flixel.addons.ui.FlxUITabMenu; import flixel.ui.FlxButton; import MenuCharacter; import haxe.Json; -#if sys import sys.io.File; -import sys.FileSystem -#end +import sys.FileSystem; using StringTools; From ac665c0c6a0b4e39a707956c776ea491b2a13baa Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:26:16 +0200 Subject: [PATCH 045/114] Update Main.hx --- source/Main.hx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/source/Main.hx b/source/Main.hx index 392a9635f..3657e0db3 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -114,6 +114,11 @@ class Main extends Sprite Application.current.window.alert("Try copying assets/mods from apk to " + " /storage/emulated/0/Android/data/" + Application.current.meta.get("packageName") + "/files/" + "\n" + "Press Ok To Close The App", "Check Directory Error"); System.exit(0);//Will close the game } + else + { + if (!FileSystem.exists(Main.dataPath() + "yourthings")) + FileSystem.createDirectory(Main.dataPath() + "yourthings"); + } #end ClientPrefs.loadDefaultKeys(); From 802ed4530be11e1c03c97d9ca1d0fda1cfedf5b4 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:34:35 +0200 Subject: [PATCH 046/114] Update DialogueCharacterEditorState.hx --- source/editors/DialogueCharacterEditorState.hx | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/editors/DialogueCharacterEditorState.hx b/source/editors/DialogueCharacterEditorState.hx index 7e5b8182c..80a603952 100644 --- a/source/editors/DialogueCharacterEditorState.hx +++ b/source/editors/DialogueCharacterEditorState.hx @@ -679,8 +679,6 @@ class DialogueCharacterEditorState extends MusicBeatState var loadedChar:DialogueCharacterFile = cast Json.parse(rawJson); if(loadedChar.dialogue_pos != null) //Make sure it's really a dialogue character { - var cutName:String = _file.name.substr(0, _file.name.length - 5); - trace("Successfully loaded file: " + cutName); character.jsonFile = loadedChar; reloadCharacter(); reloadAnimationsDropDown(); From bf9c07c247bba6d5ade38deef81e69150a08cbeb Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:35:05 +0200 Subject: [PATCH 047/114] Update DialogueEditorState.hx --- source/editors/DialogueEditorState.hx | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/editors/DialogueEditorState.hx b/source/editors/DialogueEditorState.hx index f804be97d..9f1af7bf8 100644 --- a/source/editors/DialogueEditorState.hx +++ b/source/editors/DialogueEditorState.hx @@ -454,8 +454,6 @@ class DialogueEditorState extends MusicBeatState var loadedDialog:DialogueFile = cast Json.parse(rawJson); if(loadedDialog.dialogue != null && loadedDialog.dialogue.length > 0) //Make sure it's really a dialogue file { - var cutName:String = _file.name.substr(0, _file.name.length - 5); - trace("Successfully loaded file: " + cutName); dialogueFile = loadedDialog; changeText(); return; From d89f24717546e4973f4daf7525baf365330ea3cf Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:35:39 +0200 Subject: [PATCH 048/114] Update MenuCharacterEditorState.hx --- source/editors/MenuCharacterEditorState.hx | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/editors/MenuCharacterEditorState.hx b/source/editors/MenuCharacterEditorState.hx index 549fcd60c..afe91184b 100644 --- a/source/editors/MenuCharacterEditorState.hx +++ b/source/editors/MenuCharacterEditorState.hx @@ -343,8 +343,6 @@ class MenuCharacterEditorState extends MusicBeatState var loadedChar:MenuCharacterFile = cast Json.parse(rawJson); if(loadedChar.idle_anim != null && loadedChar.confirm_anim != null) //Make sure it's really a character { - var cutName:String = _file.name.substr(0, _file.name.length - 5); - trace("Successfully loaded file: " + cutName); characterFile = loadedChar; reloadSelectedCharacter(); imageInputText.text = characterFile.image; From e9c1e88abdec2a94db2e9357b37a7953bea1a917 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:36:54 +0200 Subject: [PATCH 049/114] Update WeekEditorState.hx --- source/editors/WeekEditorState.hx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/editors/WeekEditorState.hx b/source/editors/WeekEditorState.hx index dc06bed8e..c7fef7c95 100644 --- a/source/editors/WeekEditorState.hx +++ b/source/editors/WeekEditorState.hx @@ -476,11 +476,9 @@ class WeekEditorState extends MusicBeatState loadedWeek = cast Json.parse(rawJson); if(loadedWeek.weekCharacters != null && loadedWeek.weekName != null) //Make sure it's really a week { - var cutName:String = _file.name.substr(0, _file.name.length - 5); - trace("Successfully loaded file: " + cutName); loadError = false; - weekFileName = cutName; + weekFileName = yourweek;//lol return; } } From a0580f95f37cab95b4d5a3d69802630439eed6ff Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:41:10 +0200 Subject: [PATCH 050/114] To be able to press more buttons --- source/editors/DialogueCharacterEditorState.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/editors/DialogueCharacterEditorState.hx b/source/editors/DialogueCharacterEditorState.hx index 80a603952..92de1ca36 100644 --- a/source/editors/DialogueCharacterEditorState.hx +++ b/source/editors/DialogueCharacterEditorState.hx @@ -143,7 +143,7 @@ class DialogueCharacterEditorState extends MusicBeatState updateCharTypeBox(); #if mobileC - addVirtualPad(FULL, B); + addVirtualPad(FULL, NONE); #end super.create(); @@ -647,7 +647,7 @@ class DialogueCharacterEditorState extends MusicBeatState currentGhosts = 0; } - if(FlxG.keys.justPressed.ESCAPE #if mobileC || _virtualpad.buttonB.justPressed #end) { + if(FlxG.keys.justPressed.ESCAPE #if android || FlxG.android.justReleased.BACK #end) { MusicBeatState.switchState(new editors.MasterEditorMenu()); FlxG.sound.playMusic(Paths.music('freakyMenu'), 1); transitioning = true; From bdbbad4778345c61fdac580ccbfa7507556b3fa8 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:41:58 +0200 Subject: [PATCH 051/114] Update DialogueEditorState.hx --- source/editors/DialogueEditorState.hx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/source/editors/DialogueEditorState.hx b/source/editors/DialogueEditorState.hx index 9f1af7bf8..93c305a98 100644 --- a/source/editors/DialogueEditorState.hx +++ b/source/editors/DialogueEditorState.hx @@ -94,10 +94,6 @@ class DialogueEditorState extends MusicBeatState add(animText); changeText(); - #if mobileC - addVirtualPad(NONE, B); - #end - super.create(); } @@ -337,7 +333,7 @@ class DialogueEditorState extends MusicBeatState if(FlxG.keys.justPressed.SPACE) { reloadText(speedStepper.value); } - if(FlxG.keys.justPressed.ESCAPE #if mobileC || _virtualpad.buttonB.justPressed #end) { + if(FlxG.keys.justPressed.ESCAPE #if android || FlxG.android.justReleased.BACK #end) { MusicBeatState.switchState(new editors.MasterEditorMenu()); FlxG.sound.playMusic(Paths.music('freakyMenu'), 1); transitioning = true; From 676a36fbb519319f475920783e1d555a262ef7dd Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:43:12 +0200 Subject: [PATCH 052/114] Update MenuCharacterEditorState.hx --- source/editors/MenuCharacterEditorState.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/editors/MenuCharacterEditorState.hx b/source/editors/MenuCharacterEditorState.hx index afe91184b..46ceba4f1 100644 --- a/source/editors/MenuCharacterEditorState.hx +++ b/source/editors/MenuCharacterEditorState.hx @@ -280,7 +280,7 @@ class MenuCharacterEditorState extends MusicBeatState FlxG.sound.muteKeys = TitleState.muteKeys; FlxG.sound.volumeDownKeys = TitleState.volumeDownKeys; FlxG.sound.volumeUpKeys = TitleState.volumeUpKeys; - if(FlxG.keys.justPressed.ESCAPE #if mobileC || _virtualpad.buttonB.justPressed #end) { + if(FlxG.keys.justPressed.ESCAPE #if android || FlxG.android.justReleased.BACK #end) { FlxG.mouse.visible = false; MusicBeatState.switchState(new editors.MasterEditorMenu()); FlxG.sound.playMusic(Paths.music('freakyMenu')); From 38c57b44d6871ee95a2c345476b08256897215bf Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:44:29 +0200 Subject: [PATCH 053/114] Update WeekEditorState.hx --- source/editors/WeekEditorState.hx | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/source/editors/WeekEditorState.hx b/source/editors/WeekEditorState.hx index c7fef7c95..041446c19 100644 --- a/source/editors/WeekEditorState.hx +++ b/source/editors/WeekEditorState.hx @@ -109,10 +109,6 @@ class WeekEditorState extends MusicBeatState FlxG.mouse.visible = true; - #if mobileC - addVirtualPad(NONE, B); - #end - super.create(); } @@ -438,7 +434,7 @@ class WeekEditorState extends MusicBeatState FlxG.sound.muteKeys = TitleState.muteKeys; FlxG.sound.volumeDownKeys = TitleState.volumeDownKeys; FlxG.sound.volumeUpKeys = TitleState.volumeUpKeys; - if(FlxG.keys.justPressed.ESCAPE #if mobileC || _virtualpad.buttonB.justPressed #end) { + if(FlxG.keys.justPressed.ESCAPE #if android || FlxG.android.justReleased.BACK #end) { FlxG.mouse.visible = false; MusicBeatState.switchState(new editors.MasterEditorMenu()); FlxG.sound.playMusic(Paths.music('freakyMenu')); @@ -545,7 +541,7 @@ class WeekEditorFreeplayState extends MusicBeatState changeSelection(); #if mobileC - addVirtualPad(UP_DOWN, B); + addVirtualPad(UP_DOWN, NONE); #end super.create(); @@ -731,7 +727,7 @@ class WeekEditorFreeplayState extends MusicBeatState FlxG.sound.muteKeys = TitleState.muteKeys; FlxG.sound.volumeDownKeys = TitleState.volumeDownKeys; FlxG.sound.volumeUpKeys = TitleState.volumeUpKeys; - if(FlxG.keys.justPressed.ESCAPE #if mobileC || _virtualpad.buttonB.justPressed #end) { + if(FlxG.keys.justPressed.ESCAPE #if android || FlxG.android.justReleased.BACK #end) { FlxG.mouse.visible = false; MusicBeatState.switchState(new editors.MasterEditorMenu()); FlxG.sound.playMusic(Paths.music('freakyMenu')); From 3f8e55bf79d9bc2c8b36be181d77b6a70948505f Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 22:59:58 +0200 Subject: [PATCH 054/114] Update WeekEditorState.hx --- source/editors/WeekEditorState.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/editors/WeekEditorState.hx b/source/editors/WeekEditorState.hx index 041446c19..510fb7196 100644 --- a/source/editors/WeekEditorState.hx +++ b/source/editors/WeekEditorState.hx @@ -474,7 +474,7 @@ class WeekEditorState extends MusicBeatState { loadError = false; - weekFileName = yourweek;//lol + weekFileName = "yourweek";//lol return; } } From 132913c0ea4795153e67109decec8293210dfc5a Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 23:03:15 +0200 Subject: [PATCH 055/114] Update Main.hx --- source/Main.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/Main.hx b/source/Main.hx index 3657e0db3..efccaff26 100644 --- a/source/Main.hx +++ b/source/Main.hx @@ -116,8 +116,8 @@ class Main extends Sprite } else { - if (!FileSystem.exists(Main.dataPath() + "yourthings")) - FileSystem.createDirectory(Main.dataPath() + "yourthings"); + if (!FileSystem.exists(Main.getDataPath() + "yourthings")) + FileSystem.createDirectory(Main.getDataPath() + "yourthings"); } #end From 20c3cdd1ba429fa1e2388c9e6c333a034afd7e1b Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Sun, 26 Dec 2021 23:59:29 +0200 Subject: [PATCH 056/114] Done anoder shit --- source/editors/WeekEditorState.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/editors/WeekEditorState.hx b/source/editors/WeekEditorState.hx index 510fb7196..218f3e630 100644 --- a/source/editors/WeekEditorState.hx +++ b/source/editors/WeekEditorState.hx @@ -474,7 +474,7 @@ class WeekEditorState extends MusicBeatState { loadError = false; - weekFileName = "yourweek";//lol + weekFileName = WeekFile.weekName; return; } } From 3b7dd5fc562b620c4d8d0bb022ce3fb8660b38d0 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Mon, 27 Dec 2021 00:00:42 +0200 Subject: [PATCH 057/114] I forgot --- source/editors/MenuCharacterEditorState.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/editors/MenuCharacterEditorState.hx b/source/editors/MenuCharacterEditorState.hx index 46ceba4f1..64ff987a4 100644 --- a/source/editors/MenuCharacterEditorState.hx +++ b/source/editors/MenuCharacterEditorState.hx @@ -76,7 +76,7 @@ class MenuCharacterEditorState extends MusicBeatState updateCharTypeBox(); #if mobileC - addVirtualPad(FULL, B); + addVirtualPad(FULL, NONE); #end super.create(); From 38033a9447e22e82fb442101e9f84b3ac034f3da Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Mon, 27 Dec 2021 00:03:26 +0200 Subject: [PATCH 058/114] Update WeekEditorState.hx --- source/editors/WeekEditorState.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/editors/WeekEditorState.hx b/source/editors/WeekEditorState.hx index 218f3e630..b68bc949f 100644 --- a/source/editors/WeekEditorState.hx +++ b/source/editors/WeekEditorState.hx @@ -474,7 +474,7 @@ class WeekEditorState extends MusicBeatState { loadError = false; - weekFileName = WeekFile.weekName; + weekFileName = weekFile.weekName; return; } } From 70adde15f4d534d29451e2452fa1deea6febdde5 Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Mon, 27 Dec 2021 00:07:09 +0200 Subject: [PATCH 059/114] Update WeekEditorState.hx --- source/editors/WeekEditorState.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/editors/WeekEditorState.hx b/source/editors/WeekEditorState.hx index b68bc949f..b36143cd9 100644 --- a/source/editors/WeekEditorState.hx +++ b/source/editors/WeekEditorState.hx @@ -462,7 +462,7 @@ class WeekEditorState extends MusicBeatState public static var loadedWeek:WeekFile = null; public static var loadError:Bool = false; - private static function LoadCheck():Void + private function LoadCheck():Void { var path:String = Main.getDataPath() + "yourthings/yourweek.json"; if (FileSystem.exists(path)) From 045e6eef1b4187820eaedc94cf575f8a7b2a00fc Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Mon, 27 Dec 2021 00:13:19 +0200 Subject: [PATCH 060/114] FUCK --- source/editors/WeekEditorState.hx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/editors/WeekEditorState.hx b/source/editors/WeekEditorState.hx index b36143cd9..ba00a6a99 100644 --- a/source/editors/WeekEditorState.hx +++ b/source/editors/WeekEditorState.hx @@ -462,7 +462,7 @@ class WeekEditorState extends MusicBeatState public static var loadedWeek:WeekFile = null; public static var loadError:Bool = false; - private function LoadCheck():Void + private static function LoadCheck():Void { var path:String = Main.getDataPath() + "yourthings/yourweek.json"; if (FileSystem.exists(path)) @@ -474,7 +474,7 @@ class WeekEditorState extends MusicBeatState { loadError = false; - weekFileName = weekFile.weekName; + weekFileName = loadedWeek.weekName;//maybe will work return; } } From 98a1c184cb07876b67f7f2f2d7b46585469e013a Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Mon, 27 Dec 2021 01:05:58 +0200 Subject: [PATCH 061/114] Update OptionsState.hx --- source/options/OptionsState.hx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/source/options/OptionsState.hx b/source/options/OptionsState.hx index 98e931d63..fef65c6b7 100644 --- a/source/options/OptionsState.hx +++ b/source/options/OptionsState.hx @@ -86,11 +86,10 @@ class OptionsState extends MusicBeatState add(selectorRight); changeSelection(); - ClientPrefs.saveSettings(); #if mobileC - addVirtualPad(FULL, A_B); - #end + addVirtualPad(UP_DOWN, A_B); + #end super.create(); } @@ -144,4 +143,4 @@ class OptionsState extends MusicBeatState } FlxG.sound.play(Paths.sound('scrollMenu')); } -} \ No newline at end of file +} From 1c966db73d4ee5bf35bded45043168e2da87fa8c Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Mon, 27 Dec 2021 01:07:24 +0200 Subject: [PATCH 062/114] Update NotesSubState.hx --- source/options/NotesSubState.hx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/options/NotesSubState.hx b/source/options/NotesSubState.hx index cfe5b9a48..391e5be4d 100644 --- a/source/options/NotesSubState.hx +++ b/source/options/NotesSubState.hx @@ -179,7 +179,7 @@ class NotesSubState extends MusicBeatSubstate if (controls.BACK || (changingNote && controls.ACCEPT)) { if(!changingNote) { - close();//will no longer crash the game + MusicBeatState.resetState();//FUCK } else { changeSelection(); } From 33d92e7b06dd90cfaede7dc1123e1e4759ea4a8d Mon Sep 17 00:00:00 2001 From: Saw <77043862+jigsaw-4277821@users.noreply.github.com> Date: Mon, 27 Dec 2021 17:40:17 +0200 Subject: [PATCH 063/114] New icon --- assets/preload/images/credits/majigsaw.png | Bin 13916 -> 162073 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/preload/images/credits/majigsaw.png b/assets/preload/images/credits/majigsaw.png index 46b85f147e1c1dc70a90b922118e9f8f76775503..44fb6c25a38d9bed6085b5246f0bd5c70a60f3cc 100644 GIT binary patch literal 162073 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Ξ?9qs`Bq{!&#B%=We`&{j)$9T2GMToxB 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