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
5589698e
Commit
5589698e
authored
Feb 15, 2016
by
Paul B Mahol
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avfilter/vf_drawbox: add alpha pixel formats support
Signed-off-by:
Paul B Mahol
<
onemda@gmail.com
>
parent
f6492a2e
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
57 additions
and
0 deletions
+57
-0
vf_drawbox.c
libavfilter/vf_drawbox.c
+57
-0
No files found.
libavfilter/vf_drawbox.c
View file @
5589698e
...
...
@@ -79,6 +79,7 @@ typedef struct DrawBoxContext {
char
*
x_expr
,
*
y_expr
;
///< expression for x and y
char
*
w_expr
,
*
h_expr
;
///< expression for width and height
char
*
t_expr
;
///< expression for thickness
int
have_alpha
;
}
DrawBoxContext
;
static
const
int
NUM_EXPR_EVALS
=
5
;
...
...
@@ -110,6 +111,7 @@ static int query_formats(AVFilterContext *ctx)
AV_PIX_FMT_YUV411P
,
AV_PIX_FMT_YUV410P
,
AV_PIX_FMT_YUVJ444P
,
AV_PIX_FMT_YUVJ422P
,
AV_PIX_FMT_YUVJ420P
,
AV_PIX_FMT_YUV440P
,
AV_PIX_FMT_YUVJ440P
,
AV_PIX_FMT_YUVA420P
,
AV_PIX_FMT_YUVA422P
,
AV_PIX_FMT_YUVA444P
,
AV_PIX_FMT_NONE
};
AVFilterFormats
*
fmts_list
=
ff_make_format_list
(
pix_fmts
);
...
...
@@ -130,6 +132,7 @@ static int config_input(AVFilterLink *inlink)
s
->
hsub
=
desc
->
log2_chroma_w
;
s
->
vsub
=
desc
->
log2_chroma_h
;
s
->
have_alpha
=
desc
->
flags
&
AV_PIX_FMT_FLAG_ALPHA
;
var_values
[
VAR_IN_H
]
=
var_values
[
VAR_IH
]
=
inlink
->
h
;
var_values
[
VAR_IN_W
]
=
var_values
[
VAR_IW
]
=
inlink
->
w
;
...
...
@@ -210,6 +213,33 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
int
plane
,
x
,
y
,
xb
=
s
->
x
,
yb
=
s
->
y
;
unsigned
char
*
row
[
4
];
if
(
s
->
have_alpha
)
{
for
(
y
=
FFMAX
(
yb
,
0
);
y
<
frame
->
height
&&
y
<
(
yb
+
s
->
h
);
y
++
)
{
row
[
0
]
=
frame
->
data
[
0
]
+
y
*
frame
->
linesize
[
0
];
row
[
3
]
=
frame
->
data
[
3
]
+
y
*
frame
->
linesize
[
3
];
for
(
plane
=
1
;
plane
<
3
;
plane
++
)
row
[
plane
]
=
frame
->
data
[
plane
]
+
frame
->
linesize
[
plane
]
*
(
y
>>
s
->
vsub
);
if
(
s
->
invert_color
)
{
for
(
x
=
FFMAX
(
xb
,
0
);
x
<
xb
+
s
->
w
&&
x
<
frame
->
width
;
x
++
)
if
((
y
-
yb
<
s
->
thickness
)
||
(
yb
+
s
->
h
-
1
-
y
<
s
->
thickness
)
||
(
x
-
xb
<
s
->
thickness
)
||
(
xb
+
s
->
w
-
1
-
x
<
s
->
thickness
))
row
[
0
][
x
]
=
0xff
-
row
[
0
][
x
];
}
else
{
for
(
x
=
FFMAX
(
xb
,
0
);
x
<
xb
+
s
->
w
&&
x
<
frame
->
width
;
x
++
)
{
if
((
y
-
yb
<
s
->
thickness
)
||
(
yb
+
s
->
h
-
1
-
y
<
s
->
thickness
)
||
(
x
-
xb
<
s
->
thickness
)
||
(
xb
+
s
->
w
-
1
-
x
<
s
->
thickness
))
{
row
[
0
][
x
]
=
s
->
yuv_color
[
Y
];
row
[
1
][
x
>>
s
->
hsub
]
=
s
->
yuv_color
[
U
];
row
[
2
][
x
>>
s
->
hsub
]
=
s
->
yuv_color
[
V
];
row
[
3
][
x
]
=
s
->
yuv_color
[
A
];
}
}
}
}
}
else
{
for
(
y
=
FFMAX
(
yb
,
0
);
y
<
frame
->
height
&&
y
<
(
yb
+
s
->
h
);
y
++
)
{
row
[
0
]
=
frame
->
data
[
0
]
+
y
*
frame
->
linesize
[
0
];
...
...
@@ -235,6 +265,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
}
}
}
}
return
ff_filter_frame
(
inlink
->
dst
->
outputs
[
0
],
frame
);
}
...
...
@@ -323,6 +354,31 @@ static int drawgrid_filter_frame(AVFilterLink *inlink, AVFrame *frame)
int
plane
,
x
,
y
;
uint8_t
*
row
[
4
];
if
(
drawgrid
->
have_alpha
)
{
for
(
y
=
0
;
y
<
frame
->
height
;
y
++
)
{
row
[
0
]
=
frame
->
data
[
0
]
+
y
*
frame
->
linesize
[
0
];
row
[
3
]
=
frame
->
data
[
3
]
+
y
*
frame
->
linesize
[
3
];
for
(
plane
=
1
;
plane
<
3
;
plane
++
)
row
[
plane
]
=
frame
->
data
[
plane
]
+
frame
->
linesize
[
plane
]
*
(
y
>>
drawgrid
->
vsub
);
if
(
drawgrid
->
invert_color
)
{
for
(
x
=
0
;
x
<
frame
->
width
;
x
++
)
if
(
pixel_belongs_to_grid
(
drawgrid
,
x
,
y
))
row
[
0
][
x
]
=
0xff
-
row
[
0
][
x
];
}
else
{
for
(
x
=
0
;
x
<
frame
->
width
;
x
++
)
{
if
(
pixel_belongs_to_grid
(
drawgrid
,
x
,
y
))
{
row
[
0
][
x
]
=
drawgrid
->
yuv_color
[
Y
];
row
[
1
][
x
>>
drawgrid
->
hsub
]
=
drawgrid
->
yuv_color
[
U
];
row
[
2
][
x
>>
drawgrid
->
hsub
]
=
drawgrid
->
yuv_color
[
V
];
row
[
3
][
x
]
=
drawgrid
->
yuv_color
[
A
];
}
}
}
}
}
else
{
for
(
y
=
0
;
y
<
frame
->
height
;
y
++
)
{
row
[
0
]
=
frame
->
data
[
0
]
+
y
*
frame
->
linesize
[
0
];
...
...
@@ -346,6 +402,7 @@ static int drawgrid_filter_frame(AVFilterLink *inlink, AVFrame *frame)
}
}
}
}
return
ff_filter_frame
(
inlink
->
dst
->
outputs
[
0
],
frame
);
}
...
...
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