Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 25 Oct 2012 11:15:58 +0000 (13:15 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 25 Oct 2012 11:15:58 +0000 (13:15 +0200)
* 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: Michael Niedermayer <michaelni@gmx.at>
15 files changed:
1  2 
configure
libavcodec/dfa.c
libavcodec/eatgv.c
libavcodec/g723_1.c
libavcodec/lcldec.c
libavcodec/wmavoice.c
libavcodec/xan.c
libavcodec/xxan.c
libavformat/matroskadec.c
libavformat/smoothstreamingenc.c
libavutil/Makefile
libavutil/lzo.c
libavutil/lzo.h
libavutil/mem.c
libavutil/mem.h

diff --cc configure
+++ b/configure
@@@ -1170,15 -1030,13 +1171,16 @@@ CONFIG_LIST=
      libxavs
      libxvid
      lsp
+     lzo
      mdct
      memalign_hack
 +    memory_poisoning
      network
      nonfree
 +    openal
      openssl
      pic
 +    postproc
      rdft
      runtime_cpudetect
      safe_bitstream_reader
@@@ -1620,9 -1439,9 +1622,10 @@@ binkaudio_dct_decoder_select="mdct rdf
  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"
  dnxhd_encoder_select="aandcttables mpegvideoenc"
  dxa_decoder_select="zlib"
  eac3_decoder_select="ac3_decoder"
@@@ -1833,16 -1628,11 +1837,16 @@@ ac3_demuxer_select="ac3_parser
  asf_stream_muxer_select="asf_muxer"
  avisynth_demuxer_deps="avisynth"
  dirac_demuxer_select="dirac_parser"
 +dts_demuxer_select="dca_parser"
 +dtshd_demuxer_select="dca_parser"
  eac3_demuxer_select="ac3_parser"
 +f4v_muxer_select="mov_muxer"
  flac_demuxer_select="flac_parser"
  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"
  
  # Deal with common $arch aliases
  case "$arch" in
 -    arm*)
 +    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)
Simple merge
Simple merge
  
  #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"
  #include "get_bits.h"
  #include "acelp_vectors.h"
  #include "celp_filters.h"
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
@@@ -91,12 -85,11 +91,13 @@@ OBJS = adler32.
         samplefmt.o                                                      \
         sha.o                                                            \
         time.o                                                           \
 +       timecode.o                                                       \
         tree.o                                                           \
         utils.o                                                          \
 +       xga_font_data.o                                                  \
         xtea.o                                                           \
  
+ OBJS-$(CONFIG_LZO)                      += lzo.o
  
  OBJS += $(COMPAT_OBJS:%=../compat/%)
  
diff --cc libavutil/lzo.c
@@@ -100,11 -100,9 +100,9 @@@ static inline void copy(LZOContext *c, 
      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
 + * @param back how many bytes back we start, 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,
diff --cc libavutil/lzo.h
Simple merge
diff --cc libavutil/mem.c
@@@ -223,24 -180,37 +225,59 @@@ char *av_strdup(const char *s
      return ptr;
  }
  
 -    if (back == 1) {
 +/* add one element to a dynamic array */
 +void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem)
 +{
 +    /* see similar ffmpeg.c:grow_array() */
 +    int nb, nb_alloc;
 +    intptr_t *tab;
 +
 +    nb = *nb_ptr;
 +    tab = *(intptr_t**)tab_ptr;
 +    if ((nb & (nb - 1)) == 0) {
 +        if (nb == 0)
 +            nb_alloc = 1;
 +        else
 +            nb_alloc = nb * 2;
 +        tab = av_realloc(tab, nb_alloc * sizeof(intptr_t));
 +        *(intptr_t**)tab_ptr = tab;
 +    }
 +    tab[nb++] = (intptr_t)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);
+         }
+     }
+ }
++
diff --cc libavutil/mem.h
  #define AVUTIL_MEM_H
  
  #include <limits.h>
+ #include <stdint.h>
  
  #include "attributes.h"
 +#include "error.h"
  #include "avutil.h"
  
  /**
@@@ -188,35 -166,17 +189,46 @@@ char *av_strdup(const char *s) av_mallo
  void av_freep(void *ptr);
  
  /**
 - * @param back how many bytes back we start (the initial size of the overlapping window)
 + * Add an element to a dynamic array.
 + *
 + * @param tab_ptr Pointer to the array.
 + * @param nb_ptr  Pointer to the number of elements in the array.
 + * @param elem    Element to be added.
 + */
 +void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem);
 +
 +/**
 + * Multiply two size_t values checking for overflow.
 + * @return  0 if success, AVERROR(EINVAL) if overflow.
 + */
 +static inline int av_size_mult(size_t a, size_t b, size_t *r)
 +{
 +    size_t t = a * b;
 +    /* Hack inspired from glibc: only try the division if nelem and elsize
 +     * are both greater than sqrt(SIZE_MAX). */
 +    if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b)
 +        return AVERROR(EINVAL);
 +    *r = t;
 +    return 0;
 +}
 +
 +/**
 + * Set the maximum size that may me allocated in one block.
 + */
 +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);
+ /**
   * @}
   */