Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
F
FFmpeg
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
libremedia
Tethys
FFmpeg
Commits
4c013946
Commit
4c013946
authored
8 years ago
by
Michael Niedermayer
Browse files
Options
Downloads
Patches
Plain Diff
avcodec/vp56: Factorize vp56_render_mb() out
Signed-off-by:
Michael Niedermayer
<
michael@niedermayer.cc
>
parent
949d2176
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
libavcodec/vp56.c
+23
-54
23 additions, 54 deletions
libavcodec/vp56.c
with
23 additions
and
54 deletions
libavcodec/vp56.c
+
23
−
54
View file @
4c013946
...
...
@@ -400,30 +400,18 @@ static void vp56_mc(VP56Context *s, int b, int plane, uint8_t *src,
}
}
static
int
vp56_
deco
de_mb
(
VP56Context
*
s
,
int
row
,
int
col
,
int
is_alpha
)
static
av_always_inline
void
vp56_
ren
de
r
_mb
(
VP56Context
*
s
,
int
row
,
int
col
,
int
is_alpha
,
VP56mb
mb_type
)
{
AVFrame
*
frame_current
,
*
frame_ref
;
VP56mb
mb_type
;
VP56Frame
ref_frame
;
int
b
,
ab
,
b_max
,
plane
,
off
;
int
ret
;
if
(
s
->
frames
[
VP56_FRAME_CURRENT
]
->
key_frame
)
mb_type
=
VP56_MB_INTRA
;
else
mb_type
=
vp56_decode_mv
(
s
,
row
,
col
);
ref_frame
=
ff_vp56_reference_frame
[
mb_type
];
ret
=
s
->
parse_coeff
(
s
);
if
(
ret
<
0
)
return
ret
;
AVFrame
*
frame_current
,
*
frame_ref
;
VP56Frame
ref_frame
=
ff_vp56_reference_frame
[
mb_type
];
vp56_add_predictors_dc
(
s
,
ref_frame
);
frame_current
=
s
->
frames
[
VP56_FRAME_CURRENT
];
frame_ref
=
s
->
frames
[
ref_frame
];
if
(
mb_type
!=
VP56_MB_INTRA
&&
!
frame_ref
->
data
[
0
])
return
0
;
return
;
ab
=
6
*
is_alpha
;
b_max
=
6
-
2
*
is_alpha
;
...
...
@@ -473,57 +461,38 @@ static int vp56_decode_mb(VP56Context *s, int row, int col, int is_alpha)
s
->
block_coeff
[
4
][
0
]
=
0
;
s
->
block_coeff
[
5
][
0
]
=
0
;
}
return
0
;
}
static
int
vp56_
conceal
_mb
(
VP56Context
*
s
,
int
row
,
int
col
,
int
is_alpha
)
static
int
vp56_
decode
_mb
(
VP56Context
*
s
,
int
row
,
int
col
,
int
is_alpha
)
{
AVFrame
*
frame_current
,
*
frame_ref
;
VP56mb
mb_type
;
VP56Frame
ref_frame
;
int
b
,
ab
,
b_max
,
plane
,
off
;
int
ret
;
if
(
s
->
frames
[
VP56_FRAME_CURRENT
]
->
key_frame
)
mb_type
=
VP56_MB_INTRA
;
else
mb_type
=
vp56_conceal_mv
(
s
,
row
,
col
);
ref_frame
=
ff_vp56_reference_frame
[
mb_type
];
mb_type
=
vp56_decode_mv
(
s
,
row
,
col
);
frame_current
=
s
->
frames
[
VP56_FRAME_CURRENT
];
frame_ref
=
s
->
frames
[
ref_frame
];
if
(
mb_type
!=
VP56_MB_INTRA
&&
!
frame_ref
->
data
[
0
])
return
0
;
ret
=
s
->
parse_coeff
(
s
);
if
(
ret
<
0
)
return
ret
;
ab
=
6
*
is_alpha
;
b_max
=
6
-
2
*
is_alpha
;
vp56_render_mb
(
s
,
row
,
col
,
is_alpha
,
mb_type
);
switch
(
mb_type
)
{
case
VP56_MB_INTRA
:
for
(
b
=
0
;
b
<
b_max
;
b
++
)
{
plane
=
ff_vp56_b2p
[
b
+
ab
];
s
->
vp3dsp
.
idct_put
(
frame_current
->
data
[
plane
]
+
s
->
block_offset
[
b
],
s
->
stride
[
plane
],
s
->
block_coeff
[
b
]);
}
break
;
return
0
;
}
case
VP56_MB_INTER_NOVEC_PF
:
case
VP56_MB_INTER_NOVEC_GF
:
for
(
b
=
0
;
b
<
b_max
;
b
++
)
{
plane
=
ff_vp56_b2p
[
b
+
ab
];
off
=
s
->
block_offset
[
b
];
s
->
hdsp
.
put_pixels_tab
[
1
][
0
](
frame_current
->
data
[
plane
]
+
off
,
frame_ref
->
data
[
plane
]
+
off
,
s
->
stride
[
plane
],
8
);
s
->
vp3dsp
.
idct_add
(
frame_current
->
data
[
plane
]
+
off
,
s
->
stride
[
plane
],
s
->
block_coeff
[
b
]);
}
break
;
}
static
int
vp56_conceal_mb
(
VP56Context
*
s
,
int
row
,
int
col
,
int
is_alpha
)
{
VP56mb
mb_type
;
if
(
s
->
frames
[
VP56_FRAME_CURRENT
]
->
key_frame
)
mb_type
=
VP56_MB_INTRA
;
else
mb_type
=
vp56_conceal_mv
(
s
,
row
,
col
);
vp56_render_mb
(
s
,
row
,
col
,
is_alpha
,
mb_type
);
if
(
is_alpha
)
{
s
->
block_coeff
[
4
][
0
]
=
0
;
s
->
block_coeff
[
5
][
0
]
=
0
;
}
return
0
;
}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment