for (int i = 0; i < subHeight; i++) {
pSrcY = subY + i * subWidth;
if (position == LEFT_TOP) {
pDstY = mainY + i * mainWidth;
} else if (position == LEFT_BOTTOM) {
pDstY = mainY + i * mainWidth + ((mainHeight - subHeight) * mainWidth);
} else if (position == RIGHT_TOP) {
pDstY = mainY + i * mainWidth + (mainWidth - subWidth);
} else if (position == RIGHT_BOTTOM) {
pDstY = mainY + i * mainWidth + ((mainHeight - subHeight) * mainWidth) +
(mainWidth - subWidth);
} else if (position == CENTER) {
pDstY = mainY + i * mainWidth + ((mainHeight - subHeight) / 2 * mainWidth) +
(mainWidth - subWidth) / 2;
} else {
LOGE("Unsupported position: %d", position);
return;
}
memcpy(pDstY, pSrcY, subWidth);
}
unsigned char *pDstU;
unsigned char *pDstV;
unsigned char *pSrcU;
unsigned char *pSrcV;
for (int i = 0; i < subUVHeight; i++) {
pSrcU = subU + i * subUVWidth;
pSrcV = subV + i * subUVWidth;
if (position == LEFT_TOP) {
pDstU = mainU + i * mainUVWidth;
pDstV = mainV + i * mainUVWidth;
} else if (position == LEFT_BOTTOM) {
pDstU = mainU + ((mainUVHeight - subUVHeight) * mainUVWidth) + i * mainUVWidth;
pDstV = mainV + ((mainUVHeight - subUVHeight) * mainUVWidth) + i * mainUVWidth;
} else if (position == RIGHT_TOP) {
pDstU = mainU + i * mainUVWidth + mainUVWidth - subUVWidth;
pDstV = mainV + i * www.shyejk.com/mainUVWidth + mainUVWidth - subUVWidth;
} else if (position == RIGHT_BOTTOM) {
pDstU = mainU + ((mainUVHeight - subUVHeight) * mainUVWidth) +
i * mainUVWidth + (mainUVWidth - subUVWidth);
pDstV = mainV + ((mainUVHeight - subUVHeight) * mainUVWidth) +
i * mainUVWidth + (mainUVWidth - subUVWidth);
} else if (position == CENTER) {
pDstU = mainU + ((mainUVHeight - subUVHeight) / 2 * mainUVWidth) +
i * mainUVWidth + (mainUVWidth - subUVWidth) / 2;
pDstV = mainV + ((mainUVHeight - subUVHeight) / 2 * mainUVWidth) +
i * mainUVWidth + (mainUVWidth - subUVWidth) / 2;
} else {
LOGE("Unsupported position: %d", position);
return;
}
memcpy(pDstU, pSrcU, subUVWidth);
memcpy(pDstV, pSrcV, subUVWidth);
}
}
void DualCamera::processNV21(uchar *main, int mainWidth, int mainHeight,
uchar *sub, int subWidth, int subHeight) {
uchar *mainY = main;
uchar *mainUV = main + mainWidth * mainHeight;
uchar *subY = sub;
uchar *subUV = sub + subWidth * subHeight;
processNV21(mainY, mainUV, mainWidth, mainHeight, subY, subUV, subWidth, subHeight);
}
void DualCamera::processNV21(uchar *mainY, uchar *mainUV, int mainWidth, int mainHeight,
uchar *subY, uchar *subUV, int subWidth, int subHeight) {
LOGD("[processNV21] mainY:%p, mainUV:%p,www.shyejk.com mainWidth:%d, mainHeight:%d, subY:%p, subUV:%p, subWidth:%d, subHeight:%d, position:%d",
mainY, mainUV, mainWidth, mainHeight, subY, subUV, subWidth, subHeight, position);
int mainUVHeight = mainHeight / 2;
int mainUVWidth = mainWidth / 2;
unsigned char *pDstY;
unsigned char *pSrcY;
for (int i = 0; i < subHeight; i++) {
pSrcY = subY + i * subWidth;
if (position == LEFT_TOP) {
pDstY = mainY + i * mainWidth;
} else if (position == LEFT_BOTTOM) {
pDstY = mainY + i * mainWidth + ((mainHeight - subHeight) * mainWidth);
} else if (position == RIGHT_TOP) {
pDstY = mainY + i * mainWidth + (mainWidth - subWidth);
} else if (position == RIGHT_BOTTOM) {
pDstY = mainY + i * mainWidth + ((mainHeight - subHeight) * mainWidth) +
(mainWidth - subWidth);
} else if (position == CENTER) {
pDstY = mainY + i * mainWidth + ((mainHeight - subHeight) / 2 * mainWidth) +
(mainWidth - subWidth) / 2;
} else {
LOGE("Unsupported position: %d", position);
return;
}
memcpy(pDstY, pSrcY, subWidth);
}
int subUVHeight = subHeight / 2;
int subUVWidth = subWidth / 2;
unsigned www.shyejk.com char *pDstUV;
unsigned char *pSrcUV;
for (int i = 0; i < subUVHeight; i++) {
pSrcUV = subUV + i * subUVWidth * 2;
if (position == LEFT_TOP) {
pDstUV = mainUV + i * mainUVWidth * 2;
} else if (position ==www.shyejk.com LEFT_BOTTOM) {
pDstUV = mainUV + ((mainUVHeight - subUVHeight) * mainUVWidth + i * mainUVWidth) * 2;
} else if (position == RIGHT_TOP) {
pDstUV = mainUV + (i * mainUVWidth + mainUVWidth - subUVWidth) * 2;
} else if (position == RIGHT_BOTTOM) {
pDstUV = mainUV + ((mainUVHeight - subUVHeight) * mainUVWidth +
i * mainUVWidth + mainUVWidth - subUVWidth) * 2;
} else if (position == CENTER) {
pDstUV = mainUV + ((mainUVHeight www.shyejk.com- subUVHeight) / 2 * mainUVWidth +
i * mainUVWidth + (mainUVWidth - subUVWidth) / 2) * 2;
} else {
LOGE("Unsupported position: %d", position);
return;
}
memcpy(pDstUV, pSrcUV, subUVWidth * 2);