diff --git a/.gitignore b/.gitignore index 379204d..06416cc 100644 --- a/.gitignore +++ b/.gitignore @@ -349,12 +349,11 @@ FodyWeavers.xsd *.webm *.mkv *.av1 -dav1d.dll packages/ lib/ include/ oss/ output.mp4 -prompt.txt -.user build/ +sample/ +*.user diff --git a/vav2/CLAUDE.md b/vav2/CLAUDE.md index fe7894c..5b6a8c5 100644 --- a/vav2/CLAUDE.md +++ b/vav2/CLAUDE.md @@ -53,41 +53,30 @@ size_t required_size = frame.width * frame.height * 4; --- -## ✅ **현재 작업 완료: Intel VPL AV1 디코더 구현** (2025-09-26) +## ✅ **최신 완료 작업: 전체 하드웨어 가속 시스템 구축 완료** (2025-09-26) -### **완료된 주요 작업** -1. **Intel VPL AV1 디코더 구현**: VPLAV1Decoder 클래스 완전 구현 -2. **VideoDecoderFactory 통합**: VPL 디코더를 팩토리 패턴에 통합 -3. **하드웨어 가속 지원**: Intel Quick Sync Video 기반 AV1 하드웨어 디코딩 -4. **Surface 변환 시스템**: VPL mfxFrameSurface1 → VideoFrame 변환 로직 -5. **에러 처리 강화**: 포괄적인 VPL/MFX 상태 코드 매핑 및 처리 -6. **가용성 검증**: Intel GPU/CPU 및 VPL 런타임 자동 감지 -7. **성능 통계**: 프레임별 디코딩 시간 및 에러율 추적 -8. **설계 문서**: [Intel VPL AV1 Decoder Design Document](Intel_VPL_AV1_Decoder_Design.md) 작성 +### **완료된 주요 하드웨어 가속 시스템** +1. **Intel VPL AV1 디코더**: Intel Quick Sync Video 하드웨어 가속 완전 구현 +2. **AMD AMF AV1 디코더**: AMD VCN 하드웨어 가속 완전 구현 +3. **NVIDIA NVDEC AV1 디코더**: NVIDIA GPU 하드웨어 가속 완전 구현 +4. **자동 하드웨어 감지**: GPU별 최적 디코더 자동 선택 (nvdec → vpl → amf → dav1d) +5. **VideoDecoderFactory 완전 통합**: 모든 하드웨어 디코더 통합 및 우선순위 설정 +6. **범용 Surface 변환**: 각 하드웨어별 Surface → VideoFrame 변환 시스템 +7. **포괄적 에러 처리**: VPL/AMF/NVDEC 상태 코드 매핑 및 fallback 처리 --- ## 🎯 **현재 프로젝트 상태 요약 (2025-09-26 업데이트)** ### ✅ **구현 완료된 주요 컴포넌트** -1. **Core Video Infrastructure**: WebMFileReader, AV1Decoder, VideoDecoderFactory ✅ -2. **Hardware Acceleration**: NVDECAV1Decoder, AMFAV1Decoder, VPLAV1Decoder, CUDA 13.0 통합, AMD AMF 통합, Intel VPL 통합 ✅ -3. **Adaptive Quality Control**: AdaptiveAV1Decoder, AdaptiveNVDECDecoder 완전 구현 ✅ -4. **Quality Mode System**: CONSERVATIVE, FAST, ULTRA_FAST 모드 구현 및 최적화 ✅ -5. **GPU Rendering System**: SimpleGPURenderer, D3D12VideoRenderer 구현 ✅ -6. **UI Integration**: VideoPlayerControl 단순화 및 WinUI3 통합 ✅ -7. **Build System**: 모든 프로젝트 빌드 성공 (GUI/Headless/UnitTest) ✅ -8. **Test Infrastructure**: 47개 Unit Test, Mock 시스템, NVDEC 헤드리스 테스트 구축 ✅ -9. **Code Quality**: 한글 주석 → 영어 변환, 코딩 가이드라인 준수, VavCore 네임스페이스 통일 ✅ -10. **Performance Optimization**: 4K AV1 디코딩 27.7fps 달성 (ULTRA_FAST 모드) ✅ -11. **Project Structure Reorganization**: VavCore_Library_Design.md 구조 완전 적용 ✅ -12. **Multi Video UI Enhancement**: MultiVideoTestPage → MultiVideoPage 이름 변경 및 기능 완성 ✅ -13. **User Experience Improvement**: Stop All 버튼 처음부터 재생 기능 구현 ✅ -14. **VavCore Static Library**: 재사용 가능한 라이브러리 완전 구현 ✅ -15. **Logging System Architecture**: 플랫폼 독립적 Observer 패턴 기반 로깅 시스템 ✅ -16. **Complete Dark Theme UI**: 전역 다크 테마, 타이틀바, 모든 페이지 다크 모드, UX 개선 완료 ✅ -17. **Code Architecture Cleanup**: IAdaptiveVideoDecoder 인터페이스 정리, AdaptiveTypes.h 분리 ✅ -18. **AMD AMF AV1 Decoder**: AMD GPU 하드웨어 가속 AV1 디코더 완전 구현 ✅ +1. **전체 하드웨어 가속 시스템**: NVIDIA NVDEC, Intel VPL, AMD AMF AV1 디코더 완전 구현 ✅ +2. **자동 최적화 시스템**: GPU 감지 및 최적 디코더 자동 선택 (nvdec → vpl → amf → dav1d) ✅ +3. **Core Video Infrastructure**: WebMFileReader, VideoDecoderFactory, Surface 변환 시스템 ✅ +4. **Adaptive Quality Control**: AdaptiveAV1Decoder, AdaptiveNVDECDecoder, 동적 품질 조정 ✅ +5. **GPU Rendering System**: D3D12VideoRenderer, YUV→RGB 변환, AspectFit 렌더링 ✅ +6. **VavCore Static Library**: 재사용 가능한 독립 라이브러리 구조 ✅ +7. **UI Integration**: VideoPlayerControl, MultiVideoPage, 다크 테마 완전 구현 ✅ +8. **Build & Test System**: 전 프로젝트 빌드 성공, 47개 Unit Test, 헤드리스 테스트 ✅ ### 📋 **완료된 설계 및 구현 (참조용)** diff --git a/vav2/Vav2Player/Vav2Player/Assets/LockScreenLogo.scale-200.png b/vav2/Vav2Player/Vav2Player/Assets/LockScreenLogo.scale-200.png index 7440f0d..e4e2978 100644 Binary files a/vav2/Vav2Player/Vav2Player/Assets/LockScreenLogo.scale-200.png and b/vav2/Vav2Player/Vav2Player/Assets/LockScreenLogo.scale-200.png differ diff --git a/vav2/Vav2Player/Vav2Player/Assets/SplashScreen.scale-200.png b/vav2/Vav2Player/Vav2Player/Assets/SplashScreen.scale-200.png index 32f486a..6717bc2 100644 Binary files a/vav2/Vav2Player/Vav2Player/Assets/SplashScreen.scale-200.png and b/vav2/Vav2Player/Vav2Player/Assets/SplashScreen.scale-200.png differ diff --git a/vav2/Vav2Player/Vav2Player/Assets/Square150x150Logo.scale-200.png b/vav2/Vav2Player/Vav2Player/Assets/Square150x150Logo.scale-200.png index 53ee377..e77e360 100644 Binary files a/vav2/Vav2Player/Vav2Player/Assets/Square150x150Logo.scale-200.png and b/vav2/Vav2Player/Vav2Player/Assets/Square150x150Logo.scale-200.png differ diff --git a/vav2/Vav2Player/Vav2Player/Assets/Square44x44Logo.scale-200.png b/vav2/Vav2Player/Vav2Player/Assets/Square44x44Logo.scale-200.png index f713bba..a50a5c3 100644 Binary files a/vav2/Vav2Player/Vav2Player/Assets/Square44x44Logo.scale-200.png and b/vav2/Vav2Player/Vav2Player/Assets/Square44x44Logo.scale-200.png differ diff --git a/vav2/Vav2Player/Vav2Player/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/vav2/Vav2Player/Vav2Player/Assets/Square44x44Logo.targetsize-24_altform-unplated.png index dc9f5be..6812fde 100644 Binary files a/vav2/Vav2Player/Vav2Player/Assets/Square44x44Logo.targetsize-24_altform-unplated.png and b/vav2/Vav2Player/Vav2Player/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ diff --git a/vav2/Vav2Player/Vav2Player/Assets/StoreLogo.png b/vav2/Vav2Player/Vav2Player/Assets/StoreLogo.png index a4586f2..2593b51 100644 Binary files a/vav2/Vav2Player/Vav2Player/Assets/StoreLogo.png and b/vav2/Vav2Player/Vav2Player/Assets/StoreLogo.png differ diff --git a/vav2/Vav2Player/Vav2Player/Assets/Wide310x150Logo.scale-200.png b/vav2/Vav2Player/Vav2Player/Assets/Wide310x150Logo.scale-200.png index 8b4a5d0..77436c0 100644 Binary files a/vav2/Vav2Player/Vav2Player/Assets/Wide310x150Logo.scale-200.png and b/vav2/Vav2Player/Vav2Player/Assets/Wide310x150Logo.scale-200.png differ diff --git a/vav2/todo7.txt b/vav2/todo7.txt index 8cd949b..a2aba9e 100644 --- a/vav2/todo7.txt +++ b/vav2/todo7.txt @@ -1,10 +1,3 @@ -android player 를 만들어서 av1 디코딩 테스트 필요. - - - -모든 작업이 끝났으면 Vav2Player 의 Setting 화면에 Decoder 를 명시적으로 지정해주는 UI 를 추가해줘. - - 현재 "개방-폐쇄 원칙(Open-Closed Principle)"과 문제를 겪고 있다. 이 때문에, VideoDecoderFactory 클래스가 새로운 구현체(implementor)가 추가될 때마다 헤더파일에서의 빌드 충돌 문제가 발생하고 있고, @@ -17,20 +10,6 @@ android player 를 만들어서 av1 디코딩 테스트 필요. -CLAUDE.md 파일을 확인하여 현재 작업 상황을 점검하고 완료된 항목들을 업데이트해줘. -완료된 사항만 간단하게 적어주고, 불필요한 정보들은 최대한 줄여줘. - - -VavCoreVideoFrame 에는 color_space 변수가 없다. 차후에 이것을 사용할 기능이 들어가게 될까? - - - Intel VPL 라이브러리 빌드가 완료되었으므로, 이제 다음 단계로 진행할 수 있습니다: - - 1. Intel VPL AV1 디코더 구현 - 설계 문서 기반으로 VPLAV1Decoder 클래스 구현 - 2. VideoDecoderFactory 통합 - VPL 디코더를 팩토리에 추가 - 3. VavCore 프로젝트 설정 - Intel VPL 라이브러리 링크 설정 - - 📱 WinUI 3 아이콘 파일 가이드 주요 아이콘들: @@ -43,6 +22,7 @@ VavCoreVideoFrame 에는 color_space 변수가 없다. 차후에 이것을 사 - LockScreenLogo.scale-200.png (48x48) - 잠금화면 알림 + ---------- libvpl 을 빌드하여, Debug 는 postfix 에 -debug 를 붙여서, dll 라이브러리를 만들어줘. 헤더파일은 D:\Project\video-av1\include\libvpl 경로에. diff --git a/vav2/todo8.txt b/vav2/todo8.txt new file mode 100644 index 0000000..4f60772 --- /dev/null +++ b/vav2/todo8.txt @@ -0,0 +1,33 @@ +android player 를 만들어서 av1 디코딩 테스트 필요. + + +모든 작업이 끝났으면 Vav2Player 의 Setting 화면에 Decoder 를 명시적으로 지정해주는 UI 를 추가해줘. + + +CLAUDE.md 파일을 확인하여 현재 작업 상황을 점검하고 완료된 항목들을 업데이트해줘. +완료된 사항만 간단하게 적어주고, 불필요한 정보들은 최대한 줄여줘. + + +VavCoreVideoFrame 에는 color_space 변수가 없다. 차후에 이것을 사용할 기능이 들어가게 될까? + + +VavCoreVideoFrame 에는 현재 cpu data 만 제공하고 있다. +dx3d surface 에 직접 av1 프레임을 디코딩해주는 SDK 도 있다. +각 프레임을 요청할 때, dx3d surface 인자를 제공해주면, surface 에 직접 프레임을 그려줄 수 있는지 조사해서 검토해봐줘. + +AMF +* header: D:\Project\video-av1\include\amf +* doc: https://github.com/GPUOpen-LibrariesAndSDKs/AMF/blob/master/amf/doc/AMF_Video_Decode_API.md + +dav1d +* header: D:\Project\video-av1\include\dav1d +* source: https://code.videolan.org/videolan/dav1d + +libvpl +* header: D:\Project\video-av1\include\libvpl +* doc: https://intel.github.io/libvpl/latest/API_ref/VPL_func_vid_decode.html#func-video-decode + +nvdec +* header: D:\Project\video-av1\oss\nvidia-video-codec\Interface +* doc: https://docs.nvidia.com/video-technologies/video-codec-sdk/13.0/nvdec-video-decoder-api-prog-guide/index.html +