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
999484c9
Commit
999484c9
authored
Jan 03, 2012
by
Diego Biurrun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
swscale: K&R formatting cosmetics for code examples
parent
83890c66
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
136 additions
and
129 deletions
+136
-129
colorspace-test.c
libswscale/colorspace-test.c
+45
-34
swscale-test.c
libswscale/swscale-test.c
+91
-95
No files found.
libswscale/colorspace-test.c
View file @
999484c9
...
@@ -31,15 +31,15 @@
...
@@ -31,15 +31,15 @@
#define srcByte 0x55
#define srcByte 0x55
#define dstByte 0xBB
#define dstByte 0xBB
#define FUNC(s,
d,n) {s,d,#n,n
}
#define FUNC(s,
d, n) { s, d, #n, n
}
int
main
(
int
argc
,
char
**
argv
)
int
main
(
int
argc
,
char
**
argv
)
{
{
int
i
,
funcNum
;
int
i
,
funcNum
;
uint8_t
*
srcBuffer
=
av_malloc
(
SIZE
);
uint8_t
*
srcBuffer
=
av_malloc
(
SIZE
);
uint8_t
*
dstBuffer
=
av_malloc
(
SIZE
);
uint8_t
*
dstBuffer
=
av_malloc
(
SIZE
);
int
failedNum
=
0
;
int
failedNum
=
0
;
int
passedNum
=
0
;
int
passedNum
=
0
;
if
(
!
srcBuffer
||
!
dstBuffer
)
if
(
!
srcBuffer
||
!
dstBuffer
)
return
-
1
;
return
-
1
;
...
@@ -47,7 +47,7 @@ int main(int argc, char **argv)
...
@@ -47,7 +47,7 @@ int main(int argc, char **argv)
av_log
(
NULL
,
AV_LOG_INFO
,
"memory corruption test ...
\n
"
);
av_log
(
NULL
,
AV_LOG_INFO
,
"memory corruption test ...
\n
"
);
sws_rgb2rgb_init
();
sws_rgb2rgb_init
();
for
(
funcNum
=
0
;
;
funcNum
++
)
{
for
(
funcNum
=
0
;
;
funcNum
++
)
{
struct
func_info_s
{
struct
func_info_s
{
int
src_bpp
;
int
src_bpp
;
int
dst_bpp
;
int
dst_bpp
;
...
@@ -85,67 +85,78 @@ int main(int argc, char **argv)
...
@@ -85,67 +85,78 @@ int main(int argc, char **argv)
FUNC
(
0
,
0
,
NULL
)
FUNC
(
0
,
0
,
NULL
)
};
};
int
width
;
int
width
;
int
failed
=
0
;
int
failed
=
0
;
int
srcBpp
=
0
;
int
srcBpp
=
0
;
int
dstBpp
=
0
;
int
dstBpp
=
0
;
if
(
!
func_info
[
funcNum
].
func
)
break
;
if
(
!
func_info
[
funcNum
].
func
)
break
;
av_log
(
NULL
,
AV_LOG_INFO
,
"."
);
av_log
(
NULL
,
AV_LOG_INFO
,
"."
);
memset
(
srcBuffer
,
srcByte
,
SIZE
);
memset
(
srcBuffer
,
srcByte
,
SIZE
);
for
(
width
=
63
;
width
>
0
;
width
--
)
{
for
(
width
=
63
;
width
>
0
;
width
--
)
{
int
dstOffset
;
int
dstOffset
;
for
(
dstOffset
=
128
;
dstOffset
<
196
;
dstOffset
+=
4
)
{
for
(
dstOffset
=
128
;
dstOffset
<
196
;
dstOffset
+=
4
)
{
int
srcOffset
;
int
srcOffset
;
memset
(
dstBuffer
,
dstByte
,
SIZE
);
memset
(
dstBuffer
,
dstByte
,
SIZE
);
for
(
srcOffset
=
128
;
srcOffset
<
196
;
srcOffset
+=
4
)
{
for
(
srcOffset
=
128
;
srcOffset
<
196
;
srcOffset
+=
4
)
{
uint8_t
*
src
=
srcBuffer
+
srcOffset
;
uint8_t
*
src
=
srcBuffer
+
srcOffset
;
uint8_t
*
dst
=
dstBuffer
+
dstOffset
;
uint8_t
*
dst
=
dstBuffer
+
dstOffset
;
const
char
*
name
=
NULL
;
const
char
*
name
=
NULL
;
if
(
failed
)
break
;
//don't fill the screen with shit ...
// don't fill the screen with shit ...
if
(
failed
)
break
;
srcBpp
=
func_info
[
funcNum
].
src_bpp
;
srcBpp
=
func_info
[
funcNum
].
src_bpp
;
dstBpp
=
func_info
[
funcNum
].
dst_bpp
;
dstBpp
=
func_info
[
funcNum
].
dst_bpp
;
name
=
func_info
[
funcNum
].
name
;
name
=
func_info
[
funcNum
].
name
;
func_info
[
funcNum
].
func
(
src
,
dst
,
width
*
srcBpp
);
func_info
[
funcNum
].
func
(
src
,
dst
,
width
*
srcBpp
);
if
(
!
srcBpp
)
break
;
if
(
!
srcBpp
)
break
;
for
(
i
=
0
;
i
<
SIZE
;
i
++
)
{
for
(
i
=
0
;
i
<
SIZE
;
i
++
)
{
if
(
srcBuffer
[
i
]
!=
srcByte
)
{
if
(
srcBuffer
[
i
]
!=
srcByte
)
{
av_log
(
NULL
,
AV_LOG_INFO
,
"src damaged at %d w:%d src:%d dst:%d %s
\n
"
,
av_log
(
NULL
,
AV_LOG_INFO
,
"src damaged at %d w:%d src:%d dst:%d %s
\n
"
,
i
,
width
,
srcOffset
,
dstOffset
,
name
);
i
,
width
,
srcOffset
,
dstOffset
,
name
);
failed
=
1
;
failed
=
1
;
break
;
break
;
}
}
}
}
for
(
i
=
0
;
i
<
dstOffset
;
i
++
)
{
for
(
i
=
0
;
i
<
dstOffset
;
i
++
)
{
if
(
dstBuffer
[
i
]
!=
dstByte
)
{
if
(
dstBuffer
[
i
]
!=
dstByte
)
{
av_log
(
NULL
,
AV_LOG_INFO
,
"dst damaged at %d w:%d src:%d dst:%d %s
\n
"
,
av_log
(
NULL
,
AV_LOG_INFO
,
"dst damaged at %d w:%d src:%d dst:%d %s
\n
"
,
i
,
width
,
srcOffset
,
dstOffset
,
name
);
i
,
width
,
srcOffset
,
dstOffset
,
name
);
failed
=
1
;
failed
=
1
;
break
;
break
;
}
}
}
}
for
(
i
=
dstOffset
+
width
*
dstBpp
;
i
<
SIZE
;
i
++
)
{
for
(
i
=
dstOffset
+
width
*
dstBpp
;
i
<
SIZE
;
i
++
)
{
if
(
dstBuffer
[
i
]
!=
dstByte
)
{
if
(
dstBuffer
[
i
]
!=
dstByte
)
{
av_log
(
NULL
,
AV_LOG_INFO
,
"dst damaged at %d w:%d src:%d dst:%d %s
\n
"
,
av_log
(
NULL
,
AV_LOG_INFO
,
"dst damaged at %d w:%d src:%d dst:%d %s
\n
"
,
i
,
width
,
srcOffset
,
dstOffset
,
name
);
i
,
width
,
srcOffset
,
dstOffset
,
name
);
failed
=
1
;
failed
=
1
;
break
;
break
;
}
}
}
}
}
}
}
}
}
}
if
(
failed
)
failedNum
++
;
if
(
failed
)
else
if
(
srcBpp
)
passedNum
++
;
failedNum
++
;
else
if
(
srcBpp
)
passedNum
++
;
}
}
av_log
(
NULL
,
AV_LOG_INFO
,
"
\n
%d converters passed, %d converters randomly overwrote memory
\n
"
,
passedNum
,
failedNum
);
av_log
(
NULL
,
AV_LOG_INFO
,
"
\n
%d converters passed, %d converters randomly overwrote memory
\n
"
,
passedNum
,
failedNum
);
return
failedNum
;
return
failedNum
;
}
}
libswscale/swscale-test.c
View file @
999484c9
...
@@ -35,33 +35,32 @@
...
@@ -35,33 +35,32 @@
/* HACK Duplicated from swscale_internal.h.
/* HACK Duplicated from swscale_internal.h.
* Should be removed when a cleaner pixel format system exists. */
* Should be removed when a cleaner pixel format system exists. */
#define isGray(x) ( \
#define isGray(x) \
(x)==PIX_FMT_GRAY8 \
((x) == PIX_FMT_GRAY8 || \
|| (x)==PIX_FMT_GRAY16BE \
(x) == PIX_FMT_Y400A || \
|| (x)==PIX_FMT_GRAY16LE \
(x) == PIX_FMT_GRAY16BE || \
)
(x) == PIX_FMT_GRAY16LE)
#define hasChroma(x) (!( \
#define hasChroma(x) \
isGray(x) \
(!(isGray(x) || \
|| (x)==PIX_FMT_MONOBLACK \
(x) == PIX_FMT_MONOBLACK || \
|| (x)==PIX_FMT_MONOWHITE \
(x) == PIX_FMT_MONOWHITE))
))
#define isALPHA(x) \
#define isALPHA(x) ( \
((x) == PIX_FMT_BGR32 || \
(x)==PIX_FMT_BGR32 \
(x) == PIX_FMT_BGR32_1 || \
|| (x)==PIX_FMT_BGR32_1 \
(x) == PIX_FMT_RGB32 || \
|| (x)==PIX_FMT_RGB32 \
(x) == PIX_FMT_RGB32_1 || \
|| (x)==PIX_FMT_RGB32_1 \
(x) == PIX_FMT_YUVA420P)
|| (x)==PIX_FMT_YUVA420P \
)
static
uint64_t
getSSD
(
uint8_t
*
src1
,
uint8_t
*
src2
,
int
stride1
,
int
stride2
,
int
w
,
int
h
)
static
uint64_t
getSSD
(
uint8_t
*
src1
,
uint8_t
*
src2
,
int
stride1
,
int
stride2
,
int
w
,
int
h
)
{
{
int
x
,
y
;
int
x
,
y
;
uint64_t
ssd
=
0
;
uint64_t
ssd
=
0
;
for
(
y
=
0
;
y
<
h
;
y
++
)
{
for
(
y
=
0
;
y
<
h
;
y
++
)
{
for
(
x
=
0
;
x
<
w
;
x
++
)
{
for
(
x
=
0
;
x
<
w
;
x
++
)
{
int
d
=
src1
[
x
+
y
*
stride1
]
-
src2
[
x
+
y
*
stride2
];
int
d
=
src1
[
x
+
y
*
stride1
]
-
src2
[
x
+
y
*
stride2
];
ssd
+=
d
*
d
;
ssd
+=
d
*
d
;
}
}
}
}
return
ssd
;
return
ssd
;
...
@@ -86,11 +85,11 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
...
@@ -86,11 +85,11 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
static
int
cur_srcW
,
cur_srcH
;
static
int
cur_srcW
,
cur_srcH
;
static
uint8_t
*
src
[
4
];
static
uint8_t
*
src
[
4
];
static
int
srcStride
[
4
];
static
int
srcStride
[
4
];
uint8_t
*
dst
[
4
]
=
{
0
};
uint8_t
*
dst
[
4
]
=
{
0
};
uint8_t
*
out
[
4
]
=
{
0
};
uint8_t
*
out
[
4
]
=
{
0
};
int
dstStride
[
4
];
int
dstStride
[
4
];
int
i
;
int
i
;
uint64_t
ssdY
,
ssdU
=
0
,
ssdV
=
0
,
ssdA
=
0
;
uint64_t
ssdY
,
ssdU
=
0
,
ssdV
=
0
,
ssdA
=
0
;
struct
SwsContext
*
dstContext
=
NULL
,
*
outContext
=
NULL
;
struct
SwsContext
*
dstContext
=
NULL
,
*
outContext
=
NULL
;
uint32_t
crc
=
0
;
uint32_t
crc
=
0
;
int
res
=
0
;
int
res
=
0
;
...
@@ -105,11 +104,10 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
...
@@ -105,11 +104,10 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
av_image_fill_linesizes
(
srcStride
,
srcFormat
,
srcW
);
av_image_fill_linesizes
(
srcStride
,
srcFormat
,
srcW
);
for
(
p
=
0
;
p
<
4
;
p
++
)
{
for
(
p
=
0
;
p
<
4
;
p
++
)
{
if
(
srcStride
[
p
])
if
(
srcStride
[
p
])
src
[
p
]
=
av_mallocz
(
srcStride
[
p
]
*
srcH
+
16
);
src
[
p
]
=
av_mallocz
(
srcStride
[
p
]
*
srcH
+
16
);
if
(
srcStride
[
p
]
&&
!
src
[
p
])
{
if
(
srcStride
[
p
]
&&
!
src
[
p
])
{
perror
(
"Malloc"
);
perror
(
"Malloc"
);
res
=
-
1
;
res
=
-
1
;
goto
end
;
goto
end
;
}
}
}
}
...
@@ -120,7 +118,6 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
...
@@ -120,7 +118,6 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
av_pix_fmt_descriptors
[
PIX_FMT_YUVA420P
].
name
,
av_pix_fmt_descriptors
[
PIX_FMT_YUVA420P
].
name
,
av_pix_fmt_descriptors
[
srcFormat
].
name
);
av_pix_fmt_descriptors
[
srcFormat
].
name
);
res
=
-
1
;
res
=
-
1
;
goto
end
;
goto
end
;
}
}
sws_scale
(
srcContext
,
ref
,
refStride
,
0
,
h
,
src
,
srcStride
);
sws_scale
(
srcContext
,
ref
,
refStride
,
0
,
h
,
src
,
srcStride
);
...
@@ -132,7 +129,7 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
...
@@ -132,7 +129,7 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
}
}
av_image_fill_linesizes
(
dstStride
,
dstFormat
,
dstW
);
av_image_fill_linesizes
(
dstStride
,
dstFormat
,
dstW
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
for
(
i
=
0
;
i
<
4
;
i
++
)
{
/* Image buffers passed into libswscale can be allocated any way you
/* Image buffers passed into libswscale can be allocated any way you
* prefer, as long as they're aligned enough for the architecture, and
* prefer, as long as they're aligned enough for the architecture, and
* they're freed appropriately (such as using av_free for buffers
* they're freed appropriately (such as using av_free for buffers
...
@@ -140,7 +137,7 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
...
@@ -140,7 +137,7 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
/* An extra 16 bytes is being allocated because some scalers may write
/* An extra 16 bytes is being allocated because some scalers may write
* out of bounds. */
* out of bounds. */
if
(
dstStride
[
i
])
if
(
dstStride
[
i
])
dst
[
i
]
=
av_mallocz
(
dstStride
[
i
]
*
dstH
+
16
);
dst
[
i
]
=
av_mallocz
(
dstStride
[
i
]
*
dstH
+
16
);
if
(
dstStride
[
i
]
&&
!
dst
[
i
])
{
if
(
dstStride
[
i
]
&&
!
dst
[
i
])
{
perror
(
"Malloc"
);
perror
(
"Malloc"
);
res
=
-
1
;
res
=
-
1
;
...
@@ -149,13 +146,13 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
...
@@ -149,13 +146,13 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
}
}
}
}
dstContext
=
sws_getContext
(
srcW
,
srcH
,
srcFormat
,
dstW
,
dstH
,
dstFormat
,
flags
,
NULL
,
NULL
,
NULL
);
dstContext
=
sws_getContext
(
srcW
,
srcH
,
srcFormat
,
dstW
,
dstH
,
dstFormat
,
flags
,
NULL
,
NULL
,
NULL
);
if
(
!
dstContext
)
{
if
(
!
dstContext
)
{
fprintf
(
stderr
,
"Failed to get %s ---> %s
\n
"
,
fprintf
(
stderr
,
"Failed to get %s ---> %s
\n
"
,
av_pix_fmt_descriptors
[
srcFormat
].
name
,
av_pix_fmt_descriptors
[
srcFormat
].
name
,
av_pix_fmt_descriptors
[
dstFormat
].
name
);
av_pix_fmt_descriptors
[
dstFormat
].
name
);
res
=
-
1
;
res
=
-
1
;
goto
end
;
goto
end
;
}
}
...
@@ -167,9 +164,9 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
...
@@ -167,9 +164,9 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
sws_scale
(
dstContext
,
src
,
srcStride
,
0
,
srcH
,
dst
,
dstStride
);
sws_scale
(
dstContext
,
src
,
srcStride
,
0
,
srcH
,
dst
,
dstStride
);
for
(
i
=
0
;
i
<
4
&&
dstStride
[
i
];
i
++
)
{
for
(
i
=
0
;
i
<
4
&&
dstStride
[
i
];
i
++
)
crc
=
av_crc
(
av_crc_get_table
(
AV_CRC_32_IEEE
),
crc
,
dst
[
i
],
dstStride
[
i
]
*
dstH
);
crc
=
av_crc
(
av_crc_get_table
(
AV_CRC_32_IEEE
),
crc
,
dst
[
i
],
}
dstStride
[
i
]
*
dstH
);
if
(
r
&&
crc
==
r
->
crc
)
{
if
(
r
&&
crc
==
r
->
crc
)
{
ssdY
=
r
->
ssdY
;
ssdY
=
r
->
ssdY
;
...
@@ -177,60 +174,59 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
...
@@ -177,60 +174,59 @@ static int doTest(uint8_t *ref[4], int refStride[4], int w, int h,
ssdV
=
r
->
ssdV
;
ssdV
=
r
->
ssdV
;
ssdA
=
r
->
ssdA
;
ssdA
=
r
->
ssdA
;
}
else
{
}
else
{
for
(
i
=
0
;
i
<
4
;
i
++
)
{
for
(
i
=
0
;
i
<
4
;
i
++
)
{
if
(
refStride
[
i
])
if
(
refStride
[
i
])
out
[
i
]
=
av_mallocz
(
refStride
[
i
]
*
h
);
out
[
i
]
=
av_mallocz
(
refStride
[
i
]
*
h
);
if
(
refStride
[
i
]
&&
!
out
[
i
])
{
if
(
refStride
[
i
]
&&
!
out
[
i
])
{
perror
(
"Malloc"
);
perror
(
"Malloc"
);
res
=
-
1
;
res
=
-
1
;
goto
end
;
goto
end
;
}
}
}
}
outContext
=
sws_getContext
(
dstW
,
dstH
,
dstFormat
,
w
,
h
,
PIX_FMT_YUVA420P
,
SWS_BILINEAR
,
NULL
,
NULL
,
NULL
);
outContext
=
sws_getContext
(
dstW
,
dstH
,
dstFormat
,
w
,
h
,
PIX_FMT_YUVA420P
,
SWS_BILINEAR
,
NULL
,
NULL
,
NULL
);
if
(
!
outContext
)
{
if
(
!
outContext
)
{
fprintf
(
stderr
,
"Failed to get %s ---> %s
\n
"
,
fprintf
(
stderr
,
"Failed to get %s ---> %s
\n
"
,
av_pix_fmt_descriptors
[
dstFormat
].
name
,
av_pix_fmt_descriptors
[
dstFormat
].
name
,
av_pix_fmt_descriptors
[
PIX_FMT_YUVA420P
].
name
);
av_pix_fmt_descriptors
[
PIX_FMT_YUVA420P
].
name
);
res
=
-
1
;
res
=
-
1
;
goto
end
;
goto
end
;
}
}
sws_scale
(
outContext
,
dst
,
dstStride
,
0
,
dstH
,
out
,
refStride
);
sws_scale
(
outContext
,
dst
,
dstStride
,
0
,
dstH
,
out
,
refStride
);
ssdY
=
getSSD
(
ref
[
0
],
out
[
0
],
refStride
[
0
],
refStride
[
0
],
w
,
h
);
ssdY
=
getSSD
(
ref
[
0
],
out
[
0
],
refStride
[
0
],
refStride
[
0
],
w
,
h
);
if
(
hasChroma
(
srcFormat
)
&&
hasChroma
(
dstFormat
))
{
if
(
hasChroma
(
srcFormat
)
&&
hasChroma
(
dstFormat
))
{
//FIXME check that output is really gray
//FIXME check that output is really gray
ssdU
=
getSSD
(
ref
[
1
],
out
[
1
],
refStride
[
1
],
refStride
[
1
],
(
w
+
1
)
>>
1
,
(
h
+
1
)
>>
1
);
ssdU
=
getSSD
(
ref
[
1
],
out
[
1
],
refStride
[
1
],
refStride
[
1
],
ssdV
=
getSSD
(
ref
[
2
],
out
[
2
],
refStride
[
2
],
refStride
[
2
],
(
w
+
1
)
>>
1
,
(
h
+
1
)
>>
1
);
(
w
+
1
)
>>
1
,
(
h
+
1
)
>>
1
);
ssdV
=
getSSD
(
ref
[
2
],
out
[
2
],
refStride
[
2
],
refStride
[
2
],
(
w
+
1
)
>>
1
,
(
h
+
1
)
>>
1
);
}
}
if
(
isALPHA
(
srcFormat
)
&&
isALPHA
(
dstFormat
))
if
(
isALPHA
(
srcFormat
)
&&
isALPHA
(
dstFormat
))
ssdA
=
getSSD
(
ref
[
3
],
out
[
3
],
refStride
[
3
],
refStride
[
3
],
w
,
h
);
ssdA
=
getSSD
(
ref
[
3
],
out
[
3
],
refStride
[
3
],
refStride
[
3
],
w
,
h
);
ssdY
/=
w
*
h
;
ssdY
/=
w
*
h
;
ssdU
/=
w
*
h
/
4
;
ssdU
/=
w
*
h
/
4
;
ssdV
/=
w
*
h
/
4
;
ssdV
/=
w
*
h
/
4
;
ssdA
/=
w
*
h
;
ssdA
/=
w
*
h
;
sws_freeContext
(
outContext
);
sws_freeContext
(
outContext
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
for
(
i
=
0
;
i
<
4
;
i
++
)
if
(
refStride
[
i
])
if
(
refStride
[
i
])
av_free
(
out
[
i
]);
av_free
(
out
[
i
]);
}
}
}
printf
(
" CRC=%08x SSD=%5"
PRId64
",%5"
PRId64
",%5"
PRId64
",%5"
PRId64
"
\n
"
,
printf
(
" CRC=%08x SSD=%5"
PRId64
",%5"
PRId64
",%5"
PRId64
",%5"
PRId64
"
\n
"
,
crc
,
ssdY
,
ssdU
,
ssdV
,
ssdA
);
crc
,
ssdY
,
ssdU
,
ssdV
,
ssdA
);
end:
end:
sws_freeContext
(
dstContext
);
sws_freeContext
(
dstContext
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
for
(
i
=
0
;
i
<
4
;
i
++
)
if
(
dstStride
[
i
])
if
(
dstStride
[
i
])
av_free
(
dst
[
i
]);
av_free
(
dst
[
i
]);
}
return
res
;
return
res
;
}
}
...
@@ -239,18 +235,18 @@ static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h,
...
@@ -239,18 +235,18 @@ static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h,
enum
PixelFormat
srcFormat_in
,
enum
PixelFormat
srcFormat_in
,
enum
PixelFormat
dstFormat_in
)
enum
PixelFormat
dstFormat_in
)
{
{
const
int
flags
[]
=
{
SWS_FAST_BILINEAR
,
const
int
flags
[]
=
{
SWS_FAST_BILINEAR
,
SWS_BILINEAR
,
SWS_BICUBIC
,
SWS_BILINEAR
,
SWS_BICUBIC
,
SWS_X
,
SWS_POINT
,
SWS_AREA
,
0
};
SWS_X
,
SWS_POINT
,
SWS_AREA
,
0
};
const
int
srcW
=
w
;
const
int
srcW
=
w
;
const
int
srcH
=
h
;
const
int
srcH
=
h
;
const
int
dstW
[]
=
{
srcW
-
srcW
/
3
,
srcW
,
srcW
+
srcW
/
3
,
0
};
const
int
dstW
[]
=
{
srcW
-
srcW
/
3
,
srcW
,
srcW
+
srcW
/
3
,
0
};
const
int
dstH
[]
=
{
srcH
-
srcH
/
3
,
srcH
,
srcH
+
srcH
/
3
,
0
};
const
int
dstH
[]
=
{
srcH
-
srcH
/
3
,
srcH
,
srcH
+
srcH
/
3
,
0
};
enum
PixelFormat
srcFormat
,
dstFormat
;
enum
PixelFormat
srcFormat
,
dstFormat
;
for
(
srcFormat
=
srcFormat_in
!=
PIX_FMT_NONE
?
srcFormat_in
:
0
;
for
(
srcFormat
=
srcFormat_in
!=
PIX_FMT_NONE
?
srcFormat_in
:
0
;
srcFormat
<
PIX_FMT_NB
;
srcFormat
++
)
{
srcFormat
<
PIX_FMT_NB
;
srcFormat
++
)
{
if
(
!
sws_isSupportedInput
(
srcFormat
)
||
!
sws_isSupportedOutput
(
srcFormat
))
if
(
!
sws_isSupportedInput
(
srcFormat
)
||
!
sws_isSupportedOutput
(
srcFormat
))
continue
;
continue
;
for
(
dstFormat
=
dstFormat_in
!=
PIX_FMT_NONE
?
dstFormat_in
:
0
;
for
(
dstFormat
=
dstFormat_in
!=
PIX_FMT_NONE
?
dstFormat_in
:
0
;
...
@@ -258,7 +254,8 @@ static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h,
...
@@ -258,7 +254,8 @@ static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h,
int
i
,
j
,
k
;
int
i
,
j
,
k
;
int
res
=
0
;
int
res
=
0
;
if
(
!
sws_isSupportedInput
(
dstFormat
)
||
!
sws_isSupportedOutput
(
dstFormat
))
if
(
!
sws_isSupportedInput
(
dstFormat
)
||
!
sws_isSupportedOutput
(
dstFormat
))
continue
;
continue
;
printf
(
"%s -> %s
\n
"
,
printf
(
"%s -> %s
\n
"
,
...
@@ -266,14 +263,13 @@ static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h,
...
@@ -266,14 +263,13 @@ static void selfTest(uint8_t *ref[4], int refStride[4], int w, int h,
av_pix_fmt_descriptors
[
dstFormat
].
name
);
av_pix_fmt_descriptors
[
dstFormat
].
name
);
fflush
(
stdout
);
fflush
(
stdout
);
for
(
k
=
0
;
flags
[
k
]
&&
!
res
;
k
++
)
{
for
(
k
=
0
;
flags
[
k
]
&&
!
res
;
k
++
)
for
(
i
=
0
;
dstW
[
i
]
&&
!
res
;
i
++
)
for
(
i
=
0
;
dstW
[
i
]
&&
!
res
;
i
++
)
for
(
j
=
0
;
dstH
[
j
]
&&
!
res
;
j
++
)
for
(
j
=
0
;
dstH
[
j
]
&&
!
res
;
j
++
)
res
=
doTest
(
ref
,
refStride
,
w
,
h
,
res
=
doTest
(
ref
,
refStride
,
w
,
h
,
srcFormat
,
dstFormat
,
srcFormat
,
dstFormat
,
srcW
,
srcH
,
dstW
[
i
],
dstH
[
j
],
flags
[
k
],
srcW
,
srcH
,
dstW
[
i
],
dstH
[
j
],
flags
[
k
],
NULL
);
NULL
);
}
if
(
dstFormat_in
!=
PIX_FMT_NONE
)
if
(
dstFormat_in
!=
PIX_FMT_NONE
)
break
;
break
;
}
}
...
@@ -299,8 +295,9 @@ static int fileTest(uint8_t *ref[4], int refStride[4], int w, int h, FILE *fp,
...
@@ -299,8 +295,9 @@ static int fileTest(uint8_t *ref[4], int refStride[4], int w, int h, FILE *fp,
int
flags
;
int
flags
;
int
ret
;
int
ret
;
ret
=
sscanf
(
buf
,
" %12s %dx%d -> %12s %dx%d flags=%d CRC=%x"
ret
=
sscanf
(
buf
,
" SSD=%"
PRId64
", %"
PRId64
", %"
PRId64
", %"
PRId64
"
\n
"
,
" %12s %dx%d -> %12s %dx%d flags=%d CRC=%x"
" SSD=%"
PRId64
", %"
PRId64
", %"
PRId64
", %"
PRId64
"
\n
"
,
srcStr
,
&
srcW
,
&
srcH
,
dstStr
,
&
dstW
,
&
dstH
,
srcStr
,
&
srcW
,
&
srcH
,
dstStr
,
&
dstW
,
&
dstH
,
&
flags
,
&
r
.
crc
,
&
r
.
ssdY
,
&
r
.
ssdU
,
&
r
.
ssdV
,
&
r
.
ssdA
);
&
flags
,
&
r
.
crc
,
&
r
.
ssdY
,
&
r
.
ssdU
,
&
r
.
ssdV
,
&
r
.
ssdA
);
if
(
ret
!=
12
)
{
if
(
ret
!=
12
)
{
...
@@ -339,12 +336,12 @@ int main(int argc, char **argv)
...
@@ -339,12 +336,12 @@ int main(int argc, char **argv)
{
{
enum
PixelFormat
srcFormat
=
PIX_FMT_NONE
;
enum
PixelFormat
srcFormat
=
PIX_FMT_NONE
;
enum
PixelFormat
dstFormat
=
PIX_FMT_NONE
;
enum
PixelFormat
dstFormat
=
PIX_FMT_NONE
;
uint8_t
*
rgb_data
=
av_malloc
(
W
*
H
*
4
);
uint8_t
*
rgb_data
=
av_malloc
(
W
*
H
*
4
);
uint8_t
*
rgb_src
[
3
]
=
{
rgb_data
,
NULL
,
NULL
};
uint8_t
*
rgb_src
[
3
]
=
{
rgb_data
,
NULL
,
NULL
};
int
rgb_stride
[
3
]
=
{
4
*
W
,
0
,
0
};
int
rgb_stride
[
3
]
=
{
4
*
W
,
0
,
0
};
uint8_t
*
data
=
av_malloc
(
4
*
W
*
H
);
uint8_t
*
data
=
av_malloc
(
4
*
W
*
H
);
uint8_t
*
src
[
4
]
=
{
data
,
data
+
W
*
H
,
data
+
W
*
H
*
2
,
data
+
W
*
H
*
3
};
uint8_t
*
src
[
4
]
=
{
data
,
data
+
W
*
H
,
data
+
W
*
H
*
2
,
data
+
W
*
H
*
3
};
int
stride
[
4
]
=
{
W
,
W
,
W
,
W
};
int
stride
[
4
]
=
{
W
,
W
,
W
,
W
};
int
x
,
y
;
int
x
,
y
;
struct
SwsContext
*
sws
;
struct
SwsContext
*
sws
;
AVLFG
rand
;
AVLFG
rand
;
...
@@ -354,41 +351,40 @@ int main(int argc, char **argv)
...
@@ -354,41 +351,40 @@ int main(int argc, char **argv)
if
(
!
rgb_data
||
!
data
)
if
(
!
rgb_data
||
!
data
)
return
-
1
;
return
-
1
;
sws
=
sws_getContext
(
W
/
12
,
H
/
12
,
PIX_FMT_RGB32
,
W
,
H
,
PIX_FMT_YUVA420P
,
SWS_BILINEAR
,
NULL
,
NULL
,
NULL
);
sws
=
sws_getContext
(
W
/
12
,
H
/
12
,
PIX_FMT_RGB32
,
W
,
H
,
PIX_FMT_YUVA420P
,
SWS_BILINEAR
,
NULL
,
NULL
,
NULL
);
av_lfg_init
(
&
rand
,
1
);
av_lfg_init
(
&
rand
,
1
);
for
(
y
=
0
;
y
<
H
;
y
++
)
{
for
(
y
=
0
;
y
<
H
;
y
++
)
for
(
x
=
0
;
x
<
W
*
4
;
x
++
)
{
for
(
x
=
0
;
x
<
W
*
4
;
x
++
)
rgb_data
[
x
+
y
*
4
*
W
]
=
av_lfg_get
(
&
rand
);
rgb_data
[
x
+
y
*
4
*
W
]
=
av_lfg_get
(
&
rand
);
}
}
sws_scale
(
sws
,
rgb_src
,
rgb_stride
,
0
,
H
,
src
,
stride
);
sws_scale
(
sws
,
rgb_src
,
rgb_stride
,
0
,
H
,
src
,
stride
);
sws_freeContext
(
sws
);
sws_freeContext
(
sws
);
av_free
(
rgb_data
);
av_free
(
rgb_data
);
for
(
i
=
1
;
i
<
argc
;
i
+=
2
)
{
for
(
i
=
1
;
i
<
argc
;
i
+=
2
)
{
if
(
argv
[
i
][
0
]
!=
'-'
||
i
+
1
==
argc
)
if
(
argv
[
i
][
0
]
!=
'-'
||
i
+
1
==
argc
)
goto
bad_option
;
goto
bad_option
;
if
(
!
strcmp
(
argv
[
i
],
"-ref"
))
{
if
(
!
strcmp
(
argv
[
i
],
"-ref"
))
{
FILE
*
fp
=
fopen
(
argv
[
i
+
1
],
"r"
);
FILE
*
fp
=
fopen
(
argv
[
i
+
1
],
"r"
);
if
(
!
fp
)
{
if
(
!
fp
)
{
fprintf
(
stderr
,
"could not open '%s'
\n
"
,
argv
[
i
+
1
]);
fprintf
(
stderr
,
"could not open '%s'
\n
"
,
argv
[
i
+
1
]);
goto
error
;
goto
error
;
}
}
res
=
fileTest
(
src
,
stride
,
W
,
H
,
fp
,
srcFormat
,
dstFormat
);
res
=
fileTest
(
src
,
stride
,
W
,
H
,
fp
,
srcFormat
,
dstFormat
);
fclose
(
fp
);
fclose
(
fp
);
goto
end
;
goto
end
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-src"
))
{
}
else
if
(
!
strcmp
(
argv
[
i
],
"-src"
))
{
srcFormat
=
av_get_pix_fmt
(
argv
[
i
+
1
]);
srcFormat
=
av_get_pix_fmt
(
argv
[
i
+
1
]);
if
(
srcFormat
==
PIX_FMT_NONE
)
{
if
(
srcFormat
==
PIX_FMT_NONE
)
{
fprintf
(
stderr
,
"invalid pixel format %s
\n
"
,
argv
[
i
+
1
]);
fprintf
(
stderr
,
"invalid pixel format %s
\n
"
,
argv
[
i
+
1
]);
return
-
1
;
return
-
1
;
}
}
}
else
if
(
!
strcmp
(
argv
[
i
],
"-dst"
))
{
}
else
if
(
!
strcmp
(
argv
[
i
],
"-dst"
))
{
dstFormat
=
av_get_pix_fmt
(
argv
[
i
+
1
]);
dstFormat
=
av_get_pix_fmt
(
argv
[
i
+
1
]);
if
(
dstFormat
==
PIX_FMT_NONE
)
{
if
(
dstFormat
==
PIX_FMT_NONE
)
{
fprintf
(
stderr
,
"invalid pixel format %s
\n
"
,
argv
[
i
+
1
]);
fprintf
(
stderr
,
"invalid pixel format %s
\n
"
,
argv
[
i
+
1
]);
return
-
1
;
return
-
1
;
}
}
}
else
{
}
else
{
...
...
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