58 lines
2.7 KiB
Plaintext
58 lines
2.7 KiB
Plaintext
● 좋은 소식입니다! VavCore API를 확인해보니 Seek 기능을 지원합니다:
|
|
|
|
- vavcore_seek_to_time() (line 211)
|
|
- vavcore_seek_to_frame() (line 212)
|
|
- vavcore_reset() (line 213)
|
|
|
|
하지만 실제 구현에서 Seek 기능이 제대로 동작하지 않을 가능성이 있습니다. 더 간단하고 확실한 해결책을 사용해보겠습니다:
|
|
|
|
vavcore_reset() 함수를 사용하는 것입니다. Reset은 보통 스트림을 처음 위치로 되돌리는 기능이고, Seek보다 안정적으로 구현되어 있을
|
|
가능성이 높습니다.
|
|
|
|
|
|
|
|
Phase 3: 장기 작업 (AndroidMediaCodecAV1Decoder_Refactoring_Analysis.md:352-365)
|
|
- MediaCodecSurfaceManager 분리 (Surface 관리)
|
|
- Strategy 패턴 적용 (OpenGL/Vulkan 최적화)
|
|
|
|
|
|
|
|
최적의 해결책:
|
|
NVDEC (CUDA) → D3D12 Texture (via CUDA-D3D12 Interop) → D3D12VideoRenderer
|
|
|
|
구현 단계:
|
|
1. D3D12 텍스처 생성
|
|
2. cuGraphicsD3D12RegisterResource로 D3D12 텍스처를 CUDA에 등록
|
|
3. NVDEC 디코딩 후 CUDA device memory에서 D3D12 텍스처로 직접 복사
|
|
4. D3D12VideoRenderer로 렌더링
|
|
|
|
이 방법은 완전한 zero-copy GPU 파이프라인입니다. CPU 메모리를 전혀 거치지 않습니다.
|
|
|
|
|
|
Hardware Decoder 에서 CPU fallback 으로 대응되는 분기 코드가 있을까?
|
|
Hardware Decoder 에서 D3D surface rendering path 를 벗어나서 처리되는 예외 상황의 처리 코드가 따로 있을까?
|
|
|
|
|
|
앞으로 코드 수정할 때 5번정도 다시 검수하는 과정을 거쳤으면 한다. 특히 VavCore 의 코드 수정은 이미 어떻게 고쳐도 신뢰도를 잃었다.
|
|
1. 검수 과정을 수정한 코드 검토
|
|
2. 수정한 코드가 영향받는 함수들 검토
|
|
3. 수정한 코드를 호출하는 상위 함수에서 검토
|
|
4. 수정한 코드를 사용하는 모듈들에서 영향을 주는 범위 검토
|
|
|
|
|
|
https://docs.rs/nvidia-video-codec-sdk/latest/nvidia_video_codec_sdk/sys/cuviddec/enum.cudaVideoChromaFormat.html
|
|
문서를 참고하면, YUV444 도 지원이 된다. NVDEC 에서 cudaVideoChromaFormat 를 적절히 분기처리하고 있는지 확인해달라.
|
|
|
|
enum cudaVideoChromaFormat {
|
|
cudaVideoChromaFormat_Monochrome = 0,
|
|
cudaVideoChromaFormat_420 = 1,
|
|
cudaVideoChromaFormat_422 = 2,
|
|
cudaVideoChromaFormat_444 = 3,
|
|
}
|
|
|
|
https://developer.nvidia.com/blog/optimizing-video-memory-usage-with-the-nvdecode-api-and-nvidia-video-codec-sdk/
|
|
https://docs.nvidia.com/deeplearning/maxine/nvcvimage-api-guide/index.html
|
|
https://docs.nvidia.com/video-technologies/video-codec-sdk/12.1/nvdec-video-decoder-api-prog-guide/index.html
|
|
https://github.com/NVIDIA/cuda-samples/blob/master/Samples/5_Domain_Specific/simpleD3D12/simpleD3D12.cpp
|
|
https://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__EXTRES__INTEROP.html
|