<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/a-roadmap-for-virtio-video-on-chromeos-part-2-k7u8o1jaq" -->

---
title: A roadmap for VirtIO Video on ChromeOS: part 2 | daily.dev
description: Collabora's second installment in their VirtIO Video on ChromeOS series covers the Rust libraries cros-codecs and cros-libva developed to handle...
canonical: https://daily.dev/posts/a-roadmap-for-virtio-video-on-chromeos-part-2-k7u8o1jaq
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: A roadmap for VirtIO Video on ChromeOS: part 2 | daily.dev
og:description: Collabora's second installment in their VirtIO Video on ChromeOS series covers the Rust libraries cros-codecs and cros-libva developed to handle...
og:url: https://daily.dev/posts/a-roadmap-for-virtio-video-on-chromeos-part-2-k7u8o1jaq
og:image: https://api.daily.dev/og/posts/k7u8o1JaQ.png
og:image:alt: A roadmap for VirtIO Video on ChromeOS: part 2
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# A roadmap for VirtIO Video on ChromeOS: part 2

**[Collabora Blog](https://daily.dev/sources/collabora)** · 9 min read · 0 upvotes · 0 comments

## Summary

Collabora's second installment in their VirtIO Video on ChromeOS series covers the Rust libraries cros-codecs and cros-libva developed to handle hardware-accelerated video decoding. Cros-codecs provides parsers, state trackers, and backends for VP8, VP9, H.264, and H.265 (with AV1 planned), and is set to replace CrosVM's dependency on Chrome's libvda. Cros-libva safely wraps the C-based libva library into a Rust API for use by cros-codecs. The post also explains the distinction between stateless and stateful codec APIs, discusses contributions to v4l2r for V4L2 stateless decoder support, and explains why VirtIO GPU was not chosen as the virtualization path — primarily because many Chromebooks have codec IPs outside the GPU.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://www.collabora.com/news-and-blog/blog/2023/10/02/a-roadmap-for-virtio-video-on-chromeos-part-2>

## Questions this post answers

### What is the difference between stateless and stateful video codec APIs in Linux?

Stateful codec devices act as a black box, ingesting raw bitstream and managing reference frames and metadata internally in the driver/firmware, returning frames in display order. Stateless devices require userspace to supply all metadata on every frame and return frames in decode order, demanding userspace implement parsing, arithmetic decoding, and state tracking. VA-API is stateless; V4L2 supports both modes.

_Developers working with Linux multimedia stacks track V4L2 and VA-API developments on daily.dev._

### What codecs does cros-codecs support and what is still missing?

Cros-codecs supports VP8, VP9, H.264, and H.265 via a VA-API backend on the decode side. AV1 support is planned but not yet implemented, and encoding is not supported at all. The library is written entirely in Rust and is intended to replace libvda in CrosVM, removing CrosVM's dependency on the Chrome codec stack.

_Engineers replacing legacy codec stacks with Rust alternatives follow cros-codecs progress on daily.dev._

### Why was VirtIO GPU not used for video codec virtualization in ChromeOS instead of VirtIO Video?

VirtIO GPU only covers codec IPs located inside the GPU chip, which excludes a large number of Chromebook devices where the codec IP sits outside the GPU. Using VirtIO Video with the V4L2 Stateful API as the front-end instead provides a mature, proven interface and hides the virtualization machinery from guest userspace, while supporting a broader range of hardware including embedded devices.

_Teams choosing between virtualization strategies for multimedia on Linux find relevant architecture discussions on daily.dev._

## Similar posts on daily.dev

- [NVIDIA VA-API Driver 0.0.18 Ships More Fixes, Chrome/Chromium Decode On Direct Backend](https://daily.dev/posts/nvidia-va-api-driver-0-0-18-ships-more-fixes-chrome-chromium-decode-on-direct-backend-ejpz4kpdu) · Phoronix · 0 upvotes · 0 comments
- [Kernel 7.2: RK3588 media, smarter GPU memory, and Rust foundations](https://daily.dev/posts/kernel-7-2-rk3588-media-smarter-gpu-memory-and-rust-foundations-vrpih8voj) · Collabora Blog · 0 upvotes · 0 comments
- [The WebCodecs Handbook: Native Video Processing in the Browser](https://daily.dev/posts/the-webcodecs-handbook-native-video-processing-in-the-browser-vuda8hhah) · freeCodeCamp · 8 upvotes · 0 comments
- [Apple Video Decode Driver Posted For Upstream Linux Kernel Review](https://daily.dev/posts/apple-video-decode-driver-posted-for-upstream-linux-kernel-review-pfockg6ep) · Phoronix · 0 upvotes · 0 comments
- [Decoding with Rockchip at Kernel Recipes 2026](https://daily.dev/posts/decoding-with-rockchip-at-kernel-recipes-2026-gisa2vyfl) · Collabora Blog · 0 upvotes · 0 comments

---

Tags: [#rust](https://daily.dev/tags/rust), [#chromeos](https://daily.dev/tags/chromeos)

[View this post on daily.dev](https://daily.dev/posts/a-roadmap-for-virtio-video-on-chromeos-part-2-k7u8o1jaq)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"A roadmap for VirtIO Video on ChromeOS: part 2","url":"https://daily.dev/posts/a-roadmap-for-virtio-video-on-chromeos-part-2-k7u8o1jaq","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/a-roadmap-for-virtio-video-on-chromeos-part-2-k7u8o1jaq"},"datePublished":"2026-08-11T08:53:44.159Z","dateModified":"2026-08-11T09:13:19.971Z","description":"Collabora's second installment in their VirtIO Video on ChromeOS series covers the Rust libraries cros-codecs and cros-libva developed to handle...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/43d1d8554967e12fb75762498099c8e4?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/43d1d8554967e12fb75762498099c8e4?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Collabora Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Collabora Blog","logo":"https://media.daily.dev/image/upload/s--ZGZ0FjqS--/f_auto,q_auto/v1786438306/logos/collabora?_a=BAMAMicg0","url":"https://daily.dev/sources/collabora"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/a-roadmap-for-virtio-video-on-chromeos-part-2-k7u8o1jaq","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"rust,chromeos","timeRequired":"PT9M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Collabora Blog","item":"https://daily.dev/sources/collabora"},{"@type":"ListItem","position":3,"name":"A roadmap for VirtIO Video on ChromeOS: part 2"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/a-roadmap-for-virtio-video-on-chromeos-part-2-k7u8o1jaq#faq","mainEntity":[{"@type":"Question","name":"What is the difference between stateless and stateful video codec APIs in Linux?","acceptedAnswer":{"@type":"Answer","text":"Stateful codec devices act as a black box, ingesting raw bitstream and managing reference frames and metadata internally in the driver/firmware, returning frames in display order. Stateless devices require userspace to supply all metadata on every frame and return frames in decode order, demanding userspace implement parsing, arithmetic decoding, and state tracking. VA-API is stateless; V4L2 supports both modes. Developers working with Linux multimedia stacks track V4L2 and VA-API developments on daily.dev."}},{"@type":"Question","name":"What codecs does cros-codecs support and what is still missing?","acceptedAnswer":{"@type":"Answer","text":"Cros-codecs supports VP8, VP9, H.264, and H.265 via a VA-API backend on the decode side. AV1 support is planned but not yet implemented, and encoding is not supported at all. The library is written entirely in Rust and is intended to replace libvda in CrosVM, removing CrosVM's dependency on the Chrome codec stack. Engineers replacing legacy codec stacks with Rust alternatives follow cros-codecs progress on daily.dev."}},{"@type":"Question","name":"Why was VirtIO GPU not used for video codec virtualization in ChromeOS instead of VirtIO Video?","acceptedAnswer":{"@type":"Answer","text":"VirtIO GPU only covers codec IPs located inside the GPU chip, which excludes a large number of Chromebook devices where the codec IP sits outside the GPU. Using VirtIO Video with the V4L2 Stateful API as the front-end instead provides a mature, proven interface and hides the virtualization machinery from guest userspace, while supporting a broader range of hardware including embedded devices. Teams choosing between virtualization strategies for multimedia on Linux find relevant architecture discussions on daily.dev."}}]}
```

