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
090b7406
Commit
090b7406
authored
Dec 09, 2017
by
Marton Balint
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avfilter/vf_framerate: factorize blend_frames
Signed-off-by:
Marton Balint
<
cus@passwd.hu
>
parent
1eb926dc
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
7 additions
and
47 deletions
+7
-47
vf_framerate.c
libavfilter/vf_framerate.c
+7
-47
No files found.
libavfilter/vf_framerate.c
View file @
090b7406
...
...
@@ -73,8 +73,6 @@ typedef struct FrameRateContext {
int64_t
srce_pts_dest
[
N_SRCE
];
///< pts for source frames scaled to output timebase
int64_t
pts
;
///< pts of frame we are working on
int
(
*
blend_frames
)(
AVFilterContext
*
ctx
,
float
interpolate
,
AVFrame
*
copy_src1
,
AVFrame
*
copy_src2
);
int
max
;
int
bitdepth
;
AVFrame
*
work
;
...
...
@@ -321,16 +319,16 @@ static int filter_slice16(AVFilterContext *ctx, void *arg, int job, int nb_jobs)
return
0
;
}
static
int
blend_frames
16
(
AVFilterContext
*
ctx
,
float
interpolate
,
AVFrame
*
copy_src1
,
AVFrame
*
copy_src2
)
static
int
blend_frames
(
AVFilterContext
*
ctx
,
float
interpolate
,
AVFrame
*
copy_src1
,
AVFrame
*
copy_src2
)
{
FrameRateContext
*
s
=
ctx
->
priv
;
AVFilterLink
*
outlink
=
ctx
->
outputs
[
0
];
double
interpolate_scene_score
=
0
;
if
((
s
->
flags
&
FRAMERATE_FLAG_SCD
)
&&
copy_src2
)
{
interpolate_scene_score
=
get_scene_score16
(
ctx
,
copy_src1
,
copy_src2
);
ff_dlog
(
ctx
,
"blend_frames
16
() interpolate scene score:%f
\n
"
,
interpolate_scene_score
);
interpolate_scene_score
=
s
->
bitdepth
==
8
?
get_scene_score
(
ctx
,
copy_src1
,
copy_src2
)
:
get_scene_score16
(
ctx
,
copy_src1
,
copy_src2
);
ff_dlog
(
ctx
,
"blend_frames() interpolate scene score:%f
\n
"
,
interpolate_scene_score
);
}
// decide if the shot-change detection allows us to blend two frames
if
(
interpolate_scene_score
<
s
->
scene_score
&&
copy_src2
)
{
...
...
@@ -347,42 +345,8 @@ static int blend_frames16(AVFilterContext *ctx, float interpolate,
av_frame_copy_props
(
s
->
work
,
s
->
srce
[
s
->
crnt
]);
ff_dlog
(
ctx
,
"blend_frames16() INTERPOLATE to create work frame
\n
"
);
ctx
->
internal
->
execute
(
ctx
,
filter_slice16
,
&
td
,
NULL
,
FFMIN
(
outlink
->
h
,
ff_filter_get_nb_threads
(
ctx
)));
return
1
;
}
return
0
;
}
static
int
blend_frames8
(
AVFilterContext
*
ctx
,
float
interpolate
,
AVFrame
*
copy_src1
,
AVFrame
*
copy_src2
)
{
FrameRateContext
*
s
=
ctx
->
priv
;
AVFilterLink
*
outlink
=
ctx
->
outputs
[
0
];
double
interpolate_scene_score
=
0
;
if
((
s
->
flags
&
FRAMERATE_FLAG_SCD
)
&&
copy_src2
)
{
interpolate_scene_score
=
get_scene_score
(
ctx
,
copy_src1
,
copy_src2
);
ff_dlog
(
ctx
,
"blend_frames8() interpolate scene score:%f
\n
"
,
interpolate_scene_score
);
}
// decide if the shot-change detection allows us to blend two frames
if
(
interpolate_scene_score
<
s
->
scene_score
&&
copy_src2
)
{
ThreadData
td
;
td
.
copy_src1
=
copy_src1
;
td
.
copy_src2
=
copy_src2
;
td
.
src2_factor
=
fabsf
(
interpolate
);
td
.
src1_factor
=
256
-
td
.
src2_factor
;
// get work-space for output frame
s
->
work
=
ff_get_video_buffer
(
outlink
,
outlink
->
w
,
outlink
->
h
);
if
(
!
s
->
work
)
return
AVERROR
(
ENOMEM
);
av_frame_copy_props
(
s
->
work
,
s
->
srce
[
s
->
crnt
]);
ff_dlog
(
ctx
,
"blend_frames8() INTERPOLATE to create work frame
\n
"
);
ctx
->
internal
->
execute
(
ctx
,
filter_slice8
,
&
td
,
NULL
,
FFMIN
(
outlink
->
h
,
ff_filter_get_nb_threads
(
ctx
)));
ff_dlog
(
ctx
,
"blend_frames() INTERPOLATE to create work frame
\n
"
);
ctx
->
internal
->
execute
(
ctx
,
s
->
bitdepth
==
8
?
filter_slice8
:
filter_slice16
,
&
td
,
NULL
,
FFMIN
(
outlink
->
h
,
ff_filter_get_nb_threads
(
ctx
)));
return
1
;
}
return
0
;
...
...
@@ -458,7 +422,7 @@ static int process_work_frame(AVFilterContext *ctx, int stop)
ff_dlog
(
ctx
,
"process_work_frame() interpolate source is:PREV
\n
"
);
copy_src2
=
s
->
srce
[
s
->
prev
];
}
if
(
s
->
blend_frames
(
ctx
,
interpolate
,
copy_src1
,
copy_src2
))
if
(
blend_frames
(
ctx
,
interpolate
,
copy_src1
,
copy_src2
))
goto
copy_done
;
else
ff_dlog
(
ctx
,
"process_work_frame() CUT - DON'T INTERPOLATE
\n
"
);
...
...
@@ -622,10 +586,6 @@ static int config_input(AVFilterLink *inlink)
s
->
srce_time_base
=
inlink
->
time_base
;
if
(
s
->
bitdepth
==
8
)
s
->
blend_frames
=
blend_frames8
;
else
s
->
blend_frames
=
blend_frames16
;
s
->
max
=
1
<<
(
s
->
bitdepth
);
return
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