FFmpeg之yuv镜像(十八)

for (int h = 0; h < height; h++) {

for (int w = 0; w < lineDataSize; w += 3) {

mirrorBgr24[lineStartIndex + w] = bgr24[lineStartIndex + lineDataSize - w - 3];

mirrorBgr24[lineStartIndex + w + 1] = bgr24[lineStartIndex + lineDataSize - w - 2];

mirrorBgr24[lineStartIndex + w + 2] = bgr24[lineStartIndex + lineDataSize - w - 1];

}

lineStartIndex += lineDataSize;

}

}

  • 垂直镜像

void verticalMirrorBgr24(char *bgr24, char *mirrorBgr24, int width, int height) {

int lineDataSize = width * 3;

bgr24 += width * height * 3;

for (int h = 0; h < height; h++) {

memcpy(mirrorBgr24, bgr24, lineDataSize);

mirrorBgr24 += lineDataSize;

bgr24 -= lineDataSize;

}

}

三、镜像NV21 / NV12

由于NV21和NV12的结构只是UV数据位置相反,因此镜像NV21的代码同样适用于镜像NV12。

  • 水平镜像

void horizontalMirrorNv21(char *nv21, char *mirrorNv21, int width, int height) {

int yLineStartIndex = 0;

int uvLineStartIndex = width * height;

for (int h = 0; h < height; h++) {

for (int w = 0; w < width; w += 2) {

mirrorNv21[yLineStartIndex + w] = nv21[yLineStartIndex + width - w];

mirrorNv21[yLineStartIndex + w + 1] = nv21[yLineStartIndex + width - w - 1];

if ((h & 1) == 0) {

mirrorNv21[uvLineStartIndex + w] = nv21[uvLineStartIndex + width - w];

mirrorNv21[uvLineStartIndex + w + 1] = nv21[uvLineStartIndex + width - w - 1];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值