typedef
struct
x264_image_properties_t
{
/* All arrays of data here are ordered as follows:
* each array contains one offset per macroblock, in raster scan order. In interlaced
* mode, top-field MBs and bottom-field MBs are interleaved at the row level.
* Macroblocks are 16x16 blocks of pixels (with respect to the luma plane). For the
* purposes of calculating the number of macroblocks, width and height are rounded up to
* the nearest 16. If in interlaced mode, height is rounded up to the nearest 32 instead. */
这里的所有数据数组排序如下:
每个数组包含每个宏块的一个偏移量,按光栅扫描顺序排列。
在交错模式下,在行级别上交错顶场MBS和底场MBS。
宏块是16x16块像素(相对于Luma平面)。
为了计算宏块的数量,宽度和高度被舍入到最近的16。
如果在交错模式下,高度被舍入到最近的32。
/* In: an array of quantizer offsets to be applied to this image during encoding.
* These are added on top of the decisions made by x264.
* Offsets can be fractional; they are added before QPs are rounded to integer.
* Adaptive quantization must be enabled to use this feature. Behavior if quant
* offsets differ between encoding passes is undefined. */
输入:在编码过程中要应用于此图像的量化器偏移量数组。
这些都是在x264所做决定的基础上添加的。
偏移量可以是分数,它们是在QPS四舍五入到整数之前添加的。
必须启用自适应量化来使用此特性。 如果编码传递之间的量化偏移不同,则行为是未定义的。
float
*quant_offsets;
/* In: optional callback to free quant_offsets when used.
* Useful if one wants to use a different quant_offset array for each frame. */
输入:可选的回调用于释放 quant_offsets。
如果您想为每个帧使用不同的quant_offset数组,则非常有用。
void
(*quant_offsets_free)(
void
* );
/* In: optional array of flags for each macroblock.
* Allows specifying additional information for the encoder such as which macroblocks
* remain unchanged. Usable flags are listed below.
* x264_param_t.analyse.b_mb_info must be set to use this, since x264 needs to track
* extra data internally to make full use of this information.
*
* Out: if b_mb_info_update is set, x264 will update this array as a result of encoding.
*
* For "MBINFO_CONSTANT", it will remove this flag on any macroblock whose decoded
* pixels have changed. This can be useful for e.g. noting which areas of the
* frame need to actually be blitted. Note: this intentionally ignores the effects
* of deblocking for the current frame, which should be fine unless one needs exact
* pixel-perfect accuracy.
*
* Results for MBINFO_CONSTANT are currently only set for P-frames, and are not
* guaranteed to enumerate all blocks which haven't changed. (There may be false
* negatives, but no false positives.)
*/
输入:为每个宏块可选的标志数组。
允许为编码器指定其他信息,例如哪些宏块保持不变。 下面列出了可用的标志。
x264_param_t.analyse.b_mb_info必须设置为使用此功能,因为x264需要在内部跟踪额外的数据,以充分利用这些信息。
输出:如果设置了b_mb_info_update,x264将由于编码而更新此数组。
对于“MBINFO_CONSTANT”,它将在任何解码像素已更改的宏块上删除此标志。 这可能对例如有用。 注意框架的哪些区域实际上需要被模糊。 注意:这故意忽略了当前帧的去阻塞效果,这应该是好的,除非一个人需要精确的像素完美的精度。
MBINFO_CONSTANT的结果目前只为P帧设置,不能保证枚举所有未更改的块。 (可能有假阴性,但没有假阳性。 )
uint8_t *mb_info;
/* In: optional callback to free mb_info when used. */
输入:可选的回调用于释放 mb_info。
void
(*mb_info_free)(
void
* );
/* The macroblock is constant and remains unchanged from the previous frame. */
宏块是恒定的,与前一个帧保持不变。
#define X264_MBINFO_CONSTANT (1U<<0)
/* More flags may be added in the future. */
未来可能会增加更多的标记。
/* Out: SSIM of the the frame luma (if x264_param_t.b_ssim is set) */
double
f_ssim;
/* Out: Average PSNR of the frame (if x264_param_t.b_psnr is set) */
double
f_psnr_avg;
/* Out: PSNR of Y, U, and V (if x264_param_t.b_psnr is set) */
double
f_psnr[3];
/* Out: Average effective CRF of the encoded frame */
输出:编码帧的平均有效CRF
double
f_crf_avg;
} x264_image_properties_t;