#include <stdio.h>
#include <blosc2.h>
#define KB 1024.
#define MB (1024*KB)
#define GB (1024*MB)
int main(int argc, char* argv[]) {
blosc2_init();
static char* data;
int32_t dsize;
int64_t nbytes, cbytes;
blosc_timestamp_t last, current;
double ttotal;
if (argc != 3) {
fprintf(stderr, "Usage: decompress_file input_file.b2frame output_file\n");
return -1;
}
printf("Blosc version info: %s (%s)\n",
BLOSC2_VERSION_STRING, BLOSC2_VERSION_DATE);
blosc2_schunk* schunk = blosc2_schunk_open(argv[1]);
data = (char*)malloc(schunk->chunksize);
blosc_set_timestamp(&last);
FILE* foutput = fopen(argv[2], "wb");
if (foutput == NULL) {
printf("Output file cannot be open.");
exit(1);
}
for (int nchunk = 0; nchunk < schunk->nchunks; nchunk++) {
dsize = blosc2_schunk_decompress_chunk(schunk, nchunk, data, schunk->chunksize);
if (dsize < 0) {
fprintf(stderr, "Decompression error. Error code: %d\n", dsize);
return dsize;
}
fwrite(data, dsize, 1, foutput);
}
fclose(foutput);
nbytes = schunk->nbytes;
cbytes = schunk->cbytes;
blosc_set_timestamp(¤t);
ttotal = blosc_elapsed_secs(last, current);
printf("Decompression ratio: %.1f MB -> %.1f MB (%.1fx)\n",
(float)cbytes / MB, (float)nbytes / MB, (1. * (float)cbytes) / (float)nbytes);
printf("Decompression time: %.3g s, %.1f MB/s\n",
ttotal, (float)nbytes / (ttotal * MB));
free(data);
blosc2_schunk_free(schunk);
blosc2_destroy();
return 0;
}