Example 1 - 5.2 English - 68552

AOCL API Guide (68552)

Document ID
68552
Release Date
2025-12-29
Version
5.2 English

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.