summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavcodec/dfa.c2
-rw-r--r--libavcodec/eatgv.c2
-rw-r--r--libavcodec/g723_1.c2
-rw-r--r--libavcodec/lcldec.c2
-rw-r--r--libavcodec/wmavoice.c2
-rw-r--r--libavcodec/xan.c3
-rw-r--r--libavcodec/xxan.c3
-rw-r--r--libavutil/lzo.c44
-rw-r--r--libavutil/lzo.h11
-rw-r--r--libavutil/mem.c37
-rw-r--r--libavutil/mem.h12
11 files changed, 57 insertions, 63 deletions
diff --git a/libavcodec/dfa.c b/libavcodec/dfa.c
index ae184d7b5f..1598f47c6c 100644
--- a/libavcodec/dfa.c
+++ b/libavcodec/dfa.c
@@ -24,7 +24,7 @@
#include "bytestream.h"
#include "libavutil/imgutils.h"
-#include "libavutil/lzo.h" // for av_memcpy_backptr
+#include "libavutil/mem.h"
typedef struct DfaContext {
AVFrame pic;
diff --git a/libavcodec/eatgv.c b/libavcodec/eatgv.c
index 404238b6ef..170eeb10d5 100644
--- a/libavcodec/eatgv.c
+++ b/libavcodec/eatgv.c
@@ -31,8 +31,8 @@
#include "avcodec.h"
#define BITSTREAM_READER_LE
#include "get_bits.h"
-#include "libavutil/lzo.h"
#include "libavutil/imgutils.h"
+#include "libavutil/mem.h"
#define EA_PREAMBLE_SIZE 8
#define kVGT_TAG MKTAG('k', 'V', 'G', 'T')
diff --git a/libavcodec/g723_1.c b/libavcodec/g723_1.c
index 5c213da64c..342c63473d 100644
--- a/libavcodec/g723_1.c
+++ b/libavcodec/g723_1.c
@@ -27,7 +27,7 @@
#define BITSTREAM_READER_LE
#include "libavutil/audioconvert.h"
-#include "libavutil/lzo.h"
+#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "get_bits.h"
diff --git a/libavcodec/lcldec.c b/libavcodec/lcldec.c
index 6b101ae6d1..c80d0fe30e 100644
--- a/libavcodec/lcldec.c
+++ b/libavcodec/lcldec.c
@@ -41,10 +41,10 @@
#include <stdio.h>
#include <stdlib.h>
+#include "libavutil/mem.h"
#include "avcodec.h"
#include "bytestream.h"
#include "lcl.h"
-#include "libavutil/lzo.h"
#if CONFIG_ZLIB_DECODER
#include <zlib.h>
diff --git a/libavcodec/wmavoice.c b/libavcodec/wmavoice.c
index 63caad2440..466d1ec495 100644
--- a/libavcodec/wmavoice.c
+++ b/libavcodec/wmavoice.c
@@ -29,6 +29,7 @@
#include <math.h>
+#include "libavutil/mem.h"
#include "dsputil.h"
#include "avcodec.h"
#include "get_bits.h"
@@ -38,7 +39,6 @@
#include "acelp_vectors.h"
#include "acelp_filters.h"
#include "lsp.h"
-#include "libavutil/lzo.h"
#include "dct.h"
#include "rdft.h"
#include "sinewin.h"
diff --git a/libavcodec/xan.c b/libavcodec/xan.c
index 586320b55e..e6bfc0da06 100644
--- a/libavcodec/xan.c
+++ b/libavcodec/xan.c
@@ -33,12 +33,11 @@
#include <string.h>
#include "libavutil/intreadwrite.h"
+#include "libavutil/mem.h"
#include "avcodec.h"
#include "bytestream.h"
#define BITSTREAM_READER_LE
#include "get_bits.h"
-// for av_memcpy_backptr
-#include "libavutil/lzo.h"
#define RUNTIME_GAMMA 0
diff --git a/libavcodec/xxan.c b/libavcodec/xxan.c
index b06d314d0f..2a5a8ca631 100644
--- a/libavcodec/xxan.c
+++ b/libavcodec/xxan.c
@@ -22,11 +22,10 @@
#include "avcodec.h"
#include "libavutil/intreadwrite.h"
+#include "libavutil/mem.h"
#include "bytestream.h"
#define BITSTREAM_READER_LE
#include "get_bits.h"
-// for av_memcpy_backptr
-#include "libavutil/lzo.h"
typedef struct XanContext {
AVCodecContext *avctx;
diff --git a/libavutil/lzo.c b/libavutil/lzo.c
index c17d32f362..eff3cd2333 100644
--- a/libavutil/lzo.c
+++ b/libavutil/lzo.c
@@ -100,8 +100,6 @@ static inline void copy(LZOContext *c, int cnt)
c->out = dst + cnt;
}
-static inline void memcpy_backptr(uint8_t *dst, int back, int cnt);
-
/**
* @brief Copies previously decoded bytes to current position.
* @param back how many bytes back we start
@@ -122,50 +120,10 @@ static inline void copy_backptr(LZOContext *c, int back, int cnt)
cnt = FFMAX(c->out_end - dst, 0);
c->error |= AV_LZO_OUTPUT_FULL;
}
- memcpy_backptr(dst, back, cnt);
+ av_memcpy_backptr(dst, back, cnt);
c->out = dst + cnt;
}
-static inline void memcpy_backptr(uint8_t *dst, int back, int cnt)
-{
- const uint8_t *src = &dst[-back];
- if (back == 1) {
- memset(dst, *src, cnt);
- } else {
- if (cnt >= 4) {
- AV_COPY16U(dst, src);
- AV_COPY16U(dst + 2, src + 2);
- src += 4;
- dst += 4;
- cnt -= 4;
- }
- if (cnt >= 8) {
- AV_COPY16U(dst, src);
- AV_COPY16U(dst + 2, src + 2);
- AV_COPY16U(dst + 4, src + 4);
- AV_COPY16U(dst + 6, src + 6);
- src += 8;
- dst += 8;
- cnt -= 8;
- }
- if (cnt > 0) {
- int blocklen = back;
- while (cnt > blocklen) {
- memcpy(dst, src, blocklen);
- dst += blocklen;
- cnt -= blocklen;
- blocklen <<= 1;
- }
- memcpy(dst, src, cnt);
- }
- }
-}
-
-void av_memcpy_backptr(uint8_t *dst, int back, int cnt)
-{
- memcpy_backptr(dst, back, cnt);
-}
-
int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen)
{
int state = 0;
diff --git a/libavutil/lzo.h b/libavutil/lzo.h
index a84b9bd15d..9d7e8f1dc1 100644
--- a/libavutil/lzo.h
+++ b/libavutil/lzo.h
@@ -60,17 +60,6 @@
int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen);
/**
- * @brief deliberately overlapping memcpy implementation
- * @param dst destination buffer
- * @param back how many bytes back we start (the initial size of the overlapping window)
- * @param cnt number of bytes to copy, must be >= 0
- *
- * cnt > back is valid, this will copy the bytes we just copied,
- * thus creating a repeating pattern with a period length of back.
- */
-void av_memcpy_backptr(uint8_t *dst, int back, int cnt);
-
-/**
* @}
*/
diff --git a/libavutil/mem.c b/libavutil/mem.c
index 16c1adb014..feba3163b0 100644
--- a/libavutil/mem.c
+++ b/libavutil/mem.c
@@ -27,6 +27,7 @@
#include "config.h"
#include <limits.h>
+#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#if HAVE_MALLOC_H
@@ -34,6 +35,7 @@
#endif
#include "avutil.h"
+#include "intreadwrite.h"
#include "mem.h"
/* here we can use OS-dependent allocation functions */
@@ -177,3 +179,38 @@ char *av_strdup(const char *s)
}
return ptr;
}
+
+void av_memcpy_backptr(uint8_t *dst, int back, int cnt)
+{
+ const uint8_t *src = &dst[-back];
+ if (back == 1) {
+ memset(dst, *src, cnt);
+ } else {
+ if (cnt >= 4) {
+ AV_COPY16U(dst, src);
+ AV_COPY16U(dst + 2, src + 2);
+ src += 4;
+ dst += 4;
+ cnt -= 4;
+ }
+ if (cnt >= 8) {
+ AV_COPY16U(dst, src);
+ AV_COPY16U(dst + 2, src + 2);
+ AV_COPY16U(dst + 4, src + 4);
+ AV_COPY16U(dst + 6, src + 6);
+ src += 8;
+ dst += 8;
+ cnt -= 8;
+ }
+ if (cnt > 0) {
+ int blocklen = back;
+ while (cnt > blocklen) {
+ memcpy(dst, src, blocklen);
+ dst += blocklen;
+ cnt -= blocklen;
+ blocklen <<= 1;
+ }
+ memcpy(dst, src, cnt);
+ }
+ }
+}
diff --git a/libavutil/mem.h b/libavutil/mem.h
index 4f14f27a91..8f4722447d 100644
--- a/libavutil/mem.h
+++ b/libavutil/mem.h
@@ -27,6 +27,7 @@
#define AVUTIL_MEM_H
#include <limits.h>
+#include <stdint.h>
#include "attributes.h"
#include "avutil.h"
@@ -165,6 +166,17 @@ char *av_strdup(const char *s) av_malloc_attrib;
void av_freep(void *ptr);
/**
+ * @brief deliberately overlapping memcpy implementation
+ * @param dst destination buffer
+ * @param back how many bytes back we start (the initial size of the overlapping window)
+ * @param cnt number of bytes to copy, must be >= 0
+ *
+ * cnt > back is valid, this will copy the bytes we just copied,
+ * thus creating a repeating pattern with a period length of back.
+ */
+void av_memcpy_backptr(uint8_t *dst, int back, int cnt);
+
+/**
* @}
*/