Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refine encode segment id map buffer #756

Merged
merged 3 commits into from
Jul 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions va/va.h
Original file line number Diff line number Diff line change
Expand Up @@ -1053,6 +1053,14 @@ typedef enum {
* columns supported for encoding with tile support.
*/
VAConfigAttribEncMaxTileCols = 57,
/**
* \brief VP9 encoding attribute. Read-only.
*
* This attribute exposes a number of capabilities of the underlying
* VP9 implementation. The attribute value is partitioned into fields as defined in the
* VAConfigAttribValEncVP9 union.
*/
VAConfigAttribEncVP9 = 58,
/**@}*/
VAConfigAttribTypeMax
} VAConfigAttribType;
Expand Down Expand Up @@ -1491,6 +1499,19 @@ typedef union _VAConfigAttribValEncPerBlockControl {
/** \brief Driver supports decode processing rate report */
#define VA_PROCESSING_RATE_DECODE 0x00000002
/**@}*/

/** @name segment ID map block size */
/**@{*/
XinfengZhang marked this conversation as resolved.
Show resolved Hide resolved
/** \brief each segmentID represent a 16x16 block */
#define VA_SEGID_BLOCK_16X16 0
/** \brief each segmentID represent a 32x32 block */
#define VA_SEGID_BLOCK_32X32 1
/** \brief each segmentID represent a 64x64 block */
#define VA_SEGID_BLOCK_64X64 2
/** \brief each segmentID represent a 8x8 block */
#define VA_SEGID_BLOCK_8X8 3

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Shall we add VA_SEGID_BLOCK_4x4? AV1 is 4x4 seg map.

/**@}*/

/**
* if an attribute is not applicable for a given
* profile/entrypoint pair, then set the value to the following
Expand Down
9 changes: 4 additions & 5 deletions va/va_enc_av1.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,10 @@ typedef union _VAConfigAttribValEncAV1Ext1 {
*/
uint32_t interpolation_filter : 5;
/**
* \brief Min segmentId block size accepted.
* \brief segmentId block size accepted.
* Application need to send seg_id_block_size in PPS equal or larger than this value.
* one bit represent one block size defined as VA_SEGID_BLOCKXXXX
* should be (1 << VA_SEGID_BLOCKXXX | 1 << VA_SEGID_BLOCKXXX ... )
*/
uint32_t min_segid_block_size_accepted : 8;
XinfengZhang marked this conversation as resolved.
Show resolved Hide resolved
/**
Expand Down Expand Up @@ -667,10 +669,7 @@ typedef struct _VAEncPictureParameterBufferAV1 {
} picture_flags;

/** \brief Block size for each Segment ID in Segment Map.
* 0: 16x16 block size, default value;
* 1: 32x32 block size;
* 2: 64x64 block size;
* 3: 8x8 block size.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this removed?
For the consisency to vp9, should this be VA_SEGID_BLOCKXXX?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated.

* should be \c VA_SEGID_BLOCK_XXXX;
*/
uint8_t seg_id_block_size;

Expand Down
42 changes: 39 additions & 3 deletions va/va_enc_vp9.h
Original file line number Diff line number Diff line change
Expand Up @@ -507,8 +507,16 @@ typedef struct _VAEncPictureParameterBufferVP9 {
*/
uint32_t skip_frames_size;

/** \brief Block size for each Segment ID in Segment Map.
* This specify the granularity of media driver of reading and processing the segment map.
* value should be VA_SEGID_BLOCK_XXX
*/
uint8_t seg_id_block_size;

uint8_t va_reserved8[3];

/** \brief Reserved bytes for future use, must be zero */
uint32_t va_reserved[VA_PADDING_MEDIUM];
uint32_t va_reserved[VA_PADDING_MEDIUM - 1];
} VAEncPictureParameterBufferVP9;


Expand Down Expand Up @@ -587,13 +595,41 @@ typedef struct _VAEncMiscParameterTypeVP9PerSegmantParam {
* \brief VP9 Block Segmentation ID Buffer
*
* The application provides a buffer of VAEncMacroblockMapBufferType containing
* the initial segmentation id for each 8x8 block, one byte each, in raster scan order.
* Rate control may reassign it. For example, a 640x480 video, the buffer has 4800 entries.
* the initial segmentation id for each block, block size is specified by seg_id_block_size
* in VAEncPictureParameterBufferVP9 , one byte each, in raster scan order.
* Rate control may reassign it. For example, a 640x480 video, seg_id_block_size is
* VA_SEGID_BLOCK_16X16 , the buffer has 1200 entries.
* The value of each entry should be in the range [0..7], inclusive.
* If segmentation is not enabled, the application does not need to provide it.
*/


/** \brief Attribute value for VAConfigAttribEncVP9. */
typedef union _VAConfigAttribValEncVP9 {
struct {
/**
* \brief segmentId block size accepted.
* This is the granularity of segmentation map.
* one bit represent one block size defined as VA_SEGID_BLOCKXXXX
* should be (1 << VA_SEGID_BLOCKXXX | 1 << VA_SEGID_BLOCKXXX ... )
*/
uint32_t seg_id_block_size : 8;

/**
* \brief Type of segment feature supported.
* (segment_feature_support & 0x01) == 1: SEG_LVL_ALT_Q is supported, 0: not.
* (segment_feature_support & 0x02) == 1: SEG_LVL_ALT_L is supported, 0: not.
* (segment_feature_support & 0x04) == 1: SEG_LVL_REF_FRAME is supported, 0: not.
* (segment_feature_support & 0x08) == 1: SEG_LVL_SKIP is supported, 0: not.
*/
uint32_t segment_feature_support : 4;

/** \brief Reserved bits for future, must be zero. */
uint32_t reserved : 20;
} bits;
uint32_t value;
} VAConfigAttribValEncVP9;

/**@}*/

#ifdef __cplusplus
Expand Down
1 change: 1 addition & 0 deletions va/va_str.c
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ const char *vaConfigAttribTypeStr(VAConfigAttribType configAttribType)
TOSTR(VAConfigAttribEncPerBlockControl);
TOSTR(VAConfigAttribEncMaxTileRows);
TOSTR(VAConfigAttribEncMaxTileCols);
TOSTR(VAConfigAttribEncVP9);
case VAConfigAttribTypeMax:
break;
}
Expand Down