shithub: libvpx

Download patch

ref: ab77b4e8982740fe519ac116721c9c549ea60d31
parent: 55f74c59c735b589f253ba1427a1fec1f6837039
author: John Koleszar <jkoleszar@google.com>
date: Thu Jan 12 11:55:44 EST 2012

RTCD: add remaining IDCT functions

This commit continues the process of converting to the new RTCD
system.

Change-Id: I03c4dbf30dfd3558b0e256ff9d3ff4c012aadc80

--- a/vp8/common/arm/arm_systemdependent.c
+++ b/vp8/common/arm/arm_systemdependent.c
@@ -15,7 +15,6 @@
 #include "vp8/common/subpixel.h"
 #include "vp8/common/loopfilter.h"
 #include "vp8/common/recon.h"
-#include "vp8/common/idct.h"
 #include "vp8/common/onyxc_int.h"
 
 void vp8_arch_arm_common_init(VP8_COMMON *ctx)
@@ -44,9 +43,6 @@
         rtcd->subpix.bilinear8x4   = vp8_bilinear_predict8x4_armv6;
         rtcd->subpix.bilinear4x4   = vp8_bilinear_predict4x4_armv6;
 
-        rtcd->idct.idct16       = vp8_short_idct4x4llm_v6_dual;
-        rtcd->idct.iwalsh16     = vp8_short_inv_walsh4x4_v6;
-
         rtcd->recon.copy16x16   = vp8_copy_mem16x16_v6;
         rtcd->recon.copy8x8     = vp8_copy_mem8x8_v6;
         rtcd->recon.copy8x4     = vp8_copy_mem8x4_v6;
@@ -65,9 +61,6 @@
         rtcd->subpix.bilinear8x8   = vp8_bilinear_predict8x8_neon;
         rtcd->subpix.bilinear8x4   = vp8_bilinear_predict8x4_neon;
         rtcd->subpix.bilinear4x4   = vp8_bilinear_predict4x4_neon;
-
-        rtcd->idct.idct16       = vp8_short_idct4x4llm_neon;
-        rtcd->idct.iwalsh16     = vp8_short_inv_walsh4x4_neon;
 
         rtcd->recon.copy16x16   = vp8_copy_mem16x16_neon;
         rtcd->recon.copy8x8     = vp8_copy_mem8x8_neon;
--- a/vp8/common/arm/armv6/idct_blk_v6.c
+++ b/vp8/common/arm/armv6/idct_blk_v6.c
@@ -9,7 +9,7 @@
  */
 
 #include "vpx_config.h"
-#include "vp8/common/idct.h"
+#include "vpx_rtcd.h"
 
 
 void vp8_dequant_idct_add_y_block_v6(short *q, short *dq,
--- a/vp8/common/arm/idct_arm.h
+++ /dev/null
@@ -1,51 +1,0 @@
-/*
- *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-
-#ifndef IDCT_ARM_H
-#define IDCT_ARM_H
-
-#if HAVE_MEDIA
-extern prototype_idct(vp8_short_idct4x4llm_v6_dual);
-extern prototype_idct_scalar_add(vp8_dc_only_idct_add_v6);
-extern prototype_second_order(vp8_short_inv_walsh4x4_1_v6);
-extern prototype_second_order(vp8_short_inv_walsh4x4_v6);
-
-#if !CONFIG_RUNTIME_CPU_DETECT
-#undef  vp8_idct_idct16
-#define vp8_idct_idct16 vp8_short_idct4x4llm_v6_dual
-
-#undef  vp8_idct_idct1_scalar_add
-#define vp8_idct_idct1_scalar_add vp8_dc_only_idct_add_v6
-
-#undef  vp8_idct_iwalsh16
-#define vp8_idct_iwalsh16 vp8_short_inv_walsh4x4_v6
-#endif
-#endif
-
-#if HAVE_NEON
-extern prototype_idct(vp8_short_idct4x4llm_neon);
-extern prototype_idct_scalar_add(vp8_dc_only_idct_add_neon);
-extern prototype_second_order(vp8_short_inv_walsh4x4_1_neon);
-extern prototype_second_order(vp8_short_inv_walsh4x4_neon);
-
-#if !CONFIG_RUNTIME_CPU_DETECT
-#undef  vp8_idct_idct16
-#define vp8_idct_idct16 vp8_short_idct4x4llm_neon
-
-#undef  vp8_idct_idct1_scalar_add
-#define vp8_idct_idct1_scalar_add vp8_dc_only_idct_add_neon
-
-#undef  vp8_idct_iwalsh16
-#define vp8_idct_iwalsh16 vp8_short_inv_walsh4x4_neon
-#endif
-#endif
-
-#endif
--- a/vp8/common/arm/neon/idct_blk_neon.c
+++ b/vp8/common/arm/neon/idct_blk_neon.c
@@ -9,7 +9,7 @@
  */
 
 #include "vpx_config.h"
-#include "vp8/common/idct.h"
+#include "vpx_rtcd.h"
 
 /* place these declarations here because we don't want to maintain them
  * outside of this scope
--- a/vp8/common/dequantize.c
+++ b/vp8/common/dequantize.c
@@ -12,7 +12,6 @@
 #include "vpx_config.h"
 #include "vpx_rtcd.h"
 #include "vp8/common/blockd.h"
-#include "vp8/common/idct.h"
 #include "vpx_mem/vpx_mem.h"
 
 void vp8_dequantize_b_c(BLOCKD *d, short *DQC)
--- a/vp8/common/generic/systemdependent.c
+++ b/vp8/common/generic/systemdependent.c
@@ -14,7 +14,6 @@
 #include "vp8/common/subpixel.h"
 #include "vp8/common/loopfilter.h"
 #include "vp8/common/recon.h"
-#include "vp8/common/idct.h"
 #include "vp8/common/onyxc_int.h"
 
 #if CONFIG_MULTITHREAD
@@ -70,11 +69,6 @@
 #if CONFIG_RUNTIME_CPU_DETECT
     VP8_COMMON_RTCD *rtcd = &ctx->rtcd;
 
-
-    rtcd->idct.idct16       = vp8_short_idct4x4llm_c;
-    rtcd->idct.idct1_scalar_add = vp8_dc_only_idct_add_c;
-    rtcd->idct.iwalsh1      = vp8_short_inv_walsh4x4_1_c;
-    rtcd->idct.iwalsh16     = vp8_short_inv_walsh4x4_c;
 
     rtcd->recon.copy16x16   = vp8_copy_mem16x16_c;
     rtcd->recon.copy8x8     = vp8_copy_mem8x8_c;
--- a/vp8/common/idct.h
+++ /dev/null
@@ -1,80 +1,0 @@
-/*
- *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-
-#ifndef __INC_IDCT_H
-#define __INC_IDCT_H
-
-#define prototype_second_order(sym) \
-    void sym(short *input, short *output)
-
-#define prototype_idct(sym) \
-    void sym(short *input, unsigned char *pred, int pitch, unsigned char *dst, \
-             int dst_stride)
-
-#define prototype_idct_scalar_add(sym) \
-    void sym(short input, \
-            unsigned char *pred, int pred_stride, \
-            unsigned char *dst, \
-            int dst_stride)
-
-#if ARCH_X86 || ARCH_X86_64
-#include "x86/idct_x86.h"
-#endif
-
-#if ARCH_ARM
-#include "arm/idct_arm.h"
-#endif
-
-#ifndef vp8_idct_idct16
-#define vp8_idct_idct16 vp8_short_idct4x4llm_c
-#endif
-extern prototype_idct(vp8_idct_idct16);
-/* add this prototype to prevent compiler warning about implicit
- * declaration of vp8_short_idct4x4llm_c function in dequantize.c
- * when building, for example, neon optimized version */
-extern prototype_idct(vp8_short_idct4x4llm_c);
-
-#ifndef vp8_idct_idct1_scalar_add
-#define vp8_idct_idct1_scalar_add vp8_dc_only_idct_add_c
-#endif
-extern prototype_idct_scalar_add(vp8_idct_idct1_scalar_add);
-
-
-#ifndef vp8_idct_iwalsh1
-#define vp8_idct_iwalsh1 vp8_short_inv_walsh4x4_1_c
-#endif
-extern prototype_second_order(vp8_idct_iwalsh1);
-
-#ifndef vp8_idct_iwalsh16
-#define vp8_idct_iwalsh16 vp8_short_inv_walsh4x4_c
-#endif
-extern prototype_second_order(vp8_idct_iwalsh16);
-
-typedef prototype_idct((*vp8_idct_fn_t));
-typedef prototype_idct_scalar_add((*vp8_idct_scalar_add_fn_t));
-typedef prototype_second_order((*vp8_second_order_fn_t));
-
-typedef struct
-{
-    vp8_idct_fn_t            idct16;
-    vp8_idct_scalar_add_fn_t idct1_scalar_add;
-
-    vp8_second_order_fn_t iwalsh1;
-    vp8_second_order_fn_t iwalsh16;
-} vp8_idct_rtcd_vtable_t;
-
-#if CONFIG_RUNTIME_CPU_DETECT
-#define IDCT_INVOKE(ctx,fn) (ctx)->fn
-#else
-#define IDCT_INVOKE(ctx,fn) vp8_idct_##fn
-#endif
-
-#endif
--- a/vp8/common/idct_blk.c
+++ b/vp8/common/idct_blk.c
@@ -9,7 +9,7 @@
  */
 
 #include "vpx_config.h"
-#include "vp8/common/idct.h"
+#include "vpx_rtcd.h"
 
 void vp8_dequant_idct_add_c(short *input, short *dq,
                             unsigned char *dest, int stride);
--- a/vp8/common/invtrans.h
+++ b/vp8/common/invtrans.h
@@ -14,7 +14,6 @@
 
 #include "vpx_config.h"
 #include "vpx_rtcd.h"
-#include "idct.h"
 #include "blockd.h"
 #include "onyxc_int.h"
 
@@ -44,12 +43,12 @@
         /* do 2nd order transform on the dc block */
         if (xd->eobs[24] > 1)
         {
-            IDCT_INVOKE(&rtcd->idct, iwalsh16)
+            vp8_short_inv_walsh4x4
                 (&xd->block[24].dqcoeff[0], xd->qcoeff);
         }
         else
         {
-            IDCT_INVOKE(&rtcd->idct, iwalsh1)
+            vp8_short_inv_walsh4x4_1
                 (&xd->block[24].dqcoeff[0], xd->qcoeff);
         }
         eob_adjust(xd->eobs, xd->qcoeff);
--- a/vp8/common/onyxc_int.h
+++ b/vp8/common/onyxc_int.h
@@ -17,7 +17,6 @@
 #include "loopfilter.h"
 #include "entropymv.h"
 #include "entropy.h"
-#include "idct.h"
 #include "recon.h"
 #if CONFIG_POSTPROC
 #include "postproc.h"
@@ -73,7 +72,6 @@
 typedef struct VP8_COMMON_RTCD
 {
 #if CONFIG_RUNTIME_CPU_DETECT
-    vp8_idct_rtcd_vtable_t        idct;
     vp8_recon_rtcd_vtable_t       recon;
     vp8_subpix_rtcd_vtable_t      subpix;
 #if CONFIG_POSTPROC
--- a/vp8/common/rtcd_defs.sh
+++ b/vp8/common/rtcd_defs.sh
@@ -76,3 +76,25 @@
 vp8_loop_filter_simple_bh_sse2=vp8_loop_filter_bhs_sse2
 vp8_loop_filter_simple_bh_media=vp8_loop_filter_bhs_armv6
 vp8_loop_filter_simple_bh_neon=vp8_loop_filter_bhs_neon
+
+#
+# IDCT
+#
+#idct16
+prototype void vp8_short_idct4x4llm "short *input, unsigned char *pred, int pitch, unsigned char *dst, int dst_stride"
+specialize vp8_short_idct4x4llm mmx media neon
+vp8_short_idct4x4llm_media=vp8_short_idct4x4llm_v6_dual
+
+#iwalsh1
+prototype void vp8_short_inv_walsh4x4_1 "short *input, short *output"
+specialize vp8_short_inv_walsh4x4_1 c #no asm yet
+
+#iwalsh16
+prototype void vp8_short_inv_walsh4x4 "short *input, short *output"
+specialize vp8_short_inv_walsh4x4 mmx sse2 media neon
+vp8_short_inv_walsh4x4_media=vp8_short_inv_walsh4x4_v6
+
+#idct1_scalar_add
+prototype void vp8_dc_only_idct_add "short input, unsigned char *pred, int pred_stride, unsigned char *dst, int dst_stride"
+specialize vp8_dc_only_idct_add	mmx media neon
+vp8_dc_only_idct_add_media=vp8_dc_only_idct_add_v6
--- a/vp8/common/x86/idct_blk_mmx.c
+++ b/vp8/common/x86/idct_blk_mmx.c
@@ -10,7 +10,6 @@
 
 #include "vpx_config.h"
 #include "vpx_rtcd.h"
-#include "vp8/common/idct.h"
 #include "vp8/common/blockd.h"
 
 extern void vp8_dequantize_b_impl_mmx(short *sq, short *dq, short *q);
--- a/vp8/common/x86/idct_blk_sse2.c
+++ b/vp8/common/x86/idct_blk_sse2.c
@@ -9,7 +9,7 @@
  */
 
 #include "vpx_config.h"
-#include "vp8/common/idct.h"
+#include "vpx_rtcd.h"
 
 void vp8_idct_dequant_0_2x_sse2
             (short *q, short *dq ,
--- a/vp8/common/x86/idct_x86.h
+++ /dev/null
@@ -1,56 +1,0 @@
-/*
- *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-
-#ifndef IDCT_X86_H
-#define IDCT_X86_H
-
-/* Note:
- *
- * This platform is commonly built for runtime CPU detection. If you modify
- * any of the function mappings present in this file, be sure to also update
- * them in the function pointer initialization code
- */
-
-#if HAVE_MMX
-extern prototype_idct(vp8_short_idct4x4llm_mmx);
-extern prototype_idct_scalar_add(vp8_dc_only_idct_add_mmx);
-
-extern prototype_second_order(vp8_short_inv_walsh4x4_mmx);
-
-#if !CONFIG_RUNTIME_CPU_DETECT
-#undef  vp8_idct_idct16
-#define vp8_idct_idct16 vp8_short_idct4x4llm_mmx
-
-#undef  vp8_idct_idct1_scalar_add
-#define vp8_idct_idct1_scalar_add vp8_dc_only_idct_add_mmx
-
-#undef vp8_idct_iwalsh16
-#define vp8_idct_iwalsh16 vp8_short_inv_walsh4x4_mmx
-
-#endif
-#endif
-
-#if HAVE_SSE2
-
-extern prototype_second_order(vp8_short_inv_walsh4x4_sse2);
-
-#if !CONFIG_RUNTIME_CPU_DETECT
-
-#undef vp8_idct_iwalsh16
-#define vp8_idct_iwalsh16 vp8_short_inv_walsh4x4_sse2
-
-#endif
-
-#endif
-
-
-
-#endif
--- a/vp8/common/x86/x86_systemdependent.c
+++ b/vp8/common/x86/x86_systemdependent.c
@@ -14,7 +14,6 @@
 #include "vp8/common/subpixel.h"
 #include "vp8/common/loopfilter.h"
 #include "vp8/common/recon.h"
-#include "vp8/common/idct.h"
 #include "vp8/common/pragmas.h"
 #include "vp8/common/onyxc_int.h"
 
@@ -36,10 +35,6 @@
 
     if (flags & HAS_MMX)
     {
-        rtcd->idct.idct16       = vp8_short_idct4x4llm_mmx;
-        rtcd->idct.idct1_scalar_add = vp8_dc_only_idct_add_mmx;
-        rtcd->idct.iwalsh16     = vp8_short_inv_walsh4x4_mmx;
-
         rtcd->recon.copy8x8     = vp8_copy_mem8x8_mmx;
         rtcd->recon.copy8x4     = vp8_copy_mem8x4_mmx;
         rtcd->recon.copy16x16   = vp8_copy_mem16x16_mmx;
@@ -75,8 +70,6 @@
             vp8_build_intra_predictors_mby_sse2;
         rtcd->recon.build_intra_predictors_mby_s =
             vp8_build_intra_predictors_mby_s_sse2;
-
-        rtcd->idct.iwalsh16     = vp8_short_inv_walsh4x4_sse2;
 
         rtcd->subpix.sixtap16x16   = vp8_sixtap_predict16x16_sse2;
         rtcd->subpix.sixtap8x8     = vp8_sixtap_predict8x8_sse2;
--- a/vp8/decoder/decodframe.c
+++ b/vp8/decoder/decodframe.c
@@ -32,7 +32,6 @@
 #include "error_concealment.h"
 #endif
 #include "vpx_mem/vpx_mem.h"
-#include "vp8/common/idct.h"
 #include "vp8/common/threading.h"
 #include "decoderthreading.h"
 #include "dboolhuff.h"
@@ -200,7 +199,7 @@
                     }
                     else
                     {
-                        IDCT_INVOKE(RTCD_VTABLE(idct), idct1_scalar_add)
+                        vp8_dc_only_idct_add
                             (b->qcoeff[0] * DQC[0],
                             *(b->base_dst) + b->dst, b->dst_stride,
                             *(b->base_dst) + b->dst, b->dst_stride);
@@ -239,7 +238,7 @@
                 {
                     vp8_dequantize_b(b, xd->dequant_y2);
 
-                    IDCT_INVOKE(RTCD_VTABLE(idct), iwalsh16)(&b->dqcoeff[0],
+                    vp8_short_inv_walsh4x4(&b->dqcoeff[0],
                         xd->qcoeff);
                     ((int *)b->qcoeff)[0] = 0;
                     ((int *)b->qcoeff)[1] = 0;
@@ -253,7 +252,7 @@
                 else
                 {
                     b->dqcoeff[0] = b->qcoeff[0] * xd->dequant_y2[0];
-                    IDCT_INVOKE(RTCD_VTABLE(idct), iwalsh1)(&b->dqcoeff[0],
+                    vp8_short_inv_walsh4x4_1(&b->dqcoeff[0],
                         xd->qcoeff);
                     ((int *)b->qcoeff)[0] = 0;
                 }
--- a/vp8/decoder/threading.c
+++ b/vp8/decoder/threading.c
@@ -199,7 +199,7 @@
                 }
                 else
                 {
-                    IDCT_INVOKE(RTCD_VTABLE(idct), idct1_scalar_add)
+                    vp8_dc_only_idct_add
                         (b->qcoeff[0] * DQC[0],
                         *(b->base_dst) + b->dst, b->dst_stride,
                         *(b->base_dst) + b->dst, b->dst_stride);
@@ -221,7 +221,7 @@
             {
                 vp8_dequantize_b(b, xd->dequant_y2);
 
-                IDCT_INVOKE(RTCD_VTABLE(idct), iwalsh16)(&b->dqcoeff[0],
+                vp8_short_inv_walsh4x4(&b->dqcoeff[0],
                     xd->qcoeff);
                 ((int *)b->qcoeff)[0] = 0;
                 ((int *)b->qcoeff)[1] = 0;
@@ -235,7 +235,7 @@
             else
             {
                 b->dqcoeff[0] = b->qcoeff[0] * xd->dequant_y2[0];
-                IDCT_INVOKE(RTCD_VTABLE(idct), iwalsh1)(&b->dqcoeff[0], xd->qcoeff);
+                vp8_short_inv_walsh4x4_1(&b->dqcoeff[0], xd->qcoeff);
                 ((int *)b->qcoeff)[0] = 0;
             }
 
--- a/vp8/encoder/encodeintra.c
+++ b/vp8/encoder/encodeintra.c
@@ -10,7 +10,7 @@
 
 
 #include "vpx_config.h"
-#include "vp8/common/idct.h"
+#include "vpx_rtcd.h"
 #include "quantize.h"
 #include "vp8/common/reconintra.h"
 #include "vp8/common/reconintra4x4.h"
@@ -78,12 +78,12 @@
 
     if (*b->eob > 1)
     {
-        IDCT_INVOKE(IF_RTCD(&rtcd->common->idct), idct16)(b->dqcoeff,
+        vp8_short_idct4x4llm(b->dqcoeff,
             b->predictor, 16, *(b->base_dst) + b->dst, b->dst_stride);
     }
     else
     {
-        IDCT_INVOKE(IF_RTCD(&rtcd->common->idct), idct1_scalar_add)
+        vp8_dc_only_idct_add
             (b->dqcoeff[0], b->predictor, 16, *(b->base_dst) + b->dst,
                 b->dst_stride);
     }
--- a/vp8/encoder/rdopt.c
+++ b/vp8/encoder/rdopt.c
@@ -13,6 +13,8 @@
 #include <math.h>
 #include <limits.h>
 #include <assert.h>
+#include "vpx_config.h"
+#include "vpx_rtcd.h"
 #include "vp8/common/pragmas.h"
 
 #include "tokenize.h"
@@ -27,7 +29,6 @@
 #include "vp8/common/findnearmv.h"
 #include "encodemb.h"
 #include "quantize.h"
-#include "vp8/common/idct.h"
 #include "variance.h"
 #include "mcomp.h"
 #include "rdopt.h"
@@ -683,7 +684,7 @@
     }
     b->bmi.as_mode = (B_PREDICTION_MODE)(*best_mode);
 
-    IDCT_INVOKE(IF_RTCD(&cpi->rtcd.common->idct), idct16)(best_dqcoeff,
+    vp8_short_idct4x4llm(best_dqcoeff,
         best_predictor, 16, *(b->base_dst) + b->dst, b->dst_stride);
 
     return best_rd;
--- a/vp8/vp8_common.mk
+++ b/vp8/vp8_common.mk
@@ -39,7 +39,6 @@
 VP8_COMMON_SRCS-yes += common/extend.h
 VP8_COMMON_SRCS-yes += common/findnearmv.h
 VP8_COMMON_SRCS-yes += common/header.h
-VP8_COMMON_SRCS-yes += common/idct.h
 VP8_COMMON_SRCS-yes += common/invtrans.h
 VP8_COMMON_SRCS-yes += common/loopfilter.h
 VP8_COMMON_SRCS-yes += common/modecont.h
@@ -77,7 +76,6 @@
 
 VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/filter_x86.c
 VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/filter_x86.h
-VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/idct_x86.h
 VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/subpixel_x86.h
 VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/recon_x86.h
 VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/postproc_x86.h
@@ -112,7 +110,6 @@
 # common (c)
 VP8_COMMON_SRCS-$(ARCH_ARM)  += common/arm/arm_systemdependent.c
 VP8_COMMON_SRCS-$(ARCH_ARM)  += common/arm/filter_arm.c
-VP8_COMMON_SRCS-$(ARCH_ARM)  += common/arm/idct_arm.h
 VP8_COMMON_SRCS-$(ARCH_ARM)  += common/arm/loopfilter_arm.c
 VP8_COMMON_SRCS-$(ARCH_ARM)  += common/arm/recon_arm.h
 VP8_COMMON_SRCS-$(ARCH_ARM)  += common/arm/reconintra_arm.c