信源编码技术-作业4-H.264调试

1. 任务要求

  1. 输出第一帧第二行第三个宏块的mode;
  2. 输出第二帧第二行第三个宏块的mode和mv。

2. jm_vc10

2.1 宏块类型

mb_type 宏块类型的数值

//  Available MB modes
typedef enum {
  PSKIP        =  0,
  BSKIP_DIRECT =  0,
  P16x16       =  1,
  P16x8        =  2,
  P8x16        =  3,
  SMB8x8       =  4,
  SMB8x4       =  5,
  SMB4x8       =  6,
  SMB4x4       =  7,
  P8x8         =  8,
  I4MB         =  9,
  I16MB        = 10,
  IBLOCK       = 11,
  SI4MB        = 12,
  I8MB         = 13,
  IPCM         = 14,
  MAXMODE      = 15
} MBModeTypes;

2.2 帧内预测模式

1)4×4亮度预测模式

4×4亮度子块有9种可选预测模式,独立预测每一个4×4亮度子块,适用于带有大量细节的图像编码。

image-20211206162314198

// 4x4 intra prediction modes 
enum {
  VERT_PRED            = 0,
  HOR_PRED             = 1,
  DC_PRED              = 2,
  DIAG_DOWN_LEFT_PRED  = 3,
  DIAG_DOWN_RIGHT_PRED = 4,
  VERT_RIGHT_PRED      = 5,
  HOR_DOWN_PRED        = 6,
  VERT_LEFT_PRED       = 7,
  HOR_UP_PRED          = 8
} I4x4PredModes;
2)16x16亮度预测模式

16×16亮度块有4种预测模式,预测整个16×16亮度块,适用于平坦区域图像编码。

image-20211206162227424
// 16x16 intra prediction modes
enum {
  VERT_PRED_16   = 0,
  HOR_PRED_16    = 1,
  DC_PRED_16     = 2,
  PLANE_16       = 3
} I16x16PredModes;
3)8x8色度块预测模式

色度块也有4种预测模式,类似于16×16亮度块预测模式,只不过具体的序号不一样。

// 8x8 chroma intra prediction modes
enum {
  DC_PRED_8     =  0,
  HOR_PRED_8    =  1,
  VERT_PRED_8   =  2,
  PLANE_8       =  3
} I8x8PredModes;

3. 实验

3.1 添加代码

在 macroblock.c 的2866行添加:

    // output info
    if (p_Vid->frame_no==0 && currMB->mb_x == 2 && currMB->mb_y== 1) {
        printf("\n----------> Pic: %i (I/P) MB_x: %i MB_y: %i\n\n", p_Vid->frame_no, currMB->mb_x, currMB->mb_y);
        printf("MB type:%i\n", currMB->mb_type);
        printf("MB mode:%i\n", currMB->c_ipred_mode);
        printf("-----------------------------------");
    }
    if (p_Vid->frame_no == 1 && currMB->mb_x == 2 && currMB->mb_y == 1) {
        printf("\n----------> Pic: %i (I/P) MB_x: %i MB_y: %i\n\n", p_Vid->frame_no, currMB->mb_x, currMB->mb_y);
        printf("MB type:%i\n", currMB->mb_type);
        printf("MB mode:%i\n", currMB->c_ipred_mode);
        printf("MB MV_x:%i\n", currMB->mvd[0][0][0][0]);
        printf("MB MV_y:%i\n", currMB->mvd[0][0][0][1]);
        printf("-----------------------------------");
    }

3.2 结果

image-20211206202459249image-20211206202446272

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值