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
148bc235
Commit
148bc235
authored
Jan 18, 2012
by
Diego Biurrun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
swscale: K&R formatting cosmetics for Blackfin code
Also prettyprint some comments in Assembly code.
parent
3f57bde1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
78 additions
and
73 deletions
+78
-73
internal_bfin.S
libswscale/bfin/internal_bfin.S
+6
-6
swscale_bfin.c
libswscale/bfin/swscale_bfin.c
+26
-22
yuv2rgb_bfin.c
libswscale/bfin/yuv2rgb_bfin.c
+46
-45
No files found.
libswscale/bfin/internal_bfin.S
View file @
148bc235
...
...
@@ -30,11 +30,11 @@ and converts it to RGB565. R:5 bits, G:6 bits, B:5 bits.. packed into shorts.
The following calculation is used for the conversion:
r = clipz((y
-oy)*cy + crv*(v-
128))
g = clipz((y
-oy)*cy + cgv*(v-128) + cgu*(u-
128))
b = clipz((y
-oy)*cy + cbu*(u-
128))
r = clipz((y
- oy) * cy + crv * (v -
128))
g = clipz((y
- oy) * cy + cgv * (v - 128) + cgu * (u -
128))
b = clipz((y
- oy) * cy + cbu * (u -
128))
y,
u,
v are prescaled by a factor of 4 i.e. left-shifted to gain precision.
y,
u,
v are prescaled by a factor of 4 i.e. left-shifted to gain precision.
New factorization to eliminate the truncation error which was
...
...
@@ -47,7 +47,7 @@ occurring due to the byteop3p.
2) Scale operands up by a factor of 4 not 8 because Blackfin
multiplies include a shift.
3) Compute into the accumulators cy
*yx0, cy*
yx1.
3) Compute into the accumulators cy
* yx0, cy *
yx1.
4) Compute each of the linear equations:
r = clipz((y - oy) * cy + crv * (v - 128))
...
...
@@ -73,7 +73,7 @@ occurring due to the byteop3p.
Where coeffs have the following layout in memory.
uint32_t oy,
oc,zero,cy,crv,rmask,cbu,bmask,cgu,
cgv;
uint32_t oy,
oc, zero, cy, crv, rmask, cbu, bmask, cgu,
cgv;
coeffs is a pointer to oy.
...
...
libswscale/bfin/swscale_bfin.c
View file @
148bc235
...
...
@@ -27,32 +27,34 @@
#include <assert.h>
#include "config.h"
#include <unistd.h>
#include "libswscale/rgb2rgb.h"
#include "libswscale/swscale.h"
#include "libswscale/swscale_internal.h"
#if defined (__FDPIC__) && CONFIG_SRAM
#define L1CODE __attribute__
((l1_text))
#define L1CODE __attribute__((l1_text))
#else
#define L1CODE
#endif
int
ff_bfin_uyvytoyv12
(
const
uint8_t
*
src
,
uint8_t
*
ydst
,
uint8_t
*
udst
,
uint8_t
*
vdst
,
int
width
,
int
height
,
int
ff_bfin_uyvytoyv12
(
const
uint8_t
*
src
,
uint8_t
*
ydst
,
uint8_t
*
udst
,
uint8_t
*
vdst
,
int
width
,
int
height
,
int
lumStride
,
int
chromStride
,
int
srcStride
)
L1CODE
;
int
ff_bfin_yuyvtoyv12
(
const
uint8_t
*
src
,
uint8_t
*
ydst
,
uint8_t
*
udst
,
uint8_t
*
vdst
,
int
width
,
int
height
,
int
ff_bfin_yuyvtoyv12
(
const
uint8_t
*
src
,
uint8_t
*
ydst
,
uint8_t
*
udst
,
uint8_t
*
vdst
,
int
width
,
int
height
,
int
lumStride
,
int
chromStride
,
int
srcStride
)
L1CODE
;
static
int
uyvytoyv12_unscaled
(
SwsContext
*
c
,
uint8_t
*
src
[],
int
srcStride
[],
int
srcSliceY
,
int
srcSliceH
,
uint8_t
*
dst
[],
int
dstStride
[])
static
int
uyvytoyv12_unscaled
(
SwsContext
*
c
,
uint8_t
*
src
[],
int
srcStride
[],
int
srcSliceY
,
int
srcSliceH
,
uint8_t
*
dst
[],
int
dstStride
[])
{
uint8_t
*
dsty
=
dst
[
0
]
+
dstStride
[
0
]
*
srcSliceY
;
uint8_t
*
dstu
=
dst
[
1
]
+
dstStride
[
1
]
*
srcSliceY
/
2
;
uint8_t
*
dstv
=
dst
[
2
]
+
dstStride
[
2
]
*
srcSliceY
/
2
;
uint8_t
*
ip
=
src
[
0
]
+
srcStride
[
0
]
*
srcSliceY
;
int
w
=
dstStride
[
0
];
uint8_t
*
dsty
=
dst
[
0
]
+
dstStride
[
0
]
*
srcSliceY
;
uint8_t
*
dstu
=
dst
[
1
]
+
dstStride
[
1
]
*
srcSliceY
/
2
;
uint8_t
*
dstv
=
dst
[
2
]
+
dstStride
[
2
]
*
srcSliceY
/
2
;
uint8_t
*
ip
=
src
[
0
]
+
srcStride
[
0
]
*
srcSliceY
;
int
w
=
dstStride
[
0
];
ff_bfin_uyvytoyv12
(
ip
,
dsty
,
dstu
,
dstv
,
w
,
srcSliceH
,
dstStride
[
0
],
dstStride
[
1
],
srcStride
[
0
]);
...
...
@@ -60,14 +62,15 @@ static int uyvytoyv12_unscaled(SwsContext *c, uint8_t* src[], int srcStride[], i
return
srcSliceH
;
}
static
int
yuyvtoyv12_unscaled
(
SwsContext
*
c
,
uint8_t
*
src
[],
int
srcStride
[],
int
srcSliceY
,
int
srcSliceH
,
uint8_t
*
dst
[],
int
dstStride
[])
static
int
yuyvtoyv12_unscaled
(
SwsContext
*
c
,
uint8_t
*
src
[],
int
srcStride
[],
int
srcSliceY
,
int
srcSliceH
,
uint8_t
*
dst
[],
int
dstStride
[])
{
uint8_t
*
dsty
=
dst
[
0
]
+
dstStride
[
0
]
*
srcSliceY
;
uint8_t
*
dstu
=
dst
[
1
]
+
dstStride
[
1
]
*
srcSliceY
/
2
;
uint8_t
*
dstv
=
dst
[
2
]
+
dstStride
[
2
]
*
srcSliceY
/
2
;
uint8_t
*
ip
=
src
[
0
]
+
srcStride
[
0
]
*
srcSliceY
;
int
w
=
dstStride
[
0
];
uint8_t
*
dsty
=
dst
[
0
]
+
dstStride
[
0
]
*
srcSliceY
;
uint8_t
*
dstu
=
dst
[
1
]
+
dstStride
[
1
]
*
srcSliceY
/
2
;
uint8_t
*
dstv
=
dst
[
2
]
+
dstStride
[
2
]
*
srcSliceY
/
2
;
uint8_t
*
ip
=
src
[
0
]
+
srcStride
[
0
]
*
srcSliceY
;
int
w
=
dstStride
[
0
];
ff_bfin_yuyvtoyv12
(
ip
,
dsty
,
dstu
,
dstv
,
w
,
srcSliceH
,
dstStride
[
0
],
dstStride
[
1
],
srcStride
[
0
]);
...
...
@@ -75,15 +78,16 @@ static int yuyvtoyv12_unscaled(SwsContext *c, uint8_t* src[], int srcStride[], i
return
srcSliceH
;
}
void
ff_bfin_get_unscaled_swscale
(
SwsContext
*
c
)
{
if
(
c
->
dstFormat
==
PIX_FMT_YUV420P
&&
c
->
srcFormat
==
PIX_FMT_UYVY422
)
{
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"selecting Blackfin optimized uyvytoyv12_unscaled
\n
"
);
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"selecting Blackfin optimized uyvytoyv12_unscaled
\n
"
);
c
->
swScale
=
uyvytoyv12_unscaled
;
}
if
(
c
->
dstFormat
==
PIX_FMT_YUV420P
&&
c
->
srcFormat
==
PIX_FMT_YUYV422
)
{
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"selecting Blackfin optimized yuyvtoyv12_unscaled
\n
"
);
av_log
(
NULL
,
AV_LOG_VERBOSE
,
"selecting Blackfin optimized yuyvtoyv12_unscaled
\n
"
);
c
->
swScale
=
yuyvtoyv12_unscaled
;
}
}
libswscale/bfin/yuv2rgb_bfin.c
View file @
148bc235
...
...
@@ -26,14 +26,15 @@
#include <string.h>
#include <inttypes.h>
#include <assert.h>
#include "config.h"
#include <unistd.h>
#include "config.h"
#include "libswscale/rgb2rgb.h"
#include "libswscale/swscale.h"
#include "libswscale/swscale_internal.h"
#if defined(__FDPIC__) && CONFIG_SRAM
#define L1CODE __attribute__
((l1_text))
#define L1CODE __attribute__((l1_text))
#else
#define L1CODE
#endif
...
...
@@ -47,21 +48,20 @@ void ff_bfin_yuv2rgb565_line(uint8_t *Y, uint8_t *U, uint8_t *V, uint8_t *out,
void
ff_bfin_yuv2rgb24_line
(
uint8_t
*
Y
,
uint8_t
*
U
,
uint8_t
*
V
,
uint8_t
*
out
,
int
w
,
uint32_t
*
coeffs
)
L1CODE
;
typedef
void
(
*
ltransform
)(
uint8_t
*
Y
,
uint8_t
*
U
,
uint8_t
*
V
,
uint8_t
*
out
,
int
w
,
uint32_t
*
coeffs
);
typedef
void
(
*
ltransform
)(
uint8_t
*
Y
,
uint8_t
*
U
,
uint8_t
*
V
,
uint8_t
*
out
,
int
w
,
uint32_t
*
coeffs
);
static
void
bfin_prepare_coefficients
(
SwsContext
*
c
,
int
rgb
,
int
masks
)
{
int
oy
;
oy
=
c
->
yOffset
&
0xffff
;
oy
=
oy
>>
3
;
// keep everything U8.0 for offset calculation
oy
=
c
->
yOffset
&
0xffff
;
oy
=
oy
>>
3
;
// keep everything U8.0 for offset calculation
c
->
oc
=
128
*
0x01010101U
;
c
->
oy
=
oy
*
0x01010101U
;
c
->
oc
=
128
*
0x01010101U
;
c
->
oy
=
oy
*
0x01010101U
;
/* copy 64bit vector coeffs down to 32bit vector coeffs */
c
->
cy
=
c
->
yCoeff
;
c
->
cy
=
c
->
yCoeff
;
c
->
zero
=
0
;
if
(
rgb
)
{
...
...
@@ -76,7 +76,6 @@ static void bfin_prepare_coefficients(SwsContext *c, int rgb, int masks)
c
->
cgv
=
c
->
ugCoeff
;
}
if
(
masks
==
555
)
{
c
->
rmask
=
0x001f
*
0x00010001U
;
c
->
gmask
=
0x03e0
*
0x00010001U
;
...
...
@@ -88,27 +87,25 @@ static void bfin_prepare_coefficients(SwsContext *c, int rgb, int masks)
}
}
static
int
core_yuv420_rgb
(
SwsContext
*
c
,
uint8_t
**
in
,
int
*
instrides
,
int
srcSliceY
,
int
srcSliceH
,
uint8_t
**
oplanes
,
int
*
outstrides
,
ltransform
lcscf
,
int
rgb
,
int
masks
)
static
int
core_yuv420_rgb
(
SwsContext
*
c
,
uint8_t
**
in
,
int
*
instrides
,
int
srcSliceY
,
int
srcSliceH
,
uint8_t
**
oplanes
,
int
*
outstrides
,
ltransform
lcscf
,
int
rgb
,
int
masks
)
{
uint8_t
*
py
,
*
pu
,
*
pv
,
*
op
;
uint8_t
*
py
,
*
pu
,
*
pv
,
*
op
;
int
w
=
instrides
[
0
];
int
h2
=
srcSliceH
>>
1
;
int
h2
=
srcSliceH
>>
1
;
int
i
;
bfin_prepare_coefficients
(
c
,
rgb
,
masks
);
py
=
in
[
0
];
pu
=
in
[
1
+
(
1
^
rgb
)];
pv
=
in
[
1
+
(
0
^
rgb
)];
op
=
oplanes
[
0
]
+
srcSliceY
*
outstrides
[
0
];
pu
=
in
[
1
+
(
1
^
rgb
)];
pv
=
in
[
1
+
(
0
^
rgb
)];
for
(
i
=
0
;
i
<
h2
;
i
++
)
{
op
=
oplanes
[
0
]
+
srcSliceY
*
outstrides
[
0
];
for
(
i
=
0
;
i
<
h2
;
i
++
)
{
lcscf
(
py
,
pu
,
pv
,
op
,
w
,
&
c
->
oy
);
py
+=
instrides
[
0
];
...
...
@@ -125,9 +122,7 @@ static int core_yuv420_rgb(SwsContext *c,
return
srcSliceH
;
}
static
int
bfin_yuv420_rgb555
(
SwsContext
*
c
,
uint8_t
**
in
,
int
*
instrides
,
static
int
bfin_yuv420_rgb555
(
SwsContext
*
c
,
uint8_t
**
in
,
int
*
instrides
,
int
srcSliceY
,
int
srcSliceH
,
uint8_t
**
oplanes
,
int
*
outstrides
)
{
...
...
@@ -135,8 +130,7 @@ static int bfin_yuv420_rgb555(SwsContext *c,
outstrides
,
ff_bfin_yuv2rgb555_line
,
1
,
555
);
}
static
int
bfin_yuv420_bgr555
(
SwsContext
*
c
,
uint8_t
**
in
,
int
*
instrides
,
static
int
bfin_yuv420_bgr555
(
SwsContext
*
c
,
uint8_t
**
in
,
int
*
instrides
,
int
srcSliceY
,
int
srcSliceH
,
uint8_t
**
oplanes
,
int
*
outstrides
)
{
...
...
@@ -144,8 +138,7 @@ static int bfin_yuv420_bgr555(SwsContext *c,
outstrides
,
ff_bfin_yuv2rgb555_line
,
0
,
555
);
}
static
int
bfin_yuv420_rgb24
(
SwsContext
*
c
,
uint8_t
**
in
,
int
*
instrides
,
static
int
bfin_yuv420_rgb24
(
SwsContext
*
c
,
uint8_t
**
in
,
int
*
instrides
,
int
srcSliceY
,
int
srcSliceH
,
uint8_t
**
oplanes
,
int
*
outstrides
)
{
...
...
@@ -153,8 +146,7 @@ static int bfin_yuv420_rgb24(SwsContext *c,
outstrides
,
ff_bfin_yuv2rgb24_line
,
1
,
888
);
}
static
int
bfin_yuv420_bgr24
(
SwsContext
*
c
,
uint8_t
**
in
,
int
*
instrides
,
static
int
bfin_yuv420_bgr24
(
SwsContext
*
c
,
uint8_t
**
in
,
int
*
instrides
,
int
srcSliceY
,
int
srcSliceH
,
uint8_t
**
oplanes
,
int
*
outstrides
)
{
...
...
@@ -162,8 +154,7 @@ static int bfin_yuv420_bgr24(SwsContext *c,
outstrides
,
ff_bfin_yuv2rgb24_line
,
0
,
888
);
}
static
int
bfin_yuv420_rgb565
(
SwsContext
*
c
,
uint8_t
**
in
,
int
*
instrides
,
static
int
bfin_yuv420_rgb565
(
SwsContext
*
c
,
uint8_t
**
in
,
int
*
instrides
,
int
srcSliceY
,
int
srcSliceH
,
uint8_t
**
oplanes
,
int
*
outstrides
)
{
...
...
@@ -171,8 +162,7 @@ static int bfin_yuv420_rgb565(SwsContext *c,
outstrides
,
ff_bfin_yuv2rgb565_line
,
1
,
565
);
}
static
int
bfin_yuv420_bgr565
(
SwsContext
*
c
,
uint8_t
**
in
,
int
*
instrides
,
static
int
bfin_yuv420_bgr565
(
SwsContext
*
c
,
uint8_t
**
in
,
int
*
instrides
,
int
srcSliceY
,
int
srcSliceH
,
uint8_t
**
oplanes
,
int
*
outstrides
)
{
...
...
@@ -180,24 +170,35 @@ static int bfin_yuv420_bgr565(SwsContext *c,
outstrides
,
ff_bfin_yuv2rgb565_line
,
0
,
565
);
}
SwsFunc
ff_yuv2rgb_get_func_ptr_bfin
(
SwsContext
*
c
)
{
SwsFunc
f
;
switch
(
c
->
dstFormat
)
{
case
PIX_FMT_RGB555
:
f
=
bfin_yuv420_rgb555
;
break
;
case
PIX_FMT_BGR555
:
f
=
bfin_yuv420_bgr555
;
break
;
case
PIX_FMT_RGB565
:
f
=
bfin_yuv420_rgb565
;
break
;
case
PIX_FMT_BGR565
:
f
=
bfin_yuv420_bgr565
;
break
;
case
PIX_FMT_RGB24
:
f
=
bfin_yuv420_rgb24
;
break
;
case
PIX_FMT_BGR24
:
f
=
bfin_yuv420_bgr24
;
break
;
switch
(
c
->
dstFormat
)
{
case
PIX_FMT_RGB555
:
f
=
bfin_yuv420_rgb555
;
break
;
case
PIX_FMT_BGR555
:
f
=
bfin_yuv420_bgr555
;
break
;
case
PIX_FMT_RGB565
:
f
=
bfin_yuv420_rgb565
;
break
;
case
PIX_FMT_BGR565
:
f
=
bfin_yuv420_bgr565
;
break
;
case
PIX_FMT_RGB24
:
f
=
bfin_yuv420_rgb24
;
break
;
case
PIX_FMT_BGR24
:
f
=
bfin_yuv420_bgr24
;
break
;
default:
return
0
;
}
av_log
(
c
,
AV_LOG_INFO
,
"BlackFin accelerated color space converter %s
\n
"
,
sws_format_name
(
c
->
dstFormat
));
sws_format_name
(
c
->
dstFormat
));
return
f
;
}
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