Commit aa604e8e authored by Michael Niedermayer's avatar Michael Niedermayer

Merge remote-tracking branch 'qatar/master'

* qatar/master:
  avutil: Make LZO decoder code configure-time selectable
  avutil: Move memcpy_backptr() to mem.c
  configure: detect parisc64 automatically
  configure: detect ppc64 automatically
  configure: detect mips64 automatically
  configure: generalise 64-bit test
  smoothstreamingenc: Don't assume streams start from timestamp 0

Conflicts:
	configure
	libavutil/Makefile
	libavutil/lzo.c
	libavutil/lzo.h
	libavutil/mem.c
	libavutil/mem.h
Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents d312ffdd 2a91ada8
......@@ -129,6 +129,7 @@ Component options:
--disable-dct disable DCT code
--disable-dwt disable DWT code
--disable-lsp disable LSP code
--disable-lzo disable LZO decoder code
--disable-mdct disable MDCT code
--disable-rdft disable RDFT code
--disable-fft disable FFT code
......@@ -1170,6 +1171,7 @@ CONFIG_LIST="
libxavs
libxvid
lsp
lzo
mdct
memalign_hack
memory_poisoning
......@@ -1620,6 +1622,7 @@ binkaudio_dct_decoder_select="mdct rdft dct sinewin"
binkaudio_rdft_decoder_select="mdct rdft sinewin"
cavs_decoder_select="golomb mpegvideo"
cook_decoder_select="mdct sinewin"
cscd_decoder_select="lzo"
cscd_decoder_suggest="zlib"
dca_decoder_select="mdct"
dirac_decoder_select="dwt golomb"
......@@ -1710,6 +1713,7 @@ msmpeg4v3_encoder_select="h263_encoder"
mss2_decoder_select="vc1_decoder"
nellymoser_decoder_select="mdct sinewin"
nellymoser_encoder_select="mdct sinewin"
nuv_decoder_select="lzo"
png_decoder_select="zlib"
png_encoder_select="zlib"
qcelp_decoder_select="lsp"
......@@ -1842,7 +1846,7 @@ ipod_muxer_select="mov_muxer"
libnut_demuxer_deps="libnut"
libnut_muxer_deps="libnut"
matroska_audio_muxer_select="matroska_muxer"
matroska_demuxer_suggest="zlib bzlib"
matroska_demuxer_suggest="bzlib lzo zlib"
mov_demuxer_suggest="zlib"
mp3_demuxer_select="mpegaudio_parser"
mp4_muxer_select="mov_muxer"
......@@ -2740,21 +2744,13 @@ case "$arch" in
arm*|iPad*)
arch="arm"
;;
mips|mipsel|IP*)
mips*|IP*)
arch="mips"
;;
mips64*)
arch="mips"
subarch="mips64"
;;
parisc|hppa)
arch="parisc"
;;
parisc64|hppa64)
parisc*|hppa*)
arch="parisc"
subarch="parisc64"
;;
"Power Macintosh"|ppc|powerpc|ppc64|powerpc64)
"Power Macintosh"|ppc*|powerpc*)
arch="ppc"
;;
s390|s390x)
......@@ -2974,13 +2970,31 @@ EOF
check_host_cflags -std=c99
check_host_cflags -Wall
check_64bit(){
arch32=$1
arch64=$2
expr=$3
check_code cc "" "int test[2*($expr) - 1]" &&
subarch=$arch64 || subarch=$arch32
}
case "$arch" in
alpha|ia64|mips|parisc|sparc)
alpha|ia64|sparc)
spic=$shared
;;
mips)
check_64bit mips mips64 '_MIPS_SIM > 1'
spic=$shared
;;
parisc)
check_64bit parisc parisc64 'sizeof(void *) > 4'
spic=$shared
;;
ppc)
check_64bit ppc ppc64 'sizeof(void *) > 4'
;;
x86)
subarch="x86_32"
check_code cc "" "int test[(int)sizeof(char*) - 7]" && subarch="x86_64"
check_64bit x86_32 x86_64 'sizeof(void *) > 4'
if test "$subarch" = "x86_64"; then
spic=$shared
fi
......
......@@ -25,7 +25,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;
......
......@@ -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')
......
......@@ -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 "internal.h"
......
......@@ -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>
......
......@@ -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"
......
......@@ -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
......
......@@ -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;
......
......@@ -1078,6 +1078,7 @@ static int matroska_decode_buffer(uint8_t** buf, int* buf_size,
memcpy(pkt_data + header_size, data, isize);
break;
}
#if CONFIG_LZO
case MATROSKA_TRACK_ENCODING_COMP_LZO:
do {
olen = pkt_size *= 3;
......@@ -1095,6 +1096,7 @@ static int matroska_decode_buffer(uint8_t** buf, int* buf_size,
}
pkt_size -= olen;
break;
#endif
#if CONFIG_ZLIB
case MATROSKA_TRACK_ENCODING_COMP_ZLIB: {
z_stream zstream = {0};
......@@ -1548,14 +1550,17 @@ static int matroska_read_header(AVFormatContext *s)
"Multiple combined encodings not supported");
} else if (encodings_list->nb_elem == 1) {
if (encodings[0].type ||
(encodings[0].compression.algo != MATROSKA_TRACK_ENCODING_COMP_HEADERSTRIP &&
(
#if CONFIG_ZLIB
encodings[0].compression.algo != MATROSKA_TRACK_ENCODING_COMP_ZLIB &&
#endif
#if CONFIG_BZLIB
encodings[0].compression.algo != MATROSKA_TRACK_ENCODING_COMP_BZLIB &&
#endif
encodings[0].compression.algo != MATROSKA_TRACK_ENCODING_COMP_LZO)) {
#if CONFIG_LZO
encodings[0].compression.algo != MATROSKA_TRACK_ENCODING_COMP_LZO &&
#endif
encodings[0].compression.algo != MATROSKA_TRACK_ENCODING_COMP_HEADERSTRIP)) {
encodings[0].scope = 0;
av_log(matroska->ctx, AV_LOG_ERROR,
"Unsupported encoding type");
......
......@@ -559,12 +559,15 @@ static int ism_write_packet(AVFormatContext *s, AVPacket *pkt)
SmoothStreamingContext *c = s->priv_data;
AVStream *st = s->streams[pkt->stream_index];
OutputStream *os = &c->streams[pkt->stream_index];
int64_t end_pts = (c->nb_fragments + 1) * c->min_frag_duration;
int64_t end_dts = (c->nb_fragments + 1) * c->min_frag_duration;
int ret;
if (st->first_dts == AV_NOPTS_VALUE)
st->first_dts = pkt->dts;
if ((!c->has_video || st->codec->codec_type == AVMEDIA_TYPE_VIDEO) &&
av_compare_ts(pkt->pts, st->time_base,
end_pts, AV_TIME_BASE_Q) >= 0 &&
av_compare_ts(pkt->dts - st->first_dts, st->time_base,
end_dts, AV_TIME_BASE_Q) >= 0 &&
pkt->flags & AV_PKT_FLAG_KEY && os->packets_written) {
if ((ret = ism_flush(s, 0)) < 0)
......
......@@ -27,7 +27,6 @@ HEADERS = adler32.h \
intreadwrite.h \
lfg.h \
log.h \
lzo.h \
mathematics.h \
md5.h \
mem.h \
......@@ -47,6 +46,8 @@ HEADERS = adler32.h \
version.h \
xtea.h \
HEADERS-$(CONFIG_LZO) += lzo.h
ARCH_HEADERS = bswap.h \
intmath.h \
intreadwrite.h \
......@@ -77,7 +78,6 @@ OBJS = adler32.o \
log.o \
log2.o \
log2_tab.o \
lzo.o \
mathematics.o \
md5.o \
mem.o \
......@@ -97,6 +97,7 @@ OBJS = adler32.o \
xga_font_data.o \
xtea.o \
OBJS-$(CONFIG_LZO) += lzo.o
OBJS += $(COMPAT_OBJS:%=../compat/%)
......
......@@ -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, must be > 0
......@@ -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;
......
......@@ -59,17 +59,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), must be > 0
* @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);
/**
* @}
*/
......
......@@ -29,6 +29,7 @@
#include "config.h"
#include <limits.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#if HAVE_MALLOC_H
......@@ -36,6 +37,7 @@
#endif
#include "avutil.h"
#include "intreadwrite.h"
#include "mem.h"
/* here we can use OS-dependent allocation functions */
......@@ -244,3 +246,38 @@ void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem)
*nb_ptr = nb;
}
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
#include <limits.h>
#include <stdint.h>
#include "attributes.h"
#include "error.h"
......@@ -216,6 +217,17 @@ static inline int av_size_mult(size_t a, size_t b, size_t *r)
*/
void av_max_alloc(size_t max);
/**
* @brief deliberately overlapping memcpy implementation
* @param dst destination buffer
* @param back how many bytes back we start (the initial size of the overlapping window), must be > 0
* @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);
/**
* @}
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment