[FFmpeg-devel] [PATCH] alpha/idctdsp: move idct init code out of dsputil

James Almer jamrial at gmail.com
Tue Jul 8 22:08:24 CEST 2014


Signed-off-by: James Almer <jamrial at gmail.com>
---
Untested as i don't have related hardware.

 libavcodec/alpha/Makefile                          | 14 +++---
 libavcodec/alpha/dsputil_alpha.c                   | 22 ---------
 libavcodec/alpha/dsputil_alpha.h                   | 13 -----
 libavcodec/alpha/idctdsp_alpha.c                   | 55 ++++++++++++++++++++++
 libavcodec/alpha/idctdsp_alpha.h                   | 34 +++++++++++++
 .../{dsputil_alpha_asm.S => idctdsp_alpha_asm.S}   |  2 +-
 libavcodec/alpha/simple_idct_alpha.c               |  2 +-
 libavcodec/idctdsp.c                               |  2 +
 libavcodec/idctdsp.h                               |  2 +
 9 files changed, 102 insertions(+), 44 deletions(-)
 create mode 100644 libavcodec/alpha/idctdsp_alpha.c
 create mode 100644 libavcodec/alpha/idctdsp_alpha.h
 rename libavcodec/alpha/{dsputil_alpha_asm.S => idctdsp_alpha_asm.S} (99%)

diff --git a/libavcodec/alpha/Makefile b/libavcodec/alpha/Makefile
index 8b7f1ab..34e5275 100644
--- a/libavcodec/alpha/Makefile
+++ b/libavcodec/alpha/Makefile
@@ -1,10 +1,10 @@
-OBJS += alpha/blockdsp_alpha.o                                          \
-        alpha/dsputil_alpha.o                                           \
-        alpha/dsputil_alpha_asm.o                                       \
-        alpha/motion_est_alpha.o                                        \
-        alpha/motion_est_mvi_asm.o                                      \
-        alpha/simple_idct_alpha.o                                       \
-
+OBJS-$(CONFIG_BLOCKDSP)                 += alpha/blockdsp_alpha.o
+OBJS-$(CONFIG_DSPUTIL)                  += alpha/dsputil_alpha.o        \
+                                           alpha/motion_est_alpha.o     \
+                                           alpha/motion_est_mvi_asm.o
 OBJS-$(CONFIG_HPELDSP)                  += alpha/hpeldsp_alpha.o        \
                                            alpha/hpeldsp_alpha_asm.o
+OBJS-$(CONFIG_IDCTDSP)                  += alpha/idctdsp_alpha.o        \
+                                           alpha/idctdsp_alpha_asm.o    \
+                                           alpha/simple_idct_alpha.o
 OBJS-$(CONFIG_MPEGVIDEO)                += alpha/mpegvideo_alpha.o
diff --git a/libavcodec/alpha/dsputil_alpha.c b/libavcodec/alpha/dsputil_alpha.c
index ad98cfa..06a1a6d 100644
--- a/libavcodec/alpha/dsputil_alpha.c
+++ b/libavcodec/alpha/dsputil_alpha.c
@@ -24,11 +24,6 @@
 #include "dsputil_alpha.h"
 #include "asm.h"
 
-void (*put_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels,
-                                 int line_size);
-void (*add_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels,
-                                 int line_size);
-
 #if 0
 /* These functions were the base for the optimized assembler routines,
    and remain here for documentation purposes.  */
@@ -107,11 +102,6 @@ av_cold void ff_dsputil_init_alpha(DSPContext *c, AVCodecContext *avctx)
 
     /* amask clears all bits that correspond to present features.  */
     if (amask(AMASK_MVI) == 0) {
-//      Disabled as these have been moved to a different context
-//      Patch to update these is welcome!
-//         c->put_pixels_clamped = put_pixels_clamped_mvi_asm;
-//         c->add_pixels_clamped = add_pixels_clamped_mvi_asm;
-
         if (!high_bit_depth)
             c->get_pixels   = get_pixels_mvi;
         c->diff_pixels      = diff_pixels_mvi;
@@ -124,16 +114,4 @@ av_cold void ff_dsputil_init_alpha(DSPContext *c, AVCodecContext *avctx)
         c->pix_abs[0][3]    = pix_abs16x16_xy2_mvi;
     }
 
-//      Disabled as these have been moved to a different context
-//      Patch to update these is welcome!
-//     put_pixels_clamped_axp_p = c->put_pixels_clamped;
-//     add_pixels_clamped_axp_p = c->add_pixels_clamped;
-//
-//     if (!avctx->lowres && avctx->bits_per_raw_sample <= 8 &&
-//         (avctx->idct_algo == FF_IDCT_AUTO ||
-//          avctx->idct_algo == FF_IDCT_SIMPLEALPHA)) {
-//         c->idct_put = ff_simple_idct_put_axp;
-//         c->idct_add = ff_simple_idct_add_axp;
-//         c->idct =     ff_simple_idct_axp;
-//     }
 }
diff --git a/libavcodec/alpha/dsputil_alpha.h b/libavcodec/alpha/dsputil_alpha.h
index 828cd16..bc29469 100644
--- a/libavcodec/alpha/dsputil_alpha.h
+++ b/libavcodec/alpha/dsputil_alpha.h
@@ -22,19 +22,6 @@
 #include <stddef.h>
 #include <stdint.h>
 
-void ff_simple_idct_axp(int16_t *block);
-void ff_simple_idct_put_axp(uint8_t *dest, int line_size, int16_t *block);
-void ff_simple_idct_add_axp(uint8_t *dest, int line_size, int16_t *block);
-
-void put_pixels_clamped_mvi_asm(const int16_t *block, uint8_t *pixels,
-                                int line_size);
-void add_pixels_clamped_mvi_asm(const int16_t *block, uint8_t *pixels,
-                                int line_size);
-extern void (*put_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels,
-                                        int line_size);
-extern void (*add_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels,
-                                        int line_size);
-
 void get_pixels_mvi(int16_t *restrict block,
                     const uint8_t *restrict pixels, int line_size);
 void diff_pixels_mvi(int16_t *block, const uint8_t *s1, const uint8_t *s2,
diff --git a/libavcodec/alpha/idctdsp_alpha.c b/libavcodec/alpha/idctdsp_alpha.c
new file mode 100644
index 0000000..de6c684
--- /dev/null
+++ b/libavcodec/alpha/idctdsp_alpha.c
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2002 Falk Hueffner <falk at debian.org>
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "libavutil/attributes.h"
+#include "libavcodec/idctdsp.h"
+#include "idctdsp_alpha.h"
+#include "asm.h"
+
+void put_pixels_clamped_mvi_asm(const int16_t *block, uint8_t *pixels,
+                                int line_size);
+void add_pixels_clamped_mvi_asm(const int16_t *block, uint8_t *pixels,
+                                int line_size);
+
+void (*put_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels,
+                                 int line_size);
+void (*add_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels,
+                                 int line_size);
+
+av_cold void ff_idctdsp_init_alpha(IDCTDSPContext *c, AVCodecContext *avctx,
+                                   unsigned high_bit_depth)
+{
+    /* amask clears all bits that correspond to present features.  */
+    if (amask(AMASK_MVI) == 0) {
+        c->put_pixels_clamped = put_pixels_clamped_mvi_asm;
+        c->add_pixels_clamped = add_pixels_clamped_mvi_asm;
+    }
+
+    put_pixels_clamped_axp_p = c->put_pixels_clamped;
+    add_pixels_clamped_axp_p = c->add_pixels_clamped;
+
+    if (!high_bit_depth && !avctx->lowres &&
+        (avctx->idct_algo == FF_IDCT_AUTO ||
+         avctx->idct_algo == FF_IDCT_SIMPLEALPHA)) {
+        c->idct_put = ff_simple_idct_put_axp;
+        c->idct_add = ff_simple_idct_add_axp;
+        c->idct =     ff_simple_idct_axp;
+    }
+}
diff --git a/libavcodec/alpha/idctdsp_alpha.h b/libavcodec/alpha/idctdsp_alpha.h
new file mode 100644
index 0000000..410ab2e
--- /dev/null
+++ b/libavcodec/alpha/idctdsp_alpha.h
@@ -0,0 +1,34 @@
+/*
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_ALPHA_IDCTDSP_ALPHA_H
+#define AVCODEC_ALPHA_IDCTDSP_ALPHA_H
+
+#include <stddef.h>
+#include <stdint.h>
+
+extern void (*put_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels,
+                                        int line_size);
+extern void (*add_pixels_clamped_axp_p)(const int16_t *block, uint8_t *pixels,
+                                        int line_size);
+
+void ff_simple_idct_axp(int16_t *block);
+void ff_simple_idct_put_axp(uint8_t *dest, int line_size, int16_t *block);
+void ff_simple_idct_add_axp(uint8_t *dest, int line_size, int16_t *block);
+
+#endif /* AVCODEC_ALPHA_IDCTDSP_ALPHA_H */
diff --git a/libavcodec/alpha/dsputil_alpha_asm.S b/libavcodec/alpha/idctdsp_alpha_asm.S
similarity index 99%
rename from libavcodec/alpha/dsputil_alpha_asm.S
rename to libavcodec/alpha/idctdsp_alpha_asm.S
index d801bcf..e3a8364 100644
--- a/libavcodec/alpha/dsputil_alpha_asm.S
+++ b/libavcodec/alpha/idctdsp_alpha_asm.S
@@ -1,5 +1,5 @@
 /*
- * Alpha optimized DSP utils
+ * Alpha optimized IDCT-related routines
  * Copyright (c) 2002 Falk Hueffner <falk at debian.org>
  *
  * This file is part of FFmpeg.
diff --git a/libavcodec/alpha/simple_idct_alpha.c b/libavcodec/alpha/simple_idct_alpha.c
index 3bd1b33..04be0ce 100644
--- a/libavcodec/alpha/simple_idct_alpha.c
+++ b/libavcodec/alpha/simple_idct_alpha.c
@@ -26,7 +26,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "dsputil_alpha.h"
+#include "idctdsp_alpha.h"
 #include "asm.h"
 
 // cos(i * M_PI / 16) * sqrt(2) * (1 << 14)
diff --git a/libavcodec/idctdsp.c b/libavcodec/idctdsp.c
index b0d4185..31a4854 100644
--- a/libavcodec/idctdsp.c
+++ b/libavcodec/idctdsp.c
@@ -299,6 +299,8 @@ av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx)
     c->put_signed_pixels_clamped = put_signed_pixels_clamped_c;
     c->add_pixels_clamped        = add_pixels_clamped_c;
 
+    if (ARCH_ALPHA)
+        ff_idctdsp_init_alpha(c, avctx, high_bit_depth);
     if (ARCH_ARM)
         ff_idctdsp_init_arm(c, avctx, high_bit_depth);
     if (ARCH_PPC)
diff --git a/libavcodec/idctdsp.h b/libavcodec/idctdsp.h
index d93790e..b1fa6e2 100644
--- a/libavcodec/idctdsp.h
+++ b/libavcodec/idctdsp.h
@@ -94,6 +94,8 @@ typedef struct IDCTDSPContext {
 
 void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx);
 
+void ff_idctdsp_init_alpha(IDCTDSPContext *c, AVCodecContext *avctx,
+                           unsigned high_bit_depth);
 void ff_idctdsp_init_arm(IDCTDSPContext *c, AVCodecContext *avctx,
                          unsigned high_bit_depth);
 void ff_idctdsp_init_ppc(IDCTDSPContext *c, AVCodecContext *avctx,
-- 
1.8.5.5



More information about the ffmpeg-devel mailing list