Skip to content

Add a buffer type for per-macroblock encoder QP maps - #42

Open
fabracht wants to merge 1 commit into
chromeos:mainfrom
LabOverWire:enc-qp-buffer
Open

fabracht wants to merge 1 commit into
chromeos:mainfrom
LabOverWire:enc-qp-buffer

Conversation

@fabracht

Copy link
Copy Markdown

Adds BufferType::EncQp { pitch, data } for VAEncQPBufferType, the per-macroblock QP map that an encoder in CQP mode reads (one byte per macroblock for H.264).

The buffer is two-dimensional: vaCreateBuffer takes the row pitch as size and the number of macroblock rows as num_elements, which iHD requires (it rejects a size that is not 64-byte aligned and allocates size * num_elements). Buffer::new currently passes num_elements = 1 for everything but slice parameters, and Context::id/Display::handle are crate-private, so a caller cannot create this buffer itself. The row count is data.len() / pitch; a zero pitch yields zero rows and the driver's error instead of a panic.

Also replaces the is_err()/unwrap_err() pairs in the Drop impls of Buffer and MappedCodedBuffer with if let Err, which clippy flags in this file.

Tested with iHD 26.1.2 on Tiger Lake (H.264 High, VAEntrypointEncSlice, CQP): a 1680x1050 IDR frame with the left half of the map at QP 51 and the right at 26 decodes at 20.2 dB PSNR (left) and 50.6 dB (right) against a plain QP 26 encode, and shrinks from 160 KB to 62 KB.

@google-cla

google-cla Bot commented Oct 25, 2026

Copy link
Copy Markdown

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant