DCT8x4x2To4x4Inv_DV

Performs the inverse DCT for block 2x4x8 and then creates block 4x4.

Syntax

IppStatus ippiDCT8x4x2To4x4Inv_DV_16s_C1I(Ipp16s* pSrcDst);

Parameters

pSrcDst

Pointer to the source and destination block.

Note iconNote

There are two different types of blocks here: 8x8 (or 2x4x8) block as source and 4x4 (or 2x2) as destination.

Description

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.

Creating 4x4 Block from 8x8 Block



Storing New 4x4 Values



ippiDCT8x4x2To4x4Inv_DV_16s_C1I Usage  

...
//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.

Return Values

ippStsNoErr

Indicates no error.

ippStsNullPtrErr

Indicates an error when pSrcDst is NULL.


Submit feedback on this help topic

Copyright © 2000 - 2011, Intel Corporation. All rights reserved.