History

avfilter/vf_hflip: Move ff_hflip_init into a header

This removes a dependency of checkasm on lavfi/vf_hflip.o and also allows to inline ff_hflip_init() irrespectively of interposing.

Andreas Rheinhardt committed 4 years ago

Commit fbe4e821 parent 24936a94 files · +112 −88Browse files

Unified · Split

4 files
  1. libavfilter/hflip.h +0 −1
  2. libavfilter/vf_hflip.c +1 −87
  3. libavfilter/vf_hflip_init.h +110 −0
  4. tests/checkasm/vf_hflip.c +1 −0
libavfilter/hflip.h+0−1
@@ -34,7 +34,6 @@ typedef struct FlipContext { · 33 unmodified lines
3434 void (*flip_line[4])(const uint8_t *src, uint8_t *dst, int w);
3535 } FlipContext;
3636
37−int ff_hflip_init(FlipContext *s, int step[4], int nb_planes);
3837 void ff_hflip_init_x86(FlipContext *s, int step[4], int nb_planes);
3938
4039 #endif /* AVFILTER_HFLIP_H */
libavfilter/vf_hflip.c+1−87
@@ -31,6 +31,7 @@ · 30 unmodified lines
3131 #include "formats.h"
3232 #include "hflip.h"
3333 #include "internal.h"
34+#include "vf_hflip_init.h"
3435 #include "video.h"
3536 #include "libavutil/pixdesc.h"
3637 #include "libavutil/internal.h"
@@ -61,70 +62,6 @@ static int query_formats(AVFilterContext *ctx) · 24 unmodified lines
6162 return ff_set_common_formats(ctx, pix_fmts);
6263 }
6364
64−static void hflip_byte_c(const uint8_t *src, uint8_t *dst, int w)
65−{
66− int j;
67−
68− for (j = 0; j < w; j++)
69− dst[j] = src[-j];
70−}
71−
72−static void hflip_short_c(const uint8_t *ssrc, uint8_t *ddst, int w)
73−{
74− const uint16_t *src = (const uint16_t *)ssrc;
75− uint16_t *dst = (uint16_t *)ddst;
76− int j;
77−
78− for (j = 0; j < w; j++)
79− dst[j] = src[-j];
80−}
81−
82−static void hflip_dword_c(const uint8_t *ssrc, uint8_t *ddst, int w)
83−{
84− const uint32_t *src = (const uint32_t *)ssrc;
85− uint32_t *dst = (uint32_t *)ddst;
86− int j;
87−
88− for (j = 0; j < w; j++)
89− dst[j] = src[-j];
90−}
91−
92−static void hflip_b24_c(const uint8_t *src, uint8_t *dst, int w)
93−{
94− const uint8_t *in = src;
95− uint8_t *out = dst;
96− int j;
97−
98− for (j = 0; j < w; j++, out += 3, in -= 3) {
99− int32_t v = AV_RB24(in);
100−
101− AV_WB24(out, v);
102− }
103−}
104−
105−static void hflip_b48_c(const uint8_t *src, uint8_t *dst, int w)
106−{
107− const uint8_t *in = src;
108− uint8_t *out = dst;
109− int j;
110−
111− for (j = 0; j < w; j++, out += 6, in -= 6) {
112− int64_t v = AV_RB48(in);
113−
114− AV_WB48(out, v);
115− }
116−}
117−
118−static void hflip_qword_c(const uint8_t *ssrc, uint8_t *ddst, int w)
119−{
120− const uint64_t *src = (const uint64_t *)ssrc;
121− uint64_t *dst = (uint64_t *)ddst;
122− int j;
123−
124− for (j = 0; j < w; j++)
125− dst[j] = src[-j];
126−}
127−
12865 static int config_props(AVFilterLink *inlink)
12966 {
13067 FlipContext *s = inlink->dst->priv;
@@ -145,29 +82,6 @@ static int config_props(AVFilterLink *inlink) · 14 unmodified lines
14582 return ff_hflip_init(s, s->max_step, nb_planes);
14683 }
14784
148−int ff_hflip_init(FlipContext *s, int step[4], int nb_planes)
149−{
150− int i;
151−
152− for (i = 0; i < nb_planes; i++) {
153− step[i] *= s->bayer_plus1;
154− switch (step[i]) {
155− case 1: s->flip_line[i] = hflip_byte_c; break;
156− case 2: s->flip_line[i] = hflip_short_c; break;
157− case 3: s->flip_line[i] = hflip_b24_c; break;
158− case 4: s->flip_line[i] = hflip_dword_c; break;
159− case 6: s->flip_line[i] = hflip_b48_c; break;
160− case 8: s->flip_line[i] = hflip_qword_c; break;
161− default:
162− return AVERROR_BUG;
163− }
164− }
165− if (ARCH_X86)
166− ff_hflip_init_x86(s, step, nb_planes);
167−
168− return 0;
169−}
170−
17185 typedef struct ThreadData {
17286 AVFrame *in, *out;
17387 } ThreadData;
libavfilter/vf_hflip_init.h+110−0
@@ -0,0 +1,110 @@
1+/*
2+ * Copyright (c) 2007 Benoit Fouet
3+ * Copyright (c) 2010 Stefano Sabatini
4+ *
5+ * This file is part of FFmpeg.
6+ *
7+ * FFmpeg is free software; you can redistribute it and/or
8+ * modify it under the terms of the GNU Lesser General Public
9+ * License as published by the Free Software Foundation; either
10+ * version 2.1 of the License, or (at your option) any later version.
11+ *
12+ * FFmpeg is distributed in the hope that it will be useful,
13+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
14+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15+ * Lesser General Public License for more details.
16+ *
17+ * You should have received a copy of the GNU Lesser General Public
18+ * License along with FFmpeg; if not, write to the Free Software
19+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20+ */
21+
22+#ifndef AVFILTER_HFLIP_INIT_H
23+#define AVFILTER_HFLIP_INIT_H
24+
25+#include <stdint.h>
26+
27+#include "config.h"
28+#include "libavutil/attributes.h"
29+#include "libavutil/intreadwrite.h"
30+#include "hflip.h"
31+
32+static void hflip_byte_c(const uint8_t *src, uint8_t *dst, int w)
33+{
34+ for (int j = 0; j < w; j++)
35+ dst[j] = src[-j];
36+}
37+
38+static void hflip_short_c(const uint8_t *ssrc, uint8_t *ddst, int w)
39+{
40+ const uint16_t *src = (const uint16_t *)ssrc;
41+ uint16_t *dst = (uint16_t *)ddst;
42+
43+ for (int j = 0; j < w; j++)
44+ dst[j] = src[-j];
45+}
46+
47+static void hflip_dword_c(const uint8_t *ssrc, uint8_t *ddst, int w)
48+{
49+ const uint32_t *src = (const uint32_t *)ssrc;
50+ uint32_t *dst = (uint32_t *)ddst;
51+
52+ for (int j = 0; j < w; j++)
53+ dst[j] = src[-j];
54+}
55+
56+static void hflip_b24_c(const uint8_t *src, uint8_t *dst, int w)
57+{
58+ const uint8_t *in = src;
59+ uint8_t *out = dst;
60+
61+ for (int j = 0; j < w; j++, out += 3, in -= 3) {
62+ int32_t v = AV_RB24(in);
63+
64+ AV_WB24(out, v);
65+ }
66+}
67+
68+static void hflip_b48_c(const uint8_t *src, uint8_t *dst, int w)
69+{
70+ const uint8_t *in = src;
71+ uint8_t *out = dst;
72+
73+ for (int j = 0; j < w; j++, out += 6, in -= 6) {
74+ int64_t v = AV_RB48(in);
75+
76+ AV_WB48(out, v);
77+ }
78+}
79+
80+static void hflip_qword_c(const uint8_t *ssrc, uint8_t *ddst, int w)
81+{
82+ const uint64_t *src = (const uint64_t *)ssrc;
83+ uint64_t *dst = (uint64_t *)ddst;
84+
85+ for (int j = 0; j < w; j++)
86+ dst[j] = src[-j];
87+}
88+
89+static av_unused int ff_hflip_init(FlipContext *s, int step[4], int nb_planes)
90+{
91+ for (int i = 0; i < nb_planes; i++) {
92+ step[i] *= s->bayer_plus1;
93+ switch (step[i]) {
94+ case 1: s->flip_line[i] = hflip_byte_c; break;
95+ case 2: s->flip_line[i] = hflip_short_c; break;
96+ case 3: s->flip_line[i] = hflip_b24_c; break;
97+ case 4: s->flip_line[i] = hflip_dword_c; break;
98+ case 6: s->flip_line[i] = hflip_b48_c; break;
99+ case 8: s->flip_line[i] = hflip_qword_c; break;
100+ default:
101+ return AVERROR_BUG;
102+ }
103+ }
104+ if (ARCH_X86)
105+ ff_hflip_init_x86(s, step, nb_planes);
106+
107+ return 0;
108+}
109+
110+#endif /* AVFILTER_HFLIP_INIT_H */
tests/checkasm/vf_hflip.c+1−0
@@ -19,6 +19,7 @@ · 18 unmodified lines
1919 #include <string.h>
2020 #include "checkasm.h"
2121 #include "libavfilter/hflip.h"
22+#include "libavfilter/vf_hflip_init.h"
2223 #include "libavutil/intreadwrite.h"
2324 #include "libavutil/mem_internal.h"
2425

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t