x264
fantasy_arch
这个作者很懒,什么都没留下…
展开
-
ffmpeg解码h264宏块函数ff_h264_decode_mb_cabac注释
cabac h264 解码原创 2023-02-09 12:14:43 · 761 阅读 · 0 评论 -
X264 量化分析
x264 量化 simd汇编原创 2022-09-18 17:32:58 · 304 阅读 · 0 评论 -
x264 亮度块dct变换
4x4dct simd 汇编 x264原创 2022-09-15 17:15:57 · 320 阅读 · 0 评论 -
x264 反哈德玛变换
x264 反哈德玛变换 汇编原创 2022-09-15 11:44:59 · 253 阅读 · 0 评论 -
x264中哈德玛变换simd汇编实现
x264 哈德玛变换 汇编 simd原创 2022-09-14 17:45:45 · 844 阅读 · 0 评论 -
x264中的哈德玛变换
x264 哈德玛变换原创 2022-09-14 14:58:38 · 248 阅读 · 0 评论 -
x264中的nr实现
x264 汇编原创 2022-09-13 16:53:13 · 314 阅读 · 0 评论 -
x264中的nr参数作用
x264 noise reduction原创 2022-09-01 19:12:20 · 460 阅读 · 0 评论 -
x264 宏块树
mbtree 传递残差原创 2022-08-29 18:30:03 · 309 阅读 · 0 评论 -
x264编码器中的多线程等待
x264 fpp 线程同步原创 2022-08-23 09:57:10 · 297 阅读 · 0 评论 -
x264 crf-max 的作用
crf max x264原创 2022-08-05 21:35:10 · 138 阅读 · 0 评论 -
vbv参数buffer init
x264 后向vbv分析原创 2022-06-06 16:30:25 · 697 阅读 · 1 评论 -
crf码控中,crf值是如何工作的?
1 这里先是设置crf的地方2 计算得到rate_factor_constant3 使用rate_factor_constant4 具体是如何使用的?clip_qscale这里相当于一个水池。以目前的速度帧的速度往外放水,以maxrate和bufsize大小为速度往池子加水。如果注水量大于出水量即实际编码码率低于目标码率,那么水池的水会持续上涨,直至向上溢出(称之为VBV上溢出overflow); 如果注水量小于出水量即实际编码码率高于目标码率,那么水池的水会持续下降,直..原创 2022-05-16 23:49:39 · 394 阅读 · 0 评论 -
x264 pass 2缓存文件的使用
e += sscanf( p, " in:%*d out:%*d type:%c dur:%"SCNd64" cpbdur:%"SCNd64" q:%f aq:%f tex:%d mv:%d misc:%d imb:%d pmb:%d smb:%d d:%c",&pict_type, &rce->i_duration, &rce->i_cpb_duration, &qp_rc, &qp_aq, &rce-&g...原创 2022-04-28 10:39:30 · 266 阅读 · 0 评论 -
x264 2pass编码说明
1 操作方法./x264 tt.yuv --input-res 576x1024 --bitrate1000 --pass 1 --vbv-adapt 1 -o tt_out.264./x264 tt.yuv --input-res 576x1024 --bitrate1000 --pass 2--vbv-adapt 1 -o tt_out.264in:40 out:37 type:P dur:2 cpbdur:2 q:23.68 aq:24.08 tex:138059 mv:1887...原创 2022-04-27 10:49:45 · 402 阅读 · 0 评论 -
h264 reorder list
h264编码的时候为什么要reorder,因为有B帧的时候,参考帧的poc不是按照顺序排列的,如果按照默认的shift操作,可能会把最近的参考帧删除了。例如下面帧序列。视频帧8的参考帧是024,但是reference_list里面存储的时候是按编码顺序存储的,也就是042。这样一来,如果顺序淘汰的话,就会先把0淘汰,然后是4。实际期望是2,因为poc距离更近的优先参考。所以在编码8这个P帧的时候,就会有reorderlist,重新排列参考帧。reference_build_list原创 2022-01-06 11:03:44 · 645 阅读 · 2 评论 -
x264 abr码控
之前一直看代码分析,x264 crf + vbv码控,这次我们一起看一下abr码控,abr码控的公式是参考论文实现的,complex sum有一个衰减系数,固定是0.5,接下来我们对照一些代码看看。代码刚好对应上面的公式,然后看一下rate_factor的计算部分,crf实际上就是constant rate factor。 abr就是变化的rate factor。根据blur_complex 计算得到一个初始的qscale, qscale = cplx^1-qcomp..原创 2021-11-13 10:59:26 · 447 阅读 · 0 评论 -
x264源码分析-cabac浅析(二)
继续看B宏块头信息,和P宏块不同的是,B宏块需要存两个参考帧的idx和mvd信息。外层调用的地方,除了mb head之外,还有qp值,dct size,残差要写cabac。残差有DC系数和AC系数之分。原创 2021-08-18 00:20:19 · 382 阅读 · 0 评论 -
x264 源码分析 -cabac浅析(一)
x264代码中的cabac和之前理解的算数编码有点不一样,x264中编码的时候,先需要将数据二值化,然后建概率模型。逐个bit写入cabac cache,然后不断更新码表,因为二值化过,所以码表只有两个值0/1。同样解码的时候,逆向来的,解码一个bit调整一次码表。这个流程目前没有看明白,先看看cabac存储了宏块的哪些字段cabac_mb_type_intra //帧内块type,另外还有个预测模式cabac_field_decoding_flag //场编码标记cabac_intra原创 2021-08-17 20:59:55 · 989 阅读 · 0 评论 -
h264长期参考帧语法
h264长期参考帧管理,在x264编码器中并没有详细实现,因为这一块是用户自定义的行为。L0表示向前参考,当没有B帧的时候,L0是一个滑动窗口,永远保存最近的refs帧个数。reordering_of_pix_nums_idc == 0表示前向的参考帧 diff + 1, ==1 表示后向的。前向的时候,为啥有负值?因为帧序号有可能因为存储的bits不够,回绕了。如果 == 2,表示这里存放的是长期参考帧的绝对值。 这里写这个语法的意思是,当前帧参考的哪些帧,如果这一帧解码完成之后,上面..原创 2021-07-16 11:01:29 · 1294 阅读 · 1 评论 -
x264源码分析-分辨率16对齐padding
h264宏块大小是16个像素, x264_macroblock_analyse分析是以16像素为单位来的,不足的话需要padding一下x264_encoder_encode()->x264_frame_expand_border_mod16场编码有点不同就不细分析了原创 2021-07-13 15:27:58 · 412 阅读 · 0 评论 -
x264源码分析--mmco初步理解
h264的参考帧管理,默认是滑动窗口的,也就是最多只缓存refs个数的参考帧,多了就扔掉。这样一来,视频帧就无法跳跃式的参考。于是有了MMCO,它直接指定当前帧和哪个帧有参考关系,写在slice head里面,这样可以灵活的决定要不要删除参考帧,这里就是编码的时候,参考帧管理的方式。还有个变量,这个remove from end 没太理解...原创 2021-07-10 10:54:18 · 1218 阅读 · 0 评论 -
x264源码分析-b_cpu_independent
b_cpu_independent 参数的意思,从代码看应该是,只使用cpu编码,这个参数影响的地方,就是计算宏块的satd的时候,用simd一次实现9种预测模式。如果没有设置,那就先用cpu计算三种,dc,水平和垂直。从代码看,b_cpu_independent省去也无关紧要...原创 2021-07-10 08:35:48 · 156 阅读 · 0 评论 -
x264源码分析--最高强度rdo
subme参数-m, --subme <integer> Subpixel motion estimation and mode decision [7]- 0: fullpel only (not recommended)- 1: SAD mode decision, one qpel iteration- 2: SATD mode decision- 3-5: Progressively more qpel- 6: RD mode decision for I/P-frames原创 2021-07-06 12:14:35 · 299 阅读 · 0 评论 -
x264源码分析-参考帧列表管理
之前写过一次参考帧列表管理,这里再次复习下。这里mmco的参考管理还没搞懂,后面再分析。下面是x264帧队列管理的代码分析x264有一点,我无法理解它的就是,队列都用数组实现,而且每次弹出/插入一个,就不断的移动数组的元素。...原创 2021-07-01 19:44:48 · 324 阅读 · 1 评论 -
x264源码分析-帧间预测
帧间预测的方式和帧内相似,不同的是帧间有运动估计,运动补偿。 先做模式预测,然后编码,然后解码重建,得到fdec块,然后遍历把fenc - fdec算哈德曼变化,rdo选择最小的值,从而重新算一下cost。不同的是帧间预测没有rd_cost_refine, 因为太复杂了。 太耗时了。下面这段代码一般不会进,先提先跳过。if (HAVE_INTERLACED && !MB_INTERLACED && h->mb.i_mb_y * 16 >= h->原创 2021-06-25 18:02:13 · 470 阅读 · 2 评论 -
x264 帧内rdo的过程
宏块预测函数,x264_macroblock_analyse帧内预测代码部分:mb_原创 2021-06-15 18:57:22 · 430 阅读 · 2 评论 -
x264源码分析x264_macroblock_cache_intra8x8_pred
x264_macroblock_cache_intra8x8_pred调用的是一个通用的函数,用于缓存数组的值。原创 2021-06-15 17:37:33 · 240 阅读 · 0 评论 -
x264帧内预测,色度预测
x264 帧内色度预测代码和亮度差不太多。也是先判断,是否有连续的模式可以一起计算,然后循环选择一个cost最小的模式。色度的uv分量的模式是一样的。原创 2021-06-15 15:22:40 · 182 阅读 · 0 评论 -
x264的多线程编码
x264支持fpp编码。 帧与帧之间可以以行为单位并行。但是也需要控制好参考关系。 h264不支持wpp, 因为h264的cabac是以行为单位的。所以必须要等待参考行编码完,然后重建后才能编码当前块。原创 2021-06-12 10:27:56 · 823 阅读 · 1 评论 -
x264源码分析x264_macroblock_analyse(一)
首先这个函数非常复杂,比较长,因此我们分几次讲解。先讲一下我理解的intra预测这部分。intra分为san zho原创 2021-06-10 14:16:29 · 367 阅读 · 0 评论 -
x264 trellis B帧决策
int best_path_index = num_frames % (X264_BFRAME_MAX+1);/* Perform the frametype analysis. */for( int j = 2; j <= num_frames; j++ ) //1帧,没有路径, 从第二帧位置开始往后搜索, minigop前后一样一个B帧?slicetype_path( h, &a, frames, j, best_paths );/* Load the resu..原创 2021-06-07 18:17:26 · 459 阅读 · 0 评论 -
x264中的熵编码 cavlc
cavlc是以字段为单位来写数据的。代码位于cavlc.c中主要函数x264_macroblock_write_cavlc{cavlc_mb_header_i//包含预测模式cavlc_mb_header_p//包含MVD,cavlc_mb_header_b//包含MVDcavlc_qp_delta//qp值x264_cavlc_block_residual //残差}cavlc_mb_header_i 写了哪些信息?I 块没有MVD,只有intra预测模式sta原创 2020-12-05 10:52:23 · 323 阅读 · 0 评论 -
x264帧内预测-mb_analyse_intra
static void mb_analyse_intra( x264_t *h, x264_mb_analysis_t *a, int i_satd_inter )//大致分为几个阶段predict_16x16mbcmp 比较残差predict_8x8mbcmp 比较残差predict_4x4mbcmp 比较残差{const int8_t *predict_mode = predict_16x16_mode_available( h->mb.i_neighbour_原创 2020-11-28 10:52:57 · 311 阅读 · 0 评论