TComPicYuv 类中的 m_apiPicBufY 和 m_piPicOrgY 的区别

本文深入探讨了VoidTComPicYuv::create函数中YUV图像内存分配的细节,包括如何为亮度和色度通道预留内存,并通过Padding处理边界插值问题,确保滤波器在图像边缘的有效应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参见Void TComPicYuv::create(……)函数中的几句代码:

  m_apiPicBufY      = (Pel*)xMalloc( Pel, ( m_iPicWidth       + (m_iLumaMarginX  <<1)) * ( m_iPicHeight       + (m_iLumaMarginY  <<1)));
  m_apiPicBufU      = (Pel*)xMalloc( Pel, ((m_iPicWidth >> 1) + (m_iChromaMarginX<<1)) * ((m_iPicHeight >> 1) + (m_iChromaMarginY<<1)));
  m_apiPicBufV      = (Pel*)xMalloc( Pel, ((m_iPicWidth >> 1) + (m_iChromaMarginX<<1)) * ((m_iPicHeight >> 1) + (m_iChromaMarginY<<1)))
  m_piPicOrgY       = m_apiPicBufY + m_iLumaMarginY   * getStride()  + m_iLumaMarginX;
  m_piPicOrgU       = m_apiPicBufU + m_iChromaMarginY * getCStride() + m_iChromaMarginX;
  m_piPicOrgV       = m_apiPicBufV + m_iChromaMarginY * getCStride() + m_iChromaMarginX;

可知,m_apiPicBufY 向系统申请了m_iPicHeight + (m_iLumaMarginY <<1) 行 、m_iPicWidth + (m_iLumaMarginX <<1) 列的像素空间,m_iPicWidth 和 m_iPicHeight 自然是图像的宽高,m_iLumaMarginY 和 m_iLumaMarginX 则是图像边缘 padding 的大小。而 m_piPicOrgY 与 m_apiPicBufY 有一定的区别,m_apiPicBufY 包含 padding ,而 m_piPicOrgY 不包含 padding,因此就有了 m_piPicOrgY 的计算公式,计算过程考虑了padding带来的偏移。

padding 的作用大概是 使插值滤波器在计算图像边界插值点处也能正常工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值