noobs 0.0.66 → 0.0.89
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -3
- package/dist/bin/obs-nvenc-test.exe +0 -0
- package/dist/bin/obs-qsv-test.exe +0 -0
- package/dist/data/obs-plugins/image-source/locale/af-ZA.ini +29 -0
- package/dist/data/obs-plugins/image-source/locale/ar-SA.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/az-AZ.ini +29 -0
- package/dist/data/obs-plugins/image-source/locale/ba-RU.ini +9 -0
- package/dist/data/obs-plugins/image-source/locale/be-BY.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/bg-BG.ini +22 -0
- package/dist/data/obs-plugins/image-source/locale/bn-BD.ini +32 -0
- package/dist/data/obs-plugins/image-source/locale/ca-ES.ini +37 -0
- package/dist/data/obs-plugins/image-source/locale/cs-CZ.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/da-DK.ini +36 -0
- package/dist/data/obs-plugins/image-source/locale/de-DE.ini +36 -0
- package/dist/data/obs-plugins/image-source/locale/el-GR.ini +34 -0
- package/dist/data/obs-plugins/image-source/locale/en-GB.ini +4 -0
- package/dist/data/obs-plugins/image-source/locale/en-US.ini +40 -0
- package/dist/data/obs-plugins/image-source/locale/es-ES.ini +37 -0
- package/dist/data/obs-plugins/image-source/locale/et-EE.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/eu-ES.ini +34 -0
- package/dist/data/obs-plugins/image-source/locale/fa-IR.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/fi-FI.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/fil-PH.ini +33 -0
- package/dist/data/obs-plugins/image-source/locale/fr-FR.ini +36 -0
- package/dist/data/obs-plugins/image-source/locale/gd-GB.ini +32 -0
- package/dist/data/obs-plugins/image-source/locale/gl-ES.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/he-IL.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/hi-IN.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/hr-HR.ini +34 -0
- package/dist/data/obs-plugins/image-source/locale/hu-HU.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/hy-AM.ini +34 -0
- package/dist/data/obs-plugins/image-source/locale/id-ID.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/it-IT.ini +36 -0
- package/dist/data/obs-plugins/image-source/locale/ja-JP.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/ka-GE.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/kaa.ini +21 -0
- package/dist/data/obs-plugins/image-source/locale/kab-KAB.ini +31 -0
- package/dist/data/obs-plugins/image-source/locale/kmr-TR.ini +34 -0
- package/dist/data/obs-plugins/image-source/locale/ko-KR.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/lo-LA.ini +2 -0
- package/dist/data/obs-plugins/image-source/locale/lt-LT.ini +32 -0
- package/dist/data/obs-plugins/image-source/locale/mn-MN.ini +19 -0
- package/dist/data/obs-plugins/image-source/locale/ms-MY.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/nb-NO.ini +35 -0
- package/dist/data/obs-plugins/image-source/locale/nl-NL.ini +36 -0
- package/dist/data/obs-plugins/image-source/locale/nn-NO.ini +6 -0
- package/dist/data/obs-plugins/image-source/locale/oc-FR.ini +2 -0
- package/dist/data/obs-plugins/image-source/locale/pa-IN.ini +1 -0
- package/dist/data/obs-plugins/image-source/locale/pl-PL.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/pt-BR.ini +36 -0
- package/dist/data/obs-plugins/image-source/locale/pt-PT.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/ro-RO.ini +34 -0
- package/dist/data/obs-plugins/image-source/locale/ru-RU.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/si-LK.ini +16 -0
- package/dist/data/obs-plugins/image-source/locale/sk-SK.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/sl-SI.ini +34 -0
- package/dist/data/obs-plugins/image-source/locale/sq-AL.ini +1 -0
- package/dist/data/obs-plugins/image-source/locale/sr-CS.ini +31 -0
- package/dist/data/obs-plugins/image-source/locale/sr-SP.ini +31 -0
- package/dist/data/obs-plugins/image-source/locale/sv-SE.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/ta-IN.ini +15 -0
- package/dist/data/obs-plugins/image-source/locale/th-TH.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/tl-PH.ini +31 -0
- package/dist/data/obs-plugins/image-source/locale/tr-TR.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/tt-RU.ini +13 -0
- package/dist/data/obs-plugins/image-source/locale/ug-CN.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/uk-UA.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/ur-PK.ini +1 -0
- package/dist/data/obs-plugins/image-source/locale/vi-VN.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/zh-CN.ini +38 -0
- package/dist/data/obs-plugins/image-source/locale/zh-TW.ini +38 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/af-ZA.ini +73 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/ar-SA.ini +101 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/ba-RU.ini +12 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/be-BY.ini +101 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/bg-BG.ini +67 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/bn-BD.ini +48 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/ca-ES.ini +101 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/cs-CZ.ini +98 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/da-DK.ini +83 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/de-DE.ini +97 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/el-GR.ini +85 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/en-GB.ini +10 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/en-US.ini +127 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/es-ES.ini +96 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/et-EE.ini +73 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/eu-ES.ini +89 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/fa-IR.ini +102 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/fi-FI.ini +96 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/fil-PH.ini +77 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/fr-FR.ini +94 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/gd-GB.ini +48 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/gl-ES.ini +97 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/he-IL.ini +100 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/hi-IN.ini +101 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/hr-HR.ini +51 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/hu-HU.ini +100 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/hy-AM.ini +95 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/id-ID.ini +88 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/is-IS.ini +2 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/it-IT.ini +96 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/ja-JP.ini +88 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/ka-GE.ini +102 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/kaa.ini +42 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/kab-KAB.ini +34 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/kmr-TR.ini +89 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/ko-KR.ini +96 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/ms-MY.ini +93 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/nb-NO.ini +71 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/nl-NL.ini +85 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/nn-NO.ini +21 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/oc-FR.ini +1 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/pl-PL.ini +96 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/pt-BR.ini +95 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/pt-PT.ini +97 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/ro-RO.ini +92 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/ru-RU.ini +102 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/si-LK.ini +53 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/sk-SK.ini +86 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/sl-SI.ini +99 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/sr-CS.ini +34 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/sr-SP.ini +52 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/sv-SE.ini +101 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/szl-PL.ini +23 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/ta-IN.ini +20 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/th-TH.ini +98 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/tl-PH.ini +26 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/tr-TR.ini +98 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/tt-RU.ini +32 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/ug-CN.ini +96 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/uk-UA.ini +98 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/ur-PK.ini +1 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/vi-VN.ini +91 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/zh-CN.ini +101 -0
- package/dist/data/obs-plugins/obs-ffmpeg/locale/zh-TW.ini +98 -0
- package/dist/data/obs-plugins/obs-x264/locale/af-ZA.ini +8 -0
- package/dist/data/obs-plugins/obs-x264/locale/ar-SA.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/az-AZ.ini +12 -0
- package/dist/data/obs-plugins/obs-x264/locale/ba-RU.ini +4 -0
- package/dist/data/obs-plugins/obs-x264/locale/be-BY.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/bg-BG.ini +7 -0
- package/dist/data/obs-plugins/obs-x264/locale/bn-BD.ini +10 -0
- package/dist/data/obs-plugins/obs-x264/locale/ca-ES.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/cs-CZ.ini +12 -0
- package/dist/data/obs-plugins/obs-x264/locale/da-DK.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/de-DE.ini +10 -0
- package/dist/data/obs-plugins/obs-x264/locale/el-GR.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/en-GB.ini +1 -0
- package/dist/data/obs-plugins/obs-x264/locale/en-US.ini +14 -0
- package/dist/data/obs-plugins/obs-x264/locale/es-ES.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/et-EE.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/eu-ES.ini +12 -0
- package/dist/data/obs-plugins/obs-x264/locale/fa-IR.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/fi-FI.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/fil-PH.ini +12 -0
- package/dist/data/obs-plugins/obs-x264/locale/fr-FR.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/gd-GB.ini +10 -0
- package/dist/data/obs-plugins/obs-x264/locale/gl-ES.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/he-IL.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/hi-IN.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/hr-HR.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/hu-HU.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/hy-AM.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/id-ID.ini +11 -0
- package/dist/data/obs-plugins/obs-x264/locale/it-IT.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/ja-JP.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/ka-GE.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/kaa.ini +5 -0
- package/dist/data/obs-plugins/obs-x264/locale/kab-KAB.ini +10 -0
- package/dist/data/obs-plugins/obs-x264/locale/kmr-TR.ini +12 -0
- package/dist/data/obs-plugins/obs-x264/locale/ko-KR.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/lv-LV.ini +4 -0
- package/dist/data/obs-plugins/obs-x264/locale/mn-MN.ini +10 -0
- package/dist/data/obs-plugins/obs-x264/locale/ms-MY.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/nb-NO.ini +9 -0
- package/dist/data/obs-plugins/obs-x264/locale/nl-NL.ini +11 -0
- package/dist/data/obs-plugins/obs-x264/locale/nn-NO.ini +1 -0
- package/dist/data/obs-plugins/obs-x264/locale/oc-FR.ini +1 -0
- package/dist/data/obs-plugins/obs-x264/locale/pl-PL.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/pt-BR.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/pt-PT.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/ro-RO.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/ru-RU.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/si-LK.ini +8 -0
- package/dist/data/obs-plugins/obs-x264/locale/sk-SK.ini +12 -0
- package/dist/data/obs-plugins/obs-x264/locale/sl-SI.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/sq-AL.ini +3 -0
- package/dist/data/obs-plugins/obs-x264/locale/sr-CS.ini +10 -0
- package/dist/data/obs-plugins/obs-x264/locale/sr-SP.ini +10 -0
- package/dist/data/obs-plugins/obs-x264/locale/sv-SE.ini +12 -0
- package/dist/data/obs-plugins/obs-x264/locale/szl-PL.ini +9 -0
- package/dist/data/obs-plugins/obs-x264/locale/ta-IN.ini +4 -0
- package/dist/data/obs-plugins/obs-x264/locale/th-TH.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/tl-PH.ini +9 -0
- package/dist/data/obs-plugins/obs-x264/locale/tr-TR.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/tt-RU.ini +4 -0
- package/dist/data/obs-plugins/obs-x264/locale/ug-CN.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/uk-UA.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/ur-PK.ini +1 -0
- package/dist/data/obs-plugins/obs-x264/locale/vi-VN.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/zh-CN.ini +13 -0
- package/dist/data/obs-plugins/obs-x264/locale/zh-TW.ini +13 -0
- package/dist/data/obs-plugins/win-capture/compatibility.json +664 -0
- package/dist/data/obs-plugins/win-capture/get-graphics-offsets32.exe +0 -0
- package/dist/data/obs-plugins/win-capture/get-graphics-offsets64.exe +0 -0
- package/dist/data/obs-plugins/win-capture/graphics-hook32.dll +0 -0
- package/dist/data/obs-plugins/win-capture/graphics-hook64.dll +0 -0
- package/dist/data/obs-plugins/win-capture/inject-helper32.exe +0 -0
- package/dist/data/obs-plugins/win-capture/inject-helper64.exe +0 -0
- package/dist/data/obs-plugins/win-capture/locale/af-ZA.ini +30 -0
- package/dist/data/obs-plugins/win-capture/locale/ar-SA.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/az-AZ.ini +13 -0
- package/dist/data/obs-plugins/win-capture/locale/ba-RU.ini +2 -0
- package/dist/data/obs-plugins/win-capture/locale/be-BY.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/bg-BG.ini +33 -0
- package/dist/data/obs-plugins/win-capture/locale/bn-BD.ini +36 -0
- package/dist/data/obs-plugins/win-capture/locale/ca-ES.ini +53 -0
- package/dist/data/obs-plugins/win-capture/locale/cs-CZ.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/da-DK.ini +53 -0
- package/dist/data/obs-plugins/win-capture/locale/de-DE.ini +53 -0
- package/dist/data/obs-plugins/win-capture/locale/el-GR.ini +48 -0
- package/dist/data/obs-plugins/win-capture/locale/en-GB.ini +3 -0
- package/dist/data/obs-plugins/win-capture/locale/en-US.ini +60 -0
- package/dist/data/obs-plugins/win-capture/locale/es-ES.ini +53 -0
- package/dist/data/obs-plugins/win-capture/locale/et-EE.ini +44 -0
- package/dist/data/obs-plugins/win-capture/locale/eu-ES.ini +38 -0
- package/dist/data/obs-plugins/win-capture/locale/fa-IR.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/fi-FI.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/fil-PH.ini +36 -0
- package/dist/data/obs-plugins/win-capture/locale/fr-FR.ini +52 -0
- package/dist/data/obs-plugins/win-capture/locale/gd-GB.ini +36 -0
- package/dist/data/obs-plugins/win-capture/locale/gl-ES.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/he-IL.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/hi-IN.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/hr-HR.ini +40 -0
- package/dist/data/obs-plugins/win-capture/locale/hu-HU.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/hy-AM.ini +42 -0
- package/dist/data/obs-plugins/win-capture/locale/id-ID.ini +52 -0
- package/dist/data/obs-plugins/win-capture/locale/is-IS.ini +2 -0
- package/dist/data/obs-plugins/win-capture/locale/it-IT.ini +53 -0
- package/dist/data/obs-plugins/win-capture/locale/ja-JP.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/ka-GE.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/kaa.ini +19 -0
- package/dist/data/obs-plugins/win-capture/locale/kab-KAB.ini +27 -0
- package/dist/data/obs-plugins/win-capture/locale/kmr-TR.ini +42 -0
- package/dist/data/obs-plugins/win-capture/locale/ko-KR.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/lo-LA.ini +6 -0
- package/dist/data/obs-plugins/win-capture/locale/lt-LT.ini +36 -0
- package/dist/data/obs-plugins/win-capture/locale/mn-MN.ini +21 -0
- package/dist/data/obs-plugins/win-capture/locale/ms-MY.ini +53 -0
- package/dist/data/obs-plugins/win-capture/locale/nb-NO.ini +39 -0
- package/dist/data/obs-plugins/win-capture/locale/nl-NL.ini +50 -0
- package/dist/data/obs-plugins/win-capture/locale/nn-NO.ini +4 -0
- package/dist/data/obs-plugins/win-capture/locale/pl-PL.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/pt-BR.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/pt-PT.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/ro-RO.ini +41 -0
- package/dist/data/obs-plugins/win-capture/locale/ru-RU.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/si-LK.ini +24 -0
- package/dist/data/obs-plugins/win-capture/locale/sk-SK.ini +53 -0
- package/dist/data/obs-plugins/win-capture/locale/sl-SI.ini +52 -0
- package/dist/data/obs-plugins/win-capture/locale/sq-AL.ini +16 -0
- package/dist/data/obs-plugins/win-capture/locale/sr-CS.ini +28 -0
- package/dist/data/obs-plugins/win-capture/locale/sr-SP.ini +38 -0
- package/dist/data/obs-plugins/win-capture/locale/sv-SE.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/ta-IN.ini +17 -0
- package/dist/data/obs-plugins/win-capture/locale/th-TH.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/tl-PH.ini +23 -0
- package/dist/data/obs-plugins/win-capture/locale/tr-TR.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/tt-RU.ini +14 -0
- package/dist/data/obs-plugins/win-capture/locale/ug-CN.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/uk-UA.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/vi-VN.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/zh-CN.ini +54 -0
- package/dist/data/obs-plugins/win-capture/locale/zh-TW.ini +54 -0
- package/dist/data/obs-plugins/win-capture/obs-vulkan32.json +17 -0
- package/dist/data/obs-plugins/win-capture/obs-vulkan64.json +17 -0
- package/dist/data/obs-plugins/win-capture/package.json +11 -0
- package/dist/data/obs-plugins/win-capture/schema/compatibility-schema-v1.json +99 -0
- package/dist/data/obs-plugins/win-capture/schema/package-schema.json +47 -0
- package/dist/data/obs-plugins/win-wasapi/locale/af-ZA.ini +8 -0
- package/dist/data/obs-plugins/win-wasapi/locale/an-ES.ini +5 -0
- package/dist/data/obs-plugins/win-wasapi/locale/ar-SA.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/ba-RU.ini +2 -0
- package/dist/data/obs-plugins/win-wasapi/locale/be-BY.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/bg-BG.ini +3 -0
- package/dist/data/obs-plugins/win-wasapi/locale/bn-BD.ini +5 -0
- package/dist/data/obs-plugins/win-wasapi/locale/ca-ES.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/cs-CZ.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/da-DK.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/de-DE.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/el-GR.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/en-GB.ini +1 -0
- package/dist/data/obs-plugins/win-wasapi/locale/en-US.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/es-ES.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/et-EE.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/eu-ES.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/fa-IR.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/fi-FI.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/fil-PH.ini +9 -0
- package/dist/data/obs-plugins/win-wasapi/locale/fr-FR.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/gd-GB.ini +5 -0
- package/dist/data/obs-plugins/win-wasapi/locale/gl-ES.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/he-IL.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/hi-IN.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/hr-HR.ini +6 -0
- package/dist/data/obs-plugins/win-wasapi/locale/hu-HU.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/hy-AM.ini +10 -0
- package/dist/data/obs-plugins/win-wasapi/locale/id-ID.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/is-IS.ini +1 -0
- package/dist/data/obs-plugins/win-wasapi/locale/it-IT.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/ja-JP.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/ka-GE.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/kaa.ini +3 -0
- package/dist/data/obs-plugins/win-wasapi/locale/kab-KAB.ini +4 -0
- package/dist/data/obs-plugins/win-wasapi/locale/kmr-TR.ini +10 -0
- package/dist/data/obs-plugins/win-wasapi/locale/ko-KR.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/lt-LT.ini +2 -0
- package/dist/data/obs-plugins/win-wasapi/locale/mn-MN.ini +5 -0
- package/dist/data/obs-plugins/win-wasapi/locale/ms-MY.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/nb-NO.ini +7 -0
- package/dist/data/obs-plugins/win-wasapi/locale/nl-NL.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/nn-NO.ini +2 -0
- package/dist/data/obs-plugins/win-wasapi/locale/pl-PL.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/pt-BR.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/pt-PT.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/ro-RO.ini +10 -0
- package/dist/data/obs-plugins/win-wasapi/locale/ru-RU.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/si-LK.ini +5 -0
- package/dist/data/obs-plugins/win-wasapi/locale/sk-SK.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/sl-SI.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/sq-AL.ini +1 -0
- package/dist/data/obs-plugins/win-wasapi/locale/sr-CS.ini +5 -0
- package/dist/data/obs-plugins/win-wasapi/locale/sr-SP.ini +10 -0
- package/dist/data/obs-plugins/win-wasapi/locale/sv-SE.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/szl-PL.ini +5 -0
- package/dist/data/obs-plugins/win-wasapi/locale/ta-IN.ini +5 -0
- package/dist/data/obs-plugins/win-wasapi/locale/th-TH.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/tl-PH.ini +5 -0
- package/dist/data/obs-plugins/win-wasapi/locale/tr-TR.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/tt-RU.ini +5 -0
- package/dist/data/obs-plugins/win-wasapi/locale/ug-CN.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/uk-UA.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/ur-PK.ini +1 -0
- package/dist/data/obs-plugins/win-wasapi/locale/vi-VN.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/zh-CN.ini +11 -0
- package/dist/data/obs-plugins/win-wasapi/locale/zh-TW.ini +11 -0
- package/dist/noobs.node +0 -0
- package/dist/{plugins → obs-plugins}/win-capture.dll +0 -0
- package/index.d.ts +13 -2
- package/package.json +3 -2
- package/src/main.cpp +38 -10
- package/src/obs_interface.cpp +189 -84
- package/src/obs_interface.h +11 -6
- /package/dist/{effects → data/effects}/area.effect +0 -0
- /package/dist/{effects → data/effects}/bicubic_scale.effect +0 -0
- /package/dist/{effects → data/effects}/bilinear_lowres_scale.effect +0 -0
- /package/dist/{effects → data/effects}/color.effect +0 -0
- /package/dist/{effects → data/effects}/default.effect +0 -0
- /package/dist/{effects → data/effects}/default_rect.effect +0 -0
- /package/dist/{effects → data/effects}/deinterlace_base.effect +0 -0
- /package/dist/{effects → data/effects}/deinterlace_blend.effect +0 -0
- /package/dist/{effects → data/effects}/deinterlace_blend_2x.effect +0 -0
- /package/dist/{effects → data/effects}/deinterlace_discard.effect +0 -0
- /package/dist/{effects → data/effects}/deinterlace_discard_2x.effect +0 -0
- /package/dist/{effects → data/effects}/deinterlace_linear.effect +0 -0
- /package/dist/{effects → data/effects}/deinterlace_linear_2x.effect +0 -0
- /package/dist/{effects → data/effects}/deinterlace_yadif.effect +0 -0
- /package/dist/{effects → data/effects}/deinterlace_yadif_2x.effect +0 -0
- /package/dist/{effects → data/effects}/format_conversion.effect +0 -0
- /package/dist/{effects → data/effects}/lanczos_scale.effect +0 -0
- /package/dist/{effects → data/effects}/opaque.effect +0 -0
- /package/dist/{effects → data/effects}/premultiplied_alpha.effect +0 -0
- /package/dist/{effects → data/effects}/repeat.effect +0 -0
- /package/dist/{effects → data/effects}/solid.effect +0 -0
- /package/dist/{plugins → obs-plugins}/image-source.dll +0 -0
- /package/dist/{plugins → obs-plugins}/obs-ffmpeg.dll +0 -0
- /package/dist/{plugins → obs-plugins}/obs-x264.dll +0 -0
- /package/dist/{plugins → obs-plugins}/win-wasapi.dll +0 -0
package/src/obs_interface.cpp
CHANGED
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
#include <iostream>
|
|
2
1
|
#include <windows.h>
|
|
3
2
|
#include <obs.h>
|
|
4
3
|
#include "utils.h"
|
|
5
|
-
#include <chrono>
|
|
6
4
|
#include "obs_interface.h"
|
|
7
5
|
#include <vector>
|
|
8
|
-
#include <thread>
|
|
9
|
-
#include <iostream>
|
|
10
|
-
#include <map>
|
|
11
6
|
#include <string>
|
|
12
7
|
#include <graphics/matrix4.h>
|
|
13
8
|
#include <graphics/vec4.h>
|
|
@@ -83,11 +78,12 @@ void ObsInterface::list_output_types()
|
|
|
83
78
|
}
|
|
84
79
|
}
|
|
85
80
|
|
|
86
|
-
void ObsInterface::load_module(const char* module) {
|
|
81
|
+
void ObsInterface::load_module(const char* module, const char* data) {
|
|
87
82
|
blog(LOG_INFO, "Loading module: %s", module);
|
|
83
|
+
blog(LOG_INFO, "Data path: %s", data);
|
|
88
84
|
|
|
89
85
|
obs_module_t *ptr = NULL;
|
|
90
|
-
int success = obs_open_module(&ptr, module,
|
|
86
|
+
int success = obs_open_module(&ptr, module, data);
|
|
91
87
|
|
|
92
88
|
if (success != MODULE_SUCCESS) {
|
|
93
89
|
blog(LOG_ERROR, "Failed to open module: %s", module);
|
|
@@ -124,6 +120,11 @@ void ObsInterface::reset_video() {
|
|
|
124
120
|
|
|
125
121
|
int success = obs_reset_video(&ovi);
|
|
126
122
|
|
|
123
|
+
obs_enter_graphics();
|
|
124
|
+
int dt = gs_get_device_type();
|
|
125
|
+
blog(LOG_INFO, "Device type = %d", dt); // should be 1 for D3D11
|
|
126
|
+
obs_leave_graphics();
|
|
127
|
+
|
|
127
128
|
if (success != OBS_VIDEO_SUCCESS) {
|
|
128
129
|
blog(LOG_ERROR, "Failed to reset video!");
|
|
129
130
|
throw std::runtime_error("Failed to reset video!");
|
|
@@ -142,7 +143,7 @@ void ObsInterface::reset_audio() {
|
|
|
142
143
|
}
|
|
143
144
|
}
|
|
144
145
|
|
|
145
|
-
void ObsInterface::init_obs(const std::string&
|
|
146
|
+
void ObsInterface::init_obs(const std::string& distPath) {
|
|
146
147
|
blog(LOG_INFO, "Enter init_obs");
|
|
147
148
|
auto success = obs_startup("en-US", NULL, NULL);
|
|
148
149
|
|
|
@@ -156,26 +157,41 @@ void ObsInterface::init_obs(const std::string& pluginPath, const std::string& da
|
|
|
156
157
|
throw std::runtime_error("OBS initialization failed");
|
|
157
158
|
}
|
|
158
159
|
|
|
159
|
-
std::string
|
|
160
|
+
std::string basePath = distPath;
|
|
160
161
|
|
|
161
|
-
if (
|
|
162
|
-
// Add a trailing slash if not present
|
|
163
|
-
|
|
162
|
+
if (basePath.back() != '/' && basePath.back() != '\\') {
|
|
163
|
+
// Add a trailing slash if not present.
|
|
164
|
+
basePath += '/';
|
|
164
165
|
}
|
|
165
166
|
|
|
166
|
-
|
|
167
|
+
std::string effectsPath = basePath + "data/effects/";
|
|
168
|
+
std::string pluginPath = basePath + "obs-plugins/";
|
|
169
|
+
|
|
170
|
+
blog(LOG_INFO, "Base path: %s", basePath.c_str());
|
|
171
|
+
blog(LOG_INFO, "Effects path: %s", effectsPath.c_str());
|
|
172
|
+
blog(LOG_INFO, "Plugin path: %s", pluginPath.c_str());
|
|
173
|
+
|
|
174
|
+
// Add the effects path. We need this before resetting video and audio
|
|
175
|
+
// to ensure the effects are available. The function is deprecated in
|
|
176
|
+
// libobs but it works for now.
|
|
177
|
+
obs_add_data_path(effectsPath.c_str());
|
|
178
|
+
|
|
179
|
+
// This must come before loading modules to initialize D3D11.
|
|
180
|
+
reset_video();
|
|
181
|
+
reset_audio();
|
|
167
182
|
|
|
168
183
|
std::vector<std::string> modules = {
|
|
169
|
-
"obs-x264
|
|
170
|
-
"obs-ffmpeg
|
|
171
|
-
"win-capture
|
|
172
|
-
"image-source
|
|
173
|
-
"win-wasapi
|
|
184
|
+
"obs-x264",
|
|
185
|
+
"obs-ffmpeg",
|
|
186
|
+
"win-capture", // Required for basically all forms of capture on Windows.
|
|
187
|
+
"image-source", // Required for image sources.
|
|
188
|
+
"win-wasapi" // Required for WASAPI audio input.
|
|
174
189
|
};
|
|
175
190
|
|
|
176
191
|
for (const auto& module : modules) {
|
|
177
|
-
std::string
|
|
178
|
-
|
|
192
|
+
std::string modulePath = pluginPath + module + ".dll";
|
|
193
|
+
std::string moduleDataPath = pluginPath + module;
|
|
194
|
+
load_module(modulePath.c_str(), moduleDataPath.c_str());
|
|
179
195
|
}
|
|
180
196
|
|
|
181
197
|
obs_post_load_modules();
|
|
@@ -185,9 +201,6 @@ void ObsInterface::init_obs(const std::string& pluginPath, const std::string& da
|
|
|
185
201
|
list_input_types();
|
|
186
202
|
list_output_types();
|
|
187
203
|
|
|
188
|
-
reset_video();
|
|
189
|
-
reset_audio();
|
|
190
|
-
|
|
191
204
|
blog(LOG_INFO, "Exit init_obs");
|
|
192
205
|
}
|
|
193
206
|
|
|
@@ -285,9 +298,9 @@ void ObsInterface::create_video_encoders() {
|
|
|
285
298
|
|
|
286
299
|
blog(LOG_INFO, "Set file video encoder settings");
|
|
287
300
|
obs_data_t* venc_settings = obs_data_create();
|
|
288
|
-
obs_data_set_string(venc_settings, "preset", "speed"); // Faster preset
|
|
301
|
+
// obs_data_set_string(venc_settings, "preset", "speed"); // Faster preset
|
|
289
302
|
obs_data_set_string(venc_settings, "rate_control", "CRF");
|
|
290
|
-
obs_data_set_int(venc_settings, "crf",
|
|
303
|
+
obs_data_set_int(venc_settings, "crf", 22);
|
|
291
304
|
obs_data_set_string(venc_settings, "profile", "main");
|
|
292
305
|
obs_data_set_int(venc_settings, "keyint_sec", 1); // Set keyframe interval to 1 second
|
|
293
306
|
|
|
@@ -376,30 +389,38 @@ void ObsInterface::createSource(std::string name, std::string type) {
|
|
|
376
389
|
blog(LOG_ERROR, "Failed to create source: %s", name.c_str());
|
|
377
390
|
throw std::runtime_error("Failed to create source!");
|
|
378
391
|
}
|
|
392
|
+
|
|
393
|
+
// Store the source in the sources map.
|
|
394
|
+
sources[name] = source;
|
|
379
395
|
}
|
|
380
396
|
|
|
381
397
|
void ObsInterface::deleteSource(std::string name) {
|
|
382
398
|
blog(LOG_INFO, "Delete source: %s", name.c_str());
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
399
|
+
|
|
400
|
+
auto it = sources.find(name);
|
|
401
|
+
|
|
402
|
+
if (it == sources.end()) {
|
|
403
|
+
blog(LOG_WARNING, "Source %s not found", name.c_str());
|
|
404
|
+
return;
|
|
388
405
|
}
|
|
389
406
|
|
|
407
|
+
obs_source_t* source = it->second;
|
|
390
408
|
obs_source_release(source);
|
|
409
|
+
sources.erase(name);
|
|
391
410
|
blog(LOG_INFO, "Source deleted: %s", name.c_str());
|
|
392
411
|
}
|
|
393
412
|
|
|
394
413
|
obs_data_t* ObsInterface::getSourceSettings(std::string name) {
|
|
395
414
|
blog(LOG_INFO, "Get source settings for: %s", name.c_str());
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
415
|
+
|
|
416
|
+
auto it = sources.find(name);
|
|
417
|
+
|
|
418
|
+
if (it == sources.end()) {
|
|
419
|
+
blog(LOG_WARNING, "Source %s not found", name.c_str());
|
|
400
420
|
throw std::runtime_error("Source not found!");
|
|
401
421
|
}
|
|
402
422
|
|
|
423
|
+
obs_source_t* source = it->second;
|
|
403
424
|
obs_data_t *settings = obs_source_get_settings(source);
|
|
404
425
|
|
|
405
426
|
if (!settings) {
|
|
@@ -407,30 +428,34 @@ obs_data_t* ObsInterface::getSourceSettings(std::string name) {
|
|
|
407
428
|
throw std::runtime_error("Failed to get source settings!");
|
|
408
429
|
}
|
|
409
430
|
|
|
431
|
+
// obs_data_release(settings); TODO release after returning to client.
|
|
410
432
|
return settings;
|
|
411
433
|
}
|
|
412
434
|
|
|
413
435
|
void ObsInterface::setSourceSettings(std::string name, obs_data_t* settings) {
|
|
414
436
|
blog(LOG_INFO, "Set source settings for: %s", name.c_str());
|
|
415
|
-
|
|
437
|
+
auto it = sources.find(name);
|
|
416
438
|
|
|
417
|
-
if (
|
|
418
|
-
blog(
|
|
439
|
+
if (it == sources.end()) {
|
|
440
|
+
blog(LOG_WARNING, "Source %s not found", name.c_str());
|
|
419
441
|
throw std::runtime_error("Source not found!");
|
|
420
442
|
}
|
|
421
443
|
|
|
444
|
+
obs_source_t* source = it->second;
|
|
445
|
+
|
|
422
446
|
obs_source_update(source, settings);
|
|
423
447
|
}
|
|
424
448
|
|
|
425
449
|
obs_properties_t* ObsInterface::getSourceProperties(std::string name) {
|
|
426
450
|
blog(LOG_INFO, "Get source properties for: %s", name.c_str());
|
|
427
|
-
|
|
451
|
+
auto it = sources.find(name);
|
|
428
452
|
|
|
429
|
-
if (
|
|
430
|
-
blog(
|
|
453
|
+
if (it == sources.end()) {
|
|
454
|
+
blog(LOG_WARNING, "Source %s not found", name.c_str());
|
|
431
455
|
throw std::runtime_error("Source not found!");
|
|
432
456
|
}
|
|
433
457
|
|
|
458
|
+
obs_source_t* source = it->second;
|
|
434
459
|
obs_properties_t *props = obs_source_properties(source);
|
|
435
460
|
|
|
436
461
|
if (!props) {
|
|
@@ -502,7 +527,7 @@ void ObsInterface::disconnect_signal_handlers(obs_output_t *output) {
|
|
|
502
527
|
signal_handler_disconnect(sh, "saved", output_signal_handler_saved, this);
|
|
503
528
|
}
|
|
504
529
|
|
|
505
|
-
bool
|
|
530
|
+
bool draw_source_outline(obs_scene_t *scene, obs_sceneitem_t *item, void *p) {
|
|
506
531
|
// Get the item position and size
|
|
507
532
|
vec2 pos; vec2 scale;
|
|
508
533
|
obs_sceneitem_get_pos(item, &pos);
|
|
@@ -513,6 +538,12 @@ bool draw_box(obs_scene_t *scene, obs_sceneitem_t *item, void *p) {
|
|
|
513
538
|
float width = obs_source_get_width(src) * scale.x;
|
|
514
539
|
float height = obs_source_get_height(src) * scale.y;
|
|
515
540
|
|
|
541
|
+
if (width <= 0 || height <= 0) {
|
|
542
|
+
// Don't want to call gs_draw_sprite with zero width or height.
|
|
543
|
+
// It is obviously nonsense and leads to log spam. Just return early.
|
|
544
|
+
return true;
|
|
545
|
+
}
|
|
546
|
+
|
|
516
547
|
// Draw rectangle around the source using the position and size
|
|
517
548
|
gs_effect_t *solid = obs_get_base_effect(OBS_EFFECT_SOLID);
|
|
518
549
|
gs_eparam_t *color = gs_effect_get_param_by_name(solid, "color");
|
|
@@ -530,25 +561,25 @@ bool draw_box(obs_scene_t *scene, obs_sceneitem_t *item, void *p) {
|
|
|
530
561
|
// Top border
|
|
531
562
|
gs_matrix_push();
|
|
532
563
|
gs_matrix_translate3f(pos.x, pos.y, 0.0f);
|
|
533
|
-
gs_draw_sprite(nullptr, 0, width,
|
|
564
|
+
gs_draw_sprite(nullptr, 0, width, 4.0f);
|
|
534
565
|
gs_matrix_pop();
|
|
535
566
|
|
|
536
567
|
// Bottom border
|
|
537
568
|
gs_matrix_push();
|
|
538
|
-
gs_matrix_translate3f(pos.x, pos.y + height -
|
|
539
|
-
gs_draw_sprite(nullptr, 0, width,
|
|
569
|
+
gs_matrix_translate3f(pos.x, pos.y + height - 4.0f, 0.0f);
|
|
570
|
+
gs_draw_sprite(nullptr, 0, width, 4.0f);
|
|
540
571
|
gs_matrix_pop();
|
|
541
572
|
|
|
542
573
|
// Left border
|
|
543
574
|
gs_matrix_push();
|
|
544
575
|
gs_matrix_translate3f(pos.x, pos.y, 0.0f);
|
|
545
|
-
gs_draw_sprite(nullptr, 0,
|
|
576
|
+
gs_draw_sprite(nullptr, 0, 4.0f, height);
|
|
546
577
|
gs_matrix_pop();
|
|
547
578
|
|
|
548
579
|
// Right border
|
|
549
580
|
gs_matrix_push();
|
|
550
|
-
gs_matrix_translate3f(pos.x + width -
|
|
551
|
-
gs_draw_sprite(nullptr, 0,
|
|
581
|
+
gs_matrix_translate3f(pos.x + width - 4.0f, pos.y, 0.0f);
|
|
582
|
+
gs_draw_sprite(nullptr, 0, 4.0f, height);
|
|
552
583
|
gs_matrix_pop();
|
|
553
584
|
|
|
554
585
|
gs_matrix_pop();
|
|
@@ -560,18 +591,46 @@ bool draw_box(obs_scene_t *scene, obs_sceneitem_t *item, void *p) {
|
|
|
560
591
|
}
|
|
561
592
|
|
|
562
593
|
void draw_callback(void* data, uint32_t cx, uint32_t cy) {
|
|
563
|
-
|
|
564
|
-
|
|
594
|
+
ObsInterface* obsInterface = (ObsInterface*)data;
|
|
595
|
+
|
|
596
|
+
obs_video_info ovi;
|
|
597
|
+
obs_get_video_info(&ovi);
|
|
598
|
+
|
|
599
|
+
float scaleX = float(cx) / float(ovi.base_width);
|
|
600
|
+
float scaleY = float(cy) / float(ovi.base_height);
|
|
601
|
+
|
|
602
|
+
float previewScale;
|
|
565
603
|
|
|
566
|
-
//
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
604
|
+
// Pick the limiting scale factor.
|
|
605
|
+
if (scaleX < scaleY) {
|
|
606
|
+
previewScale = scaleX;
|
|
607
|
+
} else {
|
|
608
|
+
previewScale = scaleY;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
int previewCX = int(previewScale * ovi.base_width);
|
|
612
|
+
int previewCY = int(previewScale * ovi.base_height);
|
|
613
|
+
int previewX = (cx - previewCX) / 2;
|
|
614
|
+
int previewY = (cy - previewCY) / 2;
|
|
615
|
+
|
|
616
|
+
gs_viewport_push();
|
|
617
|
+
gs_projection_push();
|
|
618
|
+
|
|
619
|
+
gs_ortho(0.0f, float(ovi.base_width), 0.0f, float(ovi.base_height), -100.0f, 100.0f);
|
|
620
|
+
gs_set_viewport(previewX, previewY, previewCX, previewCY);
|
|
570
621
|
|
|
571
|
-
//
|
|
622
|
+
// Renders the scene now the graphics context is setup.
|
|
623
|
+
obs_render_main_texture();
|
|
624
|
+
|
|
625
|
+
// Draw boxes around sources.
|
|
572
626
|
obs_scene_t* scene = obs_get_scene_by_name("WCR Scene");
|
|
573
|
-
|
|
627
|
+
if (obsInterface->getDrawSourceOutlineEnabled()) {
|
|
628
|
+
obs_scene_enum_items(scene, draw_source_outline, NULL);
|
|
629
|
+
}
|
|
574
630
|
obs_scene_release(scene);
|
|
631
|
+
|
|
632
|
+
gs_projection_pop();
|
|
633
|
+
gs_viewport_pop();
|
|
575
634
|
}
|
|
576
635
|
|
|
577
636
|
void ObsInterface::initPreview(HWND parent) {
|
|
@@ -618,7 +677,7 @@ void ObsInterface::initPreview(HWND parent) {
|
|
|
618
677
|
return;
|
|
619
678
|
}
|
|
620
679
|
|
|
621
|
-
obs_display_add_draw_callback(display, draw_callback,
|
|
680
|
+
obs_display_add_draw_callback(display, draw_callback, this);
|
|
622
681
|
}
|
|
623
682
|
|
|
624
683
|
obs_display_set_enabled(display, false);
|
|
@@ -632,13 +691,15 @@ void ObsInterface::showPreview(int x, int y, int width, int height) {
|
|
|
632
691
|
return;
|
|
633
692
|
}
|
|
634
693
|
|
|
694
|
+
blog(LOG_INFO, "Showing preview child window at (%d, %d) with size (%d x %d)", x, y, width, height);
|
|
695
|
+
|
|
635
696
|
// Resize and move the existing child window.
|
|
636
697
|
bool success = SetWindowPos(
|
|
637
698
|
preview_hwnd, // Handle to the child window
|
|
638
699
|
NULL, // No Z-order change
|
|
639
700
|
x, y, // New position (x, y)
|
|
640
701
|
width, height, // New size (width, height)
|
|
641
|
-
|
|
702
|
+
SWP_NOACTIVATE // Flags
|
|
642
703
|
);
|
|
643
704
|
|
|
644
705
|
if (!success) {
|
|
@@ -646,6 +707,10 @@ void ObsInterface::showPreview(int x, int y, int width, int height) {
|
|
|
646
707
|
return;
|
|
647
708
|
}
|
|
648
709
|
|
|
710
|
+
uint32_t w, h;
|
|
711
|
+
obs_display_size(display, &w, &h); // Get the display size to match the video context.
|
|
712
|
+
blog(LOG_INFO, "Current Display size set to (%d x %d)", w, h);
|
|
713
|
+
|
|
649
714
|
obs_display_resize(display, width, height);
|
|
650
715
|
ShowWindow(preview_hwnd, SW_SHOW);
|
|
651
716
|
obs_display_set_enabled(display, true);
|
|
@@ -662,10 +727,44 @@ void ObsInterface::hidePreview() {
|
|
|
662
727
|
obs_display_set_enabled(display, false);
|
|
663
728
|
}
|
|
664
729
|
|
|
730
|
+
float ObsInterface::getPreviewScaleFactor() {
|
|
731
|
+
if (!display) {
|
|
732
|
+
blog(LOG_WARNING, "Display not initialized");
|
|
733
|
+
return 1.0f; // Default scale
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
obs_video_info ovi;
|
|
737
|
+
obs_get_video_info(&ovi);
|
|
738
|
+
|
|
739
|
+
uint32_t width, height;
|
|
740
|
+
obs_display_size(display, &width, &height);
|
|
741
|
+
|
|
742
|
+
float scaleX = float(width) / float(ovi.base_width);
|
|
743
|
+
float scaleY = float(height) / float(ovi.base_height);
|
|
744
|
+
|
|
745
|
+
float previewScale;
|
|
746
|
+
|
|
747
|
+
// Pick the limiting scale factor.
|
|
748
|
+
if (scaleX < scaleY) {
|
|
749
|
+
previewScale = scaleX;
|
|
750
|
+
} else {
|
|
751
|
+
previewScale = scaleY;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
return previewScale;
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
void ObsInterface::setDrawSourceOutline(bool enabled) {
|
|
758
|
+
drawSourceOutline = enabled;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
bool ObsInterface::getDrawSourceOutlineEnabled() {
|
|
762
|
+
return drawSourceOutline;
|
|
763
|
+
}
|
|
764
|
+
|
|
665
765
|
ObsInterface::ObsInterface(
|
|
666
|
-
const std::string&
|
|
766
|
+
const std::string& distPath,
|
|
667
767
|
const std::string& logPath,
|
|
668
|
-
const std::string& dataPath,
|
|
669
768
|
const std::string& recordingPath,
|
|
670
769
|
Napi::ThreadSafeFunction cb
|
|
671
770
|
) {
|
|
@@ -674,7 +773,7 @@ ObsInterface::ObsInterface(
|
|
|
674
773
|
blog(LOG_DEBUG, "Creating ObsInterface");
|
|
675
774
|
|
|
676
775
|
// Initialize OBS and load required modules.
|
|
677
|
-
init_obs(
|
|
776
|
+
init_obs(distPath);
|
|
678
777
|
|
|
679
778
|
// Setup callback function.
|
|
680
779
|
jscb = cb;
|
|
@@ -696,9 +795,11 @@ ObsInterface::~ObsInterface() {
|
|
|
696
795
|
jscb.Release();
|
|
697
796
|
}
|
|
698
797
|
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
798
|
+
for (auto& kv : sources) {
|
|
799
|
+
std::string name = kv.first;
|
|
800
|
+
obs_source_t* source = kv.second;
|
|
801
|
+
blog(LOG_DEBUG, "Releasing source: %s", name.c_str());
|
|
802
|
+
obs_source_release(source);
|
|
702
803
|
}
|
|
703
804
|
|
|
704
805
|
if (scene) {
|
|
@@ -880,21 +981,22 @@ std::string ObsInterface::getLastRecording() {
|
|
|
880
981
|
void ObsInterface::addSourceToScene(std::string name) {
|
|
881
982
|
blog(LOG_INFO, "ObsInterface::addSourceToScene called for source: %s", name.c_str());
|
|
882
983
|
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
if (
|
|
886
|
-
blog(LOG_WARNING, "
|
|
887
|
-
|
|
984
|
+
auto it = sources.find(name);
|
|
985
|
+
|
|
986
|
+
if (it == sources.end()) {
|
|
987
|
+
blog(LOG_WARNING, "Source %s not found", name.c_str());
|
|
988
|
+
throw std::runtime_error("Source not found!");
|
|
888
989
|
}
|
|
889
990
|
|
|
991
|
+
obs_source_t* source = it->second;
|
|
992
|
+
|
|
890
993
|
// TODO refuse to add twice?
|
|
994
|
+
obs_sceneitem_t *item = obs_scene_add(scene, source);
|
|
891
995
|
|
|
892
|
-
obs_sceneitem_t *item = obs_scene_add(scene, src);
|
|
893
|
-
|
|
894
996
|
if (!item) {
|
|
895
997
|
blog(LOG_ERROR, "Failed to add source to scene: %s", name.c_str());
|
|
896
|
-
obs_source_release(
|
|
897
|
-
|
|
998
|
+
obs_source_release(source);
|
|
999
|
+
throw std::runtime_error("Failed to add source to scene");
|
|
898
1000
|
}
|
|
899
1001
|
|
|
900
1002
|
blog(LOG_INFO, "ObsInterface::addSourceToScene exited");
|
|
@@ -916,18 +1018,24 @@ void ObsInterface::removeSourceFromScene(std::string name) {
|
|
|
916
1018
|
|
|
917
1019
|
void ObsInterface::getSourcePos(std::string name, vec2* pos, vec2* size, vec2* scale)
|
|
918
1020
|
{
|
|
919
|
-
|
|
1021
|
+
auto it = sources.find(name);
|
|
920
1022
|
|
|
921
|
-
|
|
922
|
-
|
|
1023
|
+
if (it == sources.end()) {
|
|
1024
|
+
blog(LOG_WARNING, "Source %s not found", name.c_str());
|
|
1025
|
+
throw std::runtime_error("Source not found!");
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
obs_source_t* source = it->second;
|
|
923
1029
|
|
|
924
|
-
if (!
|
|
925
|
-
blog(LOG_WARNING, "Did not find source for video source: %s", name);
|
|
1030
|
+
if (!source) {
|
|
1031
|
+
blog(LOG_WARNING, "Did not find source for video source: %s", name.c_str());
|
|
926
1032
|
return;
|
|
927
1033
|
}
|
|
928
1034
|
|
|
1035
|
+
obs_sceneitem_t *item = obs_scene_find_source(scene, name.c_str());
|
|
1036
|
+
|
|
929
1037
|
if (!item) {
|
|
930
|
-
blog(LOG_WARNING, "Did not find scene item for video source: %s", name);
|
|
1038
|
+
blog(LOG_WARNING, "Did not find scene item for video source: %s", name.c_str());
|
|
931
1039
|
return;
|
|
932
1040
|
}
|
|
933
1041
|
|
|
@@ -935,18 +1043,15 @@ void ObsInterface::getSourcePos(std::string name, vec2* pos, vec2* size, vec2* s
|
|
|
935
1043
|
obs_sceneitem_get_scale(item, scale);
|
|
936
1044
|
|
|
937
1045
|
// Pre-scaled sizes.
|
|
938
|
-
size->x = obs_source_get_width(
|
|
939
|
-
size->y = obs_source_get_height(
|
|
940
|
-
|
|
941
|
-
blog(LOG_INFO, "ObsInterface::getSourcePos exited");
|
|
1046
|
+
size->x = obs_source_get_width(source);
|
|
1047
|
+
size->y = obs_source_get_height(source);
|
|
942
1048
|
}
|
|
943
1049
|
|
|
944
1050
|
void ObsInterface::setSourcePos(std::string name, vec2* pos, vec2* scale) {
|
|
945
|
-
blog(LOG_INFO, "ObsInterface::moveSource called");
|
|
946
1051
|
obs_sceneitem_t *item = obs_scene_find_source(scene, name.c_str());
|
|
947
1052
|
|
|
948
1053
|
if (!item) {
|
|
949
|
-
blog(LOG_WARNING, "Did not find scene item for video source: %s", name);
|
|
1054
|
+
blog(LOG_WARNING, "Did not find scene item for video source: %s", name.c_str());
|
|
950
1055
|
return;
|
|
951
1056
|
}
|
|
952
1057
|
|
package/src/obs_interface.h
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
#pragma once
|
|
2
2
|
|
|
3
|
+
#include <obs.h>
|
|
3
4
|
#include <napi.h>
|
|
5
|
+
#include <windows.h>
|
|
6
|
+
#include <map>
|
|
4
7
|
|
|
5
8
|
struct SignalData {
|
|
6
9
|
std::string id;
|
|
@@ -10,9 +13,8 @@ struct SignalData {
|
|
|
10
13
|
class ObsInterface {
|
|
11
14
|
public:
|
|
12
15
|
ObsInterface(
|
|
13
|
-
const std::string&
|
|
16
|
+
const std::string& distPath, // Where to look for plugins and data
|
|
14
17
|
const std::string& logPath, // Where to write logs to
|
|
15
|
-
const std::string& dataPath, // Where to look for effects
|
|
16
18
|
const std::string& recordingPath, // Where to save recordings
|
|
17
19
|
Napi::ThreadSafeFunction cb // JavaScript callback
|
|
18
20
|
);
|
|
@@ -40,6 +42,9 @@ class ObsInterface {
|
|
|
40
42
|
void initPreview(HWND parent); // Must call this before showPreview to setup resources.
|
|
41
43
|
void showPreview(int x, int y, int width, int height); // Also used for moving and resizing.
|
|
42
44
|
void hidePreview(); // Hide the preview display.
|
|
45
|
+
float getPreviewScaleFactor(); // Get the current scale factor of the preview.
|
|
46
|
+
void setDrawSourceOutline(bool enabled); // Red box around source
|
|
47
|
+
bool getDrawSourceOutlineEnabled();
|
|
43
48
|
|
|
44
49
|
std::vector<std::string> get_available_video_encoders();
|
|
45
50
|
|
|
@@ -54,8 +59,6 @@ class ObsInterface {
|
|
|
54
59
|
obs_output_t *file_output = nullptr;
|
|
55
60
|
obs_output_t *buffer_output = nullptr;
|
|
56
61
|
obs_scene_t *scene = nullptr;
|
|
57
|
-
obs_source_t *video_source = nullptr;
|
|
58
|
-
obs_source_t *audio_source = nullptr;
|
|
59
62
|
obs_encoder_t *file_video_encoder = nullptr;
|
|
60
63
|
obs_encoder_t *file_audio_encoder = nullptr;
|
|
61
64
|
obs_encoder_t *buffer_video_encoder = nullptr;
|
|
@@ -65,11 +68,13 @@ class ObsInterface {
|
|
|
65
68
|
Napi::ThreadSafeFunction jscb; // javascript callback
|
|
66
69
|
std::string recording_path = "";
|
|
67
70
|
bool buffering = false; // Whether we are buffering the recording in memory.
|
|
71
|
+
bool drawSourceOutline = false; // Draw red outline around source
|
|
72
|
+
std::map<std::string, obs_source_t*> sources; // Map of source names to obs_source_t pointers.
|
|
68
73
|
|
|
69
|
-
void init_obs(const std::string&
|
|
74
|
+
void init_obs(const std::string& distPath);
|
|
70
75
|
void reset_video();
|
|
71
76
|
void reset_audio();
|
|
72
|
-
void load_module(const char* module);
|
|
77
|
+
void load_module(const char* module, const char* data); // Load a module, data is optional.
|
|
73
78
|
void connect_signal_handlers(obs_output_t *output);
|
|
74
79
|
void disconnect_signal_handlers(obs_output_t *output);
|
|
75
80
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|