Files
video-v1/vav2/GEMINI.md
2025-09-27 00:20:35 +09:00

4.1 KiB

Vav2Player 프로젝트 분석 요약

1. 프로젝트 아키텍처

Vav2Player 프로젝트는 크게 두 개의 주요 구성 요소로 나뉩니다.

  • VavCore (정적 라이브러리):

    • 순수 C++로 작성된 비디오 디코딩 핵심 라이브러리입니다.
    • 특정 UI 프레임워크에 대한 의존성이 없으며, 이식성을 목표로 설계되었습니다.
    • 최종적으로는 Godot 엔진 등 다른 애플리케이션에서 사용할 수 있도록 C API를 제공하는 것을 목표로 합니다.
  • Vav2Player (WinUI 3 애플리케이션):

    • VavCore 라이브러리를 사용하는 클라이언트 애플리케이션입니다.
    • C++/WinRT 및 WinUI 3를 사용하여 현대적인 Windows UI를 구현합니다.
    • D3D12를 이용한 고성능 비디오 렌더링을 담당합니다.

2. VavCore 라이브러리 상세

목적

VavCore는 다양한 디코딩 백엔드를 지원하는 고성능, 확장 가능, 이식성 있는 비디오 디코딩 엔진을 제공하는 것을 목표로 합니다.

핵심 인터페이스 (IVideoDecoder)

모든 디코더 클래스의 기반이 되는 추상 인터페이스입니다. Initialize, DecodeFrame, Cleanup 등의 메서드를 정의하여 디코더의 동작을 표준화합니다.

디코더 팩토리 (VideoDecoderFactory)

"등록 기반 팩토리(Registration-Based Factory)" 패턴을 사용하여 디코더 객체를 생성합니다.

  • 동작 방식: 각 디코더 구현 파일(.cpp)은 자신의 생성자 함수와 가용성 체크 함수를 VideoDecoderFactory에 정적으로 등록합니다. 팩토리는 이 등록 정보를 기반으로 요청된 타입의 디코더를 생성합니다.
  • 장점:
    • 확장성: 새로운 디코더를 추가할 때 팩토리 코드를 수정할 필요가 없습니다. (개방-폐쇄 원칙)
    • 의존성 분리: 팩토리가 특정 디코더의 헤더 파일을 포함하지 않아 SDK 간의 헤더 충돌 문제를 원천적으로 방지합니다.
    • 자동 선택: 시스템 환경(예: GPU 종류)에 따라 우선순위가 가장 높은 최적의 디코더를 자동으로 선택할 수 있습니다.
  • 지원 디코더:
    • dav1d (소프트웨어)
    • AMF (AMD 하드웨어 가속)
    • NVDEC (NVIDIA 하드웨어 가속)
    • VPL (Intel 하드웨어 가속)
    • Media Foundation (Windows 내장 디코더)

3. Vav2Player 애플리케이션 상세

역할

Vav2PlayerVavCore를 사용하여 비디오 프레임을 디코딩하고, D3D12를 사용하여 화면에 렌더링하는 GUI 프론트엔드입니다.

렌더링 파이프라인

  • 목표: GPU 내에서 모든 처리를 완료하여 CPU-GPU 간 데이터 전송을 최소화하는 고성능 렌더링을 목표로 합니다.
  • 이상적인 경로:
    1. VavCore의 하드웨어 디코더가 GPU 메모리에 NV12 포맷의 서피스를 출력합니다.
    2. 렌더러는 이 GPU 서피스를 직접 텍스처로 참조합니다.
    3. 픽셀 셰이더를 사용하여 실시간으로 YUV를 RGB로 색상 변환합니다.
    4. 변환된 RGB 이미지를 SwapChainPanel에 최종 출력합니다.
  • 현재 상태: 현재는 호환성을 위해 GPU에서 디코딩된 프레임을 CPU로 읽어온 후, 다시 렌더링을 위해 GPU로 업로드하는 단순화된 경로를 사용할 수 있습니다. (성능 최적화를 위해 이상적인 경로로의 전환이 필요합니다.)

4. 주요 의존성

  • UI 및 애플리케이션 모델: Windows App SDK (WinUI 3), C++/WinRT
  • 렌더링: Direct3D 12, DXGI
  • 디코더 SDK:
    • dav1d
    • AMD AMF
    • NVIDIA CUDA / NVDEC
    • Intel oneVPL
    • Windows Media Foundation
  • 컨테이너: libwebm (WebM 파일 파싱용)

5. 빌드 시스템

  • Visual Studio 2022 솔루션(.sln)을 통해 관리됩니다.
  • VavCore는 정적 라이브러리(.lib)로 빌드됩니다.
  • Vav2Player 실행 파일은 VavCore.lib를 링크하여 디코딩 기능을 사용합니다.
  • 각 하드웨어 가속 디코더는 해당 SDK의 라이브러리 및 헤더 파일에 대한 의존성을 가집니다.