97 lines
5.0 KiB
Plaintext
97 lines
5.0 KiB
Plaintext
oss/dav1d 의 라이브러리를 빌드하여 lib/dav1d 위치에 설치해줘.
|
|
필요하면 include/dav1d 에 헤더파일도 추가해줘.
|
|
win64 타겟으로만 빌드해줘.
|
|
|
|
>> WORK
|
|
|
|
지금까지의 빌드 과정을 스크립트로 만들어서 root 위치에 build_dav1d.bat 로 작성해줘.
|
|
build_dav1d.bat 실행할 때 무조건 이전 빌드를 clean 하도록 설정해줘.
|
|
기본적으로 Release 빌드 이외에 Debug 라이브러리도 빌드할 수 있도록 작성해주고, Debug 라이브러리 파일명에는 postfix 로 -debug 를 붙여줘.
|
|
|
|
>> WORK
|
|
|
|
vav2/Vav2Player 경로에 WinUI 3 로 작성된 Empty C++ 프로젝트가 있다.
|
|
여기에 av1 파일을 선택해서 재생해주는 Player 를 작성하고자 한다.
|
|
|
|
우선 libwebm 라이브러리를 사용하여 file loader 를 작성한다.
|
|
그리고, 다음으로 파일을 로딩하면서 av1 codec 을 디코딩할 필요가 있는 경우에 dav1d 코덱을 사용한다.
|
|
디코딩하여 이미지 스트림을 순차적으로 만들고, 이미지 스트림을 렌더링 완료되면 처분한다.
|
|
file loader 와 디코딩, 렌더링 흐름을 스트리밍으로 구현하고, 30fps 정도를 끊기지 않도록 실시간 재생이 가능한 수준으로 디코딩 버퍼링을 구현하면 된다. 버퍼링 시간은 최적의 값을 찾아서 기본값으로 설정하고, 나중에 최적화할 때 수정할 수 있도록 구현한다.
|
|
|
|
WinUI 3 의 D3D 화면에 렌더링하는 부분은 나중에 구현한다.
|
|
일단 이미지 스트림을 얻으면 프레임별로 raw format file 로 기록하도록 file output 을 하나 만들어 둔다.
|
|
file output 의 결과를 다시 bmp 로 변환하여 저장하도록 추가로 writer 를 구현한다.
|
|
|
|
include/libwebm, lib/libwebm 경로에 미리 빌드해준 x64 binary 가 있다. 이것을 활용한다.
|
|
include/dav1d, lib/dav1d 경로에도 마찬가지이다.
|
|
|
|
작업 과정이 복잡하고 할일이 많으므로, 나눠서 작업이 필요하다. 적절한 구현단계를 나누고, 한 스탭씩 구현을 진행한다.
|
|
작업하다가 세부적인 조정 작업이 있을 때는 하나씩 여쭤보면서 작업을 방향을 조정할 수 있도록 배려해준다.
|
|
나중에 구현을 마치고 나서 다시 재작업하지 않도록 개발을 진행하면서 하나씩 의견을 구하는 것이 완성도가 올라가고, claude AI 사용 전력도 최적화 되므로 서로에게 이익이다.
|
|
|
|
oss/dav1d 의 라이브러리를 빌드하여 lib/dav1d 위치에 설치해줘.
|
|
필요하면 include/dav1d 에 헤더파일도 추가해줘.
|
|
win64 타겟으로만 빌드해줘.
|
|
|
|
>>> WORK
|
|
|
|
libwebm 라이브러리의 모든 함수 호출하는 부분의 입력, 출력의 값을 document 의 지시대로 구현했는지 검토해줘.
|
|
|
|
>>> WORK
|
|
|
|
dav1d 라이브러리의 모든 함수 호출하는 부분의 입력, 출력의 값을 document 의 지시대로 구현했는지 검토해줘.
|
|
|
|
>>> WORK
|
|
|
|
oss/dav1d 라이브러리를 dll 이 아닌 정적라이브러리로 빌드해줘. 기존처럼 Release, Debug (postfix 로 -debug)를 빌드해주고, 빌드가 잘되면 include/dav1d 와 lib/dav1d 경로에 복사를 잘넣어주며, 마지막으로 .bat 까지도 업데이트 반영해줘.
|
|
|
|
>>> WORK
|
|
|
|
콘솔에서 빌드하고 테스트할 때를 위해서 추가로 작업해보자. Vav2Player.exe 뒤에 sample.webm 파일을 첫번째 인자로 입력해주면, UI less 로 동작하여 자동으로 webm 파일을 디코딩하여 output frame 까지 파일로 저장하도록 개선해보자.
|
|
|
|
>>> WORK
|
|
|
|
Vav2Player 에서 성능의 저하가 발생될 우려가 있는 부분을 진단해줘
|
|
|
|
>>> WORK
|
|
|
|
https://www.youtube.com/@%EC%84%9C%ED%98%84SeoHyeon1/shorts
|
|
|
|
|
|
|
|
|
|
● 주요 미완성 부분들:
|
|
|
|
1. VP9 디코더 (미래 확장)
|
|
- VideoDecoderFactory.cpp:26, 71, 116, 127, 140 - VP9 구현 대기
|
|
- VideoTypes.h:12-14 - VP8/H264/H265 코덱 타입 정의만 (미구현)
|
|
|
|
2. PNG 출력 포맷
|
|
- FileOutput.cpp:58 - PNG 저장 기능 미구현
|
|
|
|
3. 메타데이터 계산
|
|
- WebMFileReader.cpp:581-582 - 프레임 수 계산, 기본 트랙 설정
|
|
- WebMFileReader.cpp:647 - 정확한 프레임레이트 계산
|
|
|
|
4. AV1 고급 기능
|
|
- AV1Decoder.cpp:370, 378, 386 - 로깅 시스템, OBU 헤더 파싱, 키프레임 감지
|
|
|
|
핵심 기능은 모두 완성되었고, 나머지는 향후 확장 기능들입니다. 현재 AV1 디코딩과 BMP/Raw YUV 출력은 완전히
|
|
작동합니다.
|
|
|
|
|
|
🎯 현재 상태:
|
|
|
|
- BMP 파일 출력: ✅ 완전히 연결 해제됨
|
|
- YUV 프레임 → 화면 렌더링: 🚧 기본 구조 구현 완료 (WinRT API 복잡성으로 빌드 오류)
|
|
- 다음 단계: 더 간단한 렌더링 방식 필요
|
|
|
|
💡 제안사항:
|
|
|
|
복잡한 WinRT WriteableBitmap 방식 대신 다음 중 하나를 선택할 수 있습니다:
|
|
|
|
1. 간단한 텍스트 기반 렌더링: YUV 데이터를 텍스트로 표시 (테스트용)
|
|
2. Win32 GDI 렌더링: 전통적인 Windows API 사용
|
|
3. Direct2D 렌더링: 하드웨어 가속 렌더링
|
|
4. 기존 FileOutput 유지하되 실시간 BMP 뷰어 연동
|