[FFmpeg-devel] [PATCH 09/10] avcodec/v210_dec: Move ff_v210dec_init into a header

Andreas Rheinhardt andreas.rheinhardt at outlook.com
Tue May 3 09:37:50 EEST 2022


This removes a dependency of checkasm on lavc/v210_dec.o
and also allows to inline ff_v210dec_init() irrespectively of
interposing.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>
---
 libavcodec/v210dec.c      | 29 +------------------
 libavcodec/v210dec.h      |  1 -
 libavcodec/v210dec_init.h | 61 +++++++++++++++++++++++++++++++++++++++
 tests/checkasm/v210dec.c  |  2 +-
 4 files changed, 63 insertions(+), 30 deletions(-)
 create mode 100644 libavcodec/v210dec_init.h

diff --git a/libavcodec/v210dec.c b/libavcodec/v210dec.c
index b5e1d728a7..6c10ef6a7c 100644
--- a/libavcodec/v210dec.c
+++ b/libavcodec/v210dec.c
@@ -24,45 +24,18 @@
 #include "avcodec.h"
 #include "codec_internal.h"
 #include "v210dec.h"
+#include "v210dec_init.h"
 #include "libavutil/bswap.h"
 #include "libavutil/internal.h"
 #include "libavutil/intreadwrite.h"
 #include "thread.h"
 
-#define READ_PIXELS(a, b, c)         \
-    do {                             \
-        val  = av_le2ne32(*src++);   \
-        *a++ =  val & 0x3FF;         \
-        *b++ = (val >> 10) & 0x3FF;  \
-        *c++ = (val >> 20) & 0x3FF;  \
-    } while (0)
-
 typedef struct ThreadData {
     AVFrame *frame;
     uint8_t *buf;
     int stride;
 } ThreadData;
 
-static void v210_planar_unpack_c(const uint32_t *src, uint16_t *y, uint16_t *u, uint16_t *v, int width)
-{
-    uint32_t val;
-    int i;
-
-    for( i = 0; i < width-5; i += 6 ){
-        READ_PIXELS(u, y, v);
-        READ_PIXELS(y, u, y);
-        READ_PIXELS(v, y, u);
-        READ_PIXELS(y, v, y);
-    }
-}
-
-av_cold void ff_v210dec_init(V210DecContext *s)
-{
-    s->unpack_frame = v210_planar_unpack_c;
-    if (ARCH_X86)
-        ff_v210_x86_init(s);
-}
-
 static av_cold int decode_init(AVCodecContext *avctx)
 {
     V210DecContext *s = avctx->priv_data;
diff --git a/libavcodec/v210dec.h b/libavcodec/v210dec.h
index 662e266315..87ba38e151 100644
--- a/libavcodec/v210dec.h
+++ b/libavcodec/v210dec.h
@@ -32,7 +32,6 @@ typedef struct {
     void (*unpack_frame)(const uint32_t *src, uint16_t *y, uint16_t *u, uint16_t *v, int width);
 } V210DecContext;
 
-void ff_v210dec_init(V210DecContext *s);
 void ff_v210_x86_init(V210DecContext *s);
 
 #endif /* AVCODEC_V210DEC_H */
diff --git a/libavcodec/v210dec_init.h b/libavcodec/v210dec_init.h
new file mode 100644
index 0000000000..305ab3911e
--- /dev/null
+++ b/libavcodec/v210dec_init.h
@@ -0,0 +1,61 @@
+/*
+ * V210 decoder DSP init
+ *
+ * Copyright (C) 2009 Michael Niedermayer <michaelni at gmx.at>
+ * Copyright (c) 2009 Baptiste Coudurier <baptiste dot coudurier at gmail dot com>
+ *
+ * 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_V210DEC_INIT_H
+#define AVCODEC_V210DEC_INIT_H
+
+#include <stdint.h>
+
+#include "config.h"
+#include "libavutil/attributes.h"
+#include "libavutil/bswap.h"
+#include "v210dec.h"
+
+#define READ_PIXELS(a, b, c)         \
+    do {                             \
+        val  = av_le2ne32(*src++);   \
+        *a++ =  val & 0x3FF;         \
+        *b++ = (val >> 10) & 0x3FF;  \
+        *c++ = (val >> 20) & 0x3FF;  \
+    } while (0)
+
+static void v210_planar_unpack_c(const uint32_t *src, uint16_t *y, uint16_t *u, uint16_t *v, int width)
+{
+    uint32_t val;
+
+    for (int i = 0; i < width - 5; i += 6) {
+        READ_PIXELS(u, y, v);
+        READ_PIXELS(y, u, y);
+        READ_PIXELS(v, y, u);
+        READ_PIXELS(y, v, y);
+    }
+}
+
+static av_unused av_cold void ff_v210dec_init(V210DecContext *s)
+{
+    s->unpack_frame = v210_planar_unpack_c;
+    if (ARCH_X86)
+        ff_v210_x86_init(s);
+}
+
+#endif /* AVCODEC_V210DEC_INIT_H */
diff --git a/tests/checkasm/v210dec.c b/tests/checkasm/v210dec.c
index 7dd50a8271..6aef519cc5 100644
--- a/tests/checkasm/v210dec.c
+++ b/tests/checkasm/v210dec.c
@@ -20,7 +20,7 @@
 
 #include <string.h>
 #include "checkasm.h"
-#include "libavcodec/v210dec.h"
+#include "libavcodec/v210dec_init.h"
 
 static uint32_t get_v210(void)
 {
-- 
2.32.0



More information about the ffmpeg-devel mailing list