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
da6be8fc
Commit
da6be8fc
authored
Mar 09, 2013
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
h264: add a parameter to the MB_FIELD macro.
This way it does not look like a constant.
parent
82313eaa
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
30 additions
and
30 deletions
+30
-30
h264.c
libavcodec/h264.c
+8
-8
h264.h
libavcodec/h264.h
+2
-2
h264_cabac.c
libavcodec/h264_cabac.c
+7
-7
h264_cavlc.c
libavcodec/h264_cavlc.c
+1
-1
h264_loopfilter.c
libavcodec/h264_loopfilter.c
+4
-4
h264_mb_template.c
libavcodec/h264_mb_template.c
+2
-2
h264_mvpred.h
libavcodec/h264_mvpred.h
+6
-6
No files found.
libavcodec/h264.c
View file @
da6be8fc
...
...
@@ -632,7 +632,7 @@ static inline void get_lowest_part_y(H264Context *h, int refs[2][48], int n,
{
int
my
;
y_offset
+=
16
*
(
h
->
mb_y
>>
MB_FIELD
);
y_offset
+=
16
*
(
h
->
mb_y
>>
MB_FIELD
(
h
)
);
if
(
list0
)
{
int
ref_n
=
h
->
ref_cache
[
0
][
scan8
[
n
]];
...
...
@@ -799,7 +799,7 @@ static av_always_inline void mc_dir_part(H264Context *h, Picture *pic,
const
int
full_mx
=
mx
>>
2
;
const
int
full_my
=
my
>>
2
;
const
int
pic_width
=
16
*
h
->
mb_width
;
const
int
pic_height
=
16
*
h
->
mb_height
>>
MB_FIELD
;
const
int
pic_height
=
16
*
h
->
mb_height
>>
MB_FIELD
(
h
)
;
int
ysh
;
if
(
mx
&
7
)
...
...
@@ -859,7 +859,7 @@ static av_always_inline void mc_dir_part(H264Context *h, Picture *pic,
}
ysh
=
3
-
(
chroma_idc
==
2
/* yuv422 */
);
if
(
chroma_idc
==
1
/* yuv420 */
&&
MB_FIELD
)
{
if
(
chroma_idc
==
1
/* yuv420 */
&&
MB_FIELD
(
h
)
)
{
// chroma offset when predicting from a field of opposite parity
my
+=
2
*
((
h
->
mb_y
&
1
)
-
(
pic
->
reference
-
1
));
emu
|=
(
my
>>
3
)
<
0
||
(
my
>>
3
)
+
8
>=
(
pic_height
>>
1
);
...
...
@@ -917,7 +917,7 @@ static av_always_inline void mc_part_std(H264Context *h, int n, int square,
dest_cr
+=
(
x_offset
<<
pixel_shift
)
+
y_offset
*
h
->
mb_uvlinesize
;
}
x_offset
+=
8
*
h
->
mb_x
;
y_offset
+=
8
*
(
h
->
mb_y
>>
MB_FIELD
);
y_offset
+=
8
*
(
h
->
mb_y
>>
MB_FIELD
(
h
)
);
if
(
list0
)
{
Picture
*
ref
=
&
h
->
ref_list
[
0
][
h
->
ref_cache
[
0
][
scan8
[
n
]]];
...
...
@@ -970,7 +970,7 @@ static av_always_inline void mc_part_weighted(H264Context *h, int n, int square,
dest_cr
+=
(
x_offset
<<
pixel_shift
)
+
y_offset
*
h
->
mb_uvlinesize
;
}
x_offset
+=
8
*
h
->
mb_x
;
y_offset
+=
8
*
(
h
->
mb_y
>>
MB_FIELD
);
y_offset
+=
8
*
(
h
->
mb_y
>>
MB_FIELD
(
h
)
);
if
(
list0
&&
list1
)
{
/* don't optimize for luma-only case, since B-frames usually
...
...
@@ -2155,7 +2155,7 @@ static av_always_inline void xchg_mb_border(H264Context *h, uint8_t *src_y,
deblock_top
=
h
->
top_type
;
}
else
{
deblock_topleft
=
(
h
->
mb_x
>
0
);
deblock_top
=
(
h
->
mb_y
>
!!
MB_FIELD
);
deblock_top
=
(
h
->
mb_y
>
!!
MB_FIELD
(
h
)
);
}
src_y
-=
linesize
+
1
+
pixel_shift
;
...
...
@@ -3837,7 +3837,7 @@ static int fill_filter_caches(H264Context *h, int mb_type)
uint8_t
*
nnz
;
uint8_t
*
nnz_cache
;
top_xy
=
mb_xy
-
(
h
->
mb_stride
<<
MB_FIELD
);
top_xy
=
mb_xy
-
(
h
->
mb_stride
<<
MB_FIELD
(
h
)
);
/* Wow, what a mess, why didn't they simplify the interlacing & intra
* stuff, I can't imagine that these complex rules are worth it. */
...
...
@@ -4008,7 +4008,7 @@ static void loop_filter(H264Context *h, int start_x, int end_x)
mb_y
*
h
->
uvlinesize
*
block_h
;
// FIXME simplify above
if
(
MB_FIELD
)
{
if
(
MB_FIELD
(
h
)
)
{
linesize
=
h
->
mb_linesize
=
h
->
linesize
*
2
;
uvlinesize
=
h
->
mb_uvlinesize
=
h
->
uvlinesize
*
2
;
if
(
mb_y
&
1
)
{
// FIXME move out of this function?
...
...
libavcodec/h264.h
View file @
da6be8fc
...
...
@@ -60,7 +60,7 @@
#ifdef ALLOW_INTERLACE
#define MB_MBAFF(h) h->mb_mbaff
#define MB_FIELD h->mb_field_decoding_flag
#define MB_FIELD
(h)
h->mb_field_decoding_flag
#define FRAME_MBAFF h->mb_aff_frame
#define FIELD_PICTURE (h->picture_structure != PICT_FRAME)
#define LEFT_MBS 2
...
...
@@ -69,7 +69,7 @@
#define LEFT(i) (i)
#else
#define MB_MBAFF(h) 0
#define MB_FIELD 0
#define MB_FIELD
(h)
0
#define FRAME_MBAFF 0
#define FIELD_PICTURE 0
#undef IS_INTERLACED
...
...
libavcodec/h264_cabac.c
View file @
da6be8fc
...
...
@@ -1328,9 +1328,9 @@ static int decode_cabac_mb_skip( H264Context *h, int mb_x, int mb_y ) {
mba_xy
=
mb_xy
-
1
;
if
(
(
mb_y
&
1
)
&&
h
->
slice_table
[
mba_xy
]
==
h
->
slice_num
&&
MB_FIELD
==
!!
IS_INTERLACED
(
h
->
cur_pic
.
mb_type
[
mba_xy
]
)
)
&&
MB_FIELD
(
h
)
==
!!
IS_INTERLACED
(
h
->
cur_pic
.
mb_type
[
mba_xy
]
)
)
mba_xy
+=
h
->
mb_stride
;
if
(
MB_FIELD
)
{
if
(
MB_FIELD
(
h
))
{
mbb_xy
=
mb_xy
-
h
->
mb_stride
;
if
(
!
(
mb_y
&
1
)
&&
h
->
slice_table
[
mbb_xy
]
==
h
->
slice_num
...
...
@@ -1625,9 +1625,9 @@ decode_cabac_residual_internal(H264Context *h, int16_t *block,
#endif
significant_coeff_ctx_base
=
h
->
cabac_state
+
significant_coeff_flag_offset
[
MB_FIELD
][
cat
];
+
significant_coeff_flag_offset
[
MB_FIELD
(
h
)
][
cat
];
last_coeff_ctx_base
=
h
->
cabac_state
+
last_coeff_flag_offset
[
MB_FIELD
][
cat
];
+
last_coeff_flag_offset
[
MB_FIELD
(
h
)
][
cat
];
abs_level_m1_ctx_base
=
h
->
cabac_state
+
coeff_abs_level_m1_offset
[
cat
];
...
...
@@ -1647,7 +1647,7 @@ decode_cabac_residual_internal(H264Context *h, int16_t *block,
if( last == max_coeff -1 ) {\
index[coeff_count++] = last;\
}
const
uint8_t
*
sig_off
=
significant_coeff_flag_offset_8x8
[
MB_FIELD
];
const
uint8_t
*
sig_off
=
significant_coeff_flag_offset_8x8
[
MB_FIELD
(
h
)
];
#ifdef decode_significance
coeff_count
=
decode_significance_8x8
(
CC
,
significant_coeff_ctx_base
,
index
,
last_coeff_ctx_base
,
sig_off
);
...
...
@@ -1917,7 +1917,7 @@ int ff_h264_decode_mb_cabac(H264Context *h) {
h
->
prev_mb_skipped
=
0
;
fill_decode_neighbors
(
h
,
-
(
MB_FIELD
));
fill_decode_neighbors
(
h
,
-
(
MB_FIELD
(
h
)
));
if
(
h
->
slice_type_nos
==
AV_PICTURE_TYPE_B
)
{
int
ctx
=
0
;
...
...
@@ -1981,7 +1981,7 @@ decode_intra_mb:
h
->
intra16x16_pred_mode
=
i_mb_type_info
[
mb_type
].
pred_mode
;
mb_type
=
i_mb_type_info
[
mb_type
].
type
;
}
if
(
MB_FIELD
)
if
(
MB_FIELD
(
h
)
)
mb_type
|=
MB_TYPE_INTERLACED
;
h
->
slice_table
[
mb_xy
]
=
h
->
slice_num
;
...
...
libavcodec/h264_cavlc.c
View file @
da6be8fc
...
...
@@ -755,7 +755,7 @@ decode_intra_mb:
mb_type
=
i_mb_type_info
[
mb_type
].
type
;
}
if
(
MB_FIELD
)
if
(
MB_FIELD
(
h
)
)
mb_type
|=
MB_TYPE_INTERLACED
;
h
->
slice_table
[
mb_xy
]
=
h
->
slice_num
;
...
...
libavcodec/h264_loopfilter.c
View file @
da6be8fc
...
...
@@ -740,9 +740,9 @@ void ff_h264_filter_mb( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint
{
3
+
4
*
0
,
3
+
4
*
1
,
3
+
4
*
2
,
3
+
4
*
3
,
3
+
4
*
0
,
3
+
4
*
1
,
3
+
4
*
2
,
3
+
4
*
3
},
}
};
const
uint8_t
*
off
=
offset
[
MB_FIELD
][
mb_y
&
1
];
const
uint8_t
*
off
=
offset
[
MB_FIELD
(
h
)
][
mb_y
&
1
];
for
(
i
=
0
;
i
<
8
;
i
++
)
{
int
j
=
MB_FIELD
?
i
>>
2
:
i
&
1
;
int
j
=
MB_FIELD
(
h
)
?
i
>>
2
:
i
&
1
;
int
mbn_xy
=
h
->
left_mb_xy
[
LEFT
(
j
)];
int
mbn_type
=
h
->
left_type
[
LEFT
(
j
)];
...
...
@@ -751,7 +751,7 @@ void ff_h264_filter_mb( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint
else
{
bS
[
i
]
=
1
+
!!
(
h
->
non_zero_count_cache
[
12
+
8
*
(
i
>>
1
)]
|
((
!
h
->
pps
.
cabac
&&
IS_8x8DCT
(
mbn_type
))
?
(
h
->
cbp_table
[
mbn_xy
]
&
(((
MB_FIELD
?
(
i
&
2
)
:
(
mb_y
&
1
))
?
8
:
2
)
<<
12
))
(
h
->
cbp_table
[
mbn_xy
]
&
(((
MB_FIELD
(
h
)
?
(
i
&
2
)
:
(
mb_y
&
1
))
?
8
:
2
)
<<
12
))
:
h
->
non_zero_count
[
mbn_xy
][
off
[
i
]
]));
}
...
...
@@ -775,7 +775,7 @@ void ff_h264_filter_mb( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint
/* Filter edge */
tprintf
(
h
->
avctx
,
"filter mb:%d/%d MBAFF, QPy:%d/%d, QPb:%d/%d QPr:%d/%d ls:%d uvls:%d"
,
mb_x
,
mb_y
,
qp
[
0
],
qp
[
1
],
bqp
[
0
],
bqp
[
1
],
rqp
[
0
],
rqp
[
1
],
linesize
,
uvlinesize
);
{
int
i
;
for
(
i
=
0
;
i
<
8
;
i
++
)
tprintf
(
h
->
avctx
,
" bS[%d]:%d"
,
i
,
bS
[
i
]);
tprintf
(
h
->
avctx
,
"
\n
"
);
}
if
(
MB_FIELD
)
{
if
(
MB_FIELD
(
h
))
{
filter_mb_mbaff_edgev
(
h
,
img_y
,
linesize
,
bS
,
1
,
qp
[
0
],
a
,
b
,
1
);
filter_mb_mbaff_edgev
(
h
,
img_y
+
8
*
linesize
,
linesize
,
bS
+
4
,
1
,
qp
[
1
],
a
,
b
,
1
);
if
(
chroma
){
...
...
libavcodec/h264_mb_template.c
View file @
da6be8fc
...
...
@@ -64,7 +64,7 @@ static av_noinline void FUNC(hl_decode_mb)(H264Context *h)
h
->
list_counts
[
mb_xy
]
=
h
->
list_count
;
if
(
!
SIMPLE
&&
MB_FIELD
)
{
if
(
!
SIMPLE
&&
MB_FIELD
(
h
)
)
{
linesize
=
h
->
mb_linesize
=
h
->
linesize
*
2
;
uvlinesize
=
h
->
mb_uvlinesize
=
h
->
uvlinesize
*
2
;
block_offset
=
&
h
->
block_offset
[
48
];
...
...
@@ -296,7 +296,7 @@ static av_noinline void FUNC(hl_decode_mb_444)(H264Context *h)
h
->
list_counts
[
mb_xy
]
=
h
->
list_count
;
if
(
!
SIMPLE
&&
MB_FIELD
)
{
if
(
!
SIMPLE
&&
MB_FIELD
(
h
)
)
{
linesize
=
h
->
mb_linesize
=
h
->
mb_uvlinesize
=
h
->
linesize
*
2
;
block_offset
=
&
h
->
block_offset
[
48
];
if
(
mb_y
&
1
)
// FIXME move out of this function?
...
...
libavcodec/h264_mvpred.h
View file @
da6be8fc
...
...
@@ -61,11 +61,11 @@ static av_always_inline int fetch_diagonal_mv(H264Context *h, const int16_t **C,
AV_ZERO32
(
h
->
mv_cache
[
list
][
scan8
[
0
]
-
2
]);
*
C
=
h
->
mv_cache
[
list
][
scan8
[
0
]
-
2
];
if
(
!
MB_FIELD
&&
IS_INTERLACED
(
h
->
left_type
[
0
]))
{
if
(
!
MB_FIELD
(
h
)
&&
IS_INTERLACED
(
h
->
left_type
[
0
]))
{
SET_DIAG_MV
(
*
2
,
>>
1
,
h
->
left_mb_xy
[
0
]
+
h
->
mb_stride
,
(
h
->
mb_y
&
1
)
*
2
+
(
i
>>
5
));
}
if
(
MB_FIELD
&&
!
IS_INTERLACED
(
h
->
left_type
[
0
]))
{
if
(
MB_FIELD
(
h
)
&&
!
IS_INTERLACED
(
h
->
left_type
[
0
]))
{
// left shift will turn LIST_NOT_USED into PART_NOT_AVAILABLE, but that's OK.
SET_DIAG_MV
(
/
2
,
<<
1
,
h
->
left_mb_xy
[
i
>=
36
],
((
i
>>
2
))
&
3
);
}
...
...
@@ -232,7 +232,7 @@ static av_always_inline void pred_8x16_motion(H264Context *const h,
#define FIX_MV_MBAFF(type, refn, mvn, idx) \
if (FRAME_MBAFF) { \
if (MB_FIELD
) {
\
if (MB_FIELD
(h)) {
\
if (!IS_INTERLACED(type)) { \
refn <<= 1; \
AV_COPY32(mvbuf[idx], mvn); \
...
...
@@ -360,7 +360,7 @@ static void fill_decode_neighbors(H264Context *h, int mb_type)
h
->
topleft_partition
=
-
1
;
top_xy
=
mb_xy
-
(
h
->
mb_stride
<<
MB_FIELD
);
top_xy
=
mb_xy
-
(
h
->
mb_stride
<<
MB_FIELD
(
h
)
);
/* Wow, what a mess, why didn't they simplify the interlacing & intra
* stuff, I can't imagine that these complex rules are worth it. */
...
...
@@ -761,7 +761,7 @@ static void fill_decode_caches(H264Context *h, int mb_type)
MAP_F2F(scan8[0] - 1 + 3 * 8, left_type[LBOT])
if
(
FRAME_MBAFF
)
{
if
(
MB_FIELD
)
{
if
(
MB_FIELD
(
h
)
)
{
#define MAP_F2F(idx, mb_type) \
if (!IS_INTERLACED(mb_type) && h->ref_cache[list][idx] >= 0) { \
...
...
@@ -801,7 +801,7 @@ static void av_unused decode_mb_skip(H264Context *h)
memset
(
h
->
non_zero_count
[
mb_xy
],
0
,
48
);
if
(
MB_FIELD
)
if
(
MB_FIELD
(
h
)
)
mb_type
|=
MB_TYPE_INTERLACED
;
if
(
h
->
slice_type_nos
==
AV_PICTURE_TYPE_B
)
{
...
...
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