⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 t264enc.c

📁 h.264编码库 (T264)..........................
💻 C
📖 第 1 页 / 共 5 页
字号:
        t->mb.vec_ref[IPM_LUMA - 8 + 0].part = 
        t->mb.vec_ref[IPM_LUMA - 8 + 1].part = 
        t->mb.vec_ref[IPM_LUMA - 8 + 2].part = 
        t->mb.vec_ref[IPM_LUMA - 8 + 3].part = t->rec->mb[top_xy].mb_part;

        t->mb.vec_ref[IPM_LUMA - 8 + 0].subpart = t->rec->mb[top_xy].submb_part[12];
        t->mb.vec_ref[IPM_LUMA - 8 + 1].subpart = t->rec->mb[top_xy].submb_part[13];
        t->mb.vec_ref[IPM_LUMA - 8 + 2].subpart = t->rec->mb[top_xy].submb_part[14];
        t->mb.vec_ref[IPM_LUMA - 8 + 3].subpart = t->rec->mb[top_xy].submb_part[15];

        t->mb.sad_ref[1] = t->rec->mb[top_xy].sad;

		//for CABAC, load mvd
		t->mb.mvd_ref[0][IPM_LUMA - 8 + 0][0] = t->rec->mb[top_xy].mvd[0][12][0];
		t->mb.mvd_ref[0][IPM_LUMA - 8 + 0][1] = t->rec->mb[top_xy].mvd[0][12][1];

		t->mb.mvd_ref[0][IPM_LUMA - 8 + 1][0] = t->rec->mb[top_xy].mvd[0][13][0];
		t->mb.mvd_ref[0][IPM_LUMA - 8 + 1][1] = t->rec->mb[top_xy].mvd[0][13][1];

		t->mb.mvd_ref[0][IPM_LUMA - 8 + 2][0] = t->rec->mb[top_xy].mvd[0][14][0];
		t->mb.mvd_ref[0][IPM_LUMA - 8 + 2][1] = t->rec->mb[top_xy].mvd[0][14][1];

		t->mb.mvd_ref[0][IPM_LUMA - 8 + 3][0] = t->rec->mb[top_xy].mvd[0][15][0];
		t->mb.mvd_ref[0][IPM_LUMA - 8 + 3][1] = t->rec->mb[top_xy].mvd[0][15][1];

		t->mb.mvd_ref[1][IPM_LUMA - 8 + 0][0] = t->rec->mb[top_xy].mvd[1][12][0];
		t->mb.mvd_ref[1][IPM_LUMA - 8 + 0][1] = t->rec->mb[top_xy].mvd[1][12][1];

		t->mb.mvd_ref[1][IPM_LUMA - 8 + 1][0] = t->rec->mb[top_xy].mvd[1][13][0];
		t->mb.mvd_ref[1][IPM_LUMA - 8 + 1][1] = t->rec->mb[top_xy].mvd[1][13][1];

		t->mb.mvd_ref[1][IPM_LUMA - 8 + 2][0] = t->rec->mb[top_xy].mvd[1][14][0];
		t->mb.mvd_ref[1][IPM_LUMA - 8 + 2][1] = t->rec->mb[top_xy].mvd[1][14][1];

		t->mb.mvd_ref[1][IPM_LUMA - 8 + 3][0] = t->rec->mb[top_xy].mvd[1][15][0];
		t->mb.mvd_ref[1][IPM_LUMA - 8 + 3][1] = t->rec->mb[top_xy].mvd[1][15][1];

        if (mb_x != t->mb_stride - 1)
        {
            int32_t righttop_xy = top_xy + 1;
            t->mb.vec_ref[IPM_LUMA - 8 + 4].vec[0]     = t->rec->mb[righttop_xy].vec[0][12];
            t->mb.vec_ref[IPM_LUMA - 8 + 4].vec[1]     = t->rec->mb[righttop_xy].vec[1][12];
            t->mb.vec_ref[IPM_LUMA - 8 + 4].part    = t->rec->mb[righttop_xy].mb_part;
            t->mb.vec_ref[IPM_LUMA - 8 + 4].subpart = t->rec->mb[righttop_xy].submb_part[12];
            t->mb.sad_ref[2] = t->rec->mb[righttop_xy].sad;
        }
        /* nnz layout:
          ? x x x x ? x x
          x         x
          x         x
          x         ? x x
          x         x
                    x
         */
        t->mb.nnz_ref[NNZ_LUMA - 8 + 0] = t->rec->mb[top_xy].nnz[12];
        t->mb.nnz_ref[NNZ_LUMA - 8 + 1] = t->rec->mb[top_xy].nnz[13];
        t->mb.nnz_ref[NNZ_LUMA - 8 + 2] = t->rec->mb[top_xy].nnz[14];
        t->mb.nnz_ref[NNZ_LUMA - 8 + 3] = t->rec->mb[top_xy].nnz[15];

        t->mb.nnz_ref[NNZ_CHROMA0 - 8 + 0] = t->rec->mb[top_xy].nnz[18];
        t->mb.nnz_ref[NNZ_CHROMA0 - 8 + 1] = t->rec->mb[top_xy].nnz[19];
        t->mb.nnz_ref[NNZ_CHROMA1 - 8 + 0] = t->rec->mb[top_xy].nnz[22];
        t->mb.nnz_ref[NNZ_CHROMA1 - 8 + 1] = t->rec->mb[top_xy].nnz[23];
    }
    else
    {
        /* load intra4x4 */
        t->mb.i4x4_pred_mode_ref[IPM_LUMA - 8 + 0] = 
        t->mb.i4x4_pred_mode_ref[IPM_LUMA - 8 + 1] = 
        t->mb.i4x4_pred_mode_ref[IPM_LUMA - 8 + 2] = 
        t->mb.i4x4_pred_mode_ref[IPM_LUMA - 8 + 3] = -1;

        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 8 + 0].vec[0]);
        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 8 + 1].vec[0]);
        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 8 + 2].vec[0]);
        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 8 + 3].vec[0]);
        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 8 + 0].vec[1]);
        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 8 + 1].vec[1]);
        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 8 + 2].vec[1]);
        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 8 + 3].vec[1]);

        t->mb.vec_ref[IPM_LUMA - 8 + 0].part = 
        t->mb.vec_ref[IPM_LUMA - 8 + 1].part = 
        t->mb.vec_ref[IPM_LUMA - 8 + 2].part = 
        t->mb.vec_ref[IPM_LUMA - 8 + 3].part = -1;

        t->mb.vec_ref[IPM_LUMA - 8 + 0].subpart = 
        t->mb.vec_ref[IPM_LUMA - 8 + 1].subpart = 
        t->mb.vec_ref[IPM_LUMA - 8 + 2].subpart = 
        t->mb.vec_ref[IPM_LUMA - 8 + 3].subpart = -1;

		//for CABAC, load mvd
		t->mb.mvd_ref[0][IPM_LUMA - 8 + 0][0] = 0;
		t->mb.mvd_ref[0][IPM_LUMA - 8 + 0][1] = 0;

		t->mb.mvd_ref[0][IPM_LUMA - 8 + 1][0] = 0;
		t->mb.mvd_ref[0][IPM_LUMA - 8 + 1][1] = 0;

		t->mb.mvd_ref[0][IPM_LUMA - 8 + 2][0] = 0;
		t->mb.mvd_ref[0][IPM_LUMA - 8 + 2][1] = 0;

		t->mb.mvd_ref[0][IPM_LUMA - 8 + 3][0] = 0;
		t->mb.mvd_ref[0][IPM_LUMA - 8 + 3][1] = 0;

		t->mb.mvd_ref[1][IPM_LUMA - 8 + 0][0] = 0;
		t->mb.mvd_ref[1][IPM_LUMA - 8 + 0][1] = 0;

		t->mb.mvd_ref[1][IPM_LUMA - 8 + 1][0] = 0;
		t->mb.mvd_ref[1][IPM_LUMA - 8 + 1][1] = 0;

		t->mb.mvd_ref[1][IPM_LUMA - 8 + 2][0] = 0;
		t->mb.mvd_ref[1][IPM_LUMA - 8 + 2][1] = 0;

		t->mb.mvd_ref[1][IPM_LUMA - 8 + 3][0] = 0;
		t->mb.mvd_ref[1][IPM_LUMA - 8 + 3][1] = 0;

        t->mb.nnz_ref[NNZ_LUMA - 8 + 0] =
        t->mb.nnz_ref[NNZ_LUMA - 8 + 1] =
        t->mb.nnz_ref[NNZ_LUMA - 8 + 2] =
        t->mb.nnz_ref[NNZ_LUMA - 8 + 3] = 0x80;

        t->mb.nnz_ref[NNZ_CHROMA0 - 8 + 0] =
        t->mb.nnz_ref[NNZ_CHROMA0 - 8 + 1] =
        t->mb.nnz_ref[NNZ_CHROMA1 - 8 + 0] =
        t->mb.nnz_ref[NNZ_CHROMA1 - 8 + 1] = 0x80;
    }

    if( mb_x > 0 )
    {
        int16_t left_xy  = t->mb.mb_xy - 1;

        /* load intra4x4 */
        t->mb.i4x4_pred_mode_ref[IPM_LUMA - 1 + 0] = t->rec->mb[left_xy].mode_i4x4[5];
        t->mb.i4x4_pred_mode_ref[IPM_LUMA - 1 + 8] = t->rec->mb[left_xy].mode_i4x4[7];
        t->mb.i4x4_pred_mode_ref[IPM_LUMA - 1 + 16] = t->rec->mb[left_xy].mode_i4x4[13];
        t->mb.i4x4_pred_mode_ref[IPM_LUMA - 1 + 24] = t->rec->mb[left_xy].mode_i4x4[15];

        t->mb.vec_ref[IPM_LUMA - 1 + 0].vec[0] = t->rec->mb[left_xy].vec[0][3];
        t->mb.vec_ref[IPM_LUMA - 1 + 8].vec[0] = t->rec->mb[left_xy].vec[0][7];
        t->mb.vec_ref[IPM_LUMA - 1 + 16].vec[0] = t->rec->mb[left_xy].vec[0][11];
        t->mb.vec_ref[IPM_LUMA - 1 + 24].vec[0] = t->rec->mb[left_xy].vec[0][15];
        t->mb.vec_ref[IPM_LUMA - 1 + 0].vec[1] = t->rec->mb[left_xy].vec[1][3];
        t->mb.vec_ref[IPM_LUMA - 1 + 8].vec[1] = t->rec->mb[left_xy].vec[1][7];
        t->mb.vec_ref[IPM_LUMA - 1 + 16].vec[1] = t->rec->mb[left_xy].vec[1][11];
        t->mb.vec_ref[IPM_LUMA - 1 + 24].vec[1] = t->rec->mb[left_xy].vec[1][15];

        t->mb.vec_ref[IPM_LUMA - 1 + 0].part = 
        t->mb.vec_ref[IPM_LUMA - 1 + 8].part = 
        t->mb.vec_ref[IPM_LUMA - 1 + 16].part =
        t->mb.vec_ref[IPM_LUMA - 1 + 24].part = t->rec->mb[left_xy].mb_part;

        t->mb.vec_ref[IPM_LUMA - 8 + 0].subpart = t->rec->mb[left_xy].submb_part[3];
        t->mb.vec_ref[IPM_LUMA - 8 + 8].subpart = t->rec->mb[left_xy].submb_part[7];
        t->mb.vec_ref[IPM_LUMA - 8 + 16].subpart = t->rec->mb[left_xy].submb_part[11];
        t->mb.vec_ref[IPM_LUMA - 8 + 24].subpart = t->rec->mb[left_xy].submb_part[15];

        t->mb.sad_ref[0] = t->rec->mb[left_xy].sad;

		//for CABAC, load mvd
		t->mb.mvd_ref[0][IPM_LUMA - 1 + 0][0] = t->rec->mb[left_xy].mvd[0][3][0];
		t->mb.mvd_ref[0][IPM_LUMA - 1 + 0][1] = t->rec->mb[left_xy].mvd[0][3][1];

		t->mb.mvd_ref[0][IPM_LUMA - 1 + 8][0] = t->rec->mb[left_xy].mvd[0][7][0];
		t->mb.mvd_ref[0][IPM_LUMA - 1 + 8][1] = t->rec->mb[left_xy].mvd[0][7][1];
		
		t->mb.mvd_ref[0][IPM_LUMA - 1 + 16][0] = t->rec->mb[left_xy].mvd[0][11][0];
		t->mb.mvd_ref[0][IPM_LUMA - 1 + 16][1] = t->rec->mb[left_xy].mvd[0][11][1];

		t->mb.mvd_ref[0][IPM_LUMA - 1 + 24][0] = t->rec->mb[left_xy].mvd[0][15][0];
		t->mb.mvd_ref[0][IPM_LUMA - 1 + 24][1] = t->rec->mb[left_xy].mvd[0][15][1];

		t->mb.mvd_ref[1][IPM_LUMA - 1 + 0][0] = t->rec->mb[left_xy].mvd[1][3][0];
		t->mb.mvd_ref[1][IPM_LUMA - 1 + 0][1] = t->rec->mb[left_xy].mvd[1][3][1];

		t->mb.mvd_ref[1][IPM_LUMA - 1 + 8][0] = t->rec->mb[left_xy].mvd[1][7][0];
		t->mb.mvd_ref[1][IPM_LUMA - 1 + 8][1] = t->rec->mb[left_xy].mvd[1][7][1];

		t->mb.mvd_ref[1][IPM_LUMA - 1 + 16][0] = t->rec->mb[left_xy].mvd[1][11][0];
		t->mb.mvd_ref[1][IPM_LUMA - 1 + 16][1] = t->rec->mb[left_xy].mvd[1][11][1];

		t->mb.mvd_ref[1][IPM_LUMA - 1 + 24][0] = t->rec->mb[left_xy].mvd[1][15][0];
		t->mb.mvd_ref[1][IPM_LUMA - 1 + 24][1] = t->rec->mb[left_xy].mvd[1][15][1];


        /* load non_zero_count */
        t->mb.nnz_ref[NNZ_LUMA - 1 + 0] = t->rec->mb[left_xy].nnz[3];
        t->mb.nnz_ref[NNZ_LUMA - 1 + 8] = t->rec->mb[left_xy].nnz[7];
        t->mb.nnz_ref[NNZ_LUMA - 1 + 16] = t->rec->mb[left_xy].nnz[11];
        t->mb.nnz_ref[NNZ_LUMA - 1 + 24] = t->rec->mb[left_xy].nnz[15];

        t->mb.nnz_ref[NNZ_CHROMA0 - 1 + 0] = t->rec->mb[left_xy].nnz[17];
        t->mb.nnz_ref[NNZ_CHROMA0 - 1 + 8] = t->rec->mb[left_xy].nnz[19];
        t->mb.nnz_ref[NNZ_CHROMA1 - 1 + 0] = t->rec->mb[left_xy].nnz[21];
        t->mb.nnz_ref[NNZ_CHROMA1 - 1 + 8] = t->rec->mb[left_xy].nnz[23];
    }
    else
    {
        t->mb.i4x4_pred_mode_ref[IPM_LUMA - 1 + 0]  = 
        t->mb.i4x4_pred_mode_ref[IPM_LUMA - 1 + 8]  = 
        t->mb.i4x4_pred_mode_ref[IPM_LUMA - 1 + 16] =
        t->mb.i4x4_pred_mode_ref[IPM_LUMA - 1 + 24] = -1;

        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 1 + 0].vec[0]);
        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 1 + 8].vec[0]);
        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 1 + 16].vec[0]);
        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 1 + 24].vec[0]);
        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 1 + 0].vec[1]);
        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 1 + 8].vec[1]);
        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 1 + 16].vec[1]);
        INITINVALIDVEC(t->mb.vec_ref[IPM_LUMA - 1 + 24].vec[1]);

        t->mb.vec_ref[IPM_LUMA - 1 + 0].part  = 
        t->mb.vec_ref[IPM_LUMA - 1 + 8].part  = 
        t->mb.vec_ref[IPM_LUMA - 1 + 16].part =
        t->mb.vec_ref[IPM_LUMA - 1 + 24].part = -1;

        t->mb.vec_ref[IPM_LUMA - 1 + 0].subpart  = 
        t->mb.vec_ref[IPM_LUMA - 1 + 8].subpart  = 
        t->mb.vec_ref[IPM_LUMA - 1 + 16].subpart =
        t->mb.vec_ref[IPM_LUMA - 1 + 24].subpart = -1;

		//for CABAC, load mvd
		t->mb.mvd_ref[0][IPM_LUMA - 1 + 0][0] = 0;
		t->mb.mvd_ref[0][IPM_LUMA - 1 + 0][1] = 0;

		t->mb.mvd_ref[0][IPM_LUMA - 1 + 8][0] = 0;
		t->mb.mvd_ref[0][IPM_LUMA - 1 + 8][1] = 0;

		t->mb.mvd_ref[0][IPM_LUMA - 1 + 16][0] = 0;
		t->mb.mvd_ref[0][IPM_LUMA - 1 + 16][1] = 0;

		t->mb.mvd_ref[0][IPM_LUMA - 1 + 24][0] = 0;
		t->mb.mvd_ref[0][IPM_LUMA - 1 + 24][1] = 0;

		t->mb.mvd_ref[1][IPM_LUMA - 1 + 0][0] = 0;
		t->mb.mvd_ref[1][IPM_LUMA - 1 + 0][1] = 0;

		t->mb.mvd_ref[1][IPM_LUMA - 1 + 8][0] = 0;
		t->mb.mvd_ref[1][IPM_LUMA - 1 + 8][1] = 0;

		t->mb.mvd_ref[1][IPM_LUMA - 1 + 16][0] = 0;
		t->mb.mvd_ref[1][IPM_LUMA - 1 + 16][1] = 0;

		t->mb.mvd_ref[1][IPM_LUMA - 1 + 24][0] = 0;
		t->mb.mvd_ref[1][IPM_LUMA - 1 + 24][1] = 0;

        t->mb.nnz_ref[NNZ_LUMA - 1 + 0]  =
        t->mb.nnz_ref[NNZ_LUMA - 1 + 8]  =
        t->mb.nnz_ref[NNZ_LUMA - 1 + 16] =
        t->mb.nnz_ref[NNZ_LUMA - 1 + 24] = 0x80;

        t->mb.nnz_ref[NNZ_CHROMA0 - 1 + 0] =
        t->mb.nnz_ref[NNZ_CHROMA0 - 1 + 8] =
        t->mb.nnz_ref[NNZ_CHROMA1 - 1 + 0] =
        t->mb.nnz_ref[NNZ_CHROMA1 - 1 + 8] = 0x80;
    }
    if (mb_x > 0 && mb_y > 0)
    {
        int32_t lefttop_xy = t->mb.mb_xy - t->mb_stride - 1;
        t->mb.vec_ref[0].vec[0] = t->rec->mb[lefttop_xy].vec[0][15];
        t->mb.vec_ref[0].vec[1] = t->rec->mb[lefttop_xy].vec[1][15];
        t->mb.vec_ref[0].subpart = t->rec->mb[lefttop_xy].submb_part[15];
        t->mb.vec_ref[0].part = t->rec->mb[lefttop_xy].mb_part;
    }
	//for CABAC
	t->mb.mb_mode_uv = Intra_8x8_DC;
#undef INITINVALIDVEC
}

void
T264_mb_save_context(T264_t* t)
{
    memcpy(t->mb.context, &t->mb, sizeof(*t->mb.context));
}

static void
T264_reset_ref(T264_t* t)
{
    int32_t i;

    for(i = 1 ; i < MAX_REFFRAMES ; i ++)
    {
        t->refn[i].poc = -1;
    }
    t->rec = &t->refn[0];
    t->refn[0].poc = 0;
}

static void
T264_load_ref(T264_t* t)
{
    int32_t i;

    t->refl0_num = 0;
    t->refl1_num = 0;
    if (t->slice_type == SLICE_P)
    {
        for(i = 0 ; i < t->param.ref_num ; i ++)
        {
            if (t->refn[i + 1].poc >= 0)
            {
                t->ref[0][t->refl0_num ++] = &t->refn[i + 1];
            }
        }
    }
    else if (t->slice_type == SLICE_B)
    {
        for(i = 0 ; i < t->param.ref_num; i ++)
        {
            if (t->refn[i + 1].poc < t->cur.poc)
            {
                if (t->refn[i + 1].poc >= 0)
                    t->ref[0][t->refl0_num ++] = &t->refn[i + 1];
            }
            else
            {
                // yes, t->refn[i].poc already > 0
                t->ref[1][t->refl1_num ++] = &t->refn[i + 1];
            }
        }
    }
}

void
T264_extend_border(T264_t* t, T264_frame_t* f)
{
    int32_t i;
    uint8_t* py0;
    uint8_t* pu;
    uint8_t* pv;
    uint8_t* tmpy0;
    uint8_t* tmpu;
    uint8_t* tmpv;

    // top, top-left, top-right
    py0 = f->Y[0] - t->edged_stride;
    pu = f->U - t->edged_stride_uv;
    pv = f->V - t->edged_stride_uv;
    for(i = 0 ; i < (EDGED_HEIGHT >> 1) ; i ++)
    {
        // y
        memcpy(py0, f->Y[0], t->stride);
        memset(py0 - EDGED_WIDTH, f->Y[0][0], EDGED_WIDTH);
        memset(py0 + t->stride, f->Y[0][t->stride - 1], EDGED_WIDTH);
        py0 -= t->edged_stride;

        memcpy(py0, f->Y[0], t->stride);
        memset(py0 - EDGED_WIDTH, f->Y[0][0], EDGED_WIDTH);
        memset(py0 + t->stride, f->Y[0][t->stride - 1], EDGED_WIDTH);
        py0 -= t->edged_stride;

        // u
        memcpy(pu, f->U, t->stride_uv);
        memset(pu - (EDGED_WIDTH >> 1), f->U[0], EDGED_WIDTH >> 1);
        memset(pu + t->stride_uv, f->U[t->stride_uv - 1], EDGED_WIDTH >> 1);
        pu -= t->edged_stride_uv;

        // V
        memcpy(pv, f->V, t->stride_uv);
        memset(pv - (EDGED_WIDTH >> 1), f->V[0], EDGED_WIDTH >> 1);
        memset(pv + t->stride_uv, f->V[t->stride_uv - 1], EDGED_WIDTH >> 1);
        pv -= t->edged_stride_uv;
    }

    // left & right
    py0 = f->Y[0] - EDGED_WIDTH;
    pu = f->U - (EDGED_WIDTH >> 1);
    pv = f->V - (EDGED_WIDTH >> 1);
    for(i = 0 ; i < (t->height >> 1) ; i ++)
    {
        // left
        memset(py0, py0[EDGED_WIDTH], EDGED_WIDTH);
        // right
        memset(&py0[t->stride + EDGED_WIDTH], py0[t->stride + EDGED_WIDTH - 1], EDGED_WIDTH);
        py0 += t->edged_stride;

        memset(py0, py0[EDGED_WIDTH], EDGED_WIDTH);
        memset(&py0[t->stride + EDGED_WIDTH], py0[t->stride + EDGED_WIDTH - 1], EDGED_WIDTH);
        py0 += t->edged_stride;

        // u
        memset(pu, pu[EDGED_WIDTH >> 1], EDGED_WIDTH >> 1);
        memset(&pu[t->stride_uv + (EDGED_WIDTH >> 1)], pu[t->stride_uv + (EDGED_WIDTH >> 1) - 1], EDGED_WIDTH >> 1);
        pu += t->edged_stride_uv;

        // v
        memset(pv, pv[EDGED_WIDTH >> 1], EDGED_WIDTH >> 1);
        memset(&pv[t->stride_uv + (EDGED_WIDTH >> 1)], pv[t->stride_uv + (EDGED_WIDTH >> 1) - 1], EDGED_WIDTH >> 1);
        pv += t->edged_stride_uv;
    }

    // bottom, left-bottom,right-bottom
    py0 = f->Y[0] + t->edged_stride * t->height;
    tmpy0 = f->Y[0] + t->edged_stride * (t->height - 1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -