/*
// Copyright 2017 Intel Corporation All Rights Reserved.
//
// The source code, information and material ("Material") contained herein is
// owned by Intel Corporation or its suppliers or licensors, and title
// to such Material remains with Intel Corporation or its suppliers or
// licensors. The Material contains proprietary information of Intel
// or its suppliers and licensors. The Material is protected by worldwide
// copyright laws and treaty provisions. No part of the Material may be used,
// copied, reproduced, modified, published, uploaded, posted, transmitted,
// distributed or disclosed in any way without Intel's prior express written
// permission. No license under any patent, copyright or other intellectual
// property rights in the Material is granted to or conferred upon you,
// either expressly, by implication, inducement, estoppel or otherwise.
// Any license under such intellectual property rights must be express and
// approved by Intel in writing.
//
// Unless otherwise agreed by Intel in writing,
// you may not remove or alter this notice or any other notice embedded in
// Materials by Intel or Intel's suppliers or licensors in any way.
//
*/
/*
The example below shows how to use the functions:
ippsEncodeLZOGetSize
ippsEncodeLZO_8u
ippsEncodeLZOInit_8u
ippsDecodeLZO_8u
ippsDecodeLZOSafe_8u
*/
#include <stdio.h>
#include <string.h>
#include <ippdc.h> /* Data compression functions */
#include <ipps.h> /* Malloc/vector initialization function */
/* Next two defines are created to simplify code reading and understanding */
#define EXIT_MAIN exitLine: /* Label for Exit */
#define check_sts(st) if((st) != ippStsNoErr) goto exitLine; /* Go to Exit if
Intel(R) IPP function returned status different from ippStsNoErr */
#define TEST_SIZE (1024 * 4)
#define DECOMPR_MAX (TEST_SIZE + 64)
int main(void)
{
Ipp8u *srcBuf = NULL, *comprBuf = NULL, *decomprBuf = NULL;
IppStatus st;
int i;
Ipp32u stateSize;
IppLZOState_8u *lzoState = NULL;
Ipp32u comprLen, decomprLen;
/* Allocate buffers */
srcBuf = ippsMalloc_8u(TEST_SIZE);
decomprBuf = ippsMalloc_8u(DECOMPR_MAX); /* Extra 64 bytes may be required
for non-safe decompression */
comprBuf = ippsMalloc_8u(TEST_SIZE + TEST_SIZE/10);
/* Initialize source buffer */
check_sts( st = ippsVectorJaehne_8u(srcBuf, TEST_SIZE, IPP_MAX_8U) )
for(i = 0; i < TEST_SIZE; i++)
srcBuf[i] >>= 6; /* Decrease source data entropy */
/* Allocate and initialize LZO structure */
check_sts( st = ippsEncodeLZOGetSize(IppLZO1XST, TEST_SIZE, &stateSize) )
lzoState = (IppLZOState_8u*)ippsMalloc_8u(stateSize);
check_sts( st = ippsEncodeLZOInit_8u(IppLZO1XST, TEST_SIZE, lzoState) )
/* LZO compress, decompress and compare */
comprLen = (TEST_SIZE + TEST_SIZE/10);
check_sts( st = ippsEncodeLZO_8u(srcBuf, TEST_SIZE, comprBuf, &comprLen, lzoState) )
printf("LZO compress: %d bytes compressed into %d bytes\n", TEST_SIZE, (int)comprLen);
decomprLen = DECOMPR_MAX;
check_sts( st = ippsDecodeLZO_8u(comprBuf, comprLen, decomprBuf, &decomprLen) )
if(decomprLen != TEST_SIZE || memcmp(decomprBuf, srcBuf, TEST_SIZE) != 0)
{
printf("Non-safe decompress failed!\n");
st = ippStsErr;
goto exitLine;
}
else
printf("Non-safe decompress verified.\n");
/* Decompress using safe function */
ippsZero_8u(decomprBuf, DECOMPR_MAX);
decomprLen = TEST_SIZE; /* Can specify exact size */
check_sts( st = ippsDecodeLZOSafe_8u(comprBuf, comprLen, decomprBuf, &decomprLen) )
if(decomprLen != TEST_SIZE || memcmp(decomprBuf, srcBuf, TEST_SIZE) != 0)
{
printf("Safe decompress failed!\n");
st = ippStsErr;
goto exitLine;
}
else
printf("Safe decompress verified.\n");
EXIT_MAIN
ippsFree(srcBuf);
ippsFree(decomprBuf);
ippsFree(comprBuf);
ippsFree(lzoState);
return (int)st;
}