diff --git a/.gitignore b/.gitignore index 8f5734e..7d31601 100644 --- a/.gitignore +++ b/.gitignore @@ -387,6 +387,8 @@ output.mp4 /vav2/platforms/android/applications/vav2player/vavcore/build/ /vav2/platforms/android/applications/vav2player/.gradle/ /vav2/platforms/android/applications/vav2player/build/ +/vav2/platforms/android/vavcore/build/ # Symbolic links and junctions (platform-specific src directories) # Git will track symlinks as special files, which is the desired behavior +.godot diff --git a/godot-projects/vavcore-demo/README.md b/godot-projects/vavcore-demo/README.md new file mode 100644 index 0000000..d0b81fb --- /dev/null +++ b/godot-projects/vavcore-demo/README.md @@ -0,0 +1,112 @@ +# VavCore Demo - Godot 4.4.1 AV1 Video Player + +## ๐Ÿ“‹ ํ”„๋กœ์ ํŠธ ๊ฐœ์š” + +VavCore Extension์„ ์‚ฌ์šฉํ•˜์—ฌ Godot 4.4.1์—์„œ AV1 ๋น„๋””์˜ค๋ฅผ ์žฌ์ƒํ•˜๋Š” ๋ฐ๋ชจ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. + +## ๐Ÿš€ ์ฃผ์š” ๊ธฐ๋Šฅ + +- โœ… VavCore Extension ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ +- โœ… AV1 ๋น„๋””์˜ค ํŒŒ์ผ ๋กœ๋“œ ๋ฐ ์žฌ์ƒ +- โœ… GPU Surface ๋ฐ”์ธ๋”ฉ (Zero-Copy Pipeline) +- โœ… CPU Fallback ๋ Œ๋”๋ง ์ง€์› +- โœ… ๊ธฐ๋ณธ ํ”Œ๋ ˆ์ด์–ด ์ปจํŠธ๋กค (Play/Pause/Stop) + +## ๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ + +``` +vavcore-demo/ +โ”œโ”€โ”€ project.godot # Godot ํ”„๋กœ์ ํŠธ ์„ค์ • +โ”œโ”€โ”€ scenes/ +โ”‚ โ””โ”€โ”€ Main.tscn # ๋ฉ”์ธ ์”ฌ +โ”œโ”€โ”€ scripts/ +โ”‚ โ””โ”€โ”€ Main.cs # ๋ฉ”์ธ ์Šคํฌ๋ฆฝํŠธ (C#) +โ”œโ”€โ”€ addons/ +โ”‚ โ””โ”€โ”€ VavCoreGodot/ # VavCore Extension +โ”‚ โ”œโ”€โ”€ plugin.cfg +โ”‚ โ”œโ”€โ”€ bin/ +โ”‚ โ”‚ โ””โ”€โ”€ VavCore.dll # VavCore ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ +โ”‚ โ””โ”€โ”€ ... +โ”œโ”€โ”€ assets/ +โ”‚ โ””โ”€โ”€ videos/ +โ”‚ โ””โ”€โ”€ test_video.webm # ํ…Œ์ŠคํŠธ AV1 ๋น„๋””์˜ค +โ””โ”€โ”€ README.md +``` + +## ๐Ÿ”ง ์„ค์น˜ ๋ฐ ์‹คํ–‰ + +### 1. ํ•„์š” ์กฐ๊ฑด +- Godot 4.4.1 (C# ์ง€์›) +- .NET 8.0 SDK +- Windows 10/11 (x64) + +### 2. ํ”„๋กœ์ ํŠธ ์—ด๊ธฐ +1. Godot Editor์—์„œ "Import" ํด๋ฆญ +2. `project.godot` ํŒŒ์ผ ์„ ํƒ +3. "Import & Edit" ํด๋ฆญ + +### 3. Extension ํ™œ์„ฑํ™” +1. Project โ†’ Project Settings +2. Plugins ํƒญ +3. "VavCore" Extension ํ™œ์„ฑํ™” + +### 4. ์‹คํ–‰ +1. F5 ํ‚ค ๋˜๋Š” "Play" ๋ฒ„ํŠผ ํด๋ฆญ +2. "Load Video" ๋ฒ„ํŠผ์œผ๋กœ ๋น„๋””์˜ค ๋กœ๋“œ +3. "Play" ๋ฒ„ํŠผ์œผ๋กœ ์žฌ์ƒ ์‹œ์ž‘ + +## ๐ŸŽฏ ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค + +### ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ +1. **Extension ๋กœ๋“œ ํ™•์ธ**: VavCore Extension์ด ์ •์ƒ ๋กœ๋“œ๋˜๋Š”์ง€ ํ™•์ธ +2. **๋น„๋””์˜ค ๋กœ๋“œ**: ํ…Œ์ŠคํŠธ AV1 ํŒŒ์ผ ๋กœ๋“œ ์„ฑ๊ณต ์—ฌ๋ถ€ +3. **์žฌ์ƒ ์ œ์–ด**: Play/Pause/Stop ๋ฒ„ํŠผ ๋™์ž‘ ํ™•์ธ +4. **GPU ๋ Œ๋”๋ง**: Zero-Copy GPU Pipeline ๋™์ž‘ ํ™•์ธ +5. **CPU Fallback**: GPU ์‹คํŒจ ์‹œ CPU ๋ Œ๋”๋ง ๋™์ž‘ ํ™•์ธ + +### ๊ณ ๊ธ‰ ํ…Œ์ŠคํŠธ +1. **๋‹ค์–‘ํ•œ ํ•ด์ƒ๋„**: 320x240, 1920x1080, 3840x2160 ํŒŒ์ผ ํ…Œ์ŠคํŠธ +2. **์„ฑ๋Šฅ ์ธก์ •**: FPS, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, GPU ์‚ฌ์šฉ๋ฅ  ๋ชจ๋‹ˆํ„ฐ๋ง +3. **์•ˆ์ •์„ฑ ํ…Œ์ŠคํŠธ**: ์žฅ์‹œ๊ฐ„ ์žฌ์ƒ, ๋ฐ˜๋ณต ๋กœ๋“œ/์–ธ๋กœ๋“œ +4. **์—๋Ÿฌ ์ฒ˜๋ฆฌ**: ์ž˜๋ชป๋œ ํŒŒ์ผ, ์ฝ”๋ฑ ์˜ค๋ฅ˜ ๋“ฑ ์˜ˆ์™ธ ์ƒํ™ฉ ํ…Œ์ŠคํŠธ + +## ๐Ÿ“Š ๊ธฐ๋Œ€ ๊ฒฐ๊ณผ + +### ์„ฑ๊ณต ์‹œ๋‚˜๋ฆฌ์˜ค +- โœ… VavCore Extension ์ •์ƒ ๋กœ๋“œ +- โœ… AV1 ๋น„๋””์˜ค ํŒŒ์ผ ์ธ์‹ ๋ฐ ๋กœ๋“œ +- โœ… ๋ถ€๋“œ๋Ÿฌ์šด ๋น„๋””์˜ค ์žฌ์ƒ (30fps ์ด์ƒ) +- โœ… GPU Surface ์ง์ ‘ ๋ Œ๋”๋ง (Zero-Copy) +- โœ… ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ตœ์ ํ™” + +### ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ์ฒดํฌ์‚ฌํ•ญ +1. **Extension ๋กœ๋“œ ์‹คํŒจ**: plugin.cfg, VavCore.dll ํŒŒ์ผ ํ™•์ธ +2. **๋น„๋””์˜ค ๋กœ๋“œ ์‹คํŒจ**: ํŒŒ์ผ ๊ฒฝ๋กœ, AV1 ์ฝ”๋ฑ ์ง€์› ํ™•์ธ +3. **์žฌ์ƒ ์˜ค๋ฅ˜**: GPU ๋“œ๋ผ์ด๋ฒ„, Godot ๋ Œ๋”๋ง ์„ค์ • ํ™•์ธ +4. **์„ฑ๋Šฅ ๋ฌธ์ œ**: CPU/GPU ์‚ฌ์šฉ๋ฅ , ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํ™•์ธ + +## ๐Ÿ” ๋””๋ฒ„๊น… ์ •๋ณด + +### ๋กœ๊ทธ ์ถœ๋ ฅ ์œ„์น˜ +- Godot Editor Output ํŒจ๋„ +- Windows: `%APPDATA%\Godot\app_userdata\VavCoreDemo\logs\` + +### ์ฃผ์š” ๋กœ๊ทธ ๋ฉ”์‹œ์ง€ +- `VavCore Demo: Initializing...` - ์•ฑ ์‹œ์ž‘ +- `Checking for VavCore Extension...` - Extension ๋กœ๋“œ ํ™•์ธ +- `Loading video: [path]` - ๋น„๋””์˜ค ๋กœ๋“œ ์‹œ์ž‘ +- `Video loaded successfully` - ๋กœ๋“œ ์„ฑ๊ณต +- `Playing/Paused/Stopped` - ์žฌ์ƒ ์ƒํƒœ ๋ณ€๊ฒฝ + +## ๐Ÿ“ ํ–ฅํ›„ ๊ฐœ์„ ์‚ฌํ•ญ + +1. **์‹ค์ œ VavCore Extension ํ†ตํ•ฉ** - ํ˜„์žฌ๋Š” Mock ๊ตฌํ˜„ +2. **ํŒŒ์ผ ๋‹ค์ด์–ผ๋กœ๊ทธ ์ถ”๊ฐ€** - ์‚ฌ์šฉ์ž๊ฐ€ ๋น„๋””์˜ค ํŒŒ์ผ ์„ ํƒ ๊ฐ€๋Šฅ +3. **์ง„ํ–‰๋ฐ” ๋ฐ ์‹œ๊ฐ„ ํ‘œ์‹œ** - ์žฌ์ƒ ์ง„ํ–‰ ์ƒํ™ฉ ์‹œ๊ฐํ™” +4. **์„ค์ • ํŒจ๋„** - ๋””์ฝ”๋” ์„ ํƒ, ํ’ˆ์งˆ ์„ค์ • ๋“ฑ +5. **์ „์ฒดํ™”๋ฉด ๋ชจ๋“œ** - ๋น„๋””์˜ค ์ „์ฒดํ™”๋ฉด ์žฌ์ƒ ์ง€์› + +--- + +*์ƒ์„ฑ์ผ: 2025-09-28* +*VavCore Extension Demo for Godot 4.4.1* \ No newline at end of file diff --git a/godot-projects/vavcore-demo/TESTING_INSTRUCTIONS.md b/godot-projects/vavcore-demo/TESTING_INSTRUCTIONS.md new file mode 100644 index 0000000..c1f2d51 --- /dev/null +++ b/godot-projects/vavcore-demo/TESTING_INSTRUCTIONS.md @@ -0,0 +1,69 @@ +# VavCore Extension Testing Instructions + +## Godot Editor์—์„œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ + +### 1. ํ”„๋กœ์ ํŠธ ์—ด๊ธฐ +1. Godot 4.4.1 Editor ์‹คํ–‰ +2. `D:\Project\video-av1\godot-projects\vavcore-demo\project.godot` ์—ด๊ธฐ +3. C# ํ”„๋กœ์ ํŠธ ์ž๋™ ์ƒ์„ฑ ํ™•์ธ + +### 2. VavCore Extension ํ™œ์„ฑํ™” +1. `Project โ†’ Project Settings` ๋ฉ”๋‰ด +2. `Plugins` ํƒญ ์„ ํƒ +3. `VavCore` Extension ํ™œ์„ฑํ™” ์ฒดํฌ +4. Editor ์žฌ์‹œ์ž‘ (ํ•„์š”์‹œ) + +### 3. ๋…ธ๋“œ ๋“ฑ๋ก ํ™•์ธ +1. Scene ํƒญ์—์„œ ๋…ธ๋“œ ์ถ”๊ฐ€ ์‹œ๋„ +2. "VavCorePlayer" ๋…ธ๋“œ๊ฐ€ Control ํ•˜์œ„์— ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธ +3. VavCore ์•„์ด์ฝ˜์ด ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธ + +### 4. ์‹ค์ œ ํ…Œ์ŠคํŠธ ์‹คํ–‰ +1. `scenes/Main.tscn` ์”ฌ ์—ด๊ธฐ +2. ํ”„๋กœ์ ํŠธ ์‹คํ–‰ (F5 ๋˜๋Š” Play ๋ฒ„ํŠผ) +3. ์ฝ˜์†” ์ถœ๋ ฅ ํ™•์ธ: + - VavCore Extension ๋กœ๋“œ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€ + - VavCore library ์ดˆ๊ธฐํ™” ๋ฉ”์‹œ์ง€ + - VavCorePlayer ๋…ธ๋“œ ์ƒ์„ฑ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€ + +### 5. ๋น„๋””์˜ค ๋กœ๋“œ ํ…Œ์ŠคํŠธ +1. "Load Video" ๋ฒ„ํŠผ ํด๋ฆญ +2. `assets/videos/test_video.webm` ๋กœ๋“œ ์‹œ๋„ +3. ์„ฑ๊ณต/์‹คํŒจ ๋ฉ”์‹œ์ง€ ํ™•์ธ +4. Play/Stop ๋ฒ„ํŠผ ํ™œ์„ฑํ™” ์ƒํƒœ ํ™•์ธ + +## ์˜ˆ์ƒ ์ถœ๋ ฅ + +### ์„ฑ๊ณต ์‹œ: +``` +VavCore Demo: Initializing... +Checking for VavCore Extension... +VavCorePlayer: Initializing... +VavCorePlayer: Initializing VavCore library... +VavCorePlayer: VavCore initialized successfully! +VavCorePlayer: VavCore player created successfully! +VavCorePlayer: Video texture setup complete +VavCorePlayer node created and added to scene +Status: VavCore Extension loaded successfully! +``` + +### DLL ๋กœ๋“œ ์‹คํŒจ ์‹œ: +``` +VavCore Extension not found: [DLL load error] +Status: VavCore Extension error: [error message] +``` + +## ๋ฌธ์ œ ํ•ด๊ฒฐ + +### VavCore.dll ์ฐพ์„ ์ˆ˜ ์—†์Œ: +- `addons/VavCoreGodot/bin/VavCore.dll` ํŒŒ์ผ ์กด์žฌ ํ™•์ธ +- Windows x64 ์•„ํ‚คํ…์ฒ˜์šฉ DLL์ธ์ง€ ํ™•์ธ + +### Extension ๋“ฑ๋ก ์‹คํŒจ: +- `addons/VavCoreGodot/plugin.cfg` ์„ค์ • ํ™•์ธ +- VavCorePlugin.cs ์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ํ™•์ธ +- Godot Editor ์žฌ์‹œ์ž‘ + +### P/Invoke ์˜ค๋ฅ˜: +- VavCore.dll ์˜์กด์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™•์ธ +- 32bit/64bit ์•„ํ‚คํ…์ฒ˜ ๋งค์นญ ํ™•์ธ \ No newline at end of file diff --git a/godot-projects/vavcore-demo/VavCore.dll b/godot-projects/vavcore-demo/VavCore.dll new file mode 100644 index 0000000..fe4b9ee Binary files /dev/null and b/godot-projects/vavcore-demo/VavCore.dll differ diff --git a/godot-projects/vavcore-demo/VavCoreDemo.csproj b/godot-projects/vavcore-demo/VavCoreDemo.csproj new file mode 100644 index 0000000..e9b714f --- /dev/null +++ b/godot-projects/vavcore-demo/VavCoreDemo.csproj @@ -0,0 +1,9 @@ + + + net8.0 + true + VavCoreDemo + VavCoreDemo + true + + \ No newline at end of file diff --git a/godot-projects/vavcore-demo/addons/VavCoreGodot/VavCorePlayer.cs.uid b/godot-projects/vavcore-demo/addons/VavCoreGodot/VavCorePlayer.cs.uid new file mode 100644 index 0000000..e68a465 --- /dev/null +++ b/godot-projects/vavcore-demo/addons/VavCoreGodot/VavCorePlayer.cs.uid @@ -0,0 +1 @@ +uid://beov161gbolkv diff --git a/godot-projects/vavcore-demo/addons/VavCoreGodot/VavCorePlugin.cs b/godot-projects/vavcore-demo/addons/VavCoreGodot/VavCorePlugin.cs new file mode 100644 index 0000000..869cb9f --- /dev/null +++ b/godot-projects/vavcore-demo/addons/VavCoreGodot/VavCorePlugin.cs @@ -0,0 +1,28 @@ +using Godot; + +[Tool] +public partial class VavCorePlugin : EditorPlugin +{ + public override void _EnterTree() + { + GD.Print("VavCore Extension: Plugin loaded!"); + + // VavCorePlayer ์ปค์Šคํ…€ ๋…ธ๋“œ ๋“ฑ๋ก + AddCustomType( + "VavCorePlayer", // ๋…ธ๋“œ ํƒ€์ž… ์ด๋ฆ„ + "Control", // ๋ฒ ์ด์Šค ํด๋ž˜์Šค + GD.Load