请教如何使用cuda分离yuv

我的显存中的yuv数据,width和linesize是不一致的,width=3840,linesize=4096。我使用如下代码进行分离,成功分离了y分量,但是uv分量一直失败,请教大家应该如何操作。
unsigned char* d_dstY, *d_dstU, *d_dstV;
int linesize=0;
size_t sizeY;
size_t sizeUV;
size_t sizeSrc; // NV12大小

m_nVideoW=frame->width;
m_nVideoH=frame->height;
linesize=frame->linesize[0];

size_t pitch=m_nVideoW;
size_t uvpitch=m_nVideoW/2;

sizeY = linesize * m_nVideoH;
sizeUV = (linesize / 2) * (m_nVideoH / 2);

cudaMallocPitch((unsigned char**)&d_dstY, &pitch, m_nVideoW, m_nVideoH);
cudaMallocPitch((unsigned char**)&d_dstU, &uvpitch,m_nVideoW/2,m_nVideoH/2);
cudaMallocPitch((unsigned char**)&d_dstV, &uvpitch,m_nVideoW/2,m_nVideoH/2);

cudaMemcpy2D(d_dstY,pitch,*frame->data,linesize,m_nVideoW,m_nVideoH,cudaMemcpyDeviceToDevice);
cudaMemcpy2D(d_dstU,uvpitch,*frame->data+sizeY,linesize/2,m_nVideoW/2,m_nVideoH/2,cudaMemcpyDeviceToDevice);
cudaMemcpy2D(d_dstV,uvpitch,*frame->data+sizeY+sizeUV,linesize/2,m_nVideoW/2,m_nVideoH/2,cudaMemcpyDeviceToDevice);