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
17ad06c7
Commit
17ad06c7
authored
Apr 14, 2013
by
Michael Niedermayer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sws/x86: update rgb/bgr->yuv code to use provided coefficient table
Signed-off-by:
Michael Niedermayer
<
michaelni@gmx.at
>
parent
9aafb95a
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
50 additions
and
17 deletions
+50
-17
swscale_internal.h
libswscale/swscale_internal.h
+1
-1
utils.c
libswscale/utils.c
+19
-0
input.asm
libswscale/x86/input.asm
+30
-16
No files found.
libswscale/swscale_internal.h
View file @
17ad06c7
...
...
@@ -360,7 +360,7 @@ typedef struct SwsContext {
uint8_t
*
table_gU
[
256
+
2
*
YUVRGB_TABLE_HEADROOM
];
int
table_gV
[
256
+
2
*
YUVRGB_TABLE_HEADROOM
];
uint8_t
*
table_bU
[
256
+
2
*
YUVRGB_TABLE_HEADROOM
];
int32_t
input_rgb2yuv_table
[
16
];
// This table can contain both C and SIMD formatted values, teh C vales are always at the XY_IDX points
int32_t
input_rgb2yuv_table
[
16
+
32
*
4
];
// This table can contain both C and SIMD formatted values, teh C vales are always at the XY_IDX points
#define RY_IDX 0
#define GY_IDX 1
#define BY_IDX 2
...
...
libswscale/utils.c
View file @
17ad06c7
...
...
@@ -808,6 +808,22 @@ static void fill_rgb2yuv_table(SwsContext *c, const int table[4], int dstRange)
int64_t
vg
=
-
table
[
3
];
int64_t
ONE
=
65536
;
int64_t
cy
=
ONE
;
uint8_t
*
p
=
(
uint8_t
*
)
c
->
input_rgb2yuv_table
;
int
i
;
static
const
int8_t
map
[]
=
{
BY_IDX
,
GY_IDX
,
-
1
,
BY_IDX
,
BY_IDX
,
GY_IDX
,
-
1
,
BY_IDX
,
RY_IDX
,
-
1
,
GY_IDX
,
RY_IDX
,
RY_IDX
,
-
1
,
GY_IDX
,
RY_IDX
,
RY_IDX
,
GY_IDX
,
-
1
,
RY_IDX
,
RY_IDX
,
GY_IDX
,
-
1
,
RY_IDX
,
BY_IDX
,
-
1
,
GY_IDX
,
BY_IDX
,
BY_IDX
,
-
1
,
GY_IDX
,
BY_IDX
,
BU_IDX
,
GU_IDX
,
-
1
,
BU_IDX
,
BU_IDX
,
GU_IDX
,
-
1
,
BU_IDX
,
RU_IDX
,
-
1
,
GU_IDX
,
RU_IDX
,
RU_IDX
,
-
1
,
GU_IDX
,
RU_IDX
,
RU_IDX
,
GU_IDX
,
-
1
,
RU_IDX
,
RU_IDX
,
GU_IDX
,
-
1
,
RU_IDX
,
BU_IDX
,
-
1
,
GU_IDX
,
BU_IDX
,
BU_IDX
,
-
1
,
GU_IDX
,
BU_IDX
,
BV_IDX
,
GV_IDX
,
-
1
,
BV_IDX
,
BV_IDX
,
GV_IDX
,
-
1
,
BV_IDX
,
RV_IDX
,
-
1
,
GV_IDX
,
RV_IDX
,
RV_IDX
,
-
1
,
GV_IDX
,
RV_IDX
,
RV_IDX
,
GV_IDX
,
-
1
,
RV_IDX
,
RV_IDX
,
GV_IDX
,
-
1
,
RV_IDX
,
BV_IDX
,
-
1
,
GV_IDX
,
BV_IDX
,
BV_IDX
,
-
1
,
GV_IDX
,
BV_IDX
,
};
dstRange
=
0
;
//FIXME range = 1 is handled elsewhere
...
...
@@ -846,6 +862,9 @@ static void fill_rgb2yuv_table(SwsContext *c, const int table[4], int dstRange)
c
->
input_rgb2yuv_table
[
RV_IDX
]
=
((
int
)(
0
.
500
*
224
/
255
*
(
1
<<
RGB2YUV_SHIFT
)
+
0
.
5
));
c
->
input_rgb2yuv_table
[
RU_IDX
]
=
(
-
(
int
)(
0
.
169
*
224
/
255
*
(
1
<<
RGB2YUV_SHIFT
)
+
0
.
5
));
}
for
(
i
=
0
;
i
<
FF_ARRAY_ELEMS
(
map
);
i
++
)
AV_WL16
(
p
+
16
*
4
+
2
*
i
,
map
[
i
]
>=
0
?
c
->
input_rgb2yuv_table
[
map
[
i
]]
:
0
);
}
int
sws_setColorspaceDetails
(
struct
SwsContext
*
c
,
const
int
inv_table
[
4
],
...
...
libswscale/x86/input.asm
View file @
17ad06c7
...
...
@@ -37,18 +37,32 @@ SECTION_RODATA
rgb_Yrnd
:
times
4
dd
0x80100
; 16.5 << 15
rgb_UVrnd
:
times
4
dd
0x400100
; 128.5 << 15
bgr_Ycoeff_12x4
:
times
2
dw
BY
,
GY
,
0
,
BY
bgr_Ycoeff_3x56
:
times
2
dw
RY
,
0
,
GY
,
RY
rgb_Ycoeff_12x4
:
times
2
dw
RY
,
GY
,
0
,
RY
rgb_Ycoeff_3x56
:
times
2
dw
BY
,
0
,
GY
,
BY
bgr_Ucoeff_12x4
:
times
2
dw
BU
,
GU
,
0
,
BU
bgr_Ucoeff_3x56
:
times
2
dw
RU
,
0
,
GU
,
RU
rgb_Ucoeff_12x4
:
times
2
dw
RU
,
GU
,
0
,
RU
rgb_Ucoeff_3x56
:
times
2
dw
BU
,
0
,
GU
,
BU
bgr_Vcoeff_12x4
:
times
2
dw
BV
,
GV
,
0
,
BV
bgr_Vcoeff_3x56
:
times
2
dw
RV
,
0
,
GV
,
RV
rgb_Vcoeff_12x4
:
times
2
dw
RV
,
GV
,
0
,
RV
rgb_Vcoeff_3x56
:
times
2
dw
BV
,
0
,
GV
,
BV
%define
bgr_Ycoeff_12x4
16
*
4
+
16
*
0
+
tableq
%define
bgr_Ycoeff_3x56
16
*
4
+
16
*
1
+
tableq
%define
rgb_Ycoeff_12x4
16
*
4
+
16
*
2
+
tableq
%define
rgb_Ycoeff_3x56
16
*
4
+
16
*
3
+
tableq
%define
bgr_Ucoeff_12x4
16
*
4
+
16
*
4
+
tableq
%define
bgr_Ucoeff_3x56
16
*
4
+
16
*
5
+
tableq
%define
rgb_Ucoeff_12x4
16
*
4
+
16
*
6
+
tableq
%define
rgb_Ucoeff_3x56
16
*
4
+
16
*
7
+
tableq
%define
bgr_Vcoeff_12x4
16
*
4
+
16
*
8
+
tableq
%define
bgr_Vcoeff_3x56
16
*
4
+
16
*
9
+
tableq
%define
rgb_Vcoeff_12x4
16
*
4
+
16
*
10
+
tableq
%define
rgb_Vcoeff_3x56
16
*
4
+
16
*
11
+
tableq
; bgr_Ycoeff_12x4: times 2 dw BY, GY, 0, BY
; bgr_Ycoeff_3x56: times 2 dw RY, 0, GY, RY
; rgb_Ycoeff_12x4: times 2 dw RY, GY, 0, RY
; rgb_Ycoeff_3x56: times 2 dw BY, 0, GY, BY
; bgr_Ucoeff_12x4: times 2 dw BU, GU, 0, BU
; bgr_Ucoeff_3x56: times 2 dw RU, 0, GU, RU
; rgb_Ucoeff_12x4: times 2 dw RU, GU, 0, RU
; rgb_Ucoeff_3x56: times 2 dw BU, 0, GU, BU
; bgr_Vcoeff_12x4: times 2 dw BV, GV, 0, BV
; bgr_Vcoeff_3x56: times 2 dw RV, 0, GV, RV
; rgb_Vcoeff_12x4: times 2 dw RV, GV, 0, RV
; rgb_Vcoeff_3x56: times 2 dw BV, 0, GV, BV
rgba_Ycoeff_rb
:
times
4
dw
RY
,
BY
rgba_Ycoeff_br
:
times
4
dw
BY
,
RY
...
...
@@ -82,7 +96,7 @@ SECTION .text
; %1 = nr. of XMM registers
; %2 = rgb or bgr
%macro
RGB24_TO_Y_FN
2
-
3
cglobal
%2
%
+
24
ToY
,
6
,
6
,
%1
,
dst
,
src
,
u1
,
u2
,
w
,
u3
cglobal
%2
%
+
24
ToY
,
6
,
6
,
%1
,
dst
,
src
,
u1
,
u2
,
w
,
table
%if
mmsize
==
8
mova
m5
,
[
%2
_Ycoeff_12x4
]
mova
m6
,
[
%2
_Ycoeff_3x56
]
...
...
@@ -171,7 +185,7 @@ cglobal %2 %+ 24ToY, 6, 6, %1, dst, src, u1, u2, w, u3
; %1 = nr. of XMM registers
; %2 = rgb or bgr
%macro
RGB24_TO_UV_FN
2
-
3
cglobal
%2
%
+
24
ToUV
,
7
,
7
,
%1
,
dstU
,
dstV
,
u1
,
src
,
u2
,
w
,
u3
cglobal
%2
%
+
24
ToUV
,
7
,
7
,
%1
,
dstU
,
dstV
,
u1
,
src
,
u2
,
w
,
table
%if
ARCH_X86_64
mova
m8
,
[
%2
_Ucoeff_12x4
]
mova
m9
,
[
%2
_Ucoeff_3x56
]
...
...
@@ -311,7 +325,7 @@ RGB24_FUNCS 11, 13
; %1 = nr. of XMM registers
; %2-5 = rgba, bgra, argb or abgr (in individual characters)
%macro
RGB32_TO_Y_FN
5
-
6
cglobal
%2%3%4%5
%
+
ToY
,
6
,
6
,
%1
,
dst
,
src
,
u1
,
u2
,
w
,
u3
cglobal
%2%3%4%5
%
+
ToY
,
6
,
6
,
%1
,
dst
,
src
,
u1
,
u2
,
w
,
table
mova
m5
,
[
rgba_Ycoeff_
%2%4
]
mova
m6
,
[
rgba_Ycoeff_
%3%5
]
%if
%0
==
6
...
...
@@ -354,7 +368,7 @@ cglobal %2%3%4%5 %+ ToY, 6, 6, %1, dst, src, u1, u2, w, u3
; %1 = nr. of XMM registers
; %2-5 = rgba, bgra, argb or abgr (in individual characters)
%macro
RGB32_TO_UV_FN
5
-
6
cglobal
%2%3%4%5
%
+
ToUV
,
7
,
7
,
%1
,
dstU
,
dstV
,
u1
,
src
,
u2
,
w
,
u3
cglobal
%2%3%4%5
%
+
ToUV
,
7
,
7
,
%1
,
dstU
,
dstV
,
u1
,
src
,
u2
,
w
,
table
%if
ARCH_X86_64
mova
m8
,
[
rgba_Ucoeff_
%2%4
]
mova
m9
,
[
rgba_Ucoeff_
%3%5
]
...
...
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