mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avutil: Move memcpy_backptr() to mem.c
The function is used elsewhere and does not belong with the LZO code.
This commit is contained in:
parent
a6e9d64977
commit
5bac2d0c30
@ -24,7 +24,7 @@
|
|||||||
#include "bytestream.h"
|
#include "bytestream.h"
|
||||||
|
|
||||||
#include "libavutil/imgutils.h"
|
#include "libavutil/imgutils.h"
|
||||||
#include "libavutil/lzo.h" // for av_memcpy_backptr
|
#include "libavutil/mem.h"
|
||||||
|
|
||||||
typedef struct DfaContext {
|
typedef struct DfaContext {
|
||||||
AVFrame pic;
|
AVFrame pic;
|
||||||
|
@ -31,8 +31,8 @@
|
|||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#define BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
#include "libavutil/lzo.h"
|
|
||||||
#include "libavutil/imgutils.h"
|
#include "libavutil/imgutils.h"
|
||||||
|
#include "libavutil/mem.h"
|
||||||
|
|
||||||
#define EA_PREAMBLE_SIZE 8
|
#define EA_PREAMBLE_SIZE 8
|
||||||
#define kVGT_TAG MKTAG('k', 'V', 'G', 'T')
|
#define kVGT_TAG MKTAG('k', 'V', 'G', 'T')
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
#define BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "libavutil/audioconvert.h"
|
#include "libavutil/audioconvert.h"
|
||||||
#include "libavutil/lzo.h"
|
#include "libavutil/mem.h"
|
||||||
#include "libavutil/opt.h"
|
#include "libavutil/opt.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
|
@ -41,10 +41,10 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "libavutil/mem.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "bytestream.h"
|
#include "bytestream.h"
|
||||||
#include "lcl.h"
|
#include "lcl.h"
|
||||||
#include "libavutil/lzo.h"
|
|
||||||
|
|
||||||
#if CONFIG_ZLIB_DECODER
|
#if CONFIG_ZLIB_DECODER
|
||||||
#include <zlib.h>
|
#include <zlib.h>
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#include "libavutil/mem.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
@ -38,7 +39,6 @@
|
|||||||
#include "acelp_vectors.h"
|
#include "acelp_vectors.h"
|
||||||
#include "acelp_filters.h"
|
#include "acelp_filters.h"
|
||||||
#include "lsp.h"
|
#include "lsp.h"
|
||||||
#include "libavutil/lzo.h"
|
|
||||||
#include "dct.h"
|
#include "dct.h"
|
||||||
#include "rdft.h"
|
#include "rdft.h"
|
||||||
#include "sinewin.h"
|
#include "sinewin.h"
|
||||||
|
@ -33,12 +33,11 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "libavutil/intreadwrite.h"
|
#include "libavutil/intreadwrite.h"
|
||||||
|
#include "libavutil/mem.h"
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "bytestream.h"
|
#include "bytestream.h"
|
||||||
#define BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
// for av_memcpy_backptr
|
|
||||||
#include "libavutil/lzo.h"
|
|
||||||
|
|
||||||
#define RUNTIME_GAMMA 0
|
#define RUNTIME_GAMMA 0
|
||||||
|
|
||||||
|
@ -22,11 +22,10 @@
|
|||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
#include "libavutil/intreadwrite.h"
|
#include "libavutil/intreadwrite.h"
|
||||||
|
#include "libavutil/mem.h"
|
||||||
#include "bytestream.h"
|
#include "bytestream.h"
|
||||||
#define BITSTREAM_READER_LE
|
#define BITSTREAM_READER_LE
|
||||||
#include "get_bits.h"
|
#include "get_bits.h"
|
||||||
// for av_memcpy_backptr
|
|
||||||
#include "libavutil/lzo.h"
|
|
||||||
|
|
||||||
typedef struct XanContext {
|
typedef struct XanContext {
|
||||||
AVCodecContext *avctx;
|
AVCodecContext *avctx;
|
||||||
|
@ -100,8 +100,6 @@ static inline void copy(LZOContext *c, int cnt)
|
|||||||
c->out = dst + 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.
|
* @brief Copies previously decoded bytes to current position.
|
||||||
* @param back how many bytes back we start
|
* @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);
|
cnt = FFMAX(c->out_end - dst, 0);
|
||||||
c->error |= AV_LZO_OUTPUT_FULL;
|
c->error |= AV_LZO_OUTPUT_FULL;
|
||||||
}
|
}
|
||||||
memcpy_backptr(dst, back, cnt);
|
av_memcpy_backptr(dst, back, cnt);
|
||||||
c->out = dst + 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 av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen)
|
||||||
{
|
{
|
||||||
int state = 0;
|
int state = 0;
|
||||||
|
@ -59,17 +59,6 @@
|
|||||||
*/
|
*/
|
||||||
int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen);
|
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);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#if HAVE_MALLOC_H
|
#if HAVE_MALLOC_H
|
||||||
@ -34,6 +35,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "avutil.h"
|
#include "avutil.h"
|
||||||
|
#include "intreadwrite.h"
|
||||||
#include "mem.h"
|
#include "mem.h"
|
||||||
|
|
||||||
/* here we can use OS-dependent allocation functions */
|
/* here we can use OS-dependent allocation functions */
|
||||||
@ -177,3 +179,38 @@ char *av_strdup(const char *s)
|
|||||||
}
|
}
|
||||||
return ptr;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#define AVUTIL_MEM_H
|
#define AVUTIL_MEM_H
|
||||||
|
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#include "attributes.h"
|
#include "attributes.h"
|
||||||
#include "avutil.h"
|
#include "avutil.h"
|
||||||
@ -164,6 +165,17 @@ char *av_strdup(const char *s) av_malloc_attrib;
|
|||||||
*/
|
*/
|
||||||
void av_freep(void *ptr);
|
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);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user