Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
F
ffmpeg
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
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
ffmpeg
Commits
7bece9b2
Commit
7bece9b2
authored
Mar 09, 2013
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
h264: add a parameter to the FRAME_MBAFF macro.
This way it does not look like a constant.
parent
da6be8fc
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
44 additions
and
44 deletions
+44
-44
h264.c
libavcodec/h264.c
+19
-19
h264.h
libavcodec/h264.h
+3
-3
h264_cabac.c
libavcodec/h264_cabac.c
+4
-4
h264_cavlc.c
libavcodec/h264_cavlc.c
+2
-2
h264_direct.c
libavcodec/h264_direct.c
+4
-4
h264_loopfilter.c
libavcodec/h264_loopfilter.c
+5
-5
h264_mb_template.c
libavcodec/h264_mb_template.c
+2
-2
h264_mvpred.h
libavcodec/h264_mvpred.h
+5
-5
No files found.
libavcodec/h264.c
View file @
7bece9b2
...
...
@@ -118,7 +118,7 @@ static void h264_er_decode_mb(void *opaque, int ref, int mv_dir, int mv_type,
fill_rectangle
(
&
h
->
ref_cache
[
0
][
scan8
[
0
]],
4
,
4
,
8
,
ref
,
1
);
fill_rectangle
(
h
->
mv_cache
[
0
][
scan8
[
0
]],
4
,
4
,
8
,
pack16to32
((
*
mv
)[
0
][
0
][
0
],
(
*
mv
)[
0
][
0
][
1
]),
4
);
assert
(
!
FRAME_MBAFF
);
assert
(
!
FRAME_MBAFF
(
h
)
);
ff_h264_hl_decode_mb
(
h
);
}
...
...
@@ -2048,7 +2048,7 @@ static av_always_inline void backup_mb_border(H264Context *h, uint8_t *src_y,
src_cb
-=
uvlinesize
;
src_cr
-=
uvlinesize
;
if
(
!
simple
&&
FRAME_MBAFF
)
{
if
(
!
simple
&&
FRAME_MBAFF
(
h
)
)
{
if
(
h
->
mb_y
&
1
)
{
if
(
!
MB_MBAFF
(
h
))
{
top_border
=
h
->
top_borders
[
0
][
h
->
mb_x
];
...
...
@@ -2141,7 +2141,7 @@ static av_always_inline void xchg_mb_border(H264Context *h, uint8_t *src_y,
uint8_t
*
top_border_m1
;
uint8_t
*
top_border
;
if
(
!
simple
&&
FRAME_MBAFF
)
{
if
(
!
simple
&&
FRAME_MBAFF
(
h
)
)
{
if
(
h
->
mb_y
&
1
)
{
if
(
!
MB_MBAFF
(
h
))
return
;
...
...
@@ -2533,7 +2533,7 @@ static void implicit_weight_table(H264Context *h, int field)
}
else
{
cur_poc
=
h
->
cur_pic_ptr
->
field_poc
[
h
->
picture_structure
-
1
];
}
if
(
h
->
ref_count
[
0
]
==
1
&&
h
->
ref_count
[
1
]
==
1
&&
!
FRAME_MBAFF
&&
if
(
h
->
ref_count
[
0
]
==
1
&&
h
->
ref_count
[
1
]
==
1
&&
!
FRAME_MBAFF
(
h
)
&&
h
->
ref_list
[
0
][
0
].
poc
+
h
->
ref_list
[
1
][
0
].
poc
==
2
*
cur_poc
)
{
h
->
use_weight
=
0
;
h
->
use_weight_chroma
=
0
;
...
...
@@ -3563,7 +3563,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0)
(
h
->
avctx
->
err_recognition
&
AV_EF_EXPLODE
))
return
AVERROR_INVALIDDATA
;
if
(
FRAME_MBAFF
)
{
if
(
FRAME_MBAFF
(
h
)
)
{
ff_h264_fill_mbaff_ref_list
(
h
);
if
(
h
->
pps
.
weighted_bipred_idc
==
2
&&
h
->
slice_type_nos
==
AV_PICTURE_TYPE_B
)
{
...
...
@@ -3843,7 +3843,7 @@ static int fill_filter_caches(H264Context *h, int mb_type)
* stuff, I can't imagine that these complex rules are worth it. */
left_xy
[
LBOT
]
=
left_xy
[
LTOP
]
=
mb_xy
-
1
;
if
(
FRAME_MBAFF
)
{
if
(
FRAME_MBAFF
(
h
)
)
{
const
int
left_mb_field_flag
=
IS_INTERLACED
(
h
->
cur_pic
.
mb_type
[
mb_xy
-
1
]);
const
int
curr_mb_field_flag
=
IS_INTERLACED
(
mb_type
);
if
(
h
->
mb_y
&
1
)
{
...
...
@@ -3872,7 +3872,7 @@ static int fill_filter_caches(H264Context *h, int mb_type)
((
qp
+
h
->
cur_pic
.
qscale_table
[
left_xy
[
LTOP
]]
+
1
)
>>
1
)
<=
qp_thresh
)
&&
(
top_xy
<
0
||
((
qp
+
h
->
cur_pic
.
qscale_table
[
top_xy
]
+
1
)
>>
1
)
<=
qp_thresh
))
{
if
(
!
FRAME_MBAFF
)
if
(
!
FRAME_MBAFF
(
h
)
)
return
1
;
if
((
left_xy
[
LTOP
]
<
0
||
((
qp
+
h
->
cur_pic
.
qscale_table
[
left_xy
[
LBOT
]]
+
1
)
>>
1
)
<=
qp_thresh
)
&&
...
...
@@ -3978,21 +3978,21 @@ static void loop_filter(H264Context *h, int start_x, int end_x)
{
uint8_t
*
dest_y
,
*
dest_cb
,
*
dest_cr
;
int
linesize
,
uvlinesize
,
mb_x
,
mb_y
;
const
int
end_mb_y
=
h
->
mb_y
+
FRAME_MBAFF
;
const
int
end_mb_y
=
h
->
mb_y
+
FRAME_MBAFF
(
h
)
;
const
int
old_slice_type
=
h
->
slice_type
;
const
int
pixel_shift
=
h
->
pixel_shift
;
const
int
block_h
=
16
>>
h
->
chroma_y_shift
;
if
(
h
->
deblocking_filter
)
{
for
(
mb_x
=
start_x
;
mb_x
<
end_x
;
mb_x
++
)
for
(
mb_y
=
end_mb_y
-
FRAME_MBAFF
;
mb_y
<=
end_mb_y
;
mb_y
++
)
{
for
(
mb_y
=
end_mb_y
-
FRAME_MBAFF
(
h
)
;
mb_y
<=
end_mb_y
;
mb_y
++
)
{
int
mb_xy
,
mb_type
;
mb_xy
=
h
->
mb_xy
=
mb_x
+
mb_y
*
h
->
mb_stride
;
h
->
slice_num
=
h
->
slice_table
[
mb_xy
];
mb_type
=
h
->
cur_pic
.
mb_type
[
mb_xy
];
h
->
list_count
=
h
->
list_counts
[
mb_xy
];
if
(
FRAME_MBAFF
)
if
(
FRAME_MBAFF
(
h
)
)
h
->
mb_mbaff
=
h
->
mb_field_decoding_flag
=
!!
IS_INTERLACED
(
mb_type
);
...
...
@@ -4027,7 +4027,7 @@ static void loop_filter(H264Context *h, int start_x, int end_x)
h
->
chroma_qp
[
0
]
=
get_chroma_qp
(
h
,
0
,
h
->
cur_pic
.
qscale_table
[
mb_xy
]);
h
->
chroma_qp
[
1
]
=
get_chroma_qp
(
h
,
1
,
h
->
cur_pic
.
qscale_table
[
mb_xy
]);
if
(
FRAME_MBAFF
)
{
if
(
FRAME_MBAFF
(
h
)
)
{
ff_h264_filter_mb
(
h
,
mb_x
,
mb_y
,
dest_y
,
dest_cb
,
dest_cr
,
linesize
,
uvlinesize
);
}
else
{
...
...
@@ -4038,7 +4038,7 @@ static void loop_filter(H264Context *h, int start_x, int end_x)
}
h
->
slice_type
=
old_slice_type
;
h
->
mb_x
=
end_x
;
h
->
mb_y
=
end_mb_y
-
FRAME_MBAFF
;
h
->
mb_y
=
end_mb_y
-
FRAME_MBAFF
(
h
)
;
h
->
chroma_qp
[
0
]
=
get_chroma_qp
(
h
,
0
,
h
->
qscale
);
h
->
chroma_qp
[
1
]
=
get_chroma_qp
(
h
,
1
,
h
->
qscale
);
}
...
...
@@ -4060,8 +4060,8 @@ static void decode_finish_row(H264Context *h)
{
int
top
=
16
*
(
h
->
mb_y
>>
FIELD_PICTURE
);
int
pic_height
=
16
*
h
->
mb_height
>>
FIELD_PICTURE
;
int
height
=
16
<<
FRAME_MBAFF
;
int
deblock_border
=
(
16
+
4
)
<<
FRAME_MBAFF
;
int
height
=
16
<<
FRAME_MBAFF
(
h
)
;
int
deblock_border
=
(
16
+
4
)
<<
FRAME_MBAFF
(
h
)
;
if
(
h
->
deblocking_filter
)
{
if
((
top
+
height
)
>=
pic_height
)
...
...
@@ -4103,7 +4103,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg)
h
->
mb_skip_run
=
-
1
;
h
->
is_complex
=
FRAME_MBAFF
||
h
->
picture_structure
!=
PICT_FRAME
||
h
->
is_complex
=
FRAME_MBAFF
(
h
)
||
h
->
picture_structure
!=
PICT_FRAME
||
avctx
->
codec_id
!=
AV_CODEC_ID_H264
||
(
CONFIG_GRAY
&&
(
h
->
flags
&
CODEC_FLAG_GRAY
));
...
...
@@ -4129,7 +4129,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg)
ff_h264_hl_decode_mb
(
h
);
// FIXME optimal? or let mb_decode decode 16x32 ?
if
(
ret
>=
0
&&
FRAME_MBAFF
)
{
if
(
ret
>=
0
&&
FRAME_MBAFF
(
h
)
)
{
h
->
mb_y
++
;
ret
=
ff_h264_decode_mb_cabac
(
h
);
...
...
@@ -4165,7 +4165,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg)
++
h
->
mb_y
;
if
(
FIELD_OR_MBAFF_PICTURE
)
{
++
h
->
mb_y
;
if
(
FRAME_MBAFF
&&
h
->
mb_y
<
h
->
mb_height
)
if
(
FRAME_MBAFF
(
h
)
&&
h
->
mb_y
<
h
->
mb_height
)
predict_field_decoding_flag
(
h
);
}
}
...
...
@@ -4188,7 +4188,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg)
ff_h264_hl_decode_mb
(
h
);
// FIXME optimal? or let mb_decode decode 16x32 ?
if
(
ret
>=
0
&&
FRAME_MBAFF
)
{
if
(
ret
>=
0
&&
FRAME_MBAFF
(
h
)
)
{
h
->
mb_y
++
;
ret
=
ff_h264_decode_mb_cavlc
(
h
);
...
...
@@ -4212,7 +4212,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg)
++
h
->
mb_y
;
if
(
FIELD_OR_MBAFF_PICTURE
)
{
++
h
->
mb_y
;
if
(
FRAME_MBAFF
&&
h
->
mb_y
<
h
->
mb_height
)
if
(
FRAME_MBAFF
(
h
)
&&
h
->
mb_y
<
h
->
mb_height
)
predict_field_decoding_flag
(
h
);
}
if
(
h
->
mb_y
>=
h
->
mb_height
)
{
...
...
libavcodec/h264.h
View file @
7bece9b2
...
...
@@ -61,7 +61,7 @@
#ifdef ALLOW_INTERLACE
#define MB_MBAFF(h) h->mb_mbaff
#define MB_FIELD(h) h->mb_field_decoding_flag
#define FRAME_MBAFF h->mb_aff_frame
#define FRAME_MBAFF
(h)
h->mb_aff_frame
#define FIELD_PICTURE (h->picture_structure != PICT_FRAME)
#define LEFT_MBS 2
#define LTOP 0
...
...
@@ -70,7 +70,7 @@
#else
#define MB_MBAFF(h) 0
#define MB_FIELD(h) 0
#define FRAME_MBAFF 0
#define FRAME_MBAFF
(h)
0
#define FIELD_PICTURE 0
#undef IS_INTERLACED
#define IS_INTERLACED(mb_type) 0
...
...
@@ -79,7 +79,7 @@
#define LBOT 0
#define LEFT(i) 0
#endif
#define FIELD_OR_MBAFF_PICTURE (FRAME_MBAFF || FIELD_PICTURE)
#define FIELD_OR_MBAFF_PICTURE (FRAME_MBAFF
(h)
|| FIELD_PICTURE)
#ifndef CABAC
#define CABAC h->pps.cabac
...
...
libavcodec/h264_cabac.c
View file @
7bece9b2
...
...
@@ -1323,7 +1323,7 @@ static int decode_cabac_mb_skip( H264Context *h, int mb_x, int mb_y ) {
int
mba_xy
,
mbb_xy
;
int
ctx
=
0
;
if
(
FRAME_MBAFF
)
{
//FIXME merge with the stuff in fill_caches?
if
(
FRAME_MBAFF
(
h
))
{
//FIXME merge with the stuff in fill_caches?
int
mb_xy
=
mb_x
+
(
mb_y
&~
1
)
*
h
->
mb_stride
;
mba_xy
=
mb_xy
-
1
;
if
(
(
mb_y
&
1
)
...
...
@@ -1886,13 +1886,13 @@ int ff_h264_decode_mb_cabac(H264Context *h) {
if
(
h
->
slice_type_nos
!=
AV_PICTURE_TYPE_I
)
{
int
skip
;
/* a skipped mb needs the aff flag from the following mb */
if
(
FRAME_MBAFF
&&
(
h
->
mb_y
&
1
)
==
1
&&
h
->
prev_mb_skipped
)
if
(
FRAME_MBAFF
(
h
)
&&
(
h
->
mb_y
&
1
)
==
1
&&
h
->
prev_mb_skipped
)
skip
=
h
->
next_mb_skipped
;
else
skip
=
decode_cabac_mb_skip
(
h
,
h
->
mb_x
,
h
->
mb_y
);
/* read skip flags */
if
(
skip
)
{
if
(
FRAME_MBAFF
&&
(
h
->
mb_y
&
1
)
==
0
)
{
if
(
FRAME_MBAFF
(
h
)
&&
(
h
->
mb_y
&
1
)
==
0
)
{
h
->
cur_pic
.
mb_type
[
mb_xy
]
=
MB_TYPE_SKIP
;
h
->
next_mb_skipped
=
decode_cabac_mb_skip
(
h
,
h
->
mb_x
,
h
->
mb_y
+
1
);
if
(
!
h
->
next_mb_skipped
)
...
...
@@ -1909,7 +1909,7 @@ int ff_h264_decode_mb_cabac(H264Context *h) {
}
}
if
(
FRAME_MBAFF
)
{
if
(
FRAME_MBAFF
(
h
))
{
if
(
(
h
->
mb_y
&
1
)
==
0
)
h
->
mb_mbaff
=
h
->
mb_field_decoding_flag
=
decode_cabac_field_decoding_flag
(
h
);
...
...
libavcodec/h264_cavlc.c
View file @
7bece9b2
...
...
@@ -708,7 +708,7 @@ int ff_h264_decode_mb_cavlc(H264Context *h){
h
->
mb_skip_run
=
get_ue_golomb
(
&
h
->
gb
);
if
(
h
->
mb_skip_run
--
)
{
if
(
FRAME_MBAFF
&&
(
h
->
mb_y
&
1
)
==
0
){
if
(
FRAME_MBAFF
(
h
)
&&
(
h
->
mb_y
&
1
)
==
0
){
if
(
h
->
mb_skip_run
==
0
)
h
->
mb_mbaff
=
h
->
mb_field_decoding_flag
=
get_bits1
(
&
h
->
gb
);
}
...
...
@@ -716,7 +716,7 @@ int ff_h264_decode_mb_cavlc(H264Context *h){
return
0
;
}
}
if
(
FRAME_MBAFF
)
{
if
(
FRAME_MBAFF
(
h
))
{
if
(
(
h
->
mb_y
&
1
)
==
0
)
h
->
mb_mbaff
=
h
->
mb_field_decoding_flag
=
get_bits1
(
&
h
->
gb
);
}
...
...
libavcodec/h264_direct.c
View file @
7bece9b2
...
...
@@ -53,7 +53,7 @@ void ff_h264_direct_dist_scale_factor(H264Context * const h){
const
int
poc1
=
h
->
ref_list
[
1
][
0
].
poc
;
int
i
,
field
;
if
(
FRAME_MBAFF
)
if
(
FRAME_MBAFF
(
h
)
)
for
(
field
=
0
;
field
<
2
;
field
++
){
const
int
poc
=
h
->
cur_pic_ptr
->
field_poc
[
field
];
const
int
poc1
=
h
->
ref_list
[
1
][
0
].
field_poc
[
field
];
...
...
@@ -118,7 +118,7 @@ void ff_h264_direct_ref_list_init(H264Context * const h){
memcpy
(
cur
->
ref_poc
[
1
],
cur
->
ref_poc
[
0
],
sizeof
(
cur
->
ref_poc
[
0
]));
}
cur
->
mbaff
=
FRAME_MBAFF
;
cur
->
mbaff
=
FRAME_MBAFF
(
h
)
;
h
->
col_fieldoff
=
0
;
if
(
h
->
picture_structure
==
PICT_FRAME
){
...
...
@@ -135,7 +135,7 @@ void ff_h264_direct_ref_list_init(H264Context * const h){
for
(
list
=
0
;
list
<
2
;
list
++
){
fill_colmap
(
h
,
h
->
map_col_to_list0
,
list
,
sidx
,
ref1sidx
,
0
);
if
(
FRAME_MBAFF
)
if
(
FRAME_MBAFF
(
h
)
)
for
(
field
=
0
;
field
<
2
;
field
++
)
fill_colmap
(
h
,
h
->
map_col_to_list0_field
[
field
],
list
,
field
,
field
,
1
);
}
...
...
@@ -496,7 +496,7 @@ single_col:
const
int
*
dist_scale_factor
=
h
->
dist_scale_factor
;
int
ref_offset
;
if
(
FRAME_MBAFF
&&
IS_INTERLACED
(
*
mb_type
))
{
if
(
FRAME_MBAFF
(
h
)
&&
IS_INTERLACED
(
*
mb_type
))
{
map_col_to_list0
[
0
]
=
h
->
map_col_to_list0_field
[
h
->
mb_y
&
1
][
0
];
map_col_to_list0
[
1
]
=
h
->
map_col_to_list0_field
[
h
->
mb_y
&
1
][
1
];
dist_scale_factor
=
h
->
dist_scale_factor_field
[
h
->
mb_y
&
1
];
...
...
libavcodec/h264_loopfilter.c
View file @
7bece9b2
...
...
@@ -417,7 +417,7 @@ static av_always_inline void h264_filter_mb_fast_internal(H264Context *h,
}
void
ff_h264_filter_mb_fast
(
H264Context
*
h
,
int
mb_x
,
int
mb_y
,
uint8_t
*
img_y
,
uint8_t
*
img_cb
,
uint8_t
*
img_cr
,
unsigned
int
linesize
,
unsigned
int
uvlinesize
)
{
assert
(
!
FRAME_MBAFF
);
assert
(
!
FRAME_MBAFF
(
h
)
);
if
(
!
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
;
...
...
@@ -482,7 +482,7 @@ static av_always_inline void filter_mb_dir(H264Context *h, int mb_x, int mb_y, u
if
(
mbm_type
&&
!
first_vertical_edge_done
){
if
(
FRAME_MBAFF
&&
(
dir
==
1
)
&&
((
mb_y
&
1
)
==
0
)
if
(
FRAME_MBAFF
(
h
)
&&
(
dir
==
1
)
&&
((
mb_y
&
1
)
==
0
)
&&
IS_INTERLACED
(
mbm_type
&~
mb_type
)
)
{
// This is a special case in the norm where the filtering must
...
...
@@ -538,14 +538,14 @@ static av_always_inline void filter_mb_dir(H264Context *h, int mb_x, int mb_y, u
if
(
IS_INTRA
(
mb_type
|
mbm_type
))
{
AV_WN64A
(
bS
,
0x0003000300030003ULL
);
if
(
(
!
IS_INTERLACED
(
mb_type
|
mbm_type
))
||
((
FRAME_MBAFF
||
(
h
->
picture_structure
!=
PICT_FRAME
))
&&
(
dir
==
0
))
||
((
FRAME_MBAFF
(
h
)
||
(
h
->
picture_structure
!=
PICT_FRAME
))
&&
(
dir
==
0
))
)
AV_WN64A
(
bS
,
0x0004000400040004ULL
);
}
else
{
int
i
;
int
mv_done
;
if
(
dir
&&
FRAME_MBAFF
&&
IS_INTERLACED
(
mb_type
^
mbm_type
))
{
if
(
dir
&&
FRAME_MBAFF
(
h
)
&&
IS_INTERLACED
(
mb_type
^
mbm_type
))
{
AV_WN64A
(
bS
,
0x0001000100010001ULL
);
mv_done
=
1
;
}
...
...
@@ -711,7 +711,7 @@ void ff_h264_filter_mb( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint
int
a
=
h
->
slice_alpha_c0_offset
-
qp_bd_offset
;
int
b
=
h
->
slice_beta_offset
-
qp_bd_offset
;
if
(
FRAME_MBAFF
if
(
FRAME_MBAFF
(
h
)
// and current and left pair do not have the same interlaced type
&&
IS_INTERLACED
(
mb_type
^
h
->
left_type
[
LTOP
])
// and left mb is in available to us
...
...
libavcodec/h264_mb_template.c
View file @
7bece9b2
...
...
@@ -73,7 +73,7 @@ static av_noinline void FUNC(hl_decode_mb)(H264Context *h)
dest_cb
-=
h
->
uvlinesize
*
(
block_h
-
1
);
dest_cr
-=
h
->
uvlinesize
*
(
block_h
-
1
);
}
if
(
FRAME_MBAFF
)
{
if
(
FRAME_MBAFF
(
h
)
)
{
int
list
;
for
(
list
=
0
;
list
<
h
->
list_count
;
list
++
)
{
if
(
!
USES_LIST
(
mb_type
,
list
))
...
...
@@ -302,7 +302,7 @@ static av_noinline void FUNC(hl_decode_mb_444)(H264Context *h)
if
(
mb_y
&
1
)
// FIXME move out of this function?
for
(
p
=
0
;
p
<
3
;
p
++
)
dest
[
p
]
-=
h
->
linesize
*
15
;
if
(
FRAME_MBAFF
)
{
if
(
FRAME_MBAFF
(
h
)
)
{
int
list
;
for
(
list
=
0
;
list
<
h
->
list_count
;
list
++
)
{
if
(
!
USES_LIST
(
mb_type
,
list
))
...
...
libavcodec/h264_mvpred.h
View file @
7bece9b2
...
...
@@ -42,7 +42,7 @@ static av_always_inline int fetch_diagonal_mv(H264Context *h, const int16_t **C,
/* there is no consistent mapping of mvs to neighboring locations that will
* make mbaff happy, so we can't move all this logic to fill_caches */
if
(
FRAME_MBAFF
)
{
if
(
FRAME_MBAFF
(
h
)
)
{
#define SET_DIAG_MV(MV_OP, REF_OP, XY, Y4) \
const int xy = XY, y4 = Y4; \
const int mb_type = mb_types[xy + (y4 >> 2) * h->mb_stride]; \
...
...
@@ -231,7 +231,7 @@ static av_always_inline void pred_8x16_motion(H264Context *const h,
}
#define FIX_MV_MBAFF(type, refn, mvn, idx) \
if (FRAME_MBAFF
) {
\
if (FRAME_MBAFF
(h)) {
\
if (MB_FIELD(h)) { \
if (!IS_INTERLACED(type)) { \
refn <<= 1; \
...
...
@@ -369,7 +369,7 @@ static void fill_decode_neighbors(H264Context *h, int mb_type)
topright_xy
=
top_xy
+
1
;
left_xy
[
LBOT
]
=
left_xy
[
LTOP
]
=
mb_xy
-
1
;
h
->
left_block
=
left_block_options
[
0
];
if
(
FRAME_MBAFF
)
{
if
(
FRAME_MBAFF
(
h
)
)
{
const
int
left_mb_field_flag
=
IS_INTERLACED
(
h
->
cur_pic
.
mb_type
[
mb_xy
-
1
]);
const
int
curr_mb_field_flag
=
IS_INTERLACED
(
mb_type
);
if
(
h
->
mb_y
&
1
)
{
...
...
@@ -678,7 +678,7 @@ static void fill_decode_caches(H264Context *h, int mb_type)
}
}
if
((
mb_type
&
(
MB_TYPE_SKIP
|
MB_TYPE_DIRECT2
))
&&
!
FRAME_MBAFF
)
if
((
mb_type
&
(
MB_TYPE_SKIP
|
MB_TYPE_DIRECT2
))
&&
!
FRAME_MBAFF
(
h
)
)
continue
;
if
(
!
(
mb_type
&
(
MB_TYPE_SKIP
|
MB_TYPE_DIRECT2
)))
{
...
...
@@ -760,7 +760,7 @@ static void fill_decode_caches(H264Context *h, int mb_type)
MAP_F2F(scan8[0] - 1 + 2 * 8, left_type[LBOT]) \
MAP_F2F(scan8[0] - 1 + 3 * 8, left_type[LBOT])
if
(
FRAME_MBAFF
)
{
if
(
FRAME_MBAFF
(
h
)
)
{
if
(
MB_FIELD
(
h
))
{
#define MAP_F2F(idx, mb_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