Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
0419623c
Commit
0419623c
authored
Feb 22, 2018
by
Rodger Combs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavfi/vf_transpose: fix regression with semiplanar formats
(e.g. nv12) Regression since
7b19e76a
parent
4f40d64e
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
33 additions
and
25 deletions
+33
-25
vf_transpose.c
libavfilter/vf_transpose.c
+29
-21
filter-pixfmts-transpose
tests/ref/fate/filter-pixfmts-transpose
+4
-4
No files found.
libavfilter/vf_transpose.c
View file @
0419623c
...
...
@@ -52,6 +52,14 @@ enum TransposeDir {
TRANSPOSE_CLOCK_FLIP
,
};
typedef
struct
TransVtable
{
void
(
*
transpose_8x8
)(
uint8_t
*
src
,
ptrdiff_t
src_linesize
,
uint8_t
*
dst
,
ptrdiff_t
dst_linesize
);
void
(
*
transpose_block
)(
uint8_t
*
src
,
ptrdiff_t
src_linesize
,
uint8_t
*
dst
,
ptrdiff_t
dst_linesize
,
int
w
,
int
h
);
}
TransVtable
;
typedef
struct
TransContext
{
const
AVClass
*
class
;
int
hsub
,
vsub
;
...
...
@@ -61,11 +69,7 @@ typedef struct TransContext {
int
passthrough
;
///< PassthroughType, landscape passthrough mode enabled
int
dir
;
///< TransposeDir
void
(
*
transpose_8x8
)(
uint8_t
*
src
,
ptrdiff_t
src_linesize
,
uint8_t
*
dst
,
ptrdiff_t
dst_linesize
);
void
(
*
transpose_block
)(
uint8_t
*
src
,
ptrdiff_t
src_linesize
,
uint8_t
*
dst
,
ptrdiff_t
dst_linesize
,
int
w
,
int
h
);
TransVtable
vtables
[
4
];
}
TransContext
;
static
int
query_formats
(
AVFilterContext
*
ctx
)
...
...
@@ -233,19 +237,22 @@ static int config_props_output(AVFilterLink *outlink)
else
outlink
->
sample_aspect_ratio
=
inlink
->
sample_aspect_ratio
;
switch
(
s
->
pixsteps
[
0
])
{
case
1
:
s
->
transpose_block
=
transpose_block_8_c
;
s
->
transpose_8x8
=
transpose_8x8_8_c
;
break
;
case
2
:
s
->
transpose_block
=
transpose_block_16_c
;
s
->
transpose_8x8
=
transpose_8x8_16_c
;
break
;
case
3
:
s
->
transpose_block
=
transpose_block_24_c
;
s
->
transpose_8x8
=
transpose_8x8_24_c
;
break
;
case
4
:
s
->
transpose_block
=
transpose_block_32_c
;
s
->
transpose_8x8
=
transpose_8x8_32_c
;
break
;
case
6
:
s
->
transpose_block
=
transpose_block_48_c
;
s
->
transpose_8x8
=
transpose_8x8_48_c
;
break
;
case
8
:
s
->
transpose_block
=
transpose_block_64_c
;
s
->
transpose_8x8
=
transpose_8x8_64_c
;
break
;
for
(
int
i
=
0
;
i
<
4
;
i
++
)
{
TransVtable
*
v
=
&
s
->
vtables
[
i
];
switch
(
s
->
pixsteps
[
i
])
{
case
1
:
v
->
transpose_block
=
transpose_block_8_c
;
v
->
transpose_8x8
=
transpose_8x8_8_c
;
break
;
case
2
:
v
->
transpose_block
=
transpose_block_16_c
;
v
->
transpose_8x8
=
transpose_8x8_16_c
;
break
;
case
3
:
v
->
transpose_block
=
transpose_block_24_c
;
v
->
transpose_8x8
=
transpose_8x8_24_c
;
break
;
case
4
:
v
->
transpose_block
=
transpose_block_32_c
;
v
->
transpose_8x8
=
transpose_8x8_32_c
;
break
;
case
6
:
v
->
transpose_block
=
transpose_block_48_c
;
v
->
transpose_8x8
=
transpose_8x8_48_c
;
break
;
case
8
:
v
->
transpose_block
=
transpose_block_64_c
;
v
->
transpose_8x8
=
transpose_8x8_64_c
;
break
;
}
}
av_log
(
ctx
,
AV_LOG_VERBOSE
,
...
...
@@ -290,6 +297,7 @@ static int filter_slice(AVFilterContext *ctx, void *arg, int jobnr,
uint8_t
*
dst
,
*
src
;
int
dstlinesize
,
srclinesize
;
int
x
,
y
;
TransVtable
*
v
=
&
s
->
vtables
[
plane
];
dstlinesize
=
out
->
linesize
[
plane
];
dst
=
out
->
data
[
plane
]
+
start
*
dstlinesize
;
...
...
@@ -308,20 +316,20 @@ static int filter_slice(AVFilterContext *ctx, void *arg, int jobnr,
for
(
y
=
start
;
y
<
end
-
7
;
y
+=
8
)
{
for
(
x
=
0
;
x
<
outw
-
7
;
x
+=
8
)
{
s
->
transpose_8x8
(
src
+
x
*
srclinesize
+
y
*
pixstep
,
v
->
transpose_8x8
(
src
+
x
*
srclinesize
+
y
*
pixstep
,
srclinesize
,
dst
+
(
y
-
start
)
*
dstlinesize
+
x
*
pixstep
,
dstlinesize
);
}
if
(
outw
-
x
>
0
&&
end
-
y
>
0
)
s
->
transpose_block
(
src
+
x
*
srclinesize
+
y
*
pixstep
,
v
->
transpose_block
(
src
+
x
*
srclinesize
+
y
*
pixstep
,
srclinesize
,
dst
+
(
y
-
start
)
*
dstlinesize
+
x
*
pixstep
,
dstlinesize
,
outw
-
x
,
end
-
y
);
}
if
(
end
-
y
>
0
)
s
->
transpose_block
(
src
+
0
*
srclinesize
+
y
*
pixstep
,
v
->
transpose_block
(
src
+
0
*
srclinesize
+
y
*
pixstep
,
srclinesize
,
dst
+
(
y
-
start
)
*
dstlinesize
+
0
*
pixstep
,
dstlinesize
,
outw
,
end
-
y
);
...
...
tests/ref/fate/filter-pixfmts-transpose
View file @
0419623c
...
...
@@ -45,10 +45,10 @@ gray16be 4aef307021a91b1de67f1d4381a39132
gray16le 76f2afe156edca7ae05cfa4e5867126e
gray9be 2c425fa532c940d226822da8b3592310
gray9le bcc575942910b3c72eaa72e8794f3acd
nv12
aca847644e5dc0e942419183014981a4
nv21
098884e968d27286c8cf0d2fb1557dcd
p010be
5ff62dffa5dfdf823978c4f563f69c94
p010le
20131abe34e084b04f1d169c66447825
nv12
1965e3826144686748f2f6b516fca5ba
nv21
292adaf5271c5c8516b71640458c01f4
p010be
ad0de2cc9bff81688b182a870fcf7000
p010le
e7ff5143595021246733ce6bd0a769e8
rgb0 31ea5da7fe779c6ea0a33f1d28aad918
rgb24 47654cabaaad79170b90afd5a02161dd
rgb444be 3cac1f0c43a74d2a95eb02e187070845
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment