2020-10-13 4431 0
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;