intel / libva

Libva is an implementation for VA-API (Video Acceleration API)
http://intel.github.io/libva/
Other
663 stars 302 forks source link

va: Add encoding tuning mode #796

Open nowrep opened 9 months ago

nowrep commented 9 months ago

This provides a hint to driver about the requested encode tuning in addition to quality level number. It can be used by hardware encoders that supports low latency encoding as a special mode instead of setting the lowest quality level.

The tuning modes matches Vulkan VkVideoEncodeTuningModeKHR, except lossless which I don't think makes sense here.

Motivation is AMD VCN encoder which has low latency mode that should be enabled for usecases like realtime game streaming, and it works with all presets (quality levels), not only with the fastest preset.

DemiMarie commented 8 months ago

This provides a hint to driver about the requested encode tuning in addition to quality level number. It can be used by hardware encoders that supports low latency encoding as a special mode instead of setting the lowest quality level.

The tuning modes matches Vulkan VkVideoEncodeTuningModeKHR, except lossless which I don't think makes sense here.

So there are two specific cases I can think of:

  1. The encoding is happening in real-time, so the hardware must guarantee that it can keep up with the input stream.
  2. Lossless encoding is needed, perhaps because the file will later be decompressed and re-encoded offline to a quality level that would not be possible with real-time lossy encoding.
XinfengZhang commented 8 months ago

when we are talking about low latency, there are several perspectives, such as: mini gop structure , whether some frame need to be hold time consumption for one frame. and it is actually related with frequency logic.

looks it is not fully related with encoding tools

nowrep commented 8 months ago

time consumption for one frame. and it is actually related with frequency logic.

Yes, latency here meaning the time it takes to encode one frame.

XinfengZhang commented 8 months ago

time consumption for one frame. and it is actually related with frequency logic.

Yes, latency here meaning the time it takes to encode one frame.

XinfengZhang commented 8 months ago

Yes, latency here meaning the time it takes to encode one frame.

it means that backend driver need communication with Pcode...

XinfengZhang commented 8 months ago

there are 3 quality/perf related control in vulkan, "usage" "content" "tuning" , I am wondering how to map them with quality level and tuning ... seems it is series new interface.