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
84153d18
Commit
84153d18
authored
Jun 26, 2011
by
Jason Garrett-Glaser
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
H.264: make filter_mb_fast support 4:4:4
parent
3fbc9bbb
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
49 additions
and
13 deletions
+49
-13
h264_loopfilter.c
libavcodec/h264_loopfilter.c
+49
-13
No files found.
libavcodec/h264_loopfilter.c
View file @
84153d18
...
...
@@ -218,10 +218,11 @@ void ff_h264_filter_mb_fast( H264Context *h, int mb_x, int mb_y, uint8_t *img_y,
int
mb_type
,
left_type
;
int
qp
,
qp0
,
qp1
,
qpc
,
qpc0
,
qpc1
,
qp_thresh
;
int
chroma
=
!
(
CONFIG_GRAY
&&
(
s
->
flags
&
CODEC_FLAG_GRAY
));
int
chroma444
=
CHROMA444
;
mb_xy
=
h
->
mb_xy
;
if
(
!
h
->
top_type
||
!
h
->
h264dsp
.
h264_loop_filter_strength
||
h
->
pps
.
chroma_qp_diff
||
CHROMA444
)
{
if
(
!
h
->
top_type
||
!
h
->
h264dsp
.
h264_loop_filter_strength
||
h
->
pps
.
chroma_qp_diff
)
{
ff_h264_filter_mb
(
h
,
mb_x
,
mb_y
,
img_y
,
img_cb
,
img_cr
,
linesize
,
uvlinesize
);
return
;
}
...
...
@@ -264,16 +265,46 @@ void ff_h264_filter_mb_fast( H264Context *h, int mb_x, int mb_y, uint8_t *img_y,
filter_mb_edgeh
(
&
img_y
[
4
*
3
*
linesize
],
linesize
,
bS3
,
qp
,
h
);
}
if
(
chroma
){
if
(
left_type
){
filter_mb_edgecv
(
&
img_cb
[
2
*
0
],
uvlinesize
,
bS4
,
qpc0
,
h
);
filter_mb_edgecv
(
&
img_cr
[
2
*
0
],
uvlinesize
,
bS4
,
qpc0
,
h
);
if
(
chroma444
){
if
(
left_type
){
filter_mb_edgev
(
&
img_cb
[
4
*
0
],
linesize
,
bS4
,
qpc0
,
h
);
filter_mb_edgev
(
&
img_cr
[
4
*
0
],
linesize
,
bS4
,
qpc0
,
h
);
}
if
(
IS_8x8DCT
(
mb_type
)
)
{
filter_mb_edgev
(
&
img_cb
[
4
*
2
],
linesize
,
bS3
,
qpc
,
h
);
filter_mb_edgev
(
&
img_cr
[
4
*
2
],
linesize
,
bS3
,
qpc
,
h
);
filter_mb_edgeh
(
&
img_cb
[
4
*
0
*
linesize
],
linesize
,
bSH
,
qpc1
,
h
);
filter_mb_edgeh
(
&
img_cr
[
4
*
0
*
linesize
],
linesize
,
bSH
,
qpc1
,
h
);
filter_mb_edgeh
(
&
img_cb
[
4
*
2
*
linesize
],
linesize
,
bS3
,
qpc
,
h
);
filter_mb_edgeh
(
&
img_cr
[
4
*
2
*
linesize
],
linesize
,
bS3
,
qpc
,
h
);
}
else
{
filter_mb_edgev
(
&
img_cb
[
4
*
1
],
linesize
,
bS3
,
qpc
,
h
);
filter_mb_edgev
(
&
img_cr
[
4
*
1
],
linesize
,
bS3
,
qpc
,
h
);
filter_mb_edgev
(
&
img_cb
[
4
*
2
],
linesize
,
bS3
,
qpc
,
h
);
filter_mb_edgev
(
&
img_cr
[
4
*
2
],
linesize
,
bS3
,
qpc
,
h
);
filter_mb_edgev
(
&
img_cb
[
4
*
3
],
linesize
,
bS3
,
qpc
,
h
);
filter_mb_edgev
(
&
img_cr
[
4
*
3
],
linesize
,
bS3
,
qpc
,
h
);
filter_mb_edgeh
(
&
img_cb
[
4
*
0
*
linesize
],
linesize
,
bSH
,
qpc1
,
h
);
filter_mb_edgeh
(
&
img_cr
[
4
*
0
*
linesize
],
linesize
,
bSH
,
qpc1
,
h
);
filter_mb_edgeh
(
&
img_cb
[
4
*
1
*
linesize
],
linesize
,
bS3
,
qpc
,
h
);
filter_mb_edgeh
(
&
img_cr
[
4
*
1
*
linesize
],
linesize
,
bS3
,
qpc
,
h
);
filter_mb_edgeh
(
&
img_cb
[
4
*
2
*
linesize
],
linesize
,
bS3
,
qpc
,
h
);
filter_mb_edgeh
(
&
img_cr
[
4
*
2
*
linesize
],
linesize
,
bS3
,
qpc
,
h
);
filter_mb_edgeh
(
&
img_cb
[
4
*
3
*
linesize
],
linesize
,
bS3
,
qpc
,
h
);
filter_mb_edgeh
(
&
img_cr
[
4
*
3
*
linesize
],
linesize
,
bS3
,
qpc
,
h
);
}
}
else
{
if
(
left_type
){
filter_mb_edgecv
(
&
img_cb
[
2
*
0
],
uvlinesize
,
bS4
,
qpc0
,
h
);
filter_mb_edgecv
(
&
img_cr
[
2
*
0
],
uvlinesize
,
bS4
,
qpc0
,
h
);
}
filter_mb_edgecv
(
&
img_cb
[
2
*
2
],
uvlinesize
,
bS3
,
qpc
,
h
);
filter_mb_edgecv
(
&
img_cr
[
2
*
2
],
uvlinesize
,
bS3
,
qpc
,
h
);
filter_mb_edgech
(
&
img_cb
[
2
*
0
*
uvlinesize
],
uvlinesize
,
bSH
,
qpc1
,
h
);
filter_mb_edgech
(
&
img_cb
[
2
*
2
*
uvlinesize
],
uvlinesize
,
bS3
,
qpc
,
h
);
filter_mb_edgech
(
&
img_cr
[
2
*
0
*
uvlinesize
],
uvlinesize
,
bSH
,
qpc1
,
h
);
filter_mb_edgech
(
&
img_cr
[
2
*
2
*
uvlinesize
],
uvlinesize
,
bS3
,
qpc
,
h
);
}
filter_mb_edgecv
(
&
img_cb
[
2
*
2
],
uvlinesize
,
bS3
,
qpc
,
h
);
filter_mb_edgecv
(
&
img_cr
[
2
*
2
],
uvlinesize
,
bS3
,
qpc
,
h
);
filter_mb_edgech
(
&
img_cb
[
2
*
0
*
uvlinesize
],
uvlinesize
,
bSH
,
qpc1
,
h
);
filter_mb_edgech
(
&
img_cb
[
2
*
2
*
uvlinesize
],
uvlinesize
,
bS3
,
qpc
,
h
);
filter_mb_edgech
(
&
img_cr
[
2
*
0
*
uvlinesize
],
uvlinesize
,
bSH
,
qpc1
,
h
);
filter_mb_edgech
(
&
img_cr
[
2
*
2
*
uvlinesize
],
uvlinesize
,
bS3
,
qpc
,
h
);
}
return
;
}
else
{
...
...
@@ -301,9 +332,14 @@ void ff_h264_filter_mb_fast( H264Context *h, int mb_x, int mb_y, uint8_t *img_y,
#define FILTER(hv,dir,edge)\
if(AV_RN64A(bS[dir][edge])) { \
filter_mb_edge##hv( &img_y[4*edge*(dir?linesize:1)], linesize, bS[dir][edge], edge ? qp : qp##dir, h );\
if(chroma && !(edge&1)) {\
filter_mb_edgec##hv( &img_cb[2*edge*(dir?uvlinesize:1)], uvlinesize, bS[dir][edge], edge ? qpc : qpc##dir, h );\
filter_mb_edgec##hv( &img_cr[2*edge*(dir?uvlinesize:1)], uvlinesize, bS[dir][edge], edge ? qpc : qpc##dir, h );\
if(chroma){\
if(chroma444){\
filter_mb_edge##hv( &img_cb[4*edge*(dir?linesize:1)], linesize, bS[dir][edge], edge ? qpc : qpc##dir, h );\
filter_mb_edge##hv( &img_cr[4*edge*(dir?linesize:1)], linesize, bS[dir][edge], edge ? qpc : qpc##dir, h );\
} else if(!(edge&1)) {\
filter_mb_edgec##hv( &img_cb[2*edge*(dir?uvlinesize:1)], uvlinesize, bS[dir][edge], edge ? qpc : qpc##dir, h );\
filter_mb_edgec##hv( &img_cr[2*edge*(dir?uvlinesize:1)], uvlinesize, bS[dir][edge], edge ? qpc : qpc##dir, h );\
}\
}\
}
if
(
left_type
)
...
...
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