The following test program shows the sample usage and calling sequence of aocl - compression APIs to compress and decompress a test input :
1#include <stdio.h>
2#include <stdlib.h>
3#include "aocl_compression.h"
4
5int main(int argc, char** argv)
6{
7 aocl_compression_desc aocl_compression_ds;
8 aocl_compression_desc* aocl_compression_handle = &aocl_compression_ds;
9 FILE* inFp = NULL;
10 int file_size = 0;
11 char* inPtr = NULL, * compPtr = NULL, * decompPtr = NULL;
12 int64_t resultCompBound = 0, resultComp = 0, resultDecomp = 0;
13
14 printf("Running example_unified_api\n");
15 printf("Demonstrates using unified APIs for LZ4 compression and decompression\n");
16 if (argc < 2)
17 {
18 printf("Provide input test file path\n");
19 return -1;
20 }
21 inFp = fopen(argv[1], "rb");
22 fseek(inFp, 0L, SEEK_END);
23 file_size = ftell(inFp);
24 rewind(inFp);
25
26 // One of the compression methods as per aocl_compression_type
27 aocl_compression_type method = LZ4;
28 aocl_compression_handle->level = 0;
29 aocl_compression_handle->optVar = 0;
30 aocl_compression_handle->optOff = 0;
31 aocl_compression_handle->measureStats = 0;
32
33 // 1. setup and create a handle
34 if (aocl_llc_setup(aocl_compression_handle, method) != 0)
35 {
36 printf("Setup: failed\n");
37 goto error_exit;
38 }
39
40 // 2. allocate buffers
41 aocl_compression_handle->inSize = file_size;
42 resultCompBound = aocl_llc_compressBound(method, aocl_compression_handle->inSize);
43 if (resultCompBound < 0)
44 {
45 printf("CompressBound: failed\n");
46 goto error_exit;
47 }
48 aocl_compression_handle->outSize = resultCompBound;
49 inPtr = (char*)calloc(1, aocl_compression_handle->inSize);
50 compPtr = (char*)calloc(1, aocl_compression_handle->outSize);
51 decompPtr = (char*)calloc(1, aocl_compression_handle->inSize);
52 aocl_compression_handle->inBuf = inPtr;
53 aocl_compression_handle->outBuf = compPtr;
54 file_size = fread(inPtr, 1, file_size, inFp);
55
56 // 3. compress
57 resultComp = aocl_llc_compress(aocl_compression_handle, method);
58
59 if (resultComp <= 0)
60 {
61 printf("Compression: failed\n");
62 goto error_exit;
63 }
64 printf("Compression: done\n");
65
66 // 4. decompress
67 aocl_compression_handle->inSize = resultComp;
68 aocl_compression_handle->outSize = file_size;
69 aocl_compression_handle->inBuf = compPtr;
70 aocl_compression_handle->outBuf = decompPtr;
71
72 resultDecomp = aocl_llc_decompress(aocl_compression_handle, method);
73
74 if (resultDecomp <= 0)
75 {
76 printf("Decompression Failure\n");
77 goto error_exit;
78 }
79 printf("Decompression: done\n");
80
81 // 5. destroy handle
82 aocl_llc_destroy(aocl_compression_handle, method);
83
84error_exit:
85 if (inPtr)
86 free(inPtr);
87 if (compPtr)
88 free(compPtr);
89 if (decompPtr)
90 free(decompPtr);
91 if (inFp)
92 fclose(inFp);
93 return 0;
94}
To build this example test program on a Linux system using GCC or AOCC, you must specify path to aocl_compression.h header file and link with libaocl_compression.so file as follows:
gcc test.c -I <aocl_compression.h file path> -L <libaocl_compression.so directory path> -laocl_compression -Wl,-rpath=<libaocl_compression.so directory path>
Before running the example program, ensure it points to the right library dependencies for openMP, etc.