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
48a1abed
Commit
48a1abed
authored
Jul 03, 2018
by
Ruiling Song
Committed by
Mark Thompson
Jul 11, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavfi/opencl: add macro for opencl error handling.
Signed-off-by:
Ruiling Song
<
ruiling.song@intel.com
>
parent
09628cb1
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
48 additions
and
137 deletions
+48
-137
opencl.h
libavfilter/opencl.h
+12
-0
vf_avgblur_opencl.c
libavfilter/vf_avgblur_opencl.c
+11
-34
vf_overlay_opencl.c
libavfilter/vf_overlay_opencl.c
+6
-23
vf_program_opencl.c
libavfilter/vf_program_opencl.c
+2
-12
vf_tonemap_opencl.c
libavfilter/vf_tonemap_opencl.c
+6
-27
vf_unsharp_opencl.c
libavfilter/vf_unsharp_opencl.c
+11
-41
No files found.
libavfilter/opencl.h
View file @
48a1abed
...
...
@@ -61,6 +61,18 @@ typedef struct OpenCLFilterContext {
goto fail; \
}
/**
* A helper macro to handle OpenCL errors. It will assign errcode to
* variable err, log error msg, and jump to fail label on error.
*/
#define CL_FAIL_ON_ERROR(errcode, ...) do { \
if (cle != CL_SUCCESS) { \
av_log(avctx, AV_LOG_ERROR, __VA_ARGS__); \
err = errcode; \
goto fail; \
} \
} while(0)
/**
* Return that all inputs and outputs support only AV_PIX_FMT_OPENCL.
*/
...
...
libavfilter/vf_avgblur_opencl.c
View file @
48a1abed
...
...
@@ -64,26 +64,16 @@ static int avgblur_opencl_init(AVFilterContext *avctx)
ctx
->
command_queue
=
clCreateCommandQueue
(
ctx
->
ocf
.
hwctx
->
context
,
ctx
->
ocf
.
hwctx
->
device_id
,
0
,
&
cle
);
if
(
!
ctx
->
command_queue
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to create OpenCL "
"command queue: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to create OpenCL "
"command queue %d.
\n
"
,
cle
);
ctx
->
kernel_horiz
=
clCreateKernel
(
ctx
->
ocf
.
program
,
"avgblur_horiz"
,
&
cle
);
if
(
!
ctx
->
kernel_horiz
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to create kernel: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to create horizontal "
"kernel %d.
\n
"
,
cle
);
ctx
->
kernel_vert
=
clCreateKernel
(
ctx
->
ocf
.
program
,
"avgblur_vert"
,
&
cle
);
if
(
!
ctx
->
kernel_vert
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to create kernel: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to create vertical "
"kernel %d.
\n
"
,
cle
);
ctx
->
initialised
=
1
;
return
0
;
...
...
@@ -236,12 +226,8 @@ static int avgblur_opencl_filter_frame(AVFilterLink *inlink, AVFrame *input)
cle
=
clEnqueueNDRangeKernel
(
ctx
->
command_queue
,
ctx
->
kernel_horiz
,
2
,
NULL
,
global_work
,
NULL
,
0
,
NULL
,
NULL
);
if
(
cle
!=
CL_SUCCESS
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to enqueue kernel: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to enqueue horizontal "
"kernel: %d.
\n
"
,
cle
);
cle
=
clFinish
(
ctx
->
command_queue
);
err
=
ff_opencl_filter_work_size_from_image
(
avctx
,
global_work
,
...
...
@@ -259,22 +245,13 @@ static int avgblur_opencl_filter_frame(AVFilterLink *inlink, AVFrame *input)
cle
=
clEnqueueNDRangeKernel
(
ctx
->
command_queue
,
ctx
->
kernel_vert
,
2
,
NULL
,
global_work
,
NULL
,
0
,
NULL
,
NULL
);
if
(
cle
!=
CL_SUCCESS
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to enqueue kernel: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to enqueue vertical "
"kernel: %d.
\n
"
,
cle
);
}
}
cle
=
clFinish
(
ctx
->
command_queue
);
if
(
cle
!=
CL_SUCCESS
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to finish command queue: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to finish command queue: %d.
\n
"
,
cle
);
err
=
av_frame_copy_props
(
output
,
input
);
if
(
err
<
0
)
...
...
libavfilter/vf_overlay_opencl.c
View file @
48a1abed
...
...
@@ -100,19 +100,11 @@ static int overlay_opencl_load(AVFilterContext *avctx,
ctx
->
command_queue
=
clCreateCommandQueue
(
ctx
->
ocf
.
hwctx
->
context
,
ctx
->
ocf
.
hwctx
->
device_id
,
0
,
&
cle
);
if
(
!
ctx
->
command_queue
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to create OpenCL "
"command queue: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to create OpenCL "
"command queue %d.
\n
"
,
cle
);
ctx
->
kernel
=
clCreateKernel
(
ctx
->
ocf
.
program
,
kernel
,
&
cle
);
if
(
!
ctx
->
kernel
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to create kernel: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to create kernel %d.
\n
"
,
cle
);
ctx
->
initialised
=
1
;
return
0
;
...
...
@@ -209,21 +201,12 @@ static int overlay_opencl_blend(FFFrameSync *fs)
cle
=
clEnqueueNDRangeKernel
(
ctx
->
command_queue
,
ctx
->
kernel
,
2
,
NULL
,
global_work
,
NULL
,
0
,
NULL
,
NULL
);
if
(
cle
!=
CL_SUCCESS
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to enqueue "
"overlay kernel for plane %d: %d.
\n
"
,
cle
,
plane
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to enqueue overlay kernel "
"for plane %d: %d.
\n
"
,
plane
,
cle
);
}
cle
=
clFinish
(
ctx
->
command_queue
);
if
(
cle
!=
CL_SUCCESS
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to finish "
"command queue: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to finish command queue: %d.
\n
"
,
cle
);
err
=
av_frame_copy_props
(
output
,
input_main
);
...
...
libavfilter/vf_program_opencl.c
View file @
48a1abed
...
...
@@ -148,21 +148,11 @@ static int program_opencl_run(AVFilterContext *avctx)
cle
=
clEnqueueNDRangeKernel
(
ctx
->
command_queue
,
ctx
->
kernel
,
2
,
NULL
,
global_work
,
NULL
,
0
,
NULL
,
NULL
);
if
(
cle
!=
CL_SUCCESS
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to enqueue kernel: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to enqueue kernel: %d.
\n
"
,
cle
);
}
cle
=
clFinish
(
ctx
->
command_queue
);
if
(
cle
!=
CL_SUCCESS
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to finish command queue: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to finish command queue: %d.
\n
"
,
cle
);
if
(
ctx
->
nb_inputs
>
0
)
{
err
=
av_frame_copy_props
(
output
,
ctx
->
frames
[
0
]);
...
...
libavfilter/vf_tonemap_opencl.c
View file @
48a1abed
...
...
@@ -262,29 +262,17 @@ static int tonemap_opencl_init(AVFilterContext *avctx)
ctx
->
command_queue
=
clCreateCommandQueue
(
ctx
->
ocf
.
hwctx
->
context
,
ctx
->
ocf
.
hwctx
->
device_id
,
0
,
&
cle
);
if
(
!
ctx
->
command_queue
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to create OpenCL "
"command queue: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to create OpenCL "
"command queue %d.
\n
"
,
cle
);
ctx
->
kernel
=
clCreateKernel
(
ctx
->
ocf
.
program
,
"tonemap"
,
&
cle
);
if
(
!
ctx
->
kernel
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to create kernel: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to create kernel %d.
\n
"
,
cle
);
ctx
->
util_mem
=
clCreateBuffer
(
ctx
->
ocf
.
hwctx
->
context
,
0
,
(
2
*
DETECTION_FRAMES
+
7
)
*
sizeof
(
unsigned
),
NULL
,
&
cle
);
if
(
cle
!=
CL_SUCCESS
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to create util buffer: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to create util buffer: %d.
\n
"
,
cle
);
ctx
->
initialised
=
1
;
return
0
;
...
...
@@ -349,11 +337,7 @@ static int launch_kernel(AVFilterContext *avctx, cl_kernel kernel,
cle
=
clEnqueueNDRangeKernel
(
ctx
->
command_queue
,
kernel
,
2
,
NULL
,
global_work
,
local_work
,
0
,
NULL
,
NULL
);
if
(
cle
!=
CL_SUCCESS
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to enqueue kernel: %d.
\n
"
,
cle
);
return
AVERROR
(
EIO
);
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to enqueue kernel: %d.
\n
"
,
cle
);
return
0
;
fail:
return
err
;
...
...
@@ -482,12 +466,7 @@ static int tonemap_opencl_filter_frame(AVFilterLink *inlink, AVFrame *input)
}
cle
=
clFinish
(
ctx
->
command_queue
);
if
(
cle
!=
CL_SUCCESS
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to finish command queue: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to finish command queue: %d.
\n
"
,
cle
);
av_frame_free
(
&
input
);
...
...
libavfilter/vf_unsharp_opencl.c
View file @
48a1abed
...
...
@@ -76,12 +76,8 @@ static int unsharp_opencl_init(AVFilterContext *avctx)
ctx
->
command_queue
=
clCreateCommandQueue
(
ctx
->
ocf
.
hwctx
->
context
,
ctx
->
ocf
.
hwctx
->
device_id
,
0
,
&
cle
);
if
(
!
ctx
->
command_queue
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to create OpenCL "
"command queue: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to create OpenCL "
"command queue %d.
\n
"
,
cle
);
// Use global kernel if mask size will be too big for the local store..
ctx
->
global
=
(
ctx
->
luma_size_x
>
17
.
0
f
||
...
...
@@ -92,11 +88,7 @@ static int unsharp_opencl_init(AVFilterContext *avctx)
ctx
->
kernel
=
clCreateKernel
(
ctx
->
ocf
.
program
,
ctx
->
global
?
"unsharp_global"
:
"unsharp_local"
,
&
cle
);
if
(
!
ctx
->
kernel
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to create kernel: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to create kernel %d.
\n
"
,
cle
);
ctx
->
initialised
=
1
;
return
0
;
...
...
@@ -176,12 +168,8 @@ static int unsharp_opencl_make_filter_params(AVFilterContext *avctx)
CL_MEM_COPY_HOST_PTR
|
CL_MEM_HOST_NO_ACCESS
,
matrix_bytes
,
matrix
,
&
cle
);
if
(
!
buffer
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to create matrix buffer: "
"%d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to create matrix buffer: "
"%d.
\n
"
,
cle
);
ctx
->
plane
[
p
].
matrix
=
buffer
;
}
else
{
buffer
=
clCreateBuffer
(
ctx
->
ocf
.
hwctx
->
context
,
...
...
@@ -190,12 +178,8 @@ static int unsharp_opencl_make_filter_params(AVFilterContext *avctx)
CL_MEM_HOST_NO_ACCESS
,
sizeof
(
ctx
->
plane
[
p
].
blur_x
),
ctx
->
plane
[
p
].
blur_x
,
&
cle
);
if
(
!
buffer
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to create x-coef buffer: "
"%d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to create x-coef buffer: "
"%d.
\n
"
,
cle
);
ctx
->
plane
[
p
].
coef_x
=
buffer
;
buffer
=
clCreateBuffer
(
ctx
->
ocf
.
hwctx
->
context
,
...
...
@@ -204,12 +188,8 @@ static int unsharp_opencl_make_filter_params(AVFilterContext *avctx)
CL_MEM_HOST_NO_ACCESS
,
sizeof
(
ctx
->
plane
[
p
].
blur_y
),
ctx
->
plane
[
p
].
blur_y
,
&
cle
);
if
(
!
buffer
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to create y-coef buffer: "
"%d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to create y-coef buffer: "
"%d.
\n
"
,
cle
);
ctx
->
plane
[
p
].
coef_y
=
buffer
;
}
...
...
@@ -296,21 +276,11 @@ static int unsharp_opencl_filter_frame(AVFilterLink *inlink, AVFrame *input)
cle
=
clEnqueueNDRangeKernel
(
ctx
->
command_queue
,
ctx
->
kernel
,
2
,
NULL
,
global_work
,
ctx
->
global
?
NULL
:
local_work
,
0
,
NULL
,
NULL
);
if
(
cle
!=
CL_SUCCESS
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to enqueue kernel: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to enqueue kernel: %d.
\n
"
,
cle
);
}
cle
=
clFinish
(
ctx
->
command_queue
);
if
(
cle
!=
CL_SUCCESS
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Failed to finish command queue: %d.
\n
"
,
cle
);
err
=
AVERROR
(
EIO
);
goto
fail
;
}
CL_FAIL_ON_ERROR
(
AVERROR
(
EIO
),
"Failed to finish command queue: %d.
\n
"
,
cle
);
err
=
av_frame_copy_props
(
output
,
input
);
if
(
err
<
0
)
...
...
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