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
e9b2383b
Commit
e9b2383b
authored
Jan 17, 2015
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
h264: move mb_mbaff into the per-slice context
parent
bc98e8c0
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
24 additions
and
24 deletions
+24
-24
h264.h
libavcodec/h264.h
+1
-1
h264_cabac.c
libavcodec/h264_cabac.c
+6
-6
h264_cavlc.c
libavcodec/h264_cavlc.c
+6
-6
h264_mb.c
libavcodec/h264_mb.c
+3
-3
h264_slice.c
libavcodec/h264_slice.c
+8
-8
No files found.
libavcodec/h264.h
View file @
e9b2383b
...
@@ -365,6 +365,7 @@ typedef struct H264SliceContext {
...
@@ -365,6 +365,7 @@ typedef struct H264SliceContext {
int
is_complex
;
int
is_complex
;
int
mb_field_decoding_flag
;
int
mb_field_decoding_flag
;
int
mb_mbaff
;
///< mb_aff_frame && mb_field_decoding_flag
int
redundant_pic_count
;
int
redundant_pic_count
;
...
@@ -496,7 +497,6 @@ typedef struct H264Context {
...
@@ -496,7 +497,6 @@ typedef struct H264Context {
// interlacing specific flags
// interlacing specific flags
int
mb_aff_frame
;
int
mb_aff_frame
;
int
mb_mbaff
;
///< mb_aff_frame && mb_field_decoding_flag
int
picture_structure
;
int
picture_structure
;
int
first_field
;
int
first_field
;
...
...
libavcodec/h264_cabac.c
View file @
e9b2383b
...
@@ -1930,7 +1930,7 @@ int ff_h264_decode_mb_cabac(H264Context *h, H264SliceContext *sl)
...
@@ -1930,7 +1930,7 @@ int ff_h264_decode_mb_cabac(H264Context *h, H264SliceContext *sl)
h
->
cur_pic
.
mb_type
[
mb_xy
]
=
MB_TYPE_SKIP
;
h
->
cur_pic
.
mb_type
[
mb_xy
]
=
MB_TYPE_SKIP
;
sl
->
next_mb_skipped
=
decode_cabac_mb_skip
(
h
,
sl
,
sl
->
mb_x
,
sl
->
mb_y
+
1
);
sl
->
next_mb_skipped
=
decode_cabac_mb_skip
(
h
,
sl
,
sl
->
mb_x
,
sl
->
mb_y
+
1
);
if
(
!
sl
->
next_mb_skipped
)
if
(
!
sl
->
next_mb_skipped
)
h
->
mb_mbaff
=
sl
->
mb_field_decoding_flag
=
decode_cabac_field_decoding_flag
(
h
,
sl
);
sl
->
mb_mbaff
=
sl
->
mb_field_decoding_flag
=
decode_cabac_field_decoding_flag
(
h
,
sl
);
}
}
decode_mb_skip
(
h
,
sl
);
decode_mb_skip
(
h
,
sl
);
...
@@ -1945,7 +1945,7 @@ int ff_h264_decode_mb_cabac(H264Context *h, H264SliceContext *sl)
...
@@ -1945,7 +1945,7 @@ int ff_h264_decode_mb_cabac(H264Context *h, H264SliceContext *sl)
}
}
if
(
FRAME_MBAFF
(
h
))
{
if
(
FRAME_MBAFF
(
h
))
{
if
((
sl
->
mb_y
&
1
)
==
0
)
if
((
sl
->
mb_y
&
1
)
==
0
)
h
->
mb_mbaff
=
sl
->
mb_mbaff
=
sl
->
mb_field_decoding_flag
=
decode_cabac_field_decoding_flag
(
h
,
sl
);
sl
->
mb_field_decoding_flag
=
decode_cabac_field_decoding_flag
(
h
,
sl
);
}
}
...
@@ -2122,7 +2122,7 @@ decode_intra_mb:
...
@@ -2122,7 +2122,7 @@ decode_intra_mb:
for
(
i
=
0
;
i
<
4
;
i
++
)
{
for
(
i
=
0
;
i
<
4
;
i
++
)
{
if
(
IS_DIRECT
(
sl
->
sub_mb_type
[
i
]))
continue
;
if
(
IS_DIRECT
(
sl
->
sub_mb_type
[
i
]))
continue
;
if
(
IS_DIR
(
sl
->
sub_mb_type
[
i
],
0
,
list
)){
if
(
IS_DIR
(
sl
->
sub_mb_type
[
i
],
0
,
list
)){
int
rc
=
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
h
);
int
rc
=
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
sl
);
if
(
rc
>
1
)
{
if
(
rc
>
1
)
{
ref
[
list
][
i
]
=
decode_cabac_mb_ref
(
h
,
sl
,
list
,
4
*
i
);
ref
[
list
][
i
]
=
decode_cabac_mb_ref
(
h
,
sl
,
list
,
4
*
i
);
if
(
ref
[
list
][
i
]
>=
(
unsigned
)
rc
)
{
if
(
ref
[
list
][
i
]
>=
(
unsigned
)
rc
)
{
...
@@ -2208,7 +2208,7 @@ decode_intra_mb:
...
@@ -2208,7 +2208,7 @@ decode_intra_mb:
if
(
IS_16X16
(
mb_type
)){
if
(
IS_16X16
(
mb_type
)){
for
(
list
=
0
;
list
<
sl
->
list_count
;
list
++
)
{
for
(
list
=
0
;
list
<
sl
->
list_count
;
list
++
)
{
if
(
IS_DIR
(
mb_type
,
0
,
list
)){
if
(
IS_DIR
(
mb_type
,
0
,
list
)){
int
ref
,
rc
=
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
h
);
int
ref
,
rc
=
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
sl
);
if
(
rc
>
1
)
{
if
(
rc
>
1
)
{
ref
=
decode_cabac_mb_ref
(
h
,
sl
,
list
,
0
);
ref
=
decode_cabac_mb_ref
(
h
,
sl
,
list
,
0
);
if
(
ref
>=
(
unsigned
)
rc
)
{
if
(
ref
>=
(
unsigned
)
rc
)
{
...
@@ -2236,7 +2236,7 @@ decode_intra_mb:
...
@@ -2236,7 +2236,7 @@ decode_intra_mb:
for
(
list
=
0
;
list
<
sl
->
list_count
;
list
++
)
{
for
(
list
=
0
;
list
<
sl
->
list_count
;
list
++
)
{
for
(
i
=
0
;
i
<
2
;
i
++
){
for
(
i
=
0
;
i
<
2
;
i
++
){
if
(
IS_DIR
(
mb_type
,
i
,
list
)){
if
(
IS_DIR
(
mb_type
,
i
,
list
)){
int
ref
,
rc
=
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
h
);
int
ref
,
rc
=
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
sl
);
if
(
rc
>
1
)
{
if
(
rc
>
1
)
{
ref
=
decode_cabac_mb_ref
(
h
,
sl
,
list
,
8
*
i
);
ref
=
decode_cabac_mb_ref
(
h
,
sl
,
list
,
8
*
i
);
if
(
ref
>=
(
unsigned
)
rc
)
{
if
(
ref
>=
(
unsigned
)
rc
)
{
...
@@ -2271,7 +2271,7 @@ decode_intra_mb:
...
@@ -2271,7 +2271,7 @@ decode_intra_mb:
for
(
list
=
0
;
list
<
sl
->
list_count
;
list
++
)
{
for
(
list
=
0
;
list
<
sl
->
list_count
;
list
++
)
{
for
(
i
=
0
;
i
<
2
;
i
++
){
for
(
i
=
0
;
i
<
2
;
i
++
){
if
(
IS_DIR
(
mb_type
,
i
,
list
)){
//FIXME optimize
if
(
IS_DIR
(
mb_type
,
i
,
list
)){
//FIXME optimize
int
ref
,
rc
=
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
h
);
int
ref
,
rc
=
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
sl
);
if
(
rc
>
1
)
{
if
(
rc
>
1
)
{
ref
=
decode_cabac_mb_ref
(
h
,
sl
,
list
,
4
*
i
);
ref
=
decode_cabac_mb_ref
(
h
,
sl
,
list
,
4
*
i
);
if
(
ref
>=
(
unsigned
)
rc
)
{
if
(
ref
>=
(
unsigned
)
rc
)
{
...
...
libavcodec/h264_cavlc.c
View file @
e9b2383b
...
@@ -715,7 +715,7 @@ int ff_h264_decode_mb_cavlc(H264Context *h, H264SliceContext *sl)
...
@@ -715,7 +715,7 @@ int ff_h264_decode_mb_cavlc(H264Context *h, H264SliceContext *sl)
if
(
sl
->
mb_skip_run
--
)
{
if
(
sl
->
mb_skip_run
--
)
{
if
(
FRAME_MBAFF
(
h
)
&&
(
sl
->
mb_y
&
1
)
==
0
)
{
if
(
FRAME_MBAFF
(
h
)
&&
(
sl
->
mb_y
&
1
)
==
0
)
{
if
(
sl
->
mb_skip_run
==
0
)
if
(
sl
->
mb_skip_run
==
0
)
h
->
mb_mbaff
=
sl
->
mb_field_decoding_flag
=
get_bits1
(
&
sl
->
gb
);
sl
->
mb_mbaff
=
sl
->
mb_field_decoding_flag
=
get_bits1
(
&
sl
->
gb
);
}
}
decode_mb_skip
(
h
,
sl
);
decode_mb_skip
(
h
,
sl
);
return
0
;
return
0
;
...
@@ -723,7 +723,7 @@ int ff_h264_decode_mb_cavlc(H264Context *h, H264SliceContext *sl)
...
@@ -723,7 +723,7 @@ int ff_h264_decode_mb_cavlc(H264Context *h, H264SliceContext *sl)
}
}
if
(
FRAME_MBAFF
(
h
))
{
if
(
FRAME_MBAFF
(
h
))
{
if
((
sl
->
mb_y
&
1
)
==
0
)
if
((
sl
->
mb_y
&
1
)
==
0
)
h
->
mb_mbaff
=
sl
->
mb_field_decoding_flag
=
get_bits1
(
&
sl
->
gb
);
sl
->
mb_mbaff
=
sl
->
mb_field_decoding_flag
=
get_bits1
(
&
sl
->
gb
);
}
}
sl
->
prev_mb_skipped
=
0
;
sl
->
prev_mb_skipped
=
0
;
...
@@ -865,7 +865,7 @@ decode_intra_mb:
...
@@ -865,7 +865,7 @@ decode_intra_mb:
}
}
for
(
list
=
0
;
list
<
sl
->
list_count
;
list
++
)
{
for
(
list
=
0
;
list
<
sl
->
list_count
;
list
++
)
{
int
ref_count
=
IS_REF0
(
mb_type
)
?
1
:
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
h
);
int
ref_count
=
IS_REF0
(
mb_type
)
?
1
:
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
sl
);
for
(
i
=
0
;
i
<
4
;
i
++
){
for
(
i
=
0
;
i
<
4
;
i
++
){
if
(
IS_DIRECT
(
sl
->
sub_mb_type
[
i
]))
continue
;
if
(
IS_DIRECT
(
sl
->
sub_mb_type
[
i
]))
continue
;
if
(
IS_DIR
(
sl
->
sub_mb_type
[
i
],
0
,
list
)){
if
(
IS_DIR
(
sl
->
sub_mb_type
[
i
],
0
,
list
)){
...
@@ -945,7 +945,7 @@ decode_intra_mb:
...
@@ -945,7 +945,7 @@ decode_intra_mb:
for
(
list
=
0
;
list
<
sl
->
list_count
;
list
++
)
{
for
(
list
=
0
;
list
<
sl
->
list_count
;
list
++
)
{
unsigned
int
val
;
unsigned
int
val
;
if
(
IS_DIR
(
mb_type
,
0
,
list
)){
if
(
IS_DIR
(
mb_type
,
0
,
list
)){
int
rc
=
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
h
);
int
rc
=
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
sl
);
if
(
rc
==
1
)
{
if
(
rc
==
1
)
{
val
=
0
;
val
=
0
;
}
else
if
(
rc
==
2
)
{
}
else
if
(
rc
==
2
)
{
...
@@ -976,7 +976,7 @@ decode_intra_mb:
...
@@ -976,7 +976,7 @@ decode_intra_mb:
for
(
i
=
0
;
i
<
2
;
i
++
){
for
(
i
=
0
;
i
<
2
;
i
++
){
unsigned
int
val
;
unsigned
int
val
;
if
(
IS_DIR
(
mb_type
,
i
,
list
)){
if
(
IS_DIR
(
mb_type
,
i
,
list
)){
int
rc
=
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
h
);
int
rc
=
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
sl
);
if
(
rc
==
1
)
{
if
(
rc
==
1
)
{
val
=
0
;
val
=
0
;
}
else
if
(
rc
==
2
)
{
}
else
if
(
rc
==
2
)
{
...
@@ -1014,7 +1014,7 @@ decode_intra_mb:
...
@@ -1014,7 +1014,7 @@ decode_intra_mb:
for
(
i
=
0
;
i
<
2
;
i
++
){
for
(
i
=
0
;
i
<
2
;
i
++
){
unsigned
int
val
;
unsigned
int
val
;
if
(
IS_DIR
(
mb_type
,
i
,
list
)){
//FIXME optimize
if
(
IS_DIR
(
mb_type
,
i
,
list
)){
//FIXME optimize
int
rc
=
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
h
);
int
rc
=
sl
->
ref_count
[
list
]
<<
MB_MBAFF
(
sl
);
if
(
rc
==
1
)
{
if
(
rc
==
1
)
{
val
=
0
;
val
=
0
;
}
else
if
(
rc
==
2
)
{
}
else
if
(
rc
==
2
)
{
...
...
libavcodec/h264_mb.c
View file @
e9b2383b
...
@@ -173,7 +173,7 @@ static void await_references(const H264Context *h, H264SliceContext *sl)
...
@@ -173,7 +173,7 @@ static void await_references(const H264Context *h, H264SliceContext *sl)
int
ref_field_picture
=
ref_pic
->
field_picture
;
int
ref_field_picture
=
ref_pic
->
field_picture
;
int
pic_height
=
16
*
h
->
mb_height
>>
ref_field_picture
;
int
pic_height
=
16
*
h
->
mb_height
>>
ref_field_picture
;
row
<<=
MB_MBAFF
(
h
);
row
<<=
MB_MBAFF
(
sl
);
nrefs
[
list
]
--
;
nrefs
[
list
]
--
;
if
(
!
FIELD_PICTURE
(
h
)
&&
ref_field_picture
)
{
// frame referencing two fields
if
(
!
FIELD_PICTURE
(
h
)
&&
ref_field_picture
)
{
// frame referencing two fields
...
@@ -516,10 +516,10 @@ static av_always_inline void xchg_mb_border(const H264Context *h, H264SliceConte
...
@@ -516,10 +516,10 @@ static av_always_inline void xchg_mb_border(const H264Context *h, H264SliceConte
if
(
!
simple
&&
FRAME_MBAFF
(
h
))
{
if
(
!
simple
&&
FRAME_MBAFF
(
h
))
{
if
(
sl
->
mb_y
&
1
)
{
if
(
sl
->
mb_y
&
1
)
{
if
(
!
MB_MBAFF
(
h
))
if
(
!
MB_MBAFF
(
sl
))
return
;
return
;
}
else
{
}
else
{
top_idx
=
MB_MBAFF
(
h
)
?
0
:
1
;
top_idx
=
MB_MBAFF
(
sl
)
?
0
:
1
;
}
}
}
}
...
...
libavcodec/h264_slice.c
View file @
e9b2383b
...
@@ -735,7 +735,7 @@ static av_always_inline void backup_mb_border(H264Context *h, H264SliceContext *
...
@@ -735,7 +735,7 @@ static av_always_inline void backup_mb_border(H264Context *h, H264SliceContext *
if
(
!
simple
&&
FRAME_MBAFF
(
h
))
{
if
(
!
simple
&&
FRAME_MBAFF
(
h
))
{
if
(
sl
->
mb_y
&
1
)
{
if
(
sl
->
mb_y
&
1
)
{
if
(
!
MB_MBAFF
(
h
))
{
if
(
!
MB_MBAFF
(
sl
))
{
top_border
=
h
->
top_borders
[
0
][
sl
->
mb_x
];
top_border
=
h
->
top_borders
[
0
][
sl
->
mb_x
];
AV_COPY128
(
top_border
,
src_y
+
15
*
linesize
);
AV_COPY128
(
top_border
,
src_y
+
15
*
linesize
);
if
(
pixel_shift
)
if
(
pixel_shift
)
...
@@ -770,7 +770,7 @@ static av_always_inline void backup_mb_border(H264Context *h, H264SliceContext *
...
@@ -770,7 +770,7 @@ static av_always_inline void backup_mb_border(H264Context *h, H264SliceContext *
}
}
}
}
}
}
}
else
if
(
MB_MBAFF
(
h
))
{
}
else
if
(
MB_MBAFF
(
sl
))
{
top_idx
=
0
;
top_idx
=
0
;
}
else
}
else
return
;
return
;
...
@@ -1356,7 +1356,7 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl, H264Contex
...
@@ -1356,7 +1356,7 @@ int ff_h264_decode_slice_header(H264Context *h, H264SliceContext *sl, H264Contex
h
->
frame_num
=
get_bits
(
&
sl
->
gb
,
h
->
sps
.
log2_max_frame_num
);
h
->
frame_num
=
get_bits
(
&
sl
->
gb
,
h
->
sps
.
log2_max_frame_num
);
h
->
mb_mbaff
=
0
;
sl
->
mb_mbaff
=
0
;
h
->
mb_aff_frame
=
0
;
h
->
mb_aff_frame
=
0
;
last_pic_structure
=
h0
->
picture_structure
;
last_pic_structure
=
h0
->
picture_structure
;
last_pic_droppable
=
h0
->
droppable
;
last_pic_droppable
=
h0
->
droppable
;
...
@@ -1836,7 +1836,7 @@ static av_always_inline void fill_filter_caches_inter(H264Context *h,
...
@@ -1836,7 +1836,7 @@ static av_always_inline void fill_filter_caches_inter(H264Context *h,
if
(
USES_LIST
(
top_type
,
list
))
{
if
(
USES_LIST
(
top_type
,
list
))
{
const
int
b_xy
=
h
->
mb2b_xy
[
top_xy
]
+
3
*
b_stride
;
const
int
b_xy
=
h
->
mb2b_xy
[
top_xy
]
+
3
*
b_stride
;
const
int
b8_xy
=
4
*
top_xy
+
2
;
const
int
b8_xy
=
4
*
top_xy
+
2
;
int
(
*
ref2frm
)[
64
]
=
sl
->
ref2frm
[
h
->
slice_table
[
top_xy
]
&
(
MAX_SLICES
-
1
)][
0
]
+
(
MB_MBAFF
(
h
)
?
20
:
2
);
int
(
*
ref2frm
)[
64
]
=
sl
->
ref2frm
[
h
->
slice_table
[
top_xy
]
&
(
MAX_SLICES
-
1
)][
0
]
+
(
MB_MBAFF
(
sl
)
?
20
:
2
);
AV_COPY128
(
mv_dst
-
1
*
8
,
h
->
cur_pic
.
motion_val
[
list
][
b_xy
+
0
]);
AV_COPY128
(
mv_dst
-
1
*
8
,
h
->
cur_pic
.
motion_val
[
list
][
b_xy
+
0
]);
ref_cache
[
0
-
1
*
8
]
=
ref_cache
[
0
-
1
*
8
]
=
ref_cache
[
1
-
1
*
8
]
=
ref2frm
[
list
][
h
->
cur_pic
.
ref_index
[
list
][
b8_xy
+
0
]];
ref_cache
[
1
-
1
*
8
]
=
ref2frm
[
list
][
h
->
cur_pic
.
ref_index
[
list
][
b8_xy
+
0
]];
...
@@ -1851,7 +1851,7 @@ static av_always_inline void fill_filter_caches_inter(H264Context *h,
...
@@ -1851,7 +1851,7 @@ static av_always_inline void fill_filter_caches_inter(H264Context *h,
if
(
USES_LIST
(
left_type
[
LTOP
],
list
))
{
if
(
USES_LIST
(
left_type
[
LTOP
],
list
))
{
const
int
b_xy
=
h
->
mb2b_xy
[
left_xy
[
LTOP
]]
+
3
;
const
int
b_xy
=
h
->
mb2b_xy
[
left_xy
[
LTOP
]]
+
3
;
const
int
b8_xy
=
4
*
left_xy
[
LTOP
]
+
1
;
const
int
b8_xy
=
4
*
left_xy
[
LTOP
]
+
1
;
int
(
*
ref2frm
)[
64
]
=
sl
->
ref2frm
[
h
->
slice_table
[
left_xy
[
LTOP
]]
&
(
MAX_SLICES
-
1
)][
0
]
+
(
MB_MBAFF
(
h
)
?
20
:
2
);
int
(
*
ref2frm
)[
64
]
=
sl
->
ref2frm
[
h
->
slice_table
[
left_xy
[
LTOP
]]
&
(
MAX_SLICES
-
1
)][
0
]
+
(
MB_MBAFF
(
sl
)
?
20
:
2
);
AV_COPY32
(
mv_dst
-
1
+
0
,
h
->
cur_pic
.
motion_val
[
list
][
b_xy
+
b_stride
*
0
]);
AV_COPY32
(
mv_dst
-
1
+
0
,
h
->
cur_pic
.
motion_val
[
list
][
b_xy
+
b_stride
*
0
]);
AV_COPY32
(
mv_dst
-
1
+
8
,
h
->
cur_pic
.
motion_val
[
list
][
b_xy
+
b_stride
*
1
]);
AV_COPY32
(
mv_dst
-
1
+
8
,
h
->
cur_pic
.
motion_val
[
list
][
b_xy
+
b_stride
*
1
]);
AV_COPY32
(
mv_dst
-
1
+
16
,
h
->
cur_pic
.
motion_val
[
list
][
b_xy
+
b_stride
*
2
]);
AV_COPY32
(
mv_dst
-
1
+
16
,
h
->
cur_pic
.
motion_val
[
list
][
b_xy
+
b_stride
*
2
]);
...
@@ -1884,7 +1884,7 @@ static av_always_inline void fill_filter_caches_inter(H264Context *h,
...
@@ -1884,7 +1884,7 @@ static av_always_inline void fill_filter_caches_inter(H264Context *h,
{
{
int8_t
*
ref
=
&
h
->
cur_pic
.
ref_index
[
list
][
4
*
mb_xy
];
int8_t
*
ref
=
&
h
->
cur_pic
.
ref_index
[
list
][
4
*
mb_xy
];
int
(
*
ref2frm
)[
64
]
=
sl
->
ref2frm
[
sl
->
slice_num
&
(
MAX_SLICES
-
1
)][
0
]
+
(
MB_MBAFF
(
h
)
?
20
:
2
);
int
(
*
ref2frm
)[
64
]
=
sl
->
ref2frm
[
sl
->
slice_num
&
(
MAX_SLICES
-
1
)][
0
]
+
(
MB_MBAFF
(
sl
)
?
20
:
2
);
uint32_t
ref01
=
(
pack16to32
(
ref2frm
[
list
][
ref
[
0
]],
ref2frm
[
list
][
ref
[
1
]])
&
0x00FF00FF
)
*
0x0101
;
uint32_t
ref01
=
(
pack16to32
(
ref2frm
[
list
][
ref
[
0
]],
ref2frm
[
list
][
ref
[
1
]])
&
0x00FF00FF
)
*
0x0101
;
uint32_t
ref23
=
(
pack16to32
(
ref2frm
[
list
][
ref
[
2
]],
ref2frm
[
list
][
ref
[
3
]])
&
0x00FF00FF
)
*
0x0101
;
uint32_t
ref23
=
(
pack16to32
(
ref2frm
[
list
][
ref
[
2
]],
ref2frm
[
list
][
ref
[
3
]])
&
0x00FF00FF
)
*
0x0101
;
AV_WN32A
(
&
ref_cache
[
0
*
8
],
ref01
);
AV_WN32A
(
&
ref_cache
[
0
*
8
],
ref01
);
...
@@ -2070,7 +2070,7 @@ static void loop_filter(H264Context *h, H264SliceContext *sl, int start_x, int e
...
@@ -2070,7 +2070,7 @@ static void loop_filter(H264Context *h, H264SliceContext *sl, int start_x, int e
sl
->
list_count
=
h
->
list_counts
[
mb_xy
];
sl
->
list_count
=
h
->
list_counts
[
mb_xy
];
if
(
FRAME_MBAFF
(
h
))
if
(
FRAME_MBAFF
(
h
))
h
->
mb_mbaff
=
sl
->
mb_mbaff
=
sl
->
mb_field_decoding_flag
=
!!
IS_INTERLACED
(
mb_type
);
sl
->
mb_field_decoding_flag
=
!!
IS_INTERLACED
(
mb_type
);
sl
->
mb_x
=
mb_x
;
sl
->
mb_x
=
mb_x
;
...
@@ -2127,7 +2127,7 @@ static void predict_field_decoding_flag(H264Context *h, H264SliceContext *sl)
...
@@ -2127,7 +2127,7 @@ static void predict_field_decoding_flag(H264Context *h, H264SliceContext *sl)
h
->
cur_pic
.
mb_type
[
mb_xy
-
1
]
:
h
->
cur_pic
.
mb_type
[
mb_xy
-
1
]
:
(
h
->
slice_table
[
mb_xy
-
h
->
mb_stride
]
==
sl
->
slice_num
)
?
(
h
->
slice_table
[
mb_xy
-
h
->
mb_stride
]
==
sl
->
slice_num
)
?
h
->
cur_pic
.
mb_type
[
mb_xy
-
h
->
mb_stride
]
:
0
;
h
->
cur_pic
.
mb_type
[
mb_xy
-
h
->
mb_stride
]
:
0
;
h
->
mb_mbaff
=
sl
->
mb_field_decoding_flag
=
IS_INTERLACED
(
mb_type
)
?
1
:
0
;
sl
->
mb_mbaff
=
sl
->
mb_field_decoding_flag
=
IS_INTERLACED
(
mb_type
)
?
1
:
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