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.
Files changed (379) hide show
  1. package/README.md +2 -3
  2. package/dist/bin/obs-nvenc-test.exe +0 -0
  3. package/dist/bin/obs-qsv-test.exe +0 -0
  4. package/dist/data/obs-plugins/image-source/locale/af-ZA.ini +29 -0
  5. package/dist/data/obs-plugins/image-source/locale/ar-SA.ini +38 -0
  6. package/dist/data/obs-plugins/image-source/locale/az-AZ.ini +29 -0
  7. package/dist/data/obs-plugins/image-source/locale/ba-RU.ini +9 -0
  8. package/dist/data/obs-plugins/image-source/locale/be-BY.ini +38 -0
  9. package/dist/data/obs-plugins/image-source/locale/bg-BG.ini +22 -0
  10. package/dist/data/obs-plugins/image-source/locale/bn-BD.ini +32 -0
  11. package/dist/data/obs-plugins/image-source/locale/ca-ES.ini +37 -0
  12. package/dist/data/obs-plugins/image-source/locale/cs-CZ.ini +38 -0
  13. package/dist/data/obs-plugins/image-source/locale/da-DK.ini +36 -0
  14. package/dist/data/obs-plugins/image-source/locale/de-DE.ini +36 -0
  15. package/dist/data/obs-plugins/image-source/locale/el-GR.ini +34 -0
  16. package/dist/data/obs-plugins/image-source/locale/en-GB.ini +4 -0
  17. package/dist/data/obs-plugins/image-source/locale/en-US.ini +40 -0
  18. package/dist/data/obs-plugins/image-source/locale/es-ES.ini +37 -0
  19. package/dist/data/obs-plugins/image-source/locale/et-EE.ini +38 -0
  20. package/dist/data/obs-plugins/image-source/locale/eu-ES.ini +34 -0
  21. package/dist/data/obs-plugins/image-source/locale/fa-IR.ini +38 -0
  22. package/dist/data/obs-plugins/image-source/locale/fi-FI.ini +38 -0
  23. package/dist/data/obs-plugins/image-source/locale/fil-PH.ini +33 -0
  24. package/dist/data/obs-plugins/image-source/locale/fr-FR.ini +36 -0
  25. package/dist/data/obs-plugins/image-source/locale/gd-GB.ini +32 -0
  26. package/dist/data/obs-plugins/image-source/locale/gl-ES.ini +38 -0
  27. package/dist/data/obs-plugins/image-source/locale/he-IL.ini +38 -0
  28. package/dist/data/obs-plugins/image-source/locale/hi-IN.ini +38 -0
  29. package/dist/data/obs-plugins/image-source/locale/hr-HR.ini +34 -0
  30. package/dist/data/obs-plugins/image-source/locale/hu-HU.ini +38 -0
  31. package/dist/data/obs-plugins/image-source/locale/hy-AM.ini +34 -0
  32. package/dist/data/obs-plugins/image-source/locale/id-ID.ini +38 -0
  33. package/dist/data/obs-plugins/image-source/locale/it-IT.ini +36 -0
  34. package/dist/data/obs-plugins/image-source/locale/ja-JP.ini +38 -0
  35. package/dist/data/obs-plugins/image-source/locale/ka-GE.ini +38 -0
  36. package/dist/data/obs-plugins/image-source/locale/kaa.ini +21 -0
  37. package/dist/data/obs-plugins/image-source/locale/kab-KAB.ini +31 -0
  38. package/dist/data/obs-plugins/image-source/locale/kmr-TR.ini +34 -0
  39. package/dist/data/obs-plugins/image-source/locale/ko-KR.ini +38 -0
  40. package/dist/data/obs-plugins/image-source/locale/lo-LA.ini +2 -0
  41. package/dist/data/obs-plugins/image-source/locale/lt-LT.ini +32 -0
  42. package/dist/data/obs-plugins/image-source/locale/mn-MN.ini +19 -0
  43. package/dist/data/obs-plugins/image-source/locale/ms-MY.ini +38 -0
  44. package/dist/data/obs-plugins/image-source/locale/nb-NO.ini +35 -0
  45. package/dist/data/obs-plugins/image-source/locale/nl-NL.ini +36 -0
  46. package/dist/data/obs-plugins/image-source/locale/nn-NO.ini +6 -0
  47. package/dist/data/obs-plugins/image-source/locale/oc-FR.ini +2 -0
  48. package/dist/data/obs-plugins/image-source/locale/pa-IN.ini +1 -0
  49. package/dist/data/obs-plugins/image-source/locale/pl-PL.ini +38 -0
  50. package/dist/data/obs-plugins/image-source/locale/pt-BR.ini +36 -0
  51. package/dist/data/obs-plugins/image-source/locale/pt-PT.ini +38 -0
  52. package/dist/data/obs-plugins/image-source/locale/ro-RO.ini +34 -0
  53. package/dist/data/obs-plugins/image-source/locale/ru-RU.ini +38 -0
  54. package/dist/data/obs-plugins/image-source/locale/si-LK.ini +16 -0
  55. package/dist/data/obs-plugins/image-source/locale/sk-SK.ini +38 -0
  56. package/dist/data/obs-plugins/image-source/locale/sl-SI.ini +34 -0
  57. package/dist/data/obs-plugins/image-source/locale/sq-AL.ini +1 -0
  58. package/dist/data/obs-plugins/image-source/locale/sr-CS.ini +31 -0
  59. package/dist/data/obs-plugins/image-source/locale/sr-SP.ini +31 -0
  60. package/dist/data/obs-plugins/image-source/locale/sv-SE.ini +38 -0
  61. package/dist/data/obs-plugins/image-source/locale/ta-IN.ini +15 -0
  62. package/dist/data/obs-plugins/image-source/locale/th-TH.ini +38 -0
  63. package/dist/data/obs-plugins/image-source/locale/tl-PH.ini +31 -0
  64. package/dist/data/obs-plugins/image-source/locale/tr-TR.ini +38 -0
  65. package/dist/data/obs-plugins/image-source/locale/tt-RU.ini +13 -0
  66. package/dist/data/obs-plugins/image-source/locale/ug-CN.ini +38 -0
  67. package/dist/data/obs-plugins/image-source/locale/uk-UA.ini +38 -0
  68. package/dist/data/obs-plugins/image-source/locale/ur-PK.ini +1 -0
  69. package/dist/data/obs-plugins/image-source/locale/vi-VN.ini +38 -0
  70. package/dist/data/obs-plugins/image-source/locale/zh-CN.ini +38 -0
  71. package/dist/data/obs-plugins/image-source/locale/zh-TW.ini +38 -0
  72. package/dist/data/obs-plugins/obs-ffmpeg/locale/af-ZA.ini +73 -0
  73. package/dist/data/obs-plugins/obs-ffmpeg/locale/ar-SA.ini +101 -0
  74. package/dist/data/obs-plugins/obs-ffmpeg/locale/ba-RU.ini +12 -0
  75. package/dist/data/obs-plugins/obs-ffmpeg/locale/be-BY.ini +101 -0
  76. package/dist/data/obs-plugins/obs-ffmpeg/locale/bg-BG.ini +67 -0
  77. package/dist/data/obs-plugins/obs-ffmpeg/locale/bn-BD.ini +48 -0
  78. package/dist/data/obs-plugins/obs-ffmpeg/locale/ca-ES.ini +101 -0
  79. package/dist/data/obs-plugins/obs-ffmpeg/locale/cs-CZ.ini +98 -0
  80. package/dist/data/obs-plugins/obs-ffmpeg/locale/da-DK.ini +83 -0
  81. package/dist/data/obs-plugins/obs-ffmpeg/locale/de-DE.ini +97 -0
  82. package/dist/data/obs-plugins/obs-ffmpeg/locale/el-GR.ini +85 -0
  83. package/dist/data/obs-plugins/obs-ffmpeg/locale/en-GB.ini +10 -0
  84. package/dist/data/obs-plugins/obs-ffmpeg/locale/en-US.ini +127 -0
  85. package/dist/data/obs-plugins/obs-ffmpeg/locale/es-ES.ini +96 -0
  86. package/dist/data/obs-plugins/obs-ffmpeg/locale/et-EE.ini +73 -0
  87. package/dist/data/obs-plugins/obs-ffmpeg/locale/eu-ES.ini +89 -0
  88. package/dist/data/obs-plugins/obs-ffmpeg/locale/fa-IR.ini +102 -0
  89. package/dist/data/obs-plugins/obs-ffmpeg/locale/fi-FI.ini +96 -0
  90. package/dist/data/obs-plugins/obs-ffmpeg/locale/fil-PH.ini +77 -0
  91. package/dist/data/obs-plugins/obs-ffmpeg/locale/fr-FR.ini +94 -0
  92. package/dist/data/obs-plugins/obs-ffmpeg/locale/gd-GB.ini +48 -0
  93. package/dist/data/obs-plugins/obs-ffmpeg/locale/gl-ES.ini +97 -0
  94. package/dist/data/obs-plugins/obs-ffmpeg/locale/he-IL.ini +100 -0
  95. package/dist/data/obs-plugins/obs-ffmpeg/locale/hi-IN.ini +101 -0
  96. package/dist/data/obs-plugins/obs-ffmpeg/locale/hr-HR.ini +51 -0
  97. package/dist/data/obs-plugins/obs-ffmpeg/locale/hu-HU.ini +100 -0
  98. package/dist/data/obs-plugins/obs-ffmpeg/locale/hy-AM.ini +95 -0
  99. package/dist/data/obs-plugins/obs-ffmpeg/locale/id-ID.ini +88 -0
  100. package/dist/data/obs-plugins/obs-ffmpeg/locale/is-IS.ini +2 -0
  101. package/dist/data/obs-plugins/obs-ffmpeg/locale/it-IT.ini +96 -0
  102. package/dist/data/obs-plugins/obs-ffmpeg/locale/ja-JP.ini +88 -0
  103. package/dist/data/obs-plugins/obs-ffmpeg/locale/ka-GE.ini +102 -0
  104. package/dist/data/obs-plugins/obs-ffmpeg/locale/kaa.ini +42 -0
  105. package/dist/data/obs-plugins/obs-ffmpeg/locale/kab-KAB.ini +34 -0
  106. package/dist/data/obs-plugins/obs-ffmpeg/locale/kmr-TR.ini +89 -0
  107. package/dist/data/obs-plugins/obs-ffmpeg/locale/ko-KR.ini +96 -0
  108. package/dist/data/obs-plugins/obs-ffmpeg/locale/ms-MY.ini +93 -0
  109. package/dist/data/obs-plugins/obs-ffmpeg/locale/nb-NO.ini +71 -0
  110. package/dist/data/obs-plugins/obs-ffmpeg/locale/nl-NL.ini +85 -0
  111. package/dist/data/obs-plugins/obs-ffmpeg/locale/nn-NO.ini +21 -0
  112. package/dist/data/obs-plugins/obs-ffmpeg/locale/oc-FR.ini +1 -0
  113. package/dist/data/obs-plugins/obs-ffmpeg/locale/pl-PL.ini +96 -0
  114. package/dist/data/obs-plugins/obs-ffmpeg/locale/pt-BR.ini +95 -0
  115. package/dist/data/obs-plugins/obs-ffmpeg/locale/pt-PT.ini +97 -0
  116. package/dist/data/obs-plugins/obs-ffmpeg/locale/ro-RO.ini +92 -0
  117. package/dist/data/obs-plugins/obs-ffmpeg/locale/ru-RU.ini +102 -0
  118. package/dist/data/obs-plugins/obs-ffmpeg/locale/si-LK.ini +53 -0
  119. package/dist/data/obs-plugins/obs-ffmpeg/locale/sk-SK.ini +86 -0
  120. package/dist/data/obs-plugins/obs-ffmpeg/locale/sl-SI.ini +99 -0
  121. package/dist/data/obs-plugins/obs-ffmpeg/locale/sr-CS.ini +34 -0
  122. package/dist/data/obs-plugins/obs-ffmpeg/locale/sr-SP.ini +52 -0
  123. package/dist/data/obs-plugins/obs-ffmpeg/locale/sv-SE.ini +101 -0
  124. package/dist/data/obs-plugins/obs-ffmpeg/locale/szl-PL.ini +23 -0
  125. package/dist/data/obs-plugins/obs-ffmpeg/locale/ta-IN.ini +20 -0
  126. package/dist/data/obs-plugins/obs-ffmpeg/locale/th-TH.ini +98 -0
  127. package/dist/data/obs-plugins/obs-ffmpeg/locale/tl-PH.ini +26 -0
  128. package/dist/data/obs-plugins/obs-ffmpeg/locale/tr-TR.ini +98 -0
  129. package/dist/data/obs-plugins/obs-ffmpeg/locale/tt-RU.ini +32 -0
  130. package/dist/data/obs-plugins/obs-ffmpeg/locale/ug-CN.ini +96 -0
  131. package/dist/data/obs-plugins/obs-ffmpeg/locale/uk-UA.ini +98 -0
  132. package/dist/data/obs-plugins/obs-ffmpeg/locale/ur-PK.ini +1 -0
  133. package/dist/data/obs-plugins/obs-ffmpeg/locale/vi-VN.ini +91 -0
  134. package/dist/data/obs-plugins/obs-ffmpeg/locale/zh-CN.ini +101 -0
  135. package/dist/data/obs-plugins/obs-ffmpeg/locale/zh-TW.ini +98 -0
  136. package/dist/data/obs-plugins/obs-x264/locale/af-ZA.ini +8 -0
  137. package/dist/data/obs-plugins/obs-x264/locale/ar-SA.ini +13 -0
  138. package/dist/data/obs-plugins/obs-x264/locale/az-AZ.ini +12 -0
  139. package/dist/data/obs-plugins/obs-x264/locale/ba-RU.ini +4 -0
  140. package/dist/data/obs-plugins/obs-x264/locale/be-BY.ini +13 -0
  141. package/dist/data/obs-plugins/obs-x264/locale/bg-BG.ini +7 -0
  142. package/dist/data/obs-plugins/obs-x264/locale/bn-BD.ini +10 -0
  143. package/dist/data/obs-plugins/obs-x264/locale/ca-ES.ini +13 -0
  144. package/dist/data/obs-plugins/obs-x264/locale/cs-CZ.ini +12 -0
  145. package/dist/data/obs-plugins/obs-x264/locale/da-DK.ini +13 -0
  146. package/dist/data/obs-plugins/obs-x264/locale/de-DE.ini +10 -0
  147. package/dist/data/obs-plugins/obs-x264/locale/el-GR.ini +13 -0
  148. package/dist/data/obs-plugins/obs-x264/locale/en-GB.ini +1 -0
  149. package/dist/data/obs-plugins/obs-x264/locale/en-US.ini +14 -0
  150. package/dist/data/obs-plugins/obs-x264/locale/es-ES.ini +13 -0
  151. package/dist/data/obs-plugins/obs-x264/locale/et-EE.ini +13 -0
  152. package/dist/data/obs-plugins/obs-x264/locale/eu-ES.ini +12 -0
  153. package/dist/data/obs-plugins/obs-x264/locale/fa-IR.ini +13 -0
  154. package/dist/data/obs-plugins/obs-x264/locale/fi-FI.ini +13 -0
  155. package/dist/data/obs-plugins/obs-x264/locale/fil-PH.ini +12 -0
  156. package/dist/data/obs-plugins/obs-x264/locale/fr-FR.ini +13 -0
  157. package/dist/data/obs-plugins/obs-x264/locale/gd-GB.ini +10 -0
  158. package/dist/data/obs-plugins/obs-x264/locale/gl-ES.ini +13 -0
  159. package/dist/data/obs-plugins/obs-x264/locale/he-IL.ini +13 -0
  160. package/dist/data/obs-plugins/obs-x264/locale/hi-IN.ini +13 -0
  161. package/dist/data/obs-plugins/obs-x264/locale/hr-HR.ini +13 -0
  162. package/dist/data/obs-plugins/obs-x264/locale/hu-HU.ini +13 -0
  163. package/dist/data/obs-plugins/obs-x264/locale/hy-AM.ini +13 -0
  164. package/dist/data/obs-plugins/obs-x264/locale/id-ID.ini +11 -0
  165. package/dist/data/obs-plugins/obs-x264/locale/it-IT.ini +13 -0
  166. package/dist/data/obs-plugins/obs-x264/locale/ja-JP.ini +13 -0
  167. package/dist/data/obs-plugins/obs-x264/locale/ka-GE.ini +13 -0
  168. package/dist/data/obs-plugins/obs-x264/locale/kaa.ini +5 -0
  169. package/dist/data/obs-plugins/obs-x264/locale/kab-KAB.ini +10 -0
  170. package/dist/data/obs-plugins/obs-x264/locale/kmr-TR.ini +12 -0
  171. package/dist/data/obs-plugins/obs-x264/locale/ko-KR.ini +13 -0
  172. package/dist/data/obs-plugins/obs-x264/locale/lv-LV.ini +4 -0
  173. package/dist/data/obs-plugins/obs-x264/locale/mn-MN.ini +10 -0
  174. package/dist/data/obs-plugins/obs-x264/locale/ms-MY.ini +13 -0
  175. package/dist/data/obs-plugins/obs-x264/locale/nb-NO.ini +9 -0
  176. package/dist/data/obs-plugins/obs-x264/locale/nl-NL.ini +11 -0
  177. package/dist/data/obs-plugins/obs-x264/locale/nn-NO.ini +1 -0
  178. package/dist/data/obs-plugins/obs-x264/locale/oc-FR.ini +1 -0
  179. package/dist/data/obs-plugins/obs-x264/locale/pl-PL.ini +13 -0
  180. package/dist/data/obs-plugins/obs-x264/locale/pt-BR.ini +13 -0
  181. package/dist/data/obs-plugins/obs-x264/locale/pt-PT.ini +13 -0
  182. package/dist/data/obs-plugins/obs-x264/locale/ro-RO.ini +13 -0
  183. package/dist/data/obs-plugins/obs-x264/locale/ru-RU.ini +13 -0
  184. package/dist/data/obs-plugins/obs-x264/locale/si-LK.ini +8 -0
  185. package/dist/data/obs-plugins/obs-x264/locale/sk-SK.ini +12 -0
  186. package/dist/data/obs-plugins/obs-x264/locale/sl-SI.ini +13 -0
  187. package/dist/data/obs-plugins/obs-x264/locale/sq-AL.ini +3 -0
  188. package/dist/data/obs-plugins/obs-x264/locale/sr-CS.ini +10 -0
  189. package/dist/data/obs-plugins/obs-x264/locale/sr-SP.ini +10 -0
  190. package/dist/data/obs-plugins/obs-x264/locale/sv-SE.ini +12 -0
  191. package/dist/data/obs-plugins/obs-x264/locale/szl-PL.ini +9 -0
  192. package/dist/data/obs-plugins/obs-x264/locale/ta-IN.ini +4 -0
  193. package/dist/data/obs-plugins/obs-x264/locale/th-TH.ini +13 -0
  194. package/dist/data/obs-plugins/obs-x264/locale/tl-PH.ini +9 -0
  195. package/dist/data/obs-plugins/obs-x264/locale/tr-TR.ini +13 -0
  196. package/dist/data/obs-plugins/obs-x264/locale/tt-RU.ini +4 -0
  197. package/dist/data/obs-plugins/obs-x264/locale/ug-CN.ini +13 -0
  198. package/dist/data/obs-plugins/obs-x264/locale/uk-UA.ini +13 -0
  199. package/dist/data/obs-plugins/obs-x264/locale/ur-PK.ini +1 -0
  200. package/dist/data/obs-plugins/obs-x264/locale/vi-VN.ini +13 -0
  201. package/dist/data/obs-plugins/obs-x264/locale/zh-CN.ini +13 -0
  202. package/dist/data/obs-plugins/obs-x264/locale/zh-TW.ini +13 -0
  203. package/dist/data/obs-plugins/win-capture/compatibility.json +664 -0
  204. package/dist/data/obs-plugins/win-capture/get-graphics-offsets32.exe +0 -0
  205. package/dist/data/obs-plugins/win-capture/get-graphics-offsets64.exe +0 -0
  206. package/dist/data/obs-plugins/win-capture/graphics-hook32.dll +0 -0
  207. package/dist/data/obs-plugins/win-capture/graphics-hook64.dll +0 -0
  208. package/dist/data/obs-plugins/win-capture/inject-helper32.exe +0 -0
  209. package/dist/data/obs-plugins/win-capture/inject-helper64.exe +0 -0
  210. package/dist/data/obs-plugins/win-capture/locale/af-ZA.ini +30 -0
  211. package/dist/data/obs-plugins/win-capture/locale/ar-SA.ini +54 -0
  212. package/dist/data/obs-plugins/win-capture/locale/az-AZ.ini +13 -0
  213. package/dist/data/obs-plugins/win-capture/locale/ba-RU.ini +2 -0
  214. package/dist/data/obs-plugins/win-capture/locale/be-BY.ini +54 -0
  215. package/dist/data/obs-plugins/win-capture/locale/bg-BG.ini +33 -0
  216. package/dist/data/obs-plugins/win-capture/locale/bn-BD.ini +36 -0
  217. package/dist/data/obs-plugins/win-capture/locale/ca-ES.ini +53 -0
  218. package/dist/data/obs-plugins/win-capture/locale/cs-CZ.ini +54 -0
  219. package/dist/data/obs-plugins/win-capture/locale/da-DK.ini +53 -0
  220. package/dist/data/obs-plugins/win-capture/locale/de-DE.ini +53 -0
  221. package/dist/data/obs-plugins/win-capture/locale/el-GR.ini +48 -0
  222. package/dist/data/obs-plugins/win-capture/locale/en-GB.ini +3 -0
  223. package/dist/data/obs-plugins/win-capture/locale/en-US.ini +60 -0
  224. package/dist/data/obs-plugins/win-capture/locale/es-ES.ini +53 -0
  225. package/dist/data/obs-plugins/win-capture/locale/et-EE.ini +44 -0
  226. package/dist/data/obs-plugins/win-capture/locale/eu-ES.ini +38 -0
  227. package/dist/data/obs-plugins/win-capture/locale/fa-IR.ini +54 -0
  228. package/dist/data/obs-plugins/win-capture/locale/fi-FI.ini +54 -0
  229. package/dist/data/obs-plugins/win-capture/locale/fil-PH.ini +36 -0
  230. package/dist/data/obs-plugins/win-capture/locale/fr-FR.ini +52 -0
  231. package/dist/data/obs-plugins/win-capture/locale/gd-GB.ini +36 -0
  232. package/dist/data/obs-plugins/win-capture/locale/gl-ES.ini +54 -0
  233. package/dist/data/obs-plugins/win-capture/locale/he-IL.ini +54 -0
  234. package/dist/data/obs-plugins/win-capture/locale/hi-IN.ini +54 -0
  235. package/dist/data/obs-plugins/win-capture/locale/hr-HR.ini +40 -0
  236. package/dist/data/obs-plugins/win-capture/locale/hu-HU.ini +54 -0
  237. package/dist/data/obs-plugins/win-capture/locale/hy-AM.ini +42 -0
  238. package/dist/data/obs-plugins/win-capture/locale/id-ID.ini +52 -0
  239. package/dist/data/obs-plugins/win-capture/locale/is-IS.ini +2 -0
  240. package/dist/data/obs-plugins/win-capture/locale/it-IT.ini +53 -0
  241. package/dist/data/obs-plugins/win-capture/locale/ja-JP.ini +54 -0
  242. package/dist/data/obs-plugins/win-capture/locale/ka-GE.ini +54 -0
  243. package/dist/data/obs-plugins/win-capture/locale/kaa.ini +19 -0
  244. package/dist/data/obs-plugins/win-capture/locale/kab-KAB.ini +27 -0
  245. package/dist/data/obs-plugins/win-capture/locale/kmr-TR.ini +42 -0
  246. package/dist/data/obs-plugins/win-capture/locale/ko-KR.ini +54 -0
  247. package/dist/data/obs-plugins/win-capture/locale/lo-LA.ini +6 -0
  248. package/dist/data/obs-plugins/win-capture/locale/lt-LT.ini +36 -0
  249. package/dist/data/obs-plugins/win-capture/locale/mn-MN.ini +21 -0
  250. package/dist/data/obs-plugins/win-capture/locale/ms-MY.ini +53 -0
  251. package/dist/data/obs-plugins/win-capture/locale/nb-NO.ini +39 -0
  252. package/dist/data/obs-plugins/win-capture/locale/nl-NL.ini +50 -0
  253. package/dist/data/obs-plugins/win-capture/locale/nn-NO.ini +4 -0
  254. package/dist/data/obs-plugins/win-capture/locale/pl-PL.ini +54 -0
  255. package/dist/data/obs-plugins/win-capture/locale/pt-BR.ini +54 -0
  256. package/dist/data/obs-plugins/win-capture/locale/pt-PT.ini +54 -0
  257. package/dist/data/obs-plugins/win-capture/locale/ro-RO.ini +41 -0
  258. package/dist/data/obs-plugins/win-capture/locale/ru-RU.ini +54 -0
  259. package/dist/data/obs-plugins/win-capture/locale/si-LK.ini +24 -0
  260. package/dist/data/obs-plugins/win-capture/locale/sk-SK.ini +53 -0
  261. package/dist/data/obs-plugins/win-capture/locale/sl-SI.ini +52 -0
  262. package/dist/data/obs-plugins/win-capture/locale/sq-AL.ini +16 -0
  263. package/dist/data/obs-plugins/win-capture/locale/sr-CS.ini +28 -0
  264. package/dist/data/obs-plugins/win-capture/locale/sr-SP.ini +38 -0
  265. package/dist/data/obs-plugins/win-capture/locale/sv-SE.ini +54 -0
  266. package/dist/data/obs-plugins/win-capture/locale/ta-IN.ini +17 -0
  267. package/dist/data/obs-plugins/win-capture/locale/th-TH.ini +54 -0
  268. package/dist/data/obs-plugins/win-capture/locale/tl-PH.ini +23 -0
  269. package/dist/data/obs-plugins/win-capture/locale/tr-TR.ini +54 -0
  270. package/dist/data/obs-plugins/win-capture/locale/tt-RU.ini +14 -0
  271. package/dist/data/obs-plugins/win-capture/locale/ug-CN.ini +54 -0
  272. package/dist/data/obs-plugins/win-capture/locale/uk-UA.ini +54 -0
  273. package/dist/data/obs-plugins/win-capture/locale/vi-VN.ini +54 -0
  274. package/dist/data/obs-plugins/win-capture/locale/zh-CN.ini +54 -0
  275. package/dist/data/obs-plugins/win-capture/locale/zh-TW.ini +54 -0
  276. package/dist/data/obs-plugins/win-capture/obs-vulkan32.json +17 -0
  277. package/dist/data/obs-plugins/win-capture/obs-vulkan64.json +17 -0
  278. package/dist/data/obs-plugins/win-capture/package.json +11 -0
  279. package/dist/data/obs-plugins/win-capture/schema/compatibility-schema-v1.json +99 -0
  280. package/dist/data/obs-plugins/win-capture/schema/package-schema.json +47 -0
  281. package/dist/data/obs-plugins/win-wasapi/locale/af-ZA.ini +8 -0
  282. package/dist/data/obs-plugins/win-wasapi/locale/an-ES.ini +5 -0
  283. package/dist/data/obs-plugins/win-wasapi/locale/ar-SA.ini +11 -0
  284. package/dist/data/obs-plugins/win-wasapi/locale/ba-RU.ini +2 -0
  285. package/dist/data/obs-plugins/win-wasapi/locale/be-BY.ini +11 -0
  286. package/dist/data/obs-plugins/win-wasapi/locale/bg-BG.ini +3 -0
  287. package/dist/data/obs-plugins/win-wasapi/locale/bn-BD.ini +5 -0
  288. package/dist/data/obs-plugins/win-wasapi/locale/ca-ES.ini +11 -0
  289. package/dist/data/obs-plugins/win-wasapi/locale/cs-CZ.ini +11 -0
  290. package/dist/data/obs-plugins/win-wasapi/locale/da-DK.ini +11 -0
  291. package/dist/data/obs-plugins/win-wasapi/locale/de-DE.ini +11 -0
  292. package/dist/data/obs-plugins/win-wasapi/locale/el-GR.ini +11 -0
  293. package/dist/data/obs-plugins/win-wasapi/locale/en-GB.ini +1 -0
  294. package/dist/data/obs-plugins/win-wasapi/locale/en-US.ini +11 -0
  295. package/dist/data/obs-plugins/win-wasapi/locale/es-ES.ini +11 -0
  296. package/dist/data/obs-plugins/win-wasapi/locale/et-EE.ini +11 -0
  297. package/dist/data/obs-plugins/win-wasapi/locale/eu-ES.ini +11 -0
  298. package/dist/data/obs-plugins/win-wasapi/locale/fa-IR.ini +11 -0
  299. package/dist/data/obs-plugins/win-wasapi/locale/fi-FI.ini +11 -0
  300. package/dist/data/obs-plugins/win-wasapi/locale/fil-PH.ini +9 -0
  301. package/dist/data/obs-plugins/win-wasapi/locale/fr-FR.ini +11 -0
  302. package/dist/data/obs-plugins/win-wasapi/locale/gd-GB.ini +5 -0
  303. package/dist/data/obs-plugins/win-wasapi/locale/gl-ES.ini +11 -0
  304. package/dist/data/obs-plugins/win-wasapi/locale/he-IL.ini +11 -0
  305. package/dist/data/obs-plugins/win-wasapi/locale/hi-IN.ini +11 -0
  306. package/dist/data/obs-plugins/win-wasapi/locale/hr-HR.ini +6 -0
  307. package/dist/data/obs-plugins/win-wasapi/locale/hu-HU.ini +11 -0
  308. package/dist/data/obs-plugins/win-wasapi/locale/hy-AM.ini +10 -0
  309. package/dist/data/obs-plugins/win-wasapi/locale/id-ID.ini +11 -0
  310. package/dist/data/obs-plugins/win-wasapi/locale/is-IS.ini +1 -0
  311. package/dist/data/obs-plugins/win-wasapi/locale/it-IT.ini +11 -0
  312. package/dist/data/obs-plugins/win-wasapi/locale/ja-JP.ini +11 -0
  313. package/dist/data/obs-plugins/win-wasapi/locale/ka-GE.ini +11 -0
  314. package/dist/data/obs-plugins/win-wasapi/locale/kaa.ini +3 -0
  315. package/dist/data/obs-plugins/win-wasapi/locale/kab-KAB.ini +4 -0
  316. package/dist/data/obs-plugins/win-wasapi/locale/kmr-TR.ini +10 -0
  317. package/dist/data/obs-plugins/win-wasapi/locale/ko-KR.ini +11 -0
  318. package/dist/data/obs-plugins/win-wasapi/locale/lt-LT.ini +2 -0
  319. package/dist/data/obs-plugins/win-wasapi/locale/mn-MN.ini +5 -0
  320. package/dist/data/obs-plugins/win-wasapi/locale/ms-MY.ini +11 -0
  321. package/dist/data/obs-plugins/win-wasapi/locale/nb-NO.ini +7 -0
  322. package/dist/data/obs-plugins/win-wasapi/locale/nl-NL.ini +11 -0
  323. package/dist/data/obs-plugins/win-wasapi/locale/nn-NO.ini +2 -0
  324. package/dist/data/obs-plugins/win-wasapi/locale/pl-PL.ini +11 -0
  325. package/dist/data/obs-plugins/win-wasapi/locale/pt-BR.ini +11 -0
  326. package/dist/data/obs-plugins/win-wasapi/locale/pt-PT.ini +11 -0
  327. package/dist/data/obs-plugins/win-wasapi/locale/ro-RO.ini +10 -0
  328. package/dist/data/obs-plugins/win-wasapi/locale/ru-RU.ini +11 -0
  329. package/dist/data/obs-plugins/win-wasapi/locale/si-LK.ini +5 -0
  330. package/dist/data/obs-plugins/win-wasapi/locale/sk-SK.ini +11 -0
  331. package/dist/data/obs-plugins/win-wasapi/locale/sl-SI.ini +11 -0
  332. package/dist/data/obs-plugins/win-wasapi/locale/sq-AL.ini +1 -0
  333. package/dist/data/obs-plugins/win-wasapi/locale/sr-CS.ini +5 -0
  334. package/dist/data/obs-plugins/win-wasapi/locale/sr-SP.ini +10 -0
  335. package/dist/data/obs-plugins/win-wasapi/locale/sv-SE.ini +11 -0
  336. package/dist/data/obs-plugins/win-wasapi/locale/szl-PL.ini +5 -0
  337. package/dist/data/obs-plugins/win-wasapi/locale/ta-IN.ini +5 -0
  338. package/dist/data/obs-plugins/win-wasapi/locale/th-TH.ini +11 -0
  339. package/dist/data/obs-plugins/win-wasapi/locale/tl-PH.ini +5 -0
  340. package/dist/data/obs-plugins/win-wasapi/locale/tr-TR.ini +11 -0
  341. package/dist/data/obs-plugins/win-wasapi/locale/tt-RU.ini +5 -0
  342. package/dist/data/obs-plugins/win-wasapi/locale/ug-CN.ini +11 -0
  343. package/dist/data/obs-plugins/win-wasapi/locale/uk-UA.ini +11 -0
  344. package/dist/data/obs-plugins/win-wasapi/locale/ur-PK.ini +1 -0
  345. package/dist/data/obs-plugins/win-wasapi/locale/vi-VN.ini +11 -0
  346. package/dist/data/obs-plugins/win-wasapi/locale/zh-CN.ini +11 -0
  347. package/dist/data/obs-plugins/win-wasapi/locale/zh-TW.ini +11 -0
  348. package/dist/noobs.node +0 -0
  349. package/dist/{plugins → obs-plugins}/win-capture.dll +0 -0
  350. package/index.d.ts +13 -2
  351. package/package.json +3 -2
  352. package/src/main.cpp +38 -10
  353. package/src/obs_interface.cpp +189 -84
  354. package/src/obs_interface.h +11 -6
  355. /package/dist/{effects → data/effects}/area.effect +0 -0
  356. /package/dist/{effects → data/effects}/bicubic_scale.effect +0 -0
  357. /package/dist/{effects → data/effects}/bilinear_lowres_scale.effect +0 -0
  358. /package/dist/{effects → data/effects}/color.effect +0 -0
  359. /package/dist/{effects → data/effects}/default.effect +0 -0
  360. /package/dist/{effects → data/effects}/default_rect.effect +0 -0
  361. /package/dist/{effects → data/effects}/deinterlace_base.effect +0 -0
  362. /package/dist/{effects → data/effects}/deinterlace_blend.effect +0 -0
  363. /package/dist/{effects → data/effects}/deinterlace_blend_2x.effect +0 -0
  364. /package/dist/{effects → data/effects}/deinterlace_discard.effect +0 -0
  365. /package/dist/{effects → data/effects}/deinterlace_discard_2x.effect +0 -0
  366. /package/dist/{effects → data/effects}/deinterlace_linear.effect +0 -0
  367. /package/dist/{effects → data/effects}/deinterlace_linear_2x.effect +0 -0
  368. /package/dist/{effects → data/effects}/deinterlace_yadif.effect +0 -0
  369. /package/dist/{effects → data/effects}/deinterlace_yadif_2x.effect +0 -0
  370. /package/dist/{effects → data/effects}/format_conversion.effect +0 -0
  371. /package/dist/{effects → data/effects}/lanczos_scale.effect +0 -0
  372. /package/dist/{effects → data/effects}/opaque.effect +0 -0
  373. /package/dist/{effects → data/effects}/premultiplied_alpha.effect +0 -0
  374. /package/dist/{effects → data/effects}/repeat.effect +0 -0
  375. /package/dist/{effects → data/effects}/solid.effect +0 -0
  376. /package/dist/{plugins → obs-plugins}/image-source.dll +0 -0
  377. /package/dist/{plugins → obs-plugins}/obs-ffmpeg.dll +0 -0
  378. /package/dist/{plugins → obs-plugins}/obs-x264.dll +0 -0
  379. /package/dist/{plugins → obs-plugins}/win-wasapi.dll +0 -0
@@ -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, NULL);
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& pluginPath, const std::string& dataPath) {
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 dp = dataPath;
160
+ std::string basePath = distPath;
160
161
 
161
- if (dp.back() != '/' && dp.back() != '\\') {
162
- // Add a trailing slash if not present, else libobs gets upset.
163
- dp += '/';
162
+ if (basePath.back() != '/' && basePath.back() != '\\') {
163
+ // Add a trailing slash if not present.
164
+ basePath += '/';
164
165
  }
165
166
 
166
- obs_add_data_path(dp.c_str()); // This is deprecated in libobs but it works for now.
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.dll",
170
- "obs-ffmpeg.dll",
171
- "win-capture.dll", // Required for basically all forms of capture on Windows.
172
- "image-source.dll", // Required for image sources.
173
- "win-wasapi.dll" // Required for WASAPI audio input.
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 path = pluginPath + "/" + module;
178
- load_module(path.c_str());
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", 30);
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
- obs_source_t *source = obs_get_source_by_name(name.c_str());
384
-
385
- if (!source) {
386
- blog(LOG_WARNING, "Source not found: %s", name.c_str());
387
- return; // Source not found, nothing to delete.
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
- obs_source_t *source = obs_get_source_by_name(name.c_str());
397
-
398
- if (!source) {
399
- blog(LOG_ERROR, "Source not found: %s", name.c_str());
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
- obs_source_t *source = obs_get_source_by_name(name.c_str());
437
+ auto it = sources.find(name);
416
438
 
417
- if (!source) {
418
- blog(LOG_ERROR, "Source not found: %s", name.c_str());
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
- obs_source_t *source = obs_get_source_by_name(name.c_str());
451
+ auto it = sources.find(name);
428
452
 
429
- if (!source) {
430
- blog(LOG_ERROR, "Source not found: %s", name.c_str());
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 draw_box(obs_scene_t *scene, obs_sceneitem_t *item, void *p) {
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, 2.0f);
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 - 2.0f, 0.0f);
539
- gs_draw_sprite(nullptr, 0, width, 2.0f);
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, 2.0f, height);
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 - 2.0f, pos.y, 0.0f);
551
- gs_draw_sprite(nullptr, 0, 2.0f, height);
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
- // Initially, draw the OBS scene texture
564
- obs_render_main_texture();
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
- // This is some AI code that would draw a rectangle (and works).
567
- // Set projection and viewport
568
- gs_ortho(0.0f, float(cx), 0.0f, float(cy), -100.0f, 100.0f);
569
- gs_set_viewport(0, 0, cx, cy);
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
- // This was me trying to understand what OSN does.
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
- obs_scene_enum_items(scene, draw_box, NULL);
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, NULL);
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
- SWP_NOACTIVATE // Flags
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& pluginPath,
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(pluginPath, dataPath);
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
- if (video_source) {
700
- blog(LOG_DEBUG, "Releasing video source");
701
- obs_source_release(video_source);
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
- obs_source_t *src = obs_get_source_by_name(name.c_str());
884
-
885
- if (!src) {
886
- blog(LOG_WARNING, "Did not find source for video source: %s", name.c_str());
887
- return;
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(src);
897
- return;
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
- blog(LOG_INFO, "ObsInterface::getSourcePos called");
1021
+ auto it = sources.find(name);
920
1022
 
921
- obs_source_t *src = obs_get_source_by_name(name.c_str());
922
- obs_sceneitem_t *item = obs_scene_find_source(scene, name.c_str());
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 (!src) {
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(src);
939
- size->y = obs_source_get_height(src);
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
 
@@ -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& pluginPath, // Where to look for plugins
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& pluginPath, const std::string& dataPath);
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