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
7322a67c
Commit
7322a67c
authored
Jan 23, 2003
by
Michael Niedermayer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
UYVY input
Originally committed as revision 9072 to
svn://svn.mplayerhq.hu/mplayer/trunk/postproc
parent
9b1663fc
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
79 additions
and
4 deletions
+79
-4
swscale.c
postproc/swscale.c
+5
-4
swscale_template.c
postproc/swscale_template.c
+74
-0
No files found.
postproc/swscale.c
View file @
7322a67c
...
...
@@ -17,7 +17,7 @@
*/
/*
supported Input formats: YV12, I420/IYUV, YUY2, BGR32, BGR24, BGR16, BGR15, RGB32, RGB24, Y8/Y800, YVU9/IF09
supported Input formats: YV12, I420/IYUV, YUY2,
UYVY,
BGR32, BGR24, BGR16, BGR15, RGB32, RGB24, Y8/Y800, YVU9/IF09
supported output formats: YV12, I420/IYUV, YUY2, {BGR,RGB}{1,4,8,15,16,24,32}, Y8/Y800, YVU9/IF09
{BGR,RGB}{1,4,8,15,16} support dithering
...
...
@@ -105,11 +105,11 @@ untested special converters
//FIXME replace this with something faster
#define isPlanarYUV(x) ((x)==IMGFMT_YV12 || (x)==IMGFMT_I420 || (x)==IMGFMT_YVU9 \
|| (x)==IMGFMT_444P || (x)==IMGFMT_422P || (x)==IMGFMT_411P)
#define isYUV(x) ((x)==IMGFMT_YUY2 || isPlanarYUV(x))
#define isYUV(x) ((x)==IMGFMT_
UYVY || (x)==IMGFMT_
YUY2 || isPlanarYUV(x))
#define isGray(x) ((x)==IMGFMT_Y800)
#define isRGB(x) (((x)&IMGFMT_RGB_MASK)==IMGFMT_RGB)
#define isBGR(x) (((x)&IMGFMT_BGR_MASK)==IMGFMT_BGR)
#define isSupportedIn(x) ((x)==IMGFMT_YV12 || (x)==IMGFMT_I420 || (x)==IMGFMT_YUY2 \
#define isSupportedIn(x) ((x)==IMGFMT_YV12 || (x)==IMGFMT_I420 || (x)==IMGFMT_YUY2
|| (x)==IMGFMT_UYVY
\
|| (x)==IMGFMT_BGR32|| (x)==IMGFMT_BGR24|| (x)==IMGFMT_BGR16|| (x)==IMGFMT_BGR15\
|| (x)==IMGFMT_RGB32|| (x)==IMGFMT_RGB24\
|| (x)==IMGFMT_Y800 || (x)==IMGFMT_YVU9\
...
...
@@ -118,7 +118,7 @@ untested special converters
|| (x)==IMGFMT_444P || (x)==IMGFMT_422P || (x)==IMGFMT_411P\
|| isRGB(x) || isBGR(x)\
|| (x)==IMGFMT_Y800 || (x)==IMGFMT_YVU9)
#define isPacked(x) ((x)==IMGFMT_YUY2 || isRGB(x) || isBGR(x))
#define isPacked(x) ((x)==IMGFMT_YUY2 ||
(x)==IMGFMT_UYVY ||
isRGB(x) || isBGR(x))
#define RGB2YUV_SHIFT 16
#define BY ((int)( 0.098*(1<<RGB2YUV_SHIFT)+0.5))
...
...
@@ -1904,6 +1904,7 @@ static int remove_dup_fourcc(int fourcc)
static
void
getSubSampleFactors
(
int
*
h
,
int
*
v
,
int
format
){
switch
(
format
){
case
IMGFMT_UYVY
:
case
IMGFMT_YUY2
:
*
h
=
1
;
*
v
=
0
;
...
...
postproc/swscale_template.c
View file @
7322a67c
...
...
@@ -1476,6 +1476,69 @@ static inline void RENAME(yuy2ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1,
#endif
}
//this is allmost identical to the previous, end exists only cuz yuy2ToY/UV)(dst, src+1, ...) would have 100% unaligned accesses
static
inline
void
RENAME
(
uyvyToY
)(
uint8_t
*
dst
,
uint8_t
*
src
,
int
width
)
{
#ifdef HAVE_MMX
asm
volatile
(
"movl %0, %%eax
\n\t
"
"1:
\n\t
"
"movq (%1, %%eax,2), %%mm0
\n\t
"
"movq 8(%1, %%eax,2), %%mm1
\n\t
"
"psrlw $8, %%mm0
\n\t
"
"psrlw $8, %%mm1
\n\t
"
"packuswb %%mm1, %%mm0
\n\t
"
"movq %%mm0, (%2, %%eax)
\n\t
"
"addl $8, %%eax
\n\t
"
" js 1b
\n\t
"
:
:
"g"
(
-
width
),
"r"
(
src
+
width
*
2
),
"r"
(
dst
+
width
)
:
"%eax"
);
#else
int
i
;
for
(
i
=
0
;
i
<
width
;
i
++
)
dst
[
i
]
=
src
[
2
*
i
+
1
];
#endif
}
static
inline
void
RENAME
(
uyvyToUV
)(
uint8_t
*
dstU
,
uint8_t
*
dstV
,
uint8_t
*
src1
,
uint8_t
*
src2
,
int
width
)
{
#if defined (HAVE_MMX2) || defined (HAVE_3DNOW)
asm
volatile
(
"movq "
MANGLE
(
bm01010101
)
", %%mm4
\n\t
"
"movl %0, %%eax
\n\t
"
"1:
\n\t
"
"movq (%1, %%eax,4), %%mm0
\n\t
"
"movq 8(%1, %%eax,4), %%mm1
\n\t
"
"movq (%2, %%eax,4), %%mm2
\n\t
"
"movq 8(%2, %%eax,4), %%mm3
\n\t
"
PAVGB
(
%%
mm2
,
%%
mm0
)
PAVGB
(
%%
mm3
,
%%
mm1
)
"pand %%mm4, %%mm0
\n\t
"
"pand %%mm4, %%mm1
\n\t
"
"packuswb %%mm1, %%mm0
\n\t
"
"movq %%mm0, %%mm1
\n\t
"
"psrlw $8, %%mm0
\n\t
"
"pand %%mm4, %%mm1
\n\t
"
"packuswb %%mm0, %%mm0
\n\t
"
"packuswb %%mm1, %%mm1
\n\t
"
"movd %%mm0, (%4, %%eax)
\n\t
"
"movd %%mm1, (%3, %%eax)
\n\t
"
"addl $4, %%eax
\n\t
"
" js 1b
\n\t
"
:
:
"g"
(
-
width
),
"r"
(
src1
+
width
*
4
),
"r"
(
src2
+
width
*
4
),
"r"
(
dstU
+
width
),
"r"
(
dstV
+
width
)
:
"%eax"
);
#else
int
i
;
for
(
i
=
0
;
i
<
width
;
i
++
)
{
dstU
[
i
]
=
(
src1
[
4
*
i
+
0
]
+
src2
[
4
*
i
+
0
])
>>
1
;
dstV
[
i
]
=
(
src1
[
4
*
i
+
2
]
+
src2
[
4
*
i
+
2
])
>>
1
;
}
#endif
}
static
inline
void
RENAME
(
bgr32ToY
)(
uint8_t
*
dst
,
uint8_t
*
src
,
int
width
)
{
#ifdef HAVE_MMXFIXME
...
...
@@ -2113,6 +2176,11 @@ static inline void RENAME(hyscale)(uint16_t *dst, int dstWidth, uint8_t *src, in
RENAME
(
yuy2ToY
)(
formatConvBuffer
,
src
,
srcW
);
src
=
formatConvBuffer
;
}
else
if
(
srcFormat
==
IMGFMT_UYVY
)
{
RENAME
(
uyvyToY
)(
formatConvBuffer
,
src
,
srcW
);
src
=
formatConvBuffer
;
}
else
if
(
srcFormat
==
IMGFMT_BGR32
)
{
RENAME
(
bgr32ToY
)(
formatConvBuffer
,
src
,
srcW
);
...
...
@@ -2265,6 +2333,12 @@ inline static void RENAME(hcscale)(uint16_t *dst, int dstWidth, uint8_t *src1, u
src1
=
formatConvBuffer
;
src2
=
formatConvBuffer
+
2048
;
}
else
if
(
srcFormat
==
IMGFMT_UYVY
)
{
RENAME
(
uyvyToUV
)(
formatConvBuffer
,
formatConvBuffer
+
2048
,
src1
,
src2
,
srcW
);
src1
=
formatConvBuffer
;
src2
=
formatConvBuffer
+
2048
;
}
else
if
(
srcFormat
==
IMGFMT_BGR32
)
{
RENAME
(
bgr32ToUV
)(
formatConvBuffer
,
formatConvBuffer
+
2048
,
src1
,
src2
,
srcW
);
...
...
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