Merge commit '4a606c830ae664013cea33800094d4d0f4ec62da'
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 23 Nov 2012 12:30:51 +0000 (13:30 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 23 Nov 2012 12:30:51 +0000 (13:30 +0100)
* commit '4a606c830ae664013cea33800094d4d0f4ec62da':
  av_memcpy_backptr: optimise some special cases
  mpegvideo: simplify dxy calculation in hpel_motion()
  build: add rules to generate preprocessed source files

Conflicts:
Makefile
libavutil/mem.c
library.mak

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
Makefile
common.mak
configure
libavcodec/mpegvideo_motion.c
libavutil/mem.c
library.mak

diff --cc Makefile
+++ b/Makefile
@@@ -8,17 -6,64 +8,18 @@@ vpath %.S    $(SRC_PATH
  vpath %.asm  $(SRC_PATH)
  vpath %.v    $(SRC_PATH)
  vpath %.texi $(SRC_PATH)
 +vpath %/fate_config.sh.template $(SRC_PATH)
  
 -ifndef V
 -Q      = @
 -ECHO   = printf "$(1)\t%s\n" $(2)
 -BRIEF  = CC HOSTCC HOSTLD AS YASM AR LD
 -SILENT = DEPCC DEPHOSTCC DEPAS DEPYASM RANLIB RM
 -MSG    = $@
 -M      = @$(call ECHO,$(TAG),$@);
 -$(foreach VAR,$(BRIEF), \
 -    $(eval override $(VAR) = @$$(call ECHO,$(VAR),$$(MSG)); $($(VAR))))
 -$(foreach VAR,$(SILENT),$(eval override $(VAR) = @$($(VAR))))
 -$(eval INSTALL = @$(call ECHO,INSTALL,$$(^:$(SRC_PATH)/%=%)); $(INSTALL))
 -endif
 -
 -ALLFFLIBS = avcodec avdevice avfilter avformat avresample avutil swscale
 -
 -IFLAGS     := -I. -I$(SRC_PATH)
 -CPPFLAGS   := $(IFLAGS) $(CPPFLAGS)
 -CFLAGS     += $(ECFLAGS)
 -CCFLAGS     = $(CPPFLAGS) $(CFLAGS)
 -ASFLAGS    := $(CPPFLAGS) $(ASFLAGS)
 -YASMFLAGS  += $(IFLAGS:%=%/) -Pconfig.asm
 -HOSTCCFLAGS = $(IFLAGS) $(HOSTCFLAGS)
 -LDFLAGS    := $(ALLFFLIBS:%=$(LD_PATH)lib%) $(LDFLAGS)
 -
 -define COMPILE
 -      $(call $(1)DEP,$(1))
 -      $($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $<
 -endef
 -
 -COMPILE_C = $(call COMPILE,CC)
 -COMPILE_S = $(call COMPILE,AS)
 -
 -%.o: %.c
 -      $(COMPILE_C)
 -
 -%.o: %.S
 -      $(COMPILE_S)
 +PROGS-$(CONFIG_FFMPEG)   += ffmpeg
 +PROGS-$(CONFIG_FFPLAY)   += ffplay
 +PROGS-$(CONFIG_FFPROBE)  += ffprobe
 +PROGS-$(CONFIG_FFSERVER) += ffserver
  
 -%.i: %.c
 -      $(CC) $(CCFLAGS) $(CC_E) $<
 +PROGS      := $(PROGS-yes:%=%$(PROGSSUF)$(EXESUF))
 +INSTPROGS   = $(PROGS-yes:%=%$(PROGSSUF)$(EXESUF))
 -%.h.c:
 -      $(Q)echo '#include "$*.h"' >$@
 -
 -%.ver: %.v
 -      $(Q)sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@
 -
 -%.c %.h: TAG = GEN
 -
 -PROGS-$(CONFIG_AVCONV)   += avconv
 -PROGS-$(CONFIG_AVPLAY)   += avplay
 -PROGS-$(CONFIG_AVPROBE)  += avprobe
 -PROGS-$(CONFIG_AVSERVER) += avserver
 -
 -PROGS      := $(PROGS-yes:%=%$(EXESUF))
  OBJS        = cmdutils.o $(EXEOBJS)
 -OBJS-avconv = avconv_opt.o avconv_filter.o
 +OBJS-ffmpeg = ffmpeg_opt.o ffmpeg_filter.o
  TESTTOOLS   = audiogen videogen rotozoom tiny_psnr base64
  HOSTPROGS  := $(TESTTOOLS:%=tests/%) doc/print_options
  TOOLS       = qt-faststart trasher
diff --cc common.mak
@@@ -5,77 -5,6 +5,80 @@@
  # first so "all" becomes default target
  all: all-yes
  
 +ifndef SUBDIR
 +
 +ifndef V
 +Q      = @
 +ECHO   = printf "$(1)\t%s\n" $(2)
 +BRIEF  = CC CXX HOSTCC HOSTLD AS YASM AR LD STRIP CP
 +SILENT = DEPCC DEPHOSTCC DEPAS DEPYASM RANLIB RM
 +
 +MSG    = $@
 +M      = @$(call ECHO,$(TAG),$@);
 +$(foreach VAR,$(BRIEF), \
 +    $(eval override $(VAR) = @$$(call ECHO,$(VAR),$$(MSG)); $($(VAR))))
 +$(foreach VAR,$(SILENT),$(eval override $(VAR) = @$($(VAR))))
 +$(eval INSTALL = @$(call ECHO,INSTALL,$$(^:$(SRC_DIR)/%=%)); $(INSTALL))
 +endif
 +
 +ALLFFLIBS = avcodec avdevice avfilter avformat avresample avutil postproc swscale swresample
 +
 +# NASM requires -I path terminated with /
 +IFLAGS     := -I. -I$(SRC_PATH)/
 +CPPFLAGS   := $(IFLAGS) $(CPPFLAGS)
 +CFLAGS     += $(ECFLAGS)
 +CCFLAGS     = $(CPPFLAGS) $(CFLAGS)
 +ASFLAGS    := $(CPPFLAGS) $(ASFLAGS)
 +CXXFLAGS   += $(CPPFLAGS) $(CFLAGS)
 +YASMFLAGS  += $(IFLAGS:%=%/) -Pconfig.asm
 +
 +HOSTCCFLAGS = $(IFLAGS) $(HOSTCFLAGS)
 +LDFLAGS    := $(ALLFFLIBS:%=$(LD_PATH)lib%) $(LDFLAGS)
 +
 +define COMPILE
 +       $(call $(1)DEP,$(1))
 +       $($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $<
 +endef
 +
 +COMPILE_C = $(call COMPILE,CC)
 +COMPILE_CXX = $(call COMPILE,CXX)
 +COMPILE_S = $(call COMPILE,AS)
 +
 +%.o: %.c
 +      $(COMPILE_C)
 +
 +%.o: %.cpp
 +      $(COMPILE_CXX)
 +
 +%.s: %.c
 +      $(CC) $(CPPFLAGS) $(CFLAGS) -S -o $@ $<
 +
 +%.o: %.S
 +      $(COMPILE_S)
 +
++%.i: %.c
++      $(CC) $(CCFLAGS) $(CC_E) $<
++
 +%.h.c:
 +      $(Q)echo '#include "$*.h"' >$@
 +
 +%.ver: %.v
 +      $(Q)sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@
 +
 +%.c %.h: TAG = GEN
 +
 +# Dummy rule to stop make trying to rebuild removed or renamed headers
 +%.h:
 +      @:
 +
 +# Disable suffix rules.  Most of the builtin rules are suffix rules,
 +# so this saves some time on slow systems.
 +.SUFFIXES:
 +
 +# Do not delete intermediate files from chains of implicit rules
 +$(OBJS):
 +endif
 +
  include $(SRC_PATH)/arch.mak
  
  OBJS      += $(OBJS-yes)
diff --cc configure
+++ b/configure
@@@ -4243,9 -3756,8 +4243,10 @@@ ASFLAGS=$ASFLAG
  AS_C=$AS_C
  AS_O=$AS_O
  CC_C=$CC_C
+ CC_E=$CC_E
  CC_O=$CC_O
 +CXX_C=$CXX_C
 +CXX_O=$CXX_O
  LD_O=$LD_O
  LD_LIB=$LD_LIB
  LD_PATH=$LD_PATH
Simple merge
diff --cc libavutil/mem.c
@@@ -225,50 -180,93 +225,114 @@@ char *av_strdup(const char *s
      return ptr;
  }
  
 +/* 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;
 +}
 +
+ static void fill16(uint8_t *dst, int len)
+ {
+     uint32_t v = AV_RN16(dst - 2);
+     v |= v << 16;
+     while (len >= 4) {
+         AV_WN32(dst, v);
+         dst += 4;
+         len -= 4;
+     }
+     while (len--) {
+         *dst = dst[-2];
+         dst++;
+     }
+ }
+ static void fill24(uint8_t *dst, int len)
+ {
+ #if HAVE_BIGENDIAN
+     uint32_t v = AV_RB24(dst - 3);
+     uint32_t a = v << 8  | v >> 16;
+     uint32_t b = v << 16 | v >> 8;
+     uint32_t c = v << 24 | v;
+ #else
+     uint32_t v = AV_RL24(dst - 3);
+     uint32_t a = v       | v << 24;
+     uint32_t b = v >> 8  | v << 16;
+     uint32_t c = v >> 16 | v << 8;
+ #endif
+     while (len >= 12) {
+         AV_WN32(dst,     a);
+         AV_WN32(dst + 4, b);
+         AV_WN32(dst + 8, c);
+         dst += 12;
+         len -= 12;
+     }
+     if (len >= 4) {
+         AV_WN32(dst, a);
+         dst += 4;
+         len -= 4;
+     }
+     if (len >= 4) {
+         AV_WN32(dst, b);
+         dst += 4;
+         len -= 4;
+     }
+     while (len--) {
+         *dst = dst[-3];
+         dst++;
+     }
+ }
+ static void fill32(uint8_t *dst, int len)
+ {
+     uint32_t v = AV_RN32(dst - 4);
+     while (len >= 4) {
+         AV_WN32(dst, v);
+         dst += 4;
+         len -= 4;
+     }
+     while (len--) {
+         *dst = dst[-4];
+         dst++;
+     }
+ }
  void av_memcpy_backptr(uint8_t *dst, int back, int cnt)
  {
      const uint8_t *src = &dst[-back];
 -    if (back == 1) {
 +    if (back <= 1) {
          memset(dst, *src, cnt);
+     } else if (back == 2) {
+         fill16(dst, cnt);
+     } else if (back == 3) {
+         fill24(dst, cnt);
+     } else if (back == 4) {
+         fill32(dst, 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) {
+         if (cnt >= 16) {
              int blocklen = back;
              while (cnt > blocklen) {
                  memcpy(dst, src, blocklen);
                  blocklen <<= 1;
              }
              memcpy(dst, src, cnt);
+             return;
+         }
+         if (cnt >= 8) {
+             AV_COPY32U(dst,     src);
+             AV_COPY32U(dst + 4, src + 4);
+             src += 8;
+             dst += 8;
+             cnt -= 8;
+         }
+         if (cnt >= 4) {
+             AV_COPY32U(dst, src);
+             src += 4;
+             dst += 4;
+             cnt -= 4;
+         }
+         if (cnt >= 2) {
+             AV_COPY16U(dst, src);
+             src += 2;
+             dst += 2;
+             cnt -= 2;
          }
+         if (cnt)
+             *dst = *src;
      }
  }
 +
diff --cc library.mak
@@@ -21,8 -27,9 +27,9 @@@ $(SUBDIR)x86/%.o: $(SUBDIR)x86/%.as
        $(DEPYASM) $(YASMFLAGS) -I $(<D)/ -M -o $@ $< > $(@:.o=.d)
        $(YASM) $(YASMFLAGS) -I $(<D)/ -o $@ $<
  
- $(OBJS) $(OBJS:.o=.s) $(SUBDIR)%.h.o $(TESTOBJS): CPPFLAGS += -DHAVE_AV_CONFIG_H
- $(TESTOBJS): CPPFLAGS += -DTEST
+ LIBOBJS := $(OBJS) $(SUBDIR)%.h.o $(TESTOBJS)
 -$(LIBOBJS) $(LIBOBJS:.o=.i):   CPPFLAGS += -DHAVE_AV_CONFIG_H
++$(LIBOBJS) $(LIBOBJS:.o=.s) $(LIBOBJS:.o=.i):   CPPFLAGS += -DHAVE_AV_CONFIG_H
+ $(TESTOBJS) $(TESTOBJS:.o=.i): CPPFLAGS += -DTEST
  
  $(SUBDIR)$(LIBNAME): $(OBJS)
        $(RM) $@