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
44d16df4
Commit
44d16df4
authored
Mar 21, 2016
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
h264_parser: eliminate H264SliceContext usage
It is no longer needed for anything.
parent
71d3305c
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
32 additions
and
34 deletions
+32
-34
h264_parser.c
libavcodec/h264_parser.c
+32
-34
No files found.
libavcodec/h264_parser.c
View file @
44d16df4
...
...
@@ -106,35 +106,35 @@ found:
return
i
-
(
state
&
5
);
}
static
int
scan_mmco_reset
(
AVCodecParserContext
*
s
)
static
int
scan_mmco_reset
(
AVCodecParserContext
*
s
,
GetBitContext
*
gb
)
{
H264PredWeightTable
pwt
;
int
slice_type_nos
=
s
->
pict_type
&
3
;
H264ParseContext
*
p
=
s
->
priv_data
;
H264Context
*
h
=
&
p
->
h
;
H264SliceContext
*
sl
=
&
h
->
slice_ctx
[
0
];
int
list_count
,
ref_count
[
2
];
sl
->
slice_type_nos
=
s
->
pict_type
&
3
;
if
(
h
->
pps
.
redundant_pic_cnt_present
)
get_ue_golomb
(
&
sl
->
gb
);
// redundant_pic_count
get_ue_golomb
(
gb
);
// redundant_pic_count
if
(
sl
->
sl
ice_type_nos
==
AV_PICTURE_TYPE_B
)
get_bits1
(
&
sl
->
gb
);
// direct_spatial_mv_pred
if
(
slice_type_nos
==
AV_PICTURE_TYPE_B
)
get_bits1
(
gb
);
// direct_spatial_mv_pred
if
(
ff_h264_parse_ref_count
(
&
list_count
,
ref_count
,
&
sl
->
gb
,
&
h
->
pps
,
sl
->
sl
ice_type_nos
,
h
->
picture_structure
)
<
0
)
if
(
ff_h264_parse_ref_count
(
&
list_count
,
ref_count
,
gb
,
&
h
->
pps
,
slice_type_nos
,
h
->
picture_structure
)
<
0
)
return
AVERROR_INVALIDDATA
;
if
(
sl
->
sl
ice_type_nos
!=
AV_PICTURE_TYPE_I
)
{
if
(
slice_type_nos
!=
AV_PICTURE_TYPE_I
)
{
int
list
;
for
(
list
=
0
;
list
<
list_count
;
list
++
)
{
if
(
get_bits1
(
&
sl
->
gb
))
{
if
(
get_bits1
(
gb
))
{
int
index
;
for
(
index
=
0
;
;
index
++
)
{
unsigned
int
reordering_of_pic_nums_idc
=
get_ue_golomb_31
(
&
sl
->
gb
);
unsigned
int
reordering_of_pic_nums_idc
=
get_ue_golomb_31
(
gb
);
if
(
reordering_of_pic_nums_idc
<
3
)
get_ue_golomb
(
&
sl
->
gb
);
get_ue_golomb
(
gb
);
else
if
(
reordering_of_pic_nums_idc
>
3
)
{
av_log
(
h
->
avctx
,
AV_LOG_ERROR
,
"illegal reordering_of_pic_nums_idc %d
\n
"
,
...
...
@@ -153,15 +153,15 @@ static int scan_mmco_reset(AVCodecParserContext *s)
}
}
if
((
h
->
pps
.
weighted_pred
&&
sl
->
sl
ice_type_nos
==
AV_PICTURE_TYPE_P
)
||
(
h
->
pps
.
weighted_bipred_idc
==
1
&&
sl
->
sl
ice_type_nos
==
AV_PICTURE_TYPE_B
))
ff_h264_pred_weight_table
(
&
sl
->
gb
,
&
h
->
sps
,
ref_count
,
sl
->
slice_type_nos
,
&
sl
->
pwt
);
if
((
h
->
pps
.
weighted_pred
&&
slice_type_nos
==
AV_PICTURE_TYPE_P
)
||
(
h
->
pps
.
weighted_bipred_idc
==
1
&&
slice_type_nos
==
AV_PICTURE_TYPE_B
))
ff_h264_pred_weight_table
(
gb
,
&
h
->
sps
,
ref_count
,
slice_type_nos
,
&
pwt
);
if
(
get_bits1
(
&
sl
->
gb
))
{
// adaptive_ref_pic_marking_mode_flag
if
(
get_bits1
(
gb
))
{
// adaptive_ref_pic_marking_mode_flag
int
i
;
for
(
i
=
0
;
i
<
MAX_MMCO_COUNT
;
i
++
)
{
MMCOOpcode
opcode
=
get_ue_golomb_31
(
&
sl
->
gb
);
MMCOOpcode
opcode
=
get_ue_golomb_31
(
gb
);
if
(
opcode
>
(
unsigned
)
MMCO_LONG
)
{
av_log
(
h
->
avctx
,
AV_LOG_ERROR
,
"illegal memory management control operation %d
\n
"
,
...
...
@@ -174,10 +174,10 @@ static int scan_mmco_reset(AVCodecParserContext *s)
return
1
;
if
(
opcode
==
MMCO_SHORT2UNUSED
||
opcode
==
MMCO_SHORT2LONG
)
get_ue_golomb
(
&
sl
->
gb
);
get_ue_golomb
(
gb
);
if
(
opcode
==
MMCO_SHORT2LONG
||
opcode
==
MMCO_LONG2UNUSED
||
opcode
==
MMCO_LONG
||
opcode
==
MMCO_SET_MAX_LONG
)
get_ue_golomb_31
(
&
sl
->
gb
);
get_ue_golomb_31
(
gb
);
}
}
...
...
@@ -198,7 +198,6 @@ static inline int parse_nal_units(AVCodecParserContext *s,
{
H264ParseContext
*
p
=
s
->
priv_data
;
H264Context
*
h
=
&
p
->
h
;
H264SliceContext
*
sl
=
&
h
->
slice_ctx
[
0
];
const
uint8_t
*
buf_end
=
buf
+
buf_size
;
H2645NAL
nal
=
{
NULL
};
...
...
@@ -278,15 +277,14 @@ static inline int parse_nal_units(AVCodecParserContext *s,
h
->
prev_poc_lsb
=
0
;
/* fall through */
case
NAL_SLICE
:
sl
->
gb
=
nal
.
gb
;
get_ue_golomb
(
&
sl
->
gb
);
// skip first_mb_in_slice
slice_type
=
get_ue_golomb_31
(
&
sl
->
gb
);
get_ue_golomb
(
&
nal
.
gb
);
// skip first_mb_in_slice
slice_type
=
get_ue_golomb_31
(
&
nal
.
gb
);
s
->
pict_type
=
ff_h264_golomb_to_pict_type
[
slice_type
%
5
];
if
(
h
->
sei_recovery_frame_cnt
>=
0
)
{
/* key frame, since recovery_frame_cnt is set */
s
->
key_frame
=
1
;
}
pps_id
=
get_ue_golomb
(
&
sl
->
gb
);
pps_id
=
get_ue_golomb
(
&
nal
.
gb
);
if
(
pps_id
>=
MAX_PPS_COUNT
)
{
av_log
(
h
->
avctx
,
AV_LOG_ERROR
,
"pps_id %u out of range
\n
"
,
pps_id
);
...
...
@@ -304,7 +302,7 @@ static inline int parse_nal_units(AVCodecParserContext *s,
goto
fail
;
}
h
->
sps
=
*
h
->
sps_buffers
[
h
->
pps
.
sps_id
];
h
->
frame_num
=
get_bits
(
&
sl
->
gb
,
h
->
sps
.
log2_max_frame_num
);
h
->
frame_num
=
get_bits
(
&
nal
.
gb
,
h
->
sps
.
log2_max_frame_num
);
s
->
coded_width
=
16
*
h
->
sps
.
mb_width
;
s
->
coded_height
=
16
*
h
->
sps
.
mb_height
;
...
...
@@ -341,30 +339,30 @@ static inline int parse_nal_units(AVCodecParserContext *s,
if
(
h
->
sps
.
frame_mbs_only_flag
)
{
h
->
picture_structure
=
PICT_FRAME
;
}
else
{
if
(
get_bits1
(
&
sl
->
gb
))
{
// field_pic_flag
h
->
picture_structure
=
PICT_TOP_FIELD
+
get_bits1
(
&
sl
->
gb
);
// bottom_field_flag
if
(
get_bits1
(
&
nal
.
gb
))
{
// field_pic_flag
h
->
picture_structure
=
PICT_TOP_FIELD
+
get_bits1
(
&
nal
.
gb
);
// bottom_field_flag
}
else
{
h
->
picture_structure
=
PICT_FRAME
;
}
}
if
(
h
->
nal_unit_type
==
NAL_IDR_SLICE
)
get_ue_golomb
(
&
sl
->
gb
);
/* idr_pic_id */
get_ue_golomb
(
&
nal
.
gb
);
/* idr_pic_id */
if
(
h
->
sps
.
poc_type
==
0
)
{
h
->
poc_lsb
=
get_bits
(
&
sl
->
gb
,
h
->
sps
.
log2_max_poc_lsb
);
h
->
poc_lsb
=
get_bits
(
&
nal
.
gb
,
h
->
sps
.
log2_max_poc_lsb
);
if
(
h
->
pps
.
pic_order_present
==
1
&&
h
->
picture_structure
==
PICT_FRAME
)
h
->
delta_poc_bottom
=
get_se_golomb
(
&
sl
->
gb
);
h
->
delta_poc_bottom
=
get_se_golomb
(
&
nal
.
gb
);
}
if
(
h
->
sps
.
poc_type
==
1
&&
!
h
->
sps
.
delta_pic_order_always_zero_flag
)
{
h
->
delta_poc
[
0
]
=
get_se_golomb
(
&
sl
->
gb
);
h
->
delta_poc
[
0
]
=
get_se_golomb
(
&
nal
.
gb
);
if
(
h
->
pps
.
pic_order_present
==
1
&&
h
->
picture_structure
==
PICT_FRAME
)
h
->
delta_poc
[
1
]
=
get_se_golomb
(
&
sl
->
gb
);
h
->
delta_poc
[
1
]
=
get_se_golomb
(
&
nal
.
gb
);
}
/* Decode POC of this picture.
...
...
@@ -377,7 +375,7 @@ static inline int parse_nal_units(AVCodecParserContext *s,
* Maybe, we should parse all undisposable non-IDR slice of this
* picture until encountering MMCO_RESET in a slice of it. */
if
(
h
->
nal_ref_idc
&&
h
->
nal_unit_type
!=
NAL_IDR_SLICE
)
{
got_reset
=
scan_mmco_reset
(
s
);
got_reset
=
scan_mmco_reset
(
s
,
&
nal
.
gb
);
if
(
got_reset
<
0
)
goto
fail
;
}
...
...
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