x264阅读笔记

    技术2026-01-12  0

    1. *x264_frame_new( x264_t *h )的理解

    进行framer_t结构体中数据元素的空间分配

    首先是frame->buffer,frame->plane, frame->filtered,具体如下:

     

    接下来是frame->buffer_lowres,frame->lowres,frame->lowres_mvs,frame->lowres_mv_costs

     

    下面继续进行元素空间的分配

    CHECKED_MALLOC(frame->mb_type, i_mb_count * sizeof(int8_t));//为每个MB的类型分配空间

    CHECKED_MALLOC(frame->mv[0], 2*16 * i_mb_count * sizeof(int16_t) );//为每个MB分配16个MV空间,满足使用4x4宏块进行帧间预测的需要

    CHECKED_MALLOC(frame->ref[0], 4 * i_mb_count * sizeof(int8_t) );//为参考帧的每个MB分配4个字节空间??????

    CHECKED_MALLOC( frame->i_intra_cost, i_mb_count * sizeof(uint16_t) );//为每个MB分配帧内预测的cost

        if( h->param.i_bframe )//如果使用B帧,分配相应的mv/ref存储空间

        {

            CHECKED_MALLOC( frame->mv[1], 2*16 * i_mb_count * sizeof(int16_t) );

            CHECKED_MALLOC( frame->ref[1], 4 * i_mb_count * sizeof(int8_t) );

        }

        else

        {

            frame->mv[1]  = NULL;

            frame->ref[1] = NULL;

        }

    CHECKED_MALLOC( frame->i_row_bits, i_lines/16 * sizeof(int) );//为每行MB分配一个INT空间,存储该行MB一共多少个比特

    CHECKED_MALLOC( frame->i_row_qp, i_lines/16 * sizeof(int) );//为每行MB分配一个INT空间,存储该行的qp

        for( i = 0; i < h->param.i_bframe + 2; i++ )

            for( j = 0; j < h->param.i_bframe + 2; j++ )

                CHECKED_MALLOC( frame->i_row_satds[i][j], i_lines/16 * sizeof(int) );//为每行MB分配一个INT空间,存储该行的satds,一共4组??【可能是对应4种不同的SATD的信息】

    最新回复(0)