I’m using NvBufferComposite to composite the image and the transparency setting doesn’t seem to work.
comp_param.dst_comp_rect_alpha[i] = 0.5f;
The image format is NvBufferColorFormat_ARGB32
Any suggestions are welcome.
I’m using NvBufferComposite to composite the image and the transparency setting doesn’t seem to work.
comp_param.dst_comp_rect_alpha[i] = 0.5f;
The image format is NvBufferColorFormat_ARGB32
Any suggestions are welcome.
Hi,
We have the sample demonstrating NvBufferComposite():
/usr/src/jetson_multimedia_api/samples/13_multi_camera
Please share a patch to the sample so that we can set up and check. And do you use Jetpack 4.6.2 or 4.6.3?
hi,
I refer to this example
/usr/src/jetson_multimedia_api/samples/13_multi_camera
jtop info
cat /etc/nv_tegra_release
# R32 (release), REVISION: 6.1, GCID: 27863751, BOARD: t186ref, EABI: aarch64, DATE: Mon Jul 26 19:36:31 UTC 2021
this is the mixed part of the code
int frame_comp()
{
int32_t spacing = 10;
NvBufferRect dstCompRect[3];
NvBufferCreateParams input_params = {0};
int32_t cellWidth = 300;
int32_t cellHeight = 200;
dstCompRect[0].top = 0;
dstCompRect[0].left = 0;
dstCompRect[0].width = 1280;
dstCompRect[0].height = 720;
dstCompRect[1].top = 0;
dstCompRect[1].left = 0;
dstCompRect[1].width = cellHeight;
dstCompRect[1].height = cellWidth;
dstCompRect[2].top = 0;
dstCompRect[2].left = cellWidth + spacing * 2;
dstCompRect[2].width = cellWidth;
dstCompRect[2].height = cellHeight;
/* Allocate composited buffer */
input_params.payloadType = NvBufferPayload_SurfArray;
input_params.width = CAMWIDTH;
input_params.height = CAMHEIGHT;
input_params.layout = NvBufferLayout_Pitch;
input_params.colorFormat = NvBufferColorFormat_ARGB32;
input_params.nvbuf_tag = NvBufferTag_VIDEO_CONVERT;
NvBufferCreateEx(&m_compositedFrame, &input_params);
if (!m_compositedFrame)
DLOG(ERROR) << "Failed to allocate composited buffer";
memset(&m_compositeParam, 0, sizeof(m_compositeParam));
m_compositeParam.composite_flag = NVBUFFER_COMPOSITE | NVBUFFER_COMPOSITE_FILTER;
m_compositeParam.input_buf_count = 3;
memcpy(m_compositeParam.dst_comp_rect, dstCompRect, sizeof(NvBufferRect) * m_compositeParam.input_buf_count);
m_compositeParam.dst_comp_rect_alpha[0] = 1.0f;
m_compositeParam.dst_comp_rect_alpha[1] = 0.5f;
m_compositeParam.dst_comp_rect_alpha[2] = 0.5f;
for (uint32_t i = 0; i < 3; i++)
{
m_compositeParam.composite_filter[i] = NvBufferTransform_Filter_Smart;
m_compositeParam.src_comp_rect[i].top = 0;
m_compositeParam.src_comp_rect[i].left = 0;
m_compositeParam.src_comp_rect[i].width = 1280;
m_compositeParam.src_comp_rect[i].height = 720;
}
NvBufferComposite(m_dmabufs, m_compositedFrame, &m_compositeParam);
return m_compositedFrame;
}
Hi,
Please refer to the patch to 13_multi_camera sample:
--- a/multimedia_api/ll_samples/samples/13_multi_camera/main.cpp
+++ b/multimedia_api/ll_samples/samples/13_multi_camera/main.cpp
@@ -259,7 +259,7 @@ bool ConsumerThread::threadInitialize()
input_params.width = STREAM_SIZE.width();
input_params.height = STREAM_SIZE.height();
input_params.layout = NvBufferLayout_Pitch;
- input_params.colorFormat = NvBufferColorFormat_NV12;
+ input_params.colorFormat = NvBufferColorFormat_ABGR32;
input_params.nvbuf_tag = NvBufferTag_VIDEO_CONVERT;
NvBufferCreateEx (&m_compositedFrame, &input_params);
@@ -268,13 +268,16 @@ bool ConsumerThread::threadInitialize()
/* Initialize composite parameters */
memset(&m_compositeParam, 0, sizeof(m_compositeParam));
- m_compositeParam.composite_flag = NVBUFFER_COMPOSITE;
+ m_compositeParam.composite_flag = NVBUFFER_COMPOSITE | NVBUFFER_BLEND;
m_compositeParam.input_buf_count = m_streams.size();
memcpy(m_compositeParam.dst_comp_rect, dstCompRect,
sizeof(NvBufferRect) * m_compositeParam.input_buf_count);
for (uint32_t i = 0; i < 6; i++)
{
- m_compositeParam.dst_comp_rect_alpha[i] = 1.0f;
+ if (i == 0)
+ m_compositeParam.dst_comp_rect_alpha[i] = 0.9f;
+ if (i > 0)
+ m_compositeParam.dst_comp_rect_alpha[i] = 0.1f;
m_compositeParam.src_comp_rect[i].top = 0;
m_compositeParam.src_comp_rect[i].left = 0;
m_compositeParam.src_comp_rect[i].width = STREAM_SIZE.width();
@@ -333,8 +336,8 @@ bool ConsumerThread::threadExecute()
if (!m_dmabufs[i])
{
m_dmabufs[i] = iNativeBuffer->createNvBuffer(iEglOutputStreams[i]->getResolution(),
- NvBufferColorFormat_YUV420,
- NvBufferLayout_BlockLinear);
+ NvBufferColorFormat_ABGR32,
+ NvBufferLayout_Pitch);
if (!m_dmabufs[i])
CONSUMER_PRINT("\tFailed to create NvBuffer\n");
}
Please allocate NvBuffer in RGBA and add the flag NVBUFFER_BLEND
thank you for your answer. no problem
This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.