Dav2d
2 hours ago
2
- dav2d는 VideoLAN 커뮤니티가 개발하는 AV2용 고속 디코더로, 앱·브라우저·운영체제에서 바로 쓸 수 있는 구현을 목표로 함
- AV2는 AV1의 후속 로열티 없는 코덱으로 약 25% 효율 개선이 관측되지만, 디코딩 복잡도는 AV1의 약 5배에 이름
- dav1d가 AV1 보급 초기에 고속 소프트웨어 디코더 역할을 했듯, dav2d도 프로덕션 품질 디코더를 사양 초기부터 준비 중
- 현재 트리는 AVM v15 디코더를 기능적으로 완성했고 8비트·10비트를 지원하며, 정확성·적합성·최적화에 집중하고 있음
- x86 AVX2, ARM NEON, 초기 RISC-V 작업과 checkasm 검증을 통해 아키텍처별 최적화를 빠르고 안전하게 진행함
dav2d의 목적과 배경
- dav2d는 VideoLAN 커뮤니티 구성원들이 개발하는 새로운 AV2 코덱용 고속 디코더임
- 저장소는 몇 주 전 공개됐고, AV2가 첫 공식 사양 릴리스를 낸 시점에 맞춰 프로젝트의 목적과 상태가 공개됨
- dav2d는 AV1 디코더인 dav1d의 연장선에 있음
- 목표는 실제 애플리케이션, 미디어 플레이어, 브라우저, 테스트 도구, 운영체제에서 쓸 수 있는 작고 빠르며 이식 가능하고 정확한 디코더를 제공하는 것임
- “코덱은 모두가 디코딩할 수 있기 전까지는 실제로 존재하지 않는다”는 관점에서, 사양뿐 아니라 빌드·테스트·벤치마크·통합 가능한 구현이 중요해짐
AV2와 디코딩 난이도
- AV2는 Alliance for Open Media의 최신 로열티 없는 비디오 코덱이며 AV1의 후속임
- AV2 사양은 공개되어 있음
- AV1은 2018년에 확정됐고, 브라우저, 모바일 기기, 운영체제, TV, 스트리밍 서비스, 비디오 애플리케이션에 널리 배포된 비디오 코덱이 됨
- AV2는 예측, 변환, 엔트로피 코딩, 필터링, 크로마 처리 전반에 새 코딩 도구를 도입해 압축 효율 개선을 이어감
- 테스트 조건에 따라 차이는 있지만 AV1 대비 약 25% 개선이 흔히 관측되며, 일부 평가에서는 더 큰 개선도 나옴
- AV2 디코딩은 AV1보다 대략 5배 복잡해, 현재 하드웨어에서 소프트웨어만으로 실시간 디코딩하려면 아키텍처별 최적화가 필요함
- 이런 복잡성 때문에 dav2d 개발은 사양 안정화를 기다리지 않고 일찍 시작됨
dav1d에서 dav2d로 이어진 흐름
- dav2d의 출발점은 dav1d 초기 경험에 있음
- AV1 확정 당시 전용 하드웨어 디코딩이 충분히 빠르게, 충분히 많은 기기에 보급되지 않을 가능성이 커 고속 소프트웨어 디코더가 필요했음
- 당시 AOM 커뮤니티 일부는 하드웨어 구현과 참조 디코더로 충분하다고 봤지만, 브라우저·미디어 플레이어·운영체제·모바일 기기는 전용 하드웨어 보급 전부터 프로덕션 품질 디코더가 필요했음
- 이후 AOM 자체가 초기 개발 일부를 지원했고, Alliance 구성원 일부도 작업에 합류하면서 dav1d가 만들어짐
- 고속 소프트웨어 디코더의 필요성은 예상보다 컸고, dav1d는 현재 가장 널리 배포된 AV1 소프트웨어 디코더가 됨
- dav1d는 VLC, FFmpeg, mpv, Firefox, Chrome, Safari, Android, Windows, Linux 및 여러 애플리케이션과 플랫폼에서 사용됨
- dav1d는 AV1 배포, 테스트, 최적화를 하는 많은 개발자에게 참조 AV1 디코더 구현으로도 쓰임
- dav1d의 이력은 Introducing dav1d, the road to the first release, First release, dav1d 1.2, 1.5 “Sonic”에 정리돼 있음
- AV2에서는 같은 역할을 더 이른 시점부터 준비하고 있음
현재 구현 상태
- 현재 dav2d 트리는 AVM v15 디코더를 기능적으로 완성했으며 8비트와 10비트 디코딩을 모두 지원함
- 주요 코덱 구성요소 대부분이 구현됐고 최적화 단계로 들어감
- 비트스트림 파싱
- 프레임 및 시퀀스 헤더
- 엔트로피 디코딩과 CDF 처리
- 인트라 예측
- 인터 예측과 참조 모션 벡터
- 변환
- CCTX와 CfL
- 디블로킹
- CDEF
- Wiener 필터링
- 필름 그레인 합성
- AV2 생태계는 아직 초기 단계지만, dav2d는 이미 동작하는 디코더이며 빈 발표용 저장소 수준을 넘어섬
- 현재 작업의 상당 부분은 정확성, 적합성, 최적화, 플랫폼 지원에 집중돼 있음
- dav2d가 빠르게 진전된 배경에는 dav1d에서 축적된 스레딩, SIMD 구성, 테스트, 이식성, API 설계 경험이 있음
- AV2에는 상당한 신규 디코더 코드가 필요하지만, dav1d 개발 과정에서 얻은 경험 상당수가 dav2d에 직접 적용됨
성능 최적화와 검증
- x86에서는 여러 역변환 크기에 대한 AVX2 코드가 들어갔고, CCTX, deblock, intra prediction, CfL 관련 경로 작업도 진행 중임
- ARM에서는 AArch64 NEON 작업이 엔트로피 디코딩, SAD, 인트라 예측, 팔레트 예측, DC 예측기, smooth 예측기, 모션 관련 함수에 적용되고 있음
- arm32 작업도 일부 시작됨
- RISC-V 작업은 초기 단계이며, 기존 인트라 예측과 모션 보상 어셈블리를 다시 활성화하고 조정하는 방향으로 진행 중임
- 최적화 흐름은 dav1d와 유사함
- 먼저 깔끔한 C 구현을 만듦
- 검증 인프라를 구축함
- 중요한 핫패스에 아키텍처별 최적화 코드를 추가함
- dav1d 개발 중 만들어진 checkasm은 최적화 구현을 C 구현과 비교해 검증하고 벤치마크하는 프레임워크임
- dav2d는 이 인프라를 첫날부터 활용해 dav1d의 비슷한 단계보다 더 빠르게 진전됨
- 현재 트리는 역변환, 모션 보상, 필름 그레인, CfL, 참조 모션 벡터 코드에 대한 checkasm 커버리지를 포함함
오픈소스 개발 방식과 다음 단계
- dav2d는 dav1d와 마찬가지로 오픈소스 프로젝트로 개발됨
- 디코더는 dav1d와 같은 BSD 스타일 라이선스로 배포되어 오픈소스 및 독점 애플리케이션 모두에 통합하기 쉬움
- VideoLAN 프로젝트 대부분처럼 개발은 첫날부터 공개적으로 진행됨
- 공개 구현은 상호운용성, 사양의 독립적 검증, 더 쉬운 실험, 생태계를 위한 공통 기반을 제공함
- 앞으로도 AV2 사양 추적, 적합성 개선, 테스트 커버리지 확장, x86과 ARM 추가 최적화, RISC-V 작업이 필요함
- 높은 비트 심도 성능 개선, 스레딩 개선, 메모리 사용량 감소, 향후 릴리스 준비도 남아 있음
- dav1d가 하드웨어 지원이 보편화되기 전 AV1을 실용적으로 만든 것처럼, dav2d도 AV2에서 같은 역할을 목표로 함
-
Homepage
-
Tech blog
- Dav2d