Performs the inverse DCT for block 2x4x8 and then creates block 4x4.
IppStatus ippiDCT8x4x2To4x4Inv_DV_16s_C1I(Ipp16s* pSrcDst);
pSrcDst |
Pointer to the source and destination block. |
There are two different types of blocks here: 8x8 (or 2x4x8) block as source and 4x4 (or 2x2) as destination.
This function is declared in the ippvc.h header file. The function ippiDCT8x4x2To4x4Inv_DV_16s_C1I performs the inverse DCT for a 2x4x8 block, then creates a 4x4 block: first, values in rows are averaged in pairs, then values in columns are averaged in pairs too. See "Creating 4x4 Block from 8x8 Block" for the new block values.
The pSrcDst parameter is a pointer to a block of 2x4x8 type. The function performs inverse DCT of the block and averages, first, two adjacent row elements and then two adjacent column elements. The averaging produces 16 elements all in all.
The resulting elements are stored in the memory in a row and without gaps (see "Storing New 4x4 Values" , AverageXX =AveXX) so that after the function is called the pSrcDst pointer points to the first element of the sixteen averaged elements.
... //mb_num = <current MacroBlock>; //b_num = <current Block>; //block_type - type of block //lpBlocks - pointer on current block (8x8 or 2x4x8) Ipp32s block_type = BlParam[mb_num * 6 + b_num].m0; // do iDCT, normal decoding, full resolution if (0 == block_type) ippiDCT8x8Inv_16s_C1I((short *) (lpsBlocks)); else ippiDCT2x4x8Inv_16s_C1I((short *) (lpsBlocks)); ... //If you want to get half resolution (1/2), use these functions: // do iDCT, half (1/2)resolution if (0 == block_type) //ippiDCT8x8Inv_16s_C1I((short *) (lpsBlocks)); ippiDCT8x8To4x4Inv_16s_C1I((short *) (lpsBlocks)); // function ippiDCT8x8To4x4Inv_16s_C1I() defined in ippi domain, and not ippvc! else //ippiDCT8x8Inv_16s_C1I((short *) (lpsBlocks)); ippiDCT8x4x2To4x4Inv_DV_16s_C1I ((short *) (lpsBlocks)); //After that, you increase performance and get half resolution picture.
ippStsNoErr |
Indicates no error. |
ippStsNullPtrErr |
Indicates an error when pSrcDst is NULL. |
Copyright © 2000 - 2011, Intel Corporation. All rights reserved.