从NV12中裁剪子画面注意事项

1. 裁剪时,Y和UV的地址计算:

/ ****
  * pa_yuv_main: yuv首地址
  * video_frame.loff: 行偏移量 lineoffset
  * VDO_SIZE_W、VDO_SIZE_H: 原视频宽高
  * CROP_X、CROP_Y: 裁剪坐标值
****/
video_frame.phy_addr[0] = pa_yuv_main + video_frame.loff[0] * CROP_Y + CROP_X; // Y
video_frame.phy_addr[1] = pa_yuv_main + VDO_SIZE_W * VDO_SIZE_H + video_frame.loff[1] * (CROP_Y/2) + CROP_X; // UV pack

而非:ide

video_frame.phy_addr[0] = pa_yuv_main + video_frame.loff[0] * CROP_Y + CROP_X; // Y
video_frame.phy_addr[1] = pa_yuv_main + ( video_frame.loff[0] * CROP_Y + CROP_X) / 2; // UV pack

由于NV12在竖直方向上进行了1/2下采样,水平方向上并未作下采样,因此只需CROP_Y减半:
code

  1. 裁剪的坐标X和Y必须是偶数,不然UV和Y会有误差。
crop_x = crop_x & 0xFFFE;
crop_y = crop_y & 0xFFFE;
相关文章
相关标签/搜索