Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Latest version of lzo.c
We have pulled commit 004b582 from 14 May 2016.

Tests have been moved to a different file, so the file is smaller.
I have kept local changes, except the removal of INT_MAX -1000.

Signed-off-by: Dimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com>
  • Loading branch information
Dimitri Papadopoulos authored and Dimitri Papadopoulos committed Jun 28, 2021
1 parent 7bada7c commit df0b825
Showing 1 changed file with 4 additions and 57 deletions.
61 changes: 4 additions & 57 deletions lzo.c
Expand Up @@ -20,6 +20,7 @@
*/

#include <string.h>
#include <limits.h>

//#include "avutil.h"
//#include "avassert.h"
Expand Down Expand Up @@ -67,7 +68,7 @@ static inline int get_len(LZOContext *c, int x, int mask)
int cnt = x & mask;
if (!cnt) {
while (!(x = get_byte(c))) {
if (cnt >= 65535) {
if (cnt >= INT_MAX - 1000) {
c->error |= AV_LZO_ERROR;
break;
}
Expand Down Expand Up @@ -122,6 +123,7 @@ static inline void copy(LZOContext *c, int cnt)
static inline void copy_backptr(LZOContext *c, int back, int cnt)
{
register uint8_t *dst = c->out;
/* Should never happen */
if (cnt <= 0) {
c->error |= AV_LZO_ERROR;
return;
Expand Down Expand Up @@ -168,7 +170,7 @@ int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen)
while (!c.error) {
int cnt, back;
if (x > 15) {
if (x > 63) { /* cccbbbnn BBBBBBBB */
if (x > 63) { /* cccbbbnn BBBBBBBB */
cnt = (x >> 5) - 1;
back = (GETB(c) << 3) + ((x >> 2) & 7) + 1;
} else if (x > 31) { /* 001ccccc (cccccccc...) bbbbbbnn BBBBBBBB */
Expand Down Expand Up @@ -210,58 +212,3 @@ int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen)
*outlen = c.out_end - c.out;
return c.error;
}

#ifdef TEST
#include <stdio.h>
#include <lzo/lzo1x.h>
#include "log.h"
#define MAXSZ (10*1024*1024)

/* Define one of these to 1 if you wish to benchmark liblzo
* instead of our native implementation. */
#define BENCHMARK_LIBLZO_SAFE 0
#define BENCHMARK_LIBLZO_UNSAFE 0

int main(int argc, char *argv[]) {
FILE *in = fopen(argv[1], "rb");
int comp_level = argc > 2 ? atoi(argv[2]) : 0;
uint8_t *orig = av_malloc(MAXSZ + 16);
uint8_t *comp = av_malloc(2*MAXSZ + 16);
uint8_t *decomp = av_malloc(MAXSZ + 16);
size_t s = fread(orig, 1, MAXSZ, in);
lzo_uint clen = 0;
long tmp[LZO1X_MEM_COMPRESS];
int inlen, outlen;
int i;
av_log_set_level(AV_LOG_DEBUG);
if (comp_level == 0) {
lzo1x_1_compress(orig, s, comp, &clen, tmp);
} else if (comp_level == 11) {
lzo1x_1_11_compress(orig, s, comp, &clen, tmp);
} else if (comp_level == 12) {
lzo1x_1_12_compress(orig, s, comp, &clen, tmp);
} else if (comp_level == 15) {
lzo1x_1_15_compress(orig, s, comp, &clen, tmp);
} else
lzo1x_999_compress(orig, s, comp, &clen, tmp);
for (i = 0; i < 300; i++) {
START_TIMER
inlen = clen; outlen = MAXSZ;
#if BENCHMARK_LIBLZO_SAFE
if (lzo1x_decompress_safe(comp, inlen, decomp, &outlen, NULL))
#elif BENCHMARK_LIBLZO_UNSAFE
if (lzo1x_decompress(comp, inlen, decomp, &outlen, NULL))
#else
if (av_lzo1x_decode(decomp, &outlen, comp, &inlen))
#endif
av_log(NULL, AV_LOG_ERROR, "decompression error\n");
STOP_TIMER("lzod")
}
if (memcmp(orig, decomp, s))
av_log(NULL, AV_LOG_ERROR, "decompression incorrect\n");
else
av_log(NULL, AV_LOG_ERROR, "decompression OK\n");
fclose(in);
return 0;
}
#endif

0 comments on commit df0b825

Please sign in to comment.