x264源码分析--bframes、b-bias参数

参数含义:bframes
最大连续b帧个数

b_bias:B帧插入强度,越大,b帧越多,


参数解析:
OPT("b-bias")
        p->i_bframe_bias = atoi(value);//B帧强度
        OPT("bframes")
            p->i_bframe = atoi(value);

代码逻辑:
i_score = fenc->i_cost_est[b-p0][p1-b];
        if( b != p1 )
            i_score = (uint64_t)i_score * 100 / (120 + h->param.i_bframe_bias);//如果是B帧,相当于cost要打折




if( pict_type != 'b' )
                rce->kept_as_ref = 1;
            switch( pict_type )
            {
                case 'I':
                    rce->frame_type = X264_TYPE_IDR;
                    rce->pict_type  = SLICE_TYPE_I;
                    break;
                case 'i':
                    rce->frame_type = X264_TYPE_I;
                    rce->pict_type  = SLICE_TYPE_I;
                    break;
                case 'P':
                    rce->frame_type = X264_TYPE_P;
                    rce->pict_type  = SLICE_TYPE_P;
                    break;
                case 'B':
                    rce->frame_type = X264_TYPE_BREF;
                    rce->pict_type  = SLICE_TYPE_B;
                    break;
                case 'b':
                    rce->frame_type = X264_TYPE_B;
                    rce->pict_type  = SLICE_TYPE_B;
                    break;
                default:  e = -1; break;
            }
x264_slicetype_path()
-->x264_slicetype_path_cost()

-->x264_slicetype_frame_cost()设置帧类型,每一帧的类型用一个字幕代替如P,I,B


b-pyramid

默认:normal
说明:允许B帧作为参照帧。如果关闭,那么只有I帧和P帧才能作为参照帧。可以作为参照帧的B帧的量化参数会介于P帧和普通B帧之间。只在–b-frames设置大于等于2时此选项才生效。如果是在为蓝光光盘编码,请使用none或者strict。
none —— 不允许B帧作为参照帧;
strict —— 一个图像组内只允许一个B帧参照帧,这是蓝光编码强制要求的标准;
normal —— 任意使用B帧参照帧;



你可能感兴趣的:(音视频)