airockchip / librga

Apache License 2.0
242 stars 52 forks source link

使用RkRgaBlit接口做画中画半透明效果,设置alpha值之后合成的画面花屏 #62

Open livesflying opened 6 months ago

livesflying commented 6 months ago

您好,使用RkRgaBlit接口做画中画半透明效果,设置alpha值之后合成的画面花屏,如何使用这个半透明接口呢,下面是我的代码,帮忙看下哪里有问题,谢谢!

bool rkmpprga::pip(void src_buf, void dst_buf, rga_rect_t src_rect,rga_rect_t dst_rect,uint8_t alpha) { rga_info_t src_info,dst_info;

memset(&src_info,0,sizeof(rga_info_t));
src_info.fd = -1;
src_info.virAddr = src_buf;
src_info.phyAddr = nullptr;
src_info.mmuFlag = 1;
src_info.rect = src_rect;

memset(&dst_info,0,sizeof(rga_info_t));
dst_info.fd = -1;
dst_info.virAddr = dst_buf;
dst_info.phyAddr = nullptr;
dst_info.mmuFlag = 1;
dst_info.rect = dst_rect;

src_info.blend = 0x405;
src_info.blend |= alpha<<16;
RkRgaBlit(&src_info,&dst_info,NULL);

return true;

}

{ mix_rect rectSrc = {0,0,1,1}; mix_rect rectDst = {0,0,1,1}; uint8_t alpha = 0xef; rga_set_rect(&src_rect,videoWidthrectSrc.x,videoHeightrectSrc.y,videoWidthrectSrc.w,videoHeightrectSrc.h,frame[0]->linesize[0],videoHeight,RK_FORMAT_YCbCr_420_P); rga_set_rect(&dst_rect,videoWidthrectDst.x,videoHeightrectDst.y,videoWidthrectDst.w/2,videoHeightrectDst.h/2,yuvFrame->linesize[0],videoHeight,RK_FORMAT_YCbCr_420_P); memcpy(outDataY,frame[0]->data[0],frame[0]->linesize[0]videoHeight); memcpy(outDataU,frame[0]->data[1],frame[0]->linesize[1]videoHeight/2); memcpy(outDataV,frame[0]->data[2],frame[0]->linesize[2]videoHeight/2); memcpy(inDataY,frame[1]->data[0],frame[1]->linesize[0]videoHeight); memcpy(inDataU,frame[1]->data[1],frame[1]->linesize[1]videoHeight/2); memcpy(inDataV,frame[1]->data[2],frame[1]->linesize[2]videoHeight/2);

        rga.pip(framedata, yuvdata,src_rect,dst_rect,alpha);

}

rga