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

📄 dec_cavlc.c

📁 T264是中国的视频编码自由组织合力开发的264编解码程序
💻 C
📖 第 1 页 / 共 5 页
字号:
                t->mb.vec[0][luma_index[8]].refno = 0;
                t->mb.vec[0][luma_index[12]].refno = 0;
            }
            for(i = 0 ; i < 4 ; i ++)
            {
                switch(t->mb.submb_part[luma_index[4 * i]]) 
                {
                case 0: /* P_L0_8x8 */
                    t->mb.submb_part[luma_index[4 * i]] = MB_8x8;
                    vec = t->mb.vec[0][luma_index[4 * i]];
                    T264_predict_mv(t, 0, luma_index[4 * i], 2, &vec);
                    t->mb.vec[0][luma_index[4 * i]].x = eg_read_se(t->bs) + vec.x;
                    t->mb.vec[0][luma_index[4 * i]].y = eg_read_se(t->bs) + vec.y;

                    t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 1] = 
                    t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 4] = 
                    t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 5] = t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 0];
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 0].vec[0] =
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 1].vec[0] =
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 8].vec[0] =
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 9].vec[0] = t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 0];
                    break;
                case MB_8x4 - 4:    /* P_L0_8x4 */
                    t->mb.submb_part[luma_index[4 * i]] = MB_8x4;
                    vec.refno = t->mb.vec[0][luma_index[4 * i]].refno;
                    T264_predict_mv(t, 0, luma_index[4 * i], 2, &vec);
                    t->mb.vec[0][luma_index[4 * i]].x = eg_read_se(t->bs) + vec.x;
                    t->mb.vec[0][luma_index[4 * i]].y = eg_read_se(t->bs) + vec.y;
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 0].vec[0] =
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 1].vec[0] =
                    t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 1] = t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 0];

                    T264_predict_mv(t, 0, luma_index[4 * i + 2], 2, &vec);
                    t->mb.vec[0][luma_index[4 * i + 2]].x = eg_read_se(t->bs) + vec.x;
                    t->mb.vec[0][luma_index[4 * i + 2]].y = eg_read_se(t->bs) + vec.y;
                    t->mb.vec[0][luma_index[4 * i + 2]].refno = vec.refno;
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 8].vec[0] =
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 9].vec[0] = 
                    t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 5] = t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 4];
                    break;
                case MB_4x8 - 4:    /* P_L0_4x8 */
                    t->mb.submb_part[luma_index[4 * i]] = MB_4x8;
                    vec.refno = t->mb.vec[0][luma_index[4 * i]].refno;
                    T264_predict_mv(t, 0, luma_index[4 * i], 1, &vec);
                    t->mb.vec[0][luma_index[4 * i]].x = eg_read_se(t->bs) + vec.x;
                    t->mb.vec[0][luma_index[4 * i]].y = eg_read_se(t->bs) + vec.y;
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 0].vec[0] =
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 8].vec[0] =
                    t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 4] = t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 0];

                    T264_predict_mv(t, 0, luma_index[4 * i + 1], 1, &vec);
                    t->mb.vec[0][luma_index[4 * i + 1]].x = eg_read_se(t->bs) + vec.x;
                    t->mb.vec[0][luma_index[4 * i + 1]].y = eg_read_se(t->bs) + vec.y;
                    t->mb.vec[0][luma_index[4 * i + 1]].refno = vec.refno;
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 1].vec[0] =
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 9].vec[0] =
                    t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 5] = t->mb.vec[0][i / 2 * 8 + i % 2 * 2 + 1];
                    break;
                case MB_4x4 - 4:        /* P_L0_4x4 */
                    t->mb.submb_part[luma_index[4 * i]] = MB_4x4;
                    vec = t->mb.vec[0][luma_index[4 * i]];
                    T264_predict_mv(t, 0, luma_index[4 * i], 1, &vec);
                    t->mb.vec[0][luma_index[4 * i]].x = eg_read_se(t->bs) + vec.x;
                    t->mb.vec[0][luma_index[4 * i]].y = eg_read_se(t->bs) + vec.y;
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 0].vec[0] = t->mb.vec[0][luma_index[4 * i]];

                    T264_predict_mv(t, 0, luma_index[4 * i + 1], 1, &vec);
                    t->mb.vec[0][luma_index[4 * i + 1]].x = eg_read_se(t->bs) + vec.x;
                    t->mb.vec[0][luma_index[4 * i + 1]].y = eg_read_se(t->bs) + vec.y;
                    t->mb.vec[0][luma_index[4 * i + 1]].refno = vec.refno;
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 1].vec[0] = t->mb.vec[0][luma_index[4 * i + 1]];

                    T264_predict_mv(t, 0, luma_index[4 * i + 2], 1, &vec);
                    t->mb.vec[0][luma_index[4 * i + 2]].x = eg_read_se(t->bs) + vec.x;
                    t->mb.vec[0][luma_index[4 * i + 2]].y = eg_read_se(t->bs) + vec.y;
                    t->mb.vec[0][luma_index[4 * i + 2]].refno = vec.refno;
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 8].vec[0] = t->mb.vec[0][luma_index[4 * i + 2]];

                    T264_predict_mv(t, 0, luma_index[4 * i + 3], 1, &vec);
                    t->mb.vec[0][luma_index[4 * i + 3]].x = eg_read_se(t->bs) + vec.x;
                    t->mb.vec[0][luma_index[4 * i + 3]].y = eg_read_se(t->bs) + vec.y;
                    t->mb.vec[0][luma_index[4 * i + 3]].refno = vec.refno;
                    t->mb.vec_ref[VEC_LUMA + i / 2 * 16 + i % 2 * 2 + 9].vec[0] = t->mb.vec[0][luma_index[4 * i + 3]];
                    break;
                }
            }
            break;
        default:
            t->mb.mb_part -= 5;
            T264dec_mb_read_intra_cavlc(t);

            /* save ref */
            memset(t->mb.submb_part, -1, sizeof(t->mb.submb_part));
            t->mb.mb_part = -1;
            for(i = 0 ; i < 2 ; i ++)
            {
                for(j = 0 ; j < 16 ; j ++)
                {
                    INITINVALIDVEC(t->mb.vec[i][j]);
                }
            }
            break;
        }
       INITINVALIDVEC(t->mb.vec[1][0]);
       copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 4, 4);
    }
    else if (t->slice_type == SLICE_B)
    {
        T264_vector_t vecPred0, vecPred1;
		T264_vector_t vec1[2];	//save the mv info of second Partition
        vecPred0.refno = 0;	//default reference index
        vecPred1.refno = 0;
		vec1[0].refno = vec1[1].refno = 0;

		t->mb.mb_part = mb_type;
        t->mb.mb_mode = B_MODE;
		t->mb.mb_part2[0] = mb_type;
		t->mb.mb_part2[1] = mb_type;
        switch (mb_type) 
        {
        case 0:	//B_Direct_16x16
            mb_get_directMB16x16_mv(t);
			t->mb.mb_part = MB_16x16;
            t->mb.is_copy = 1;
			break;
        case 1:	//B_L0_16x16
			t->mb.mb_part = MB_16x16;
            if (t->refl0_num - 1 > 0)
            {
                vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
            }
            T264_predict_mv(t, 0, 0, 4, &vecPred0);
            t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
            t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
            t->mb.vec[0][0].refno = vecPred0.refno;
            copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 4, 4);

            INITINVALIDVEC(t->mb.vec[1][0]);
            copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 4, 4);

            break;
        case 2:	//B_L1_16x16
			t->mb.mb_part = MB_16x16;
			if (t->refl1_num - 1 > 0)
            {
                vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
            }
            T264_predict_mv(t, 1, 0, 4, &vecPred1);
            t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
            t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
            t->mb.vec[1][0].refno = vecPred1.refno;
            copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 4, 4);

            INITINVALIDVEC(t->mb.vec[0][0]);
            copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 4, 4);
            break;
        case 3:	//B_Bi_16x16
			t->mb.mb_part = MB_16x16;
            if (t->refl0_num - 1 > 0)
            {
                vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
            }
			if (t->refl1_num - 1 > 0)
            {
                vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
            }
            T264_predict_mv(t, 0, 0, 4, &vecPred0);
            T264_predict_mv(t, 1, 0, 4, &vecPred1);
            t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
            t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
            t->mb.vec[0][0].refno = vecPred0.refno;
            t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
            t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
            t->mb.vec[1][0].refno = vecPred1.refno;
            copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 4, 4);
            copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 4, 4);
            break;
		case 4:	//B_L0_L0_16x8
			t->mb.mb_part = MB_16x8;
            if (t->refl0_num - 1 > 0)
            {
                vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
                vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);	
            }
            T264_predict_mv(t, 0, 0, 4, &vecPred0);
            t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
            t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
            t->mb.vec[0][0].refno = vecPred0.refno;
            copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 2, 4);
            t->mb.vec_ref[VEC_LUMA + 8].vec[0] = t->mb.vec[0][0];	

            T264_predict_mv(t, 0, 8, 4, &vec1[0]);
            t->mb.vec[0][8].x = eg_read_se(t->bs) + vec1[0].x;
            t->mb.vec[0][8].y = eg_read_se(t->bs) + vec1[0].y;
            t->mb.vec[0][8].refno = vec1[0].refno;
            copy_nvec(&t->mb.vec[0][8], &t->mb.vec[0][8], 4, 2, 4);

            INITINVALIDVEC(t->mb.vec[1][0]);
            copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 4, 4);

			break;
        case 5:	//B_L0_L0_8x16
			t->mb.mb_part = MB_8x16;
            if (t->refl0_num - 1 > 0)
            {
                vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
                vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
            }
            T264_predict_mv(t, 0, 0, 2, &vecPred0);
            t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
            t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
            t->mb.vec[0][0].refno = vecPred0.refno;
            copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 2, 4, 4);
            t->mb.vec_ref[VEC_LUMA + 1].vec[0] = t->mb.vec[0][0];

            T264_predict_mv(t, 0, luma_index[4], 2, &vec1[0]);
            t->mb.vec[0][luma_index[4]].x = eg_read_se(t->bs) + vec1[0].x;
            t->mb.vec[0][luma_index[4]].y = eg_read_se(t->bs) + vec1[0].y;
            t->mb.vec[0][luma_index[4]].refno = vec1[0].refno;
            copy_nvec(&t->mb.vec[0][2], &t->mb.vec[0][2], 2, 4, 4);

			INITINVALIDVEC(t->mb.vec[1][0]);
            copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 4, 4);

            break;

		case 6: //B_L1_L1_16x8
			t->mb.mb_part = MB_16x8;
            if (t->refl1_num - 1 > 0)
            {
                vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
                vec1[1].refno = eg_read_te(t->bs, t->refl1_num - 1);	
            }
            T264_predict_mv(t, 1, 0, 4, &vecPred1);
            t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
            t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
            t->mb.vec[1][0].refno = vecPred1.refno;
            copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 2, 4);
            t->mb.vec_ref[VEC_LUMA + 8].vec[1] = t->mb.vec[1][0];	

            T264_predict_mv(t, 1, 8, 4, &vec1[1]);
            t->mb.vec[1][8].x = eg_read_se(t->bs) + vec1[1].x;
            t->mb.vec[1][8].y = eg_read_se(t->bs) + vec1[1].y;
            t->mb.vec[1][8].refno = vec1[1].refno;
            copy_nvec(&t->mb.vec[1][8], &t->mb.vec[1][8], 4, 2, 4);

            INITINVALIDVEC(t->mb.vec[0][0]);
            copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 4, 4);

			break;

        case 7:	//B_L1_L1_8x16
			t->mb.mb_part = MB_8x16;
            if (t->refl1_num - 1 > 0)
            {
                vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
                vec1[1].refno = eg_read_te(t->bs, t->refl1_num - 1);
            }
            T264_predict_mv(t, 1, 0, 2, &vecPred1);
            t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
            t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
            t->mb.vec[1][0].refno = vecPred1.refno;
            copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 2, 4, 4);
            t->mb.vec_ref[VEC_LUMA + 1].vec[1] = t->mb.vec[1][0];

            T264_predict_mv(t, 1, luma_index[4], 2, &vec1[1]);
            t->mb.vec[1][luma_index[4]].x = eg_read_se(t->bs) + vec1[1].x;
            t->mb.vec[1][luma_index[4]].y = eg_read_se(t->bs) + vec1[1].y;
            t->mb.vec[1][luma_index[4]].refno = vec1[1].refno;
            copy_nvec(&t->mb.vec[1][2], &t->mb.vec[1][2], 2, 4, 4);

			INITINVALIDVEC(t->mb.vec[0][0]);
            copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 4, 4);

            break;

		case 8://B_L0_L1_16x8
			t->mb.mb_part = MB_16x8;
			if (t->refl0_num - 1 > 0)
            {
                vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
            }
			if (t->refl1_num - 1 > 0)
            {
                vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
            }
            T264_predict_mv(t, 0, 0, 4, &vecPred0);
            t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
            t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
            t->mb.vec[0][0].refno = vecPred0.refno;
            copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 2, 4);

            INITINVALIDVEC(t->mb.vec[0][8]);
            copy_nvec(&t->mb.vec[0][8], &t->mb.vec[0][8], 4, 2, 4);

            INITINVALIDVEC(t->mb.vec_ref[VEC_LUMA + 8].vec[1]);
            INITINVALIDVEC(t->mb.vec[1][0]);
            copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 2, 4);

            T264_predict_mv(t, 1, 8, 4, &vecPred1);
            t->mb.vec[1][8].x = eg_read_se(t->bs) + vecPred1.x;
            t->mb.vec[1][8].y = eg_read_se(t->bs) + vecPred1.y;
            t->mb.vec[1][8].refno = vecPred1.refno;
            copy_nvec(&t->mb.vec[1][8], &t->mb.vec[1][8], 4, 2, 4);

			break;

        case 9:	//B_L0_L1_8x16
			t->mb.mb_part = MB_8x16;
            if (t->refl0_num - 1 > 0)
            {
                vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
            }
			if (t->refl1_num - 1 > 0)
            {
                vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
            }
            T264_predict_mv(t, 0, 0, 2, &vecPred0);
            t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
            t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
            t->mb.vec[0][0].refno = vecPred0.refno;
            copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 2, 4, 4);
			
			INITINVALIDVEC(t->mb.vec[0][2]);
            copy_nvec(&t->mb.vec[0][2], &t->mb.vec[0][2], 2, 4, 4);

			INITINVALIDVEC(t->mb.vec[1][0]);
            copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 2, 4, 4);
			INITINVALIDVEC(t->mb.vec_ref[VEC_LUMA + 1].vec[1]);

            T264_predict_mv(t, 1, luma_index[4], 2, &vecPred1);
            t->mb.vec[1][luma_index[4]].x = eg_read_se(t->bs) + vecPred1.x;
            t->mb.vec[1][luma_index[4]].y = eg_read_se(t->bs) + vecPred1.y;
            t->mb.vec[1][luma_index[4]].refno = vecPred1.refno;
            copy_nvec(&t->mb.vec[1][2], &t->mb.vec[1][2], 2, 4, 4);
            break;

		case 10:	//B_L1_L0_16x8:
			t->mb.mb_part = MB_16x8;
			if (t->refl0_num - 1 > 0)
            {
                vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
            }
			if (t->refl1_num - 1 > 0)
            {
                vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
            }
            INITINVALIDVEC(t->mb.vec[0][0]);
            copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 2, 4);
			INITINVALIDVEC(t->mb.vec_ref[VEC_LUMA + 8].vec[0]);

            T264_predict_mv(t, 0, 8, 4, &vec1[0]);
            t->mb.vec[0][8].x = eg_read_se(t->bs) + vec1[0].x;
            t->mb.vec[0][8].y = eg_read_se(t->bs) + vec1[0].y;
            t->mb.vec[0][8].refno = vecPred1.refno;
            copy_nvec(&t->mb.vec[0][8], &t->mb.vec[0][8], 4, 2, 4);

            T264_predict_mv(t, 1, 0, 4, &vecPred1);
            t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
            t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
            t->mb.vec[1][0].refno = vecPred1.refno;
            copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 2, 4);

            INITINVALIDVEC(t->mb.vec[1][8]);
            copy_nvec(&t->mb.vec[1][8], &t->mb.vec[1][8], 4, 2, 4);

			break;

		case 11://B_L1_L0_8x16
			t->mb.mb_part = MB_8x16;
			if (t->refl0_num - 1 > 0)
            {
                vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
            }
			if (t->refl1_num - 1 > 0)
            {
                vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
            }
			INITINVALIDVEC(t->mb.vec[0][0]);
            copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 2, 4, 4);            
			INITINVALIDVEC(t->mb.vec_ref[VEC_LUMA + 1].vec[0]);

			T264_predict_mv(t, 0, luma_index[4], 2, &vec1[0]);
            t->mb.vec[0][luma_index[4]].x = eg_read_se(t->bs) + vec1[0].x;
            t->mb.vec[0][luma_index[4]].y = eg_read_se(t->bs) + vec1[0].y;
            t->mb.vec[0][luma_index[4]].refno = vec1[0].refno;
            copy_nvec(&t->mb.vec[0][2], &t->mb.vec[0][2], 2, 4, 4);

            T264_predict_mv(t, 1, 0, 2, &vecPred1);
            t->mb.vec[1][0].x = eg_read_se(t->bs) + vecPred1.x;
            t->mb.vec[1][0].y = eg_read_se(t->bs) + vecPred1.y;
            t->mb.vec[1][0].refno = vecPred1.refno;
            copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 2, 4, 4);
			
			INITINVALIDVEC(t->mb.vec[1][2]);
            copy_nvec(&t->mb.vec[1][2], &t->mb.vec[1][2], 2, 4, 4);
            break;

		case 12:	//B_L0_Bi_16x8
			t->mb.mb_part = MB_16x8;
			if (t->refl0_num - 1 > 0)
            {
                vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
				vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
            }
			if (t->refl1_num - 1 > 0)
            {
                vecPred1.refno = eg_read_te(t->bs, t->refl1_num - 1);
            }
            T264_predict_mv(t, 0, 0, 4, &vecPred0);
            t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
            t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
            t->mb.vec[0][0].refno = vecPred0.refno;
            copy_nvec(&t->mb.vec[0][0], &t->mb.vec[0][0], 4, 2, 4);
            t->mb.vec_ref[VEC_LUMA + 8].vec[0] = t->mb.vec[0][0];	

            T264_predict_mv(t, 0, 8, 4, &vec1[0]);
			t->mb.vec[0][8].x = eg_read_se(t->bs) + vec1[0].x;
            t->mb.vec[0][8].y = eg_read_se(t->bs) + vec1[0].y;
            t->mb.vec[0][8].refno = vec1[0].refno;
            copy_nvec(&t->mb.vec[0][8], &t->mb.vec[0][8], 4, 2, 4);

            INITINVALIDVEC(t->mb.vec[1][0]);
            copy_nvec(&t->mb.vec[1][0], &t->mb.vec[1][0], 4, 2, 4);
			INITINVALIDVEC(t->mb.vec_ref[VEC_LUMA + 8].vec[1]);

            T264_predict_mv(t, 1, 8, 4, &vecPred1);
            t->mb.vec[1][8].x = eg_read_se(t->bs) + vecPred1.x;
            t->mb.vec[1][8].y = eg_read_se(t->bs) + vecPred1.y;
            t->mb.vec[1][8].refno = vecPred1.refno;
            copy_nvec(&t->mb.vec[1][8], &t->mb.vec[1][8], 4, 2, 4);

			break;
		case 13://B_L0_Bi_8x16
			t->mb.mb_part = MB_8x16;
			if (t->refl0_num - 1 > 0)
            {
                vecPred0.refno = eg_read_te(t->bs, t->refl0_num - 1);
				vec1[0].refno = eg_read_te(t->bs, t->refl0_num - 1);
            }
			if (t->refl1_num - 1 > 0)
            {
                vec1[1].refno = eg_read_te(t->bs, t->refl1_num - 1);
            }

            T264_predict_mv(t, 0, 0, 2, &vecPred0);
            t->mb.vec[0][0].x = eg_read_se(t->bs) + vecPred0.x;
            t->mb.vec[0][0].y = eg_read_se(t->bs) + vecPred0.y;
     

⌨️ 快捷键说明

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