Skip to main content

Module vpx

Module vpx 

Source
Expand description

Software VP8 and VP9 through libvpx. Software VP8 and VP9 through libvpx, with every frame’s references under the session’s control.

One session type serves both codecs. libvpx runs at the lowest latency it offers in real time – one frame in, one packet out, no lag, no alternate-reference lookahead – with screen tuning on VP9, and its rate control is either constant-rate at the session’s bitrate and VBV or a quantizer pinned between an equal minimum and maximum, which is how a quality change reaches a running session without a key frame. A VP9 session runs in libvpx’s flexible mode, where the codec’s eight buffers are addressed by slot, so a frame a client lost leaves the predictions the way a decoded picture buffer allows; a VP8 session steers its three buffers with the per-frame reference and refresh flags. What a lost frame would leave behind besides its picture is kept out too: VP8’s entropy probabilities persist across frames unless a frame declines to update them, so no frame does, and a VP9 decoder takes the previous frame’s motion vectors and probability contexts whatever the references say, which only the codec’s error-resilient mode switches off. VP8 runs error-resilient too, since its constant-rate control otherwise refreshes GOLDEN on a schedule of its own, whatever a frame’s flags say.

Structs§

VpxEncoder
One libvpx session for one capture.

Functions§

encodes_444
Whether the loaded libvpx codes VP9 4:4:4 in the flexible mode the sessions run: before 1.13 its layer machinery re-sizes every frame at 4:2:0, so a profile 1 session writes headers over pictures no decoder takes.
encodes_ten_bit
Whether the loaded libvpx was built with VP9’s high bit depth, which its 10-bit profiles need.