Perform inverse transform of blocks of respective sizes according to VC-1 standard.
IppStatus ippiTransform8x8Inv_VC1_16s_C1IR(Ipp16s* pSrcDst, Ipp32s srcDstStep, IppiSize sizeNZ);
IppStatus ippiTransform4x8Inv_VC1_16s_C1IR(Ipp16s* pSrcDst, Ipp32s srcDstStep, IppiSize sizeNZ);
IppStatus ippiTransform8x4Inv_VC1_16s_C1IR(Ipp16s* pSrcDst, Ipp32s srcDstStep, IppiSize sizeNZ);
IppStatus ippiTransform4x4Inv_VC1_16s_C1IR(Ipp16s* pSrcDst, Ipp32s srcDstStep, IppiSize sizeNZ);
IppStatus ippiTransform8x8Inv_VC1_16s_C1R(const Ipp16s* pSrc, Ipp16s* pDst, Ipp32s srcDstStep, IppiSize sizeNZ);
IppStatus ippiTransform4x8Inv_VC1_16s_C1R(const Ipp16s* pSrc, Ipp16s* pDst, Ipp32s srcDstStep, IppiSize sizeNZ);
IppStatus ippiTransform8x4Inv_VC1_16s_C1R(const Ipp16s* pSrc, Ipp16s* pDst, Ipp32s srcDstStep, IppiSize sizeNZ);
IppStatus ippiTransform4x4Inv_VC1_16s_C1R(const Ipp16s* pSrc, Ipp16s* pDst, Ipp32s srcDstStep, IppiSize sizeNZ);
pSrcDst |
Pointer to the source and destination block. All samples of the source block should be in range [-2048; 2047). After transforming all samples of the destination block are in range [-512, 511). |
pSrc |
Pointer to the source block. All samples of the source block should be in range [-2048; 2047). |
pDst |
Pointer to the destination 8x8 block. After transforming all samples of the destination block are in range [-512, 511). |
srcDstStep |
Distance between starts of the consecutive lines in the source and destination blocks. |
sizeNZ |
Size of the top left-hand subblock with non-zero coefficients. This parameter is used by the function for improving performance with fast transforming algorithms if sizeNZ is less then block size. If sizeNZ is equal to the block size then “full” transforming algorithm is used. |
The functions ippiTransform8x8Inv_VC1_16s, ippiTransform4x8Inv_VC1_16s, ippiTransform8x4Inv_VC1_16s, and ippiTransform4x4Inv_VC1_16s are declared in the ippvc.h file. These functions perform inverse transform in accordance with Annex A: Transform Specification of [SMPTE421M].
ippiTransform8x8Inv_VC1_16s_C1IR and ippiTransform8x8Inv_VC1_16s_C1R perform inverse transform of 8x8 inter block with 8x8 transformation type or 8x8 intra block.
{ Ipp16s* pSrcDstData = pointer_on_source_and_destination_block; /* All samples of source block should be in the range [-2048; 2047) After transforming all samples of destination block will be in the range [-512, 511) */ Ipp32s srcDstStep = source_and_destination_step; /* Step of the pointer pSrcDstData (source and destination array) in bytes */ IppiSize dstSizeNZ = block_size_non_zero; /* The size of top left subblock with non-zero coefficients. This parameter is used by this function for improving performance with the help of "fast" transforming algorithms in the case of sizeNZ less than block size. If sizeNZ is equal to block size, then "full" transforming algorithm is used. Example (8x4 block): 16 0 0 -3 0 0 0 0 1 1 0 1 0 0 0 0 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 In this case dstSizeNZ.width=4, dstSizeNZ.height=3 */ IppStatus result; /* ippStsNoErr Indicates no error ippStsNullPtrErr Indicates an error when pSrcDstData is NULL */ result = ippiTransform8x8Inv_VC1_16s_C1IR(pSrcDstData, srcDstStep, dstSizeNZ); /* Performs inverse transform of 8x8 inter block with 8x8 transformation type or 8x8 intra block in accordance with Annex A "Transform Specification" SMPTE 421M */ }
{ Ipp16s* pSrcData = pointer_on_source_block; /* All samples of source block should be in the range [-2048; 2047) */ Ipp16s* pDstData = pointer_on_destination_block; /* After transforming all samples of destination block will be in the range [-512, 511) */ Ipp32s srcStep = source_step; /* Step of the pointer pSrcData (source array) in bytes*/ Ipp32s dstStep = destination_step; /* Step of the pointer pDstData (destination array) in bytes*/ IppiSize dstSizeNZ = block_size_non_zero; /* The size of top left subblock with non-zero coefficients. This parameter is used by this function for improving performance with the help of "fast" transforming algorithms in the case of sizeNZ less than block size. If sizeNZ is equal to block size, then "full" transforming algorithm is used. Example (8x4 block): 16 0 0 -3 0 0 0 0 1 1 0 1 0 0 0 0 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 In this case dstSizeNZ.width=4, dstSizeNZ.height=3 */ IppStatus result; /* ippStsNoErr Indicates no error ippStsNullPtrErr Indicates an error when pSrcData or pDstData is NULL */ result = ippiTransform8x8Inv_VC1_16s_C1R( pSrcData, srcStep, pDstData, dstStep, dstSizeNZ ); /* Performs inverse transform of 8x8 inter block with 8x8 transformation type or 8x8 intra block in accordance with Annex A "Transform Specification" SMPTE 421M */ }
ippiTransform4x8Inv_VC1_16s_C1IR and ippiTransform4x8Inv_VC1_16s_C1R perform inverse transform of 4x8 block into 8x8 inter block with 4x8 transformation type.
{ Ipp16s* pSrcDstData = pointer_on_source_and_destination_block; /* All samples of source block should be in the range [-2048; 2047) After transforming all samples of destination block will be in the range [-512, 511) */ Ipp32s srcDstStep = source_and_destination_step; /* Step of the pointer pSrcDstData (source and destination array) in bytes*/ IppiSize dstSizeNZ[2] = block_size_non_zero; /* The size of top left subblock with non-zero coefficients. This parameter is used by this function for improving performance with the help of "fast" transforming algorithms in the case of sizeNZ less than block size. If sizeNZ is equal to block size, then "full" transforming algorithm is used. Example (8x4 block): 16 0 0 -3 0 0 0 0 1 1 0 1 0 0 0 0 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 In this case dstSizeNZ.width=4, dstSizeNZ.height=3 */ IppStatus result; /* ippStsNoErr Indicates no error ippStsNullPtrErr Indicates an error when pSrcDstData is NULL */ result = ippiTransform4x8Inv_VC1_16s_C1IR(pSrcDstData,srcDstStep,dstSizeNZ[0]); result = ippiTransform4x8Inv_VC1_16s_C1IR(pSrcDstData+4,srcDstStep, dstSizeNZ[1]); /* Performs inverse transform of 4x8 subblock in 8x8 inter block with 4x8 transformation type in accordance with Annex A "Transform Specification" SMPTE 421M */ }
{ Ipp16s* pSrcData = pointer_on_source_block; /* All samples of source block should be in the range [-2048; 2047) */ Ipp16s* pDstData = pointer_on_destination_block; /* After transforming all samples of destination block will be in the range [-512, 511) */ Ipp32s srcStep = source_step; /* Step of the pointer pSrcData (source array) in bytes*/ Ipp32s dstStep = destination_step; /* Step of the pointer pDstData (destination array) in bytes*/ IppiSize dstSizeNZ[2] = block_size_non_zero; /* The size of top left subblock with non-zero coefficients. This parameter is used by this function for improving performance with the help of "fast" transforming algorithms in the case of sizeNZ less than block size. If sizeNZ is equal to block size, then "full" transforming algorithm is used. Example (8x4 block): 16 0 0 -3 0 0 0 0 1 1 0 1 0 0 0 0 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 In this case dstSizeNZ.width=4, dstSizeNZ.height=3 */ IppStatus result; /* ippStsNoErr Indicates no error ippStsNullPtrErr Indicates an error when pSrcData or pDstData is NULL */ result = ippiTransform4x8Inv_VC1_16s_C1R( pSrcData, srcStep, pDstData, dstStep, dstSizeNZ[0] ); result = ippiTransform4x8Inv_VC1_16s_C1R( pSrcData+4, srcStep, pDstData+4, dstStep, dstSizeNZ[1] ); /* Performs inverse transform of 4x8 subblock in 8x8 inter block with 4x8 transformation type in accordance with Annex A "Transform Specification" SMPTE 421M */ }
ippiTransform8x4Inv_VC1_16s_C1IR and ippiTransform8x4Inv_VC1_16s_C1R perform inverse transform of 8x4 subblock into 8x8 inter block with 8x4 transformation type.
{ Ipp16s* pSrcDstData = pointer_on_source_and_destination_block; /* All samples of source block should be in the range [-2048; 2047) After transforming all samples of destination block will be in the range [-512, 511) */ Ipp32s srcDstStep = source_and_destination_step; /* Step of the pointer pSrcDstData (source and destination array) in bytes */ IppiSize dstSizeNZ[2] = block_size_non_zero; /* The size of top left subblock with non-zero coefficients. This parameter is used by this function for improving performance with the help of "fast" transforming algorithms in the case of sizeNZ less than block size. If sizeNZ is equal to block size, then "full" transforming algorithm is used. Example (8x4 block): 16 0 0 -3 0 0 0 0 1 1 0 1 0 0 0 0 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 In this case dstSizeNZ.width=4, dstSizeNZ.height=3 */ IppStatus result; /* ippStsNoErr Indicates no error ippStsNullPtrErr Indicates an error when pSrcDstData is NULL */ result = ippiTransform8x4Inv_VC1_16s_C1IR( pSrcDstData, srcDstStep, dstSizeNZ[0] ); result = ippiTransform8x4Inv_VC1_16s_C1IR( pSrcDstData+(srcDstStep*2), srcDstStep, dstSizeNZ[1] ); /* Performs inverse transform of 8x4 subblock in 8x8 inter block with 8x4 transformation type in accordance with Annex A "Transform Specification" SMPTE 421M */ }
{ Ipp16s* pSrcData = pointer_on_source_block; /* All samples of source block should be in the range [-2048; 2047) */ Ipp16s* pDstData = pointer_on_destination_block; /* After transforming all samples of destination block will be in the range [-512, 511) */ Ipp32s srcStep = source_step; /* Step of the pointer pSrcData (source array) in bytes*/ Ipp32s dstStep = destination_step; /* Step of the pointer pDstData (destination array) in bytes*/ IppiSize dstSizeNZ[2] = block_size_non_zero; /* The size of top left subblock with non-zero coefficients. This parameter is used by this function for improving performance with the help of "fast" transforming algorithms in the case of sizeNZ less than block size. If sizeNZ is equal to block size, then "full" transforming algorithm is used. Example (8x4 block): 16 0 0 -3 0 0 0 0 1 1 0 1 0 0 0 0 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 In this case dstSizeNZ.width=4, dstSizeNZ.height=3 */ IppStatus result; /* ippStsNoErr Indicates no error ippStsNullPtrErr Indicates an error when pSrcData or pDstData is NULL */ result = ippiTransform8x4Inv_VC1_16s_C1R( pSrcData, srcStep, pDstData, dstStep, dstSizeNZ[0] ); result = ippiTransform8x4Inv_VC1_16s_C1R( pSrcData+(srcStep*2), srcStep, pDstData+(dstStep*2), dstStep, dstSizeNZ[1] ); /* Performs inverse transform of 8x4 subblock in 8x8 inter block with 8x4 transformation type in accordance with Annex A "Transform Specification" SMPTE 421M */ }
ippiTransform4x4Inv_VC1_16s_C1IR and ippiTransform4x4Inv_VC1_16s_C1R perform inverse transform of 4x4 block into 8x8 inter block with 4x4 transformation type.
{ Ipp16s* pSrcDstData = pointer_on_source_and_destination_block; /* All samples of source block should be in the range [-2048; 2047) After transforming all samples of destination block will be in the range [-512, 511) */ Ipp32s srcDstStep = source_and_destination_step; /* Step of the pointer pSrcDstData (source and destination array) in bytes */ IppiSize dstSizeNZ[4] = block_size_non_zero; /* The size of top left subblock with non-zero coefficients. This parameter is used by this function for improving performance with the help of "fast" transforming algorithms in the case of sizeNZ less than block size. If sizeNZ is equal to block size, then "full" transforming algorithm is used. Example (8x4 block): 16 0 0 -3 0 0 0 0 1 1 0 1 0 0 0 0 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 In this case dstSizeNZ.width=4, dstSizeNZ.height=3 */ IppStatus result; /* ippStsNoErr Indicates no error ippStsNullPtrErr Indicates an error when pSrcDstData is NULL */ result = ippiTransform4x4Inv_VC1_16s_C1IR( pSrcDstData, srcDstStep, dstSizeNZ[0] ); result = ippiTransform4x4Inv_VC1_16s_C1IR( pSrcDstData+4, srcDstStep, dstSizeNZ[1] ); result = ippiTransform4x4Inv_VC1_16s_C1IR( pSrcDstData+(srcDstStep*2), srcDstStep, dstSizeNZ[2] ); result = ippiTransform4x4Inv_VC1_16s_C1IR( pSrcDstData+(srcDstStep*2)+4, srcDstStep, dstSizeNZ[3] ); /* Performs inverse transform of 4x4 subblock in 8x8 inter block with 4x4 transformation type in accordance with Annex A "Transform Specification" SMPTE 421M */ }
{ Ipp16s* pSrcData = pointer_on_source_block; /* All samples of source block should be in the range [-2048; 2047) */ Ipp16s* pDstData = pointer_on_destination_block; /* After transforming all samples of destination block will be in the range [-512, 511) */ Ipp32s srcStep = source_step; /* Step of the pointer pSrcData (source array) in bytes*/ Ipp32s dstStep = destination_step; /* Step of the pointer pDstData (destination array) in bytes*/ IppiSize dstSizeNZ[4] = block_size_non_zero; /* The size of top left subblock with non-zero coefficients. This parameter is used by this function for improving performance with the help of "fast" transforming algorithms in the case of sizeNZ less than block size. If sizeNZ is equal to block size, then "full" transforming algorithm is used. Example (8x4 block): 16 0 0 -3 0 0 0 0 1 1 0 1 0 0 0 0 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 In this case dstSizeNZ.width=4, dstSizeNZ.height=3 */ IppStatus result; /* ippStsNoErr Indicates no error ippStsNullPtrErr Indicates an error when pSrcData or pDstData is NULL */ result = ippiTransform4x4Inv_VC1_16s_C1R( pSrcData, srcStep, pDstData, dstStep, dstSizeNZ[0] ); result = ippiTransform4x4Inv_VC1_16s_C1R( pSrcData+4, srcStep, pDstData+4, dstStep, dstSizeNZ[1] ); result = ippiTransform4x4Inv_VC1_16s_C1R( pSrcData+(srcStep*2), srcStep, pDstData+(dstStep*2), dstStep,dstSizeNZ[2] ); result = ippiTransform4x4Inv_VC1_16s_C1R( pSrcData+(srcStep*2)+4, srcStep, pDstData+(dstStep*2)+4, dstStep,dstSizeNZ[3] ); /* Performs inverse transform of 4x4 subblock in 8x8 inter block with 4x4 transformation type in accordance with Annex A "Transform Specification" SMPTE 421M */ }
See below for an example of 8x4 block transform.
In this case pDstSizeNZ -> width should be equal to 4, pDstSizeNZ -> height should be equal to 3.
ippStsNoErr |
Indicates no error. |
ippStsNullPtrErr |
Indicates an error condition when at least one of the specified pointers is NULL. |
Copyright © 2000 - 2010, Intel Corporation. All rights reserved.