intel / libva

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

va: Add VAConfigAttribEncMaxTileRows and VAConfigAttribEncMaxTileCols #757

Closed sivileri closed 1 year ago

sivileri commented 1 year ago

Currently there is no way of exposing the driver tile_rows and tile_cols limitations for encoding with tiles. For codecs like AV1 there is a cap specifying the max number of tiles, but without differentiating cols/rows.

Different hardware may have restrictions which may need to be taken into account. More specifically, D3D12 encode exposes the maximum rows/cols and adding VAConfigAttribEncMaxTileRows/Cols allows for mapping that information to the VAOn12 driver.

Related vainfo change: https://github.com/intel/libva-utils/pull/344

@dvrogozh @XinfengZhang

sivileri commented 1 year ago

one value is enough? 16 bit for each?

@XinfengZhang thanks for taking a look. We've discussed this previously with @dvrogozh . It may be easier for the user to have separate values instead of having to deal with bit manipulation, there are other caps like VASurfaceAttribMaxWidth and VASurfaceAttribMaxHeight that are separate (but could be combined as low/high 16 bit too with [0..65536] each) or VAConfigAttribEncMaxRefFrames that is combined for L0/L1 in low/hight 16 bits, so not clear on any specific style/trend for these.

Do you think keeping the separate values would be okay for VAConfigAttribEncMaxTileRows and VAConfigAttribEncMaxTileCols in this PR and the related https://github.com/intel/libva-utils/pull/344?

image
dvrogozh commented 1 year ago

These attributes are not directly involved in bitstream packing. In such cases I think it's better to favor usability over compactness.

sivileri commented 1 year ago

@XinfengZhang kindly pinging on this MR :)