头文件中的接口函数介绍:为了方便有兴趣的童鞋们,实现代码dual_camera.cpp也一并贴上

    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);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值