]> git.sesse.net Git - ffmpeg/commitdiff
Merge commit '0c7707610f46a28b65eff935500c78c9781f8f4f'
authorHendrik Leppkes <h.leppkes@gmail.com>
Mon, 7 Sep 2015 10:53:00 +0000 (12:53 +0200)
committerHendrik Leppkes <h.leppkes@gmail.com>
Mon, 7 Sep 2015 10:53:00 +0000 (12:53 +0200)
* commit '0c7707610f46a28b65eff935500c78c9781f8f4f':
  lavc: Add a lzf decompressor

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
1  2 
configure
libavcodec/Makefile
libavcodec/lzf.c
libavcodec/lzf.h

diff --cc configure
index 32f47523390d7588db8fdd8c017a4303ed59cd41,9e83285f2cbf2114856d5d8515492a7c43381609..a874b4fc73b6cb09e0df36e9afd00846e4cdb10d
+++ b/configure
@@@ -1925,9 -1612,8 +1925,10 @@@ CONFIG_EXTRA=
      jpegtables
      libx262
      lgplv3
 +    llauddsp
 +    llviddsp
      lpc
+     lzf
      me_cmp
      mpeg_er
      mpegaudio
index 20a20025fe30f266c82dcbb84a7b499a31e1563e,534fe4dfb0afad97d1c5f90702c0e341a8b99998..0830bb96275ae59fa3a0fe5915ebb98b0b3e84ea
@@@ -75,11 -66,10 +75,12 @@@ OBJS-$(CONFIG_INTRAX8)                 
  OBJS-$(CONFIG_IVIDSP)                  += ivi_dsp.o
  OBJS-$(CONFIG_JPEGTABLES)              += jpegtables.o
  OBJS-$(CONFIG_LIBXVID)                 += libxvid_rc.o
 +OBJS-$(CONFIG_LLAUDDSP)                += lossless_audiodsp.o
 +OBJS-$(CONFIG_LLVIDDSP)                += lossless_videodsp.o
  OBJS-$(CONFIG_LPC)                     += lpc.o
  OBJS-$(CONFIG_LSP)                     += lsp.o
 -OBJS-$(CONFIG_MDCT)                    += mdct_fixed.o mdct_float.o
+ OBJS-$(CONFIG_LZF)                     += lzf.o
 +OBJS-$(CONFIG_MDCT)                    += mdct_fixed.o mdct_float.o mdct_fixed_32.o
  OBJS-$(CONFIG_ME_CMP)                  += me_cmp.o
  OBJS-$(CONFIG_MPEG_ER)                 += mpeg_er.o
  OBJS-$(CONFIG_MPEGAUDIO)               += mpegaudio.o mpegaudiodata.o   \
index 0000000000000000000000000000000000000000,35b932bd087e9984a0686c31fbac7e0619aab750..409a7ffdd39e4d75f5dfa9d398db748a4944c714
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,90 +1,90 @@@
 - * This file is part of Libav.
+ /*
+  * lzf decompression algorithm
+  * Copyright (c) 2015 Luca Barbato
+  *
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+  * version 2.1 of the License, or (at your option) any later version.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * FFmpeg is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ /**
+  * @file
+  * lzf decompression
+  *
+  * LZF is a fast compression/decompression algorithm that takes very little
+  * code space and working memory, ideal for real-time and block compression.
+  *
+  * https://en.wikibooks.org/wiki/Data_Compression/Dictionary_compression#LZF
+  */
+ #include "libavutil/mem.h"
+ #include "bytestream.h"
+ #include "lzf.h"
+ #define LZF_LITERAL_MAX (1 << 5)
+ #define LZF_LONG_BACKREF 7 + 2
+ int ff_lzf_uncompress(GetByteContext *gb, uint8_t **buf, int64_t *size)
+ {
+     int ret     = 0;
+     uint8_t *p  = *buf;
+     int64_t len = 0;
+     while (bytestream2_get_bytes_left(gb) > 2) {
+         uint8_t s = bytestream2_get_byte(gb);
+         if (s < LZF_LITERAL_MAX) {
+             s++;
+             if (s > *size - len) {
+                 *size += *size /2;
+                 ret = av_reallocp(buf, *size);
+                 if (ret < 0)
+                     return ret;
+             }
+             bytestream2_get_buffer(gb, p, s);
+             p   += s;
+             len += s;
+         } else {
+             int l   = 2 + (s >> 5);
+             int off = ((s & 0x1f) << 8) + 1;
+             if (l == LZF_LONG_BACKREF)
+                 l += bytestream2_get_byte(gb);
+             off += bytestream2_get_byte(gb);
+             if (off > len)
+                 return AVERROR_INVALIDDATA;
+             if (l > *size - len) {
+                 *size += *size / 2;
+                 ret = av_reallocp(buf, *size);
+                 if (ret < 0)
+                     return ret;
+             }
+             av_memcpy_backptr(p, off, l);
+             p   += l;
+             len += l;
+         }
+     }
+     *size = len;
+     return 0;
+ }
index 0000000000000000000000000000000000000000,4951f2511f2aca1dff3f56aea870df52769af9b7..0ad73d9f796999015cc1db1069edfda883163810
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,29 +1,29 @@@
 - * This file is part of Libav.
+ /*
+  * lzf decompression algorithm
+  * Copyright (c) 2015 Luca Barbato
+  *
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+  * version 2.1 of the License, or (at your option) any later version.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * FFmpeg is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ #ifndef AVCODEC_LZF_H
+ #define AVCODEC_LZF_H
+ #include "bytestream.h"
+ int ff_lzf_uncompress(GetByteContext *gb, uint8_t **buf, int64_t *size);
+ #endif /* AVCODEC_LZF_H */