76 lines
2.7 KiB
Plaintext
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 인프라가 준비되어 있지만 실제로
|
|
화면에 표시하는 마지막 연결고리가 빠져있는 상황입니다.
|