Files
video-v1/vav2/platforms
ened ce71a38d59 Summary of fixes completed:
1.  Deferred D3D12SurfaceHandler creation to InitializeCUDA() when SetD3DDevice is called before Initialize
  2.  Fixed NV12ToRGBAConverter repeated reinitialization by adding IsInitialized() check before calling
  Initialize()
  3.  Test now successfully decodes 24 frames without resource thrashing

  Remaining issue (in test app, not VavCore):
  - RedSurfaceNVDECTest creates a new D3D12Resource for every frame instead of reusing a pool
  - This causes ExternalMemoryCache to create unlimited surface objects
  - Fix: Test app should reuse a small pool of textures (e.g., 3-5 textures for buffering)
2025-10-07 04:49:13 +09:00
..
2025-10-07 04:49:13 +09:00
2025-09-28 16:47:45 +09:00

Vav2 Platforms Integration - 완전 구현 완료

이 디렉토리는 VavCore 라이브러리를 다양한 플랫폼에서 사용할 수 있도록 통합하고 배포하는 역할을 하며, 현재 Windows 플랫폼이 완전히 구현되어 있습니다.

📁 디렉토리 구조

platforms/
├── windows/                     # ✅ Windows 플랫폼 (완전 구현)
│   ├── vavcore/                # ✅ VavCore Windows 라이브러리 (빌드 성공)
│   │   ├── VavCore.vcxproj     # ✅ Windows 전용 프로젝트 파일
│   │   ├── build.bat           # ✅ Windows 빌드 스크립트
│   │   ├── include/VavCore/    # ✅ Public API 헤더 (28개 C 함수)
│   │   ├── src/                # ✅ VavCore 구현 코드
│   │   └── lib/                # ✅ 빌드된 라이브러리 (VavCore.dll)
│   ├── godot-plugin/           # ✅ Godot 4.4.1 Extension (완전 구현)
│   │   ├── VavCoreGodot.sln    # ✅ Visual Studio 솔루션
│   │   ├── src/VavCore.Wrapper/ # ✅ P/Invoke C# 래퍼 (빌드 성공)
│   │   ├── src/VavCore.Godot/  # ✅ Godot Extension (빌드 성공)
│   │   └── libs/windows-x86_64/ # ✅ 네이티브 라이브러리들
│   ├── applications/           # ✅ Windows 애플리케이션들
│   │   └── vav2player/         # ✅ Vav2Player GUI 앱
│   └── tests/                  # ✅ 모든 Windows 테스트
├── android/                    # 🔄 Android 플랫폼 (구조 완성)
│   ├── vavcore/               # 🔄 VavCore Android 라이브러리
│   │   ├── CMakeLists.txt     # 🔄 Android 전용 CMake 설정
│   │   ├── build.sh           # 🔄 Android 빌드 스크립트
│   │   └── libs/              # 🔄 빌드된 라이브러리 출력
│   └── godot-plugin/          # 🔄 Godot 4 Android 플러그인
├── ios/                      # 📋 iOS 플랫폼 통합 (계획)
└── linux/                    # 📋 Linux 플랫폼 통합 (계획)

🎯 설계 철학

관심사의 분리

  • VavCore/: 순수 라이브러리 (플랫폼 중립적)
  • platforms/: 플랫폼별 통합 및 배포
  • Vav2Player/: Windows GUI 애플리케이션

의존성 방향

platforms/android/godot-plugin/
         ↓ (depends on)
platforms/android/vavcore/
         ↓ (depends on)
VavCore/

재사용성

  • VavCore는 다른 프로젝트에서도 독립적으로 사용 가능
  • 각 플랫폼 통합은 서로 독립적
  • 플러그인들은 표준화된 라이브러리 인터페이스 사용

🚀 사용 방법

Android 플랫폼

1. VavCore 라이브러리 빌드

cd platforms/android/vavcore
./build.sh

2. Godot Android 플러그인 사용

cd platforms/android/godot-plugin
# Godot 플러그인 빌드 (JNI 포함)

Windows 플랫폼 (완전 구현됨)

1. VavCore 라이브러리 빌드 ( 검증 완료)

cd platforms/windows/vavcore
# MSBuild로 빌드 (성공 확인)
"C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\MSBuild.exe" VavCore.vcxproj //p:Configuration=Debug //p:Platform=x64

# 빌드 결과
# → lib/VavCore-debug.dll 생성 성공
# → 28개 vavcore_* 함수 모두 export 완료
# → 모든 하드웨어 디코더 (NVDEC/VPL/AMF) 포함

2. Godot Extension 빌드 ( 검증 완료)

cd platforms/windows/godot-plugin
# .NET 빌드 (성공 확인)
dotnet restore
dotnet build --configuration Debug

# 빌드 결과
# → VavCore.Wrapper.dll 생성 성공 (P/Invoke 래퍼)
# → VavCore.Godot.dll 생성 성공 (Godot Extension)
# → 일부 경고만 있음 (기능에 영향 없음)

3. 데모 프로젝트 실행 ( 동작 확인)

cd ../godot-projects/vavcore-demo/
# Godot 4.4.1에서 열기
# → VavCorePlayer 노드 정상 동작
# → Load Video, Play, Pause, Stop 버튼 모두 작동
# → 실제 AV1 프레임 디코딩 및 렌더링 완료

🔧 개발 워크플로우

새로운 플랫폼 추가

  1. platforms/{platform}/ 디렉토리 생성
  2. platforms/{platform}/vavcore/ 라이브러리 빌드 설정
  3. platforms/{platform}/godot-plugin/ 플러그인 구현
  4. 플랫폼별 문서 작성

라이브러리 업데이트

  1. VavCore/ 에서 라이브러리 개발
  2. 각 플랫폼에서 라이브러리 재빌드
  3. 플러그인에서 새로운 기능 활용

플러그인 개발

  1. platforms/{platform}/vavcore/ 에서 라이브러리 빌드
  2. 빌드된 라이브러리를 플러그인에서 참조
  3. 플랫폼별 네이티브 인터페이스 구현

📱 지원 플랫폼 현황

Windows (완전 구현 및 검증 완료)

  • VavCore C API: 28개 vavcore_* 함수 완전 구현, DLL 빌드 성공
  • 하드웨어 가속: NVIDIA NVDEC, Intel VPL, AMD AMF, Media Foundation 모든 디코더
  • VavCore.Wrapper: P/Invoke C# 래퍼 완전 구현, 빌드 성공
  • VavCore.Godot: Godot 4.4.1 Extension 완전 구현, 빌드 성공
  • Zero-Copy GPU Pipeline: 플랫폼별 GPU Surface 직접 바인딩 구현
  • CPU Fallback: 완전한 소프트웨어 렌더링 시스템 구현
  • 데모 프로젝트: 완전 동작하는 VavCore Demo 구현
  • 최적화: 텍스처 캐싱, 단일 블록 복사, 메모리 풀링 완료

🔄 Android (구조 완성, 구현 대기)

  • VavCore: 🔄 MediaCodec 하드웨어 가속, dav1d fallback 구조 완성
  • Godot Plugin: 🔄 JNI 인터페이스 구조 완성, 구현 대기
  • 빌드 시스템: 🔄 CMake 설정 완성, 테스트 대기

📋 iOS (계획 중)

  • VavCore: VideoToolbox 하드웨어 가속
  • Godot Plugin: iOS 네이티브 플러그인

📋 Linux (계획 중)

  • VavCore: VAAPI, VDPAU 하드웨어 가속
  • Godot Plugin: 리눅스 네이티브 플러그인

🎮 Godot 통합 전략 (Windows 완전 구현 완료)

완료된 Windows Godot 통합

  1. VavCore C API: 28개 vavcore_* 함수로 통일된 C 인터페이스
  2. VavCore.Wrapper: P/Invoke 기반 C# 래퍼로 .NET 통합
  3. VavCore.Godot: Godot 4.4.1 전용 Extension으로 최적화
  4. Zero-Copy Pipeline: GPU Surface 직접 바인딩으로 성능 최적화
  5. CPU Fallback: 완전한 소프트웨어 렌더링으로 호환성 보장

실제 구현된 Surface 타입 최적화

  • Windows (구현 완료):
    • D3D11 Texture (Zero-Copy GPU Pipeline)
    • Vulkan Image (RenderingDevice 직접 바인딩)
    • OpenGL Texture (GPU Surface 지원)
    • CPU ImageTexture (소프트웨어 fallback)
  • Android (구조 완성): Vulkan Image > OpenGL ES Texture > ANativeWindow
  • iOS (계획): Metal Texture > CoreVideo PixelBuffer
  • Linux (계획): OpenGL Texture > Vulkan Image

크로스 플랫폼 API 통일 (Windows 완료)

// ✅ 실제 구현된 통일된 API (Windows에서 동작 확인)
var player = new VavCorePlayer();
player.LoadVideo(filePath);           // 모든 플랫폼 동일
player.StartPlayback();               // 모든 플랫폼 동일
// 내부적으로 플랫폼별 최적화 적용

🚀 현재 사용 가능한 기능

지금 바로 사용 가능 (Windows)

# 1. VavCore 라이브러리 빌드
cd platforms/windows/vavcore
# MSBuild로 빌드 성공 확인됨

# 2. Godot Extension 빌드
cd platforms/windows/godot-plugin
# dotnet build 성공 확인됨

# 3. 데모 프로젝트 실행
cd ../../godot-projects/vavcore-demo/
# Godot 4.4.1에서 바로 실행 가능
# VavCorePlayer 완전 동작 확인됨

검증된 기능들

  • VavCore DLL P/Invoke: 28개 함수 모두 정상 연결
  • 하드웨어 디코더: NVDEC/VPL/AMF 자동 감지 및 선택
  • GPU 렌더링: Zero-Copy Surface 바인딩 구현
  • CPU Fallback: 완전한 소프트웨어 렌더링 시스템
  • 텍스처 최적화: 캐싱, 단일 블록 복사, 메모리 풀링
  • Godot 통합: RenderingDevice API 완전 활용

🎯 Windows 플랫폼 완전 구현 완료! 실제 사용 가능한 크로스 플랫폼 AV1 디코딩 시스템 🔧 VavCore의 강력함을 Godot 4.4.1에서 지금 바로 체험하세요! Zero-Copy GPU Pipeline + CPU Fallback으로 최고의 성능과 호환성!