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: ...@@ -129,6 +129,7 @@ Component options:
--disable-dct disable DCT code --disable-dct disable DCT code
--disable-dwt disable DWT code --disable-dwt disable DWT code
--disable-lsp disable LSP code --disable-lsp disable LSP code
--disable-lzo disable LZO decoder code
--disable-mdct disable MDCT code --disable-mdct disable MDCT code
--disable-rdft disable RDFT code --disable-rdft disable RDFT code
--disable-fft disable FFT code --disable-fft disable FFT code
...@@ -1170,6 +1171,7 @@ CONFIG_LIST=" ...@@ -1170,6 +1171,7 @@ CONFIG_LIST="
libxavs libxavs
libxvid libxvid
lsp lsp
lzo
mdct mdct
memalign_hack memalign_hack
memory_poisoning memory_poisoning
...@@ -1620,6 +1622,7 @@ binkaudio_dct_decoder_select="mdct rdft dct sinewin" ...@@ -1620,6 +1622,7 @@ binkaudio_dct_decoder_select="mdct rdft dct sinewin"
binkaudio_rdft_decoder_select="mdct rdft sinewin" binkaudio_rdft_decoder_select="mdct rdft sinewin"
cavs_decoder_select="golomb mpegvideo" cavs_decoder_select="golomb mpegvideo"
cook_decoder_select="mdct sinewin" cook_decoder_select="mdct sinewin"
cscd_decoder_select="lzo"
cscd_decoder_suggest="zlib" cscd_decoder_suggest="zlib"
dca_decoder_select="mdct" dca_decoder_select="mdct"
dirac_decoder_select="dwt golomb" dirac_decoder_select="dwt golomb"
...@@ -1710,6 +1713,7 @@ msmpeg4v3_encoder_select="h263_encoder" ...@@ -1710,6 +1713,7 @@ msmpeg4v3_encoder_select="h263_encoder"
mss2_decoder_select="vc1_decoder" mss2_decoder_select="vc1_decoder"
nellymoser_decoder_select="mdct sinewin" nellymoser_decoder_select="mdct sinewin"
nellymoser_encoder_select="mdct sinewin" nellymoser_encoder_select="mdct sinewin"
nuv_decoder_select="lzo"
png_decoder_select="zlib" png_decoder_select="zlib"
png_encoder_select="zlib" png_encoder_select="zlib"
qcelp_decoder_select="lsp" qcelp_decoder_select="lsp"
...@@ -1842,7 +1846,7 @@ ipod_muxer_select="mov_muxer" ...@@ -1842,7 +1846,7 @@ ipod_muxer_select="mov_muxer"
libnut_demuxer_deps="libnut" libnut_demuxer_deps="libnut"
libnut_muxer_deps="libnut" libnut_muxer_deps="libnut"
matroska_audio_muxer_select="matroska_muxer" matroska_audio_muxer_select="matroska_muxer"
matroska_demuxer_suggest="zlib bzlib" matroska_demuxer_suggest="bzlib lzo zlib"
mov_demuxer_suggest="zlib" mov_demuxer_suggest="zlib"
mp3_demuxer_select="mpegaudio_parser" mp3_demuxer_select="mpegaudio_parser"
mp4_muxer_select="mov_muxer" mp4_muxer_select="mov_muxer"
...@@ -2740,21 +2744,13 @@ case "$arch" in ...@@ -2740,21 +2744,13 @@ case "$arch" in
arm*|iPad*) arm*|iPad*)
arch="arm" arch="arm"
;; ;;
mips|mipsel|IP*) mips*|IP*)
arch="mips" arch="mips"
;; ;;
mips64*) parisc*|hppa*)
arch="mips"
subarch="mips64"
;;
parisc|hppa)
arch="parisc"
;;
parisc64|hppa64)
arch="parisc" arch="parisc"
subarch="parisc64"
;; ;;
"Power Macintosh"|ppc|powerpc|ppc64|powerpc64) "Power Macintosh"|ppc*|powerpc*)
arch="ppc" arch="ppc"
;; ;;
s390|s390x) s390|s390x)
...@@ -2974,13 +2970,31 @@ EOF ...@@ -2974,13 +2970,31 @@ EOF
check_host_cflags -std=c99 check_host_cflags -std=c99
check_host_cflags -Wall 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 case "$arch" in
alpha|ia64|mips|parisc|sparc) alpha|ia64|sparc)
spic=$shared 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) x86)
subarch="x86_32" check_64bit x86_32 x86_64 'sizeof(void *) > 4'
check_code cc "" "int test[(int)sizeof(char*) - 7]" && subarch="x86_64"
if test "$subarch" = "x86_64"; then if test "$subarch" = "x86_64"; then
spic=$shared spic=$shared
fi fi
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,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 @@ ...@@ -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 @@ ...@@ -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 "internal.h" #include "internal.h"
......
...@@ -41,10 +41,10 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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;
......
...@@ -1078,6 +1078,7 @@ static int matroska_decode_buffer(uint8_t** buf, int* buf_size, ...@@ -1078,6 +1078,7 @@ static int matroska_decode_buffer(uint8_t** buf, int* buf_size,
memcpy(pkt_data + header_size, data, isize); memcpy(pkt_data + header_size, data, isize);
break; break;
} }
#if CONFIG_LZO
case MATROSKA_TRACK_ENCODING_COMP_LZO: case MATROSKA_TRACK_ENCODING_COMP_LZO:
do { do {
olen = pkt_size *= 3; olen = pkt_size *= 3;
...@@ -1095,6 +1096,7 @@ static int matroska_decode_buffer(uint8_t** buf, int* buf_size, ...@@ -1095,6 +1096,7 @@ static int matroska_decode_buffer(uint8_t** buf, int* buf_size,
} }
pkt_size -= olen; pkt_size -= olen;
break; break;
#endif
#if CONFIG_ZLIB #if CONFIG_ZLIB
case MATROSKA_TRACK_ENCODING_COMP_ZLIB: { case MATROSKA_TRACK_ENCODING_COMP_ZLIB: {
z_stream zstream = {0}; z_stream zstream = {0};
...@@ -1548,14 +1550,17 @@ static int matroska_read_header(AVFormatContext *s) ...@@ -1548,14 +1550,17 @@ static int matroska_read_header(AVFormatContext *s)
"Multiple combined encodings not supported"); "Multiple combined encodings not supported");
} else if (encodings_list->nb_elem == 1) { } else if (encodings_list->nb_elem == 1) {
if (encodings[0].type || if (encodings[0].type ||
(encodings[0].compression.algo != MATROSKA_TRACK_ENCODING_COMP_HEADERSTRIP && (
#if CONFIG_ZLIB #if CONFIG_ZLIB
encodings[0].compression.algo != MATROSKA_TRACK_ENCODING_COMP_ZLIB && encodings[0].compression.algo != MATROSKA_TRACK_ENCODING_COMP_ZLIB &&
#endif #endif
#if CONFIG_BZLIB #if CONFIG_BZLIB
encodings[0].compression.algo != MATROSKA_TRACK_ENCODING_COMP_BZLIB && encodings[0].compression.algo != MATROSKA_TRACK_ENCODING_COMP_BZLIB &&
#endif #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; encodings[0].scope = 0;
av_log(matroska->ctx, AV_LOG_ERROR, av_log(matroska->ctx, AV_LOG_ERROR,
"Unsupported encoding type"); "Unsupported encoding type");
......
...@@ -559,12 +559,15 @@ static int ism_write_packet(AVFormatContext *s, AVPacket *pkt) ...@@ -559,12 +559,15 @@ static int ism_write_packet(AVFormatContext *s, AVPacket *pkt)
SmoothStreamingContext *c = s->priv_data; SmoothStreamingContext *c = s->priv_data;
AVStream *st = s->streams[pkt->stream_index]; AVStream *st = s->streams[pkt->stream_index];
OutputStream *os = &c->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; 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) && if ((!c->has_video || st->codec->codec_type == AVMEDIA_TYPE_VIDEO) &&
av_compare_ts(pkt->pts, st->time_base, av_compare_ts(pkt->dts - st->first_dts, st->time_base,
end_pts, AV_TIME_BASE_Q) >= 0 && end_dts, AV_TIME_BASE_Q) >= 0 &&
pkt->flags & AV_PKT_FLAG_KEY && os->packets_written) { pkt->flags & AV_PKT_FLAG_KEY && os->packets_written) {
if ((ret = ism_flush(s, 0)) < 0) if ((ret = ism_flush(s, 0)) < 0)
......
...@@ -27,7 +27,6 @@ HEADERS = adler32.h \ ...@@ -27,7 +27,6 @@ HEADERS = adler32.h \
intreadwrite.h \ intreadwrite.h \
lfg.h \ lfg.h \
log.h \ log.h \
lzo.h \
mathematics.h \ mathematics.h \
md5.h \ md5.h \
mem.h \ mem.h \
...@@ -47,6 +46,8 @@ HEADERS = adler32.h \ ...@@ -47,6 +46,8 @@ HEADERS = adler32.h \
version.h \ version.h \
xtea.h \ xtea.h \
HEADERS-$(CONFIG_LZO) += lzo.h
ARCH_HEADERS = bswap.h \ ARCH_HEADERS = bswap.h \
intmath.h \ intmath.h \
intreadwrite.h \ intreadwrite.h \
...@@ -77,7 +78,6 @@ OBJS = adler32.o \ ...@@ -77,7 +78,6 @@ OBJS = adler32.o \
log.o \ log.o \
log2.o \ log2.o \
log2_tab.o \ log2_tab.o \
lzo.o \
mathematics.o \ mathematics.o \
md5.o \ md5.o \
mem.o \ mem.o \
...@@ -97,6 +97,7 @@ OBJS = adler32.o \ ...@@ -97,6 +97,7 @@ OBJS = adler32.o \
xga_font_data.o \ xga_font_data.o \
xtea.o \ xtea.o \
OBJS-$(CONFIG_LZO) += lzo.o
OBJS += $(COMPAT_OBJS:%=../compat/%) OBJS += $(COMPAT_OBJS:%=../compat/%)
......
...@@ -100,8 +100,6 @@ static inline void copy(LZOContext *c, int cnt) ...@@ -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, must be > 0 * @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) ...@@ -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 @@ ...@@ -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), 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 @@ ...@@ -29,6 +29,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
...@@ -36,6 +37,7 @@ ...@@ -36,6 +37,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 */
...@@ -244,3 +246,38 @@ void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem) ...@@ -244,3 +246,38 @@ void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem)
*nb_ptr = nb; *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 @@ ...@@ -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 "error.h" #include "error.h"
...@@ -216,6 +217,17 @@ static inline int av_size_mult(size_t a, size_t b, size_t *r) ...@@ -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); 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