Files
video-v1/vav2/notes/todo3.txt
2025-10-12 02:04:54 +09:00

76 lines
2.7 KiB
Plaintext

⚠️ 영상 표시 누락: 실제 렌더링 파이프라인이 TODO 상태로 프레임이 화면에 표시되지 않음
⚠️ 과도한 스레드 생성: 스레드 풀 최적화 필요
현재 D3D12 에러는 대폭 줄어들었지만, 실제 비디오 렌더링을 위해서는 YUV→RGB 변환 셰이더와 텍스처 업로드 로직을
구현해야 합니다.
비디오 렌더링에서 뭔가 빠진 부분이 있을까?
● 🚨 비디오 렌더링에서 빠진 중요한 부분들
1. SwapChainPanel ↔ D3D12 연결이 구현되지 않음 ⚠️
<!-- XAML에는 있지만 코드에서 사용안함 -->
<SwapChainPanel x:Name="VideoSwapChainPanel" Visibility="Collapsed"/>
문제: SwapChainPanel이 준비되어 있지만 D3D12VideoRenderer와 연결되지 않음
2. 실제 프레임 표시 로직 부재 ❌
- VideoPlayerControl에서 디코딩된 프레임을 GPU로 전달하는 코드 없음
- Present() 호출로 실제 화면에 표시하는 부분 없음
- 30fps 타이밍 제어 메커니즘 없음
3. CPU↔GPU 렌더링 전환 로직 미완성 ⚠️
bool m_useHardwareRendering = false; // 항상 false로 설정됨
문제: GPU 렌더링으로 전환하는 로직이 구현되지 않음
4. 프레임 디스플레이 파이프라인 연결 부재 ❌
현재 상황:
[AV1 Decoder] → [YUV Frame] → [🚫 연결 끊어짐] → [사용자 화면]
필요한 연결:
[AV1 Decoder] → [YUV Frame] → [GPU YUV→RGB] → [SwapChain] → [화면 표시]
🛠️ 구현해야 할 핵심 컴포넌트들
1. SwapChainPanel 초기화 및 연결
// VideoPlayerControl.xaml.cpp에 추가 필요
HRESULT InitializeVideoRenderer() {
// SwapChainPanel을 D3D12VideoRenderer에 연결
// D3D12 SwapChain 생성 및 바인딩
}
2. 실제 프레임 렌더링 메서드
// 실제 비디오 프레임을 화면에 표시
void DisplayVideoFrame(const VideoFrame& frame) {
// YUV → RGB GPU 변환
// SwapChain Present() 호출
// 30fps 타이밍 제어
}
3. GPU 렌더링 활성화 로직
// 하드웨어 렌더링으로 전환
void EnableHardwareRendering() {
m_useHardwareRendering = true;
VideoSwapChainPanel().Visibility(Visibility::Visible);
VideoImage().Visibility(Visibility::Collapsed);
}
4. 프레임 타이밍 제어
// 30fps에 맞춰 정확한 타이밍으로 Present() 호출
void PresentFrame() {
m_swapChain->Present(1, 0); // VSync 활성화
}
이 부분들을 구현하면 완전한 GPU 가속 비디오 재생이 가능해집니다. 현재는 모든 GPU 인프라가 준비되어 있지만 실제로
화면에 표시하는 마지막 연결고리가 빠져있는 상황입니다.