Intel® Integrated Performance Primitives
Community support and discussions relating to developing high-performance vision, signal, security, and storage applications.
Announcements
Welcome to the Intel Community. If you get an answer you like, please mark it as an Accepted Solution to help others. Thank you!
6593 Discussions

Form Composite 32s ARGB vector from 4 8u vectors

battersby__brian
Beginner
92 Views

Hello,

I have 4 channels of 8u vector data.  How can I composite them into a single 32s ARGB vector?

Thank you.

0 Kudos
3 Replies
Igor_A_Intel
Employee
92 Views

hi Brian,

please use IPPAPI ( IppStatus, ippiCopy_8u_P4C4R, (const  Ipp8u* const pSrc[4], int srcStep, Ipp8u* pDst, int dstStep, IppiSize roiSize )) function.

regards, Igor.
 

battersby__brian
Beginner
92 Views

Hello Igor Astakhov,

Thanks for your quick response.

I saw this method but didn't know if it would work because the destination buffer is still Ipp8u.  How do I composite the resulting 8u bits into 32s bit values?

Thank you.

battersby__brian
Beginner
92 Views

I implemented the following code which seems to be working for the most part, except the channels are shifted by one whole frame in the display, where the alpha data is shown in the red channel, red data shown in the green channel and green data shown in the blue channel.

this->m_p8uAlphaChannelData = ippiMalloc_8u_C1(width, height, &m_nStepBytes8u);
this->m_p8uRedChannelData = ippiMalloc_8u_C1(width, height, &m_nStepBytes8u);
this->m_p8uGreenChannelData = ippiMalloc_8u_C1(width, height, &m_nStepBytes8u);
this->m_p8uBlueChannelData = ippiMalloc_8u_C1(width, height, &m_nStepBytes8u);
this->m_p8uAlphaChannelData = ippiMalloc_8u_C1(width, height, &m_nStepBytes8u);
 
this->m_pCompositeBuffer = ippiMalloc_8u_C4(width, height, &m_nStepBytes8u);
 
status = ippsZero_8u(this->m_p8uAlphaChannelData, width*height);
 
status = ippsCopy_8u((Ipp8u*)m_p8uAlphaChannelData, this->m_pRGBInterleavedArray[0], width*height);
status = ippsCopy_8u((Ipp8u*)p8bitRedChannelDisplayData, this->m_pRGBInterleavedArray[1], width*height);
status = ippsCopy_8u((Ipp8u*)p8bitGreenChannelDisplayData, this->m_pRGBInterleavedArray[2], width*height);
status = ippsCopy_8u((Ipp8u*)p8bitBlueChannelDisplayData, this->m_pRGBInterleavedArray[3], width*height);
 
status = ippiCopy_8u_P4C4R(this->m_pRGBInterleavedArray, width, this->m_pCompositeBuffer, width*4, roiSize);
 
I suspect the shifting is caused by the destination buffer stepBytes value.  Can you tell me what that value should be to ensure the channel data is copied to the right location in the multi-channel image?
 
Thank you
Reply