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>
Makefile
common.mak
configure
libavcodec/mpegvideo_motion.c
libavutil/mem.c
library.mak

index 90dbbd2..fcb7e55 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -17,6 +17,7 @@ PROGS-$(CONFIG_FFSERVER) += ffserver
 
 PROGS      := $(PROGS-yes:%=%$(PROGSSUF)$(EXESUF))
 INSTPROGS   = $(PROGS-yes:%=%$(PROGSSUF)$(EXESUF))
+
 OBJS        = cmdutils.o $(EXEOBJS)
 OBJS-ffmpeg = ffmpeg_opt.o ffmpeg_filter.o
 TESTTOOLS   = audiogen videogen rotozoom tiny_psnr base64
index 751085d..0c48484 100644 (file)
@@ -56,6 +56,9 @@ COMPILE_S = $(call COMPILE,AS)
 %.o: %.S
        $(COMPILE_S)
 
+%.i: %.c
+       $(CC) $(CCFLAGS) $(CC_E) $<
+
 %.h.c:
        $(Q)echo '#include "$*.h"' >$@
 
index 28df15e..b5693ed 100755 (executable)
--- a/configure
+++ b/configure
@@ -4243,6 +4243,7 @@ ASFLAGS=$ASFLAGS
 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
index 261fc1c..18e6428 100644 (file)
@@ -178,20 +178,19 @@ static inline int hpel_motion(MpegEncContext *s,
                                   op_pixels_func *pix_op,
                                   int motion_x, int motion_y)
 {
-    int dxy;
+    int dxy = 0;
     int emu=0;
 
-    dxy = ((motion_y & 1) << 1) | (motion_x & 1);
     src_x += motion_x >> 1;
     src_y += motion_y >> 1;
 
     /* WARNING: do no forget half pels */
     src_x = av_clip(src_x, -16, s->width); //FIXME unneeded for emu?
-    if (src_x == s->width)
-        dxy &= ~1;
+    if (src_x != s->width)
+        dxy |= motion_x & 1;
     src_y = av_clip(src_y, -16, s->height);
-    if (src_y == s->height)
-        dxy &= ~2;
+    if (src_y != s->height)
+        dxy |= (motion_y & 1) << 1;
     src += src_y * s->linesize + src_x;
 
     if(s->unrestricted_mv && (s->flags&CODEC_FLAG_EMU_EDGE)){
index f3853b0..d73cdde 100644 (file)
@@ -246,29 +246,93 @@ void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *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) {
         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);
@@ -277,7 +341,29 @@ void av_memcpy_backptr(uint8_t *dst, int back, int cnt)
                 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;
     }
 }
 
index 809d629..470795c 100644 (file)
@@ -17,12 +17,19 @@ $(SUBDIR)%-test.o: $(SUBDIR)%-test.c
 $(SUBDIR)%-test.o: $(SUBDIR)%.c
        $(COMPILE_C)
 
+$(SUBDIR)%-test.i: $(SUBDIR)%-test.c
+       $(CC) $(CCFLAGS) $(CC_E) $<
+
+$(SUBDIR)%-test.i: $(SUBDIR)%.c
+       $(CC) $(CCFLAGS) $(CC_E) $<
+
 $(SUBDIR)x86/%.o: $(SUBDIR)x86/%.asm
        $(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=.s) $(LIBOBJS:.o=.i):   CPPFLAGS += -DHAVE_AV_CONFIG_H
+$(TESTOBJS) $(TESTOBJS:.o=.i): CPPFLAGS += -DTEST
 
 $(SUBDIR)$(LIBNAME): $(OBJS)
        $(RM) $@