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
b1841217
Commit
b1841217
authored
Jul 31, 2013
by
Vittorio Giovara
Committed by
Diego Biurrun
Aug 01, 2013
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
h264_sei: K&R formatting cosmetics
Signed-off-by:
Diego Biurrun
<
diego@biurrun.de
>
parent
4c7fd58f
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
78 additions
and
58 deletions
+78
-58
h264_sei.c
libavcodec/h264_sei.c
+78
-58
No files found.
libavcodec/h264_sei.c
View file @
b1841217
...
...
@@ -33,24 +33,30 @@
//#undef NDEBUG
#include <assert.h>
static
const
uint8_t
sei_num_clock_ts_table
[
9
]
=
{
1
,
1
,
1
,
2
,
2
,
3
,
3
,
2
,
3
static
const
uint8_t
sei_num_clock_ts_table
[
9
]
=
{
1
,
1
,
1
,
2
,
2
,
3
,
3
,
2
,
3
};
void
ff_h264_reset_sei
(
H264Context
*
h
)
{
void
ff_h264_reset_sei
(
H264Context
*
h
)
{
h
->
sei_recovery_frame_cnt
=
-
1
;
h
->
sei_dpb_output_delay
=
0
;
h
->
sei_cpb_removal_delay
=
-
1
;
h
->
sei_buffering_period_present
=
0
;
}
static
int
decode_picture_timing
(
H264Context
*
h
){
if
(
h
->
sps
.
nal_hrd_parameters_present_flag
||
h
->
sps
.
vcl_hrd_parameters_present_flag
){
h
->
sei_cpb_removal_delay
=
get_bits
(
&
h
->
gb
,
h
->
sps
.
cpb_removal_delay_length
);
h
->
sei_dpb_output_delay
=
get_bits
(
&
h
->
gb
,
h
->
sps
.
dpb_output_delay_length
);
static
int
decode_picture_timing
(
H264Context
*
h
)
{
if
(
h
->
sps
.
nal_hrd_parameters_present_flag
||
h
->
sps
.
vcl_hrd_parameters_present_flag
)
{
h
->
sei_cpb_removal_delay
=
get_bits
(
&
h
->
gb
,
h
->
sps
.
cpb_removal_delay_length
);
h
->
sei_dpb_output_delay
=
get_bits
(
&
h
->
gb
,
h
->
sps
.
dpb_output_delay_length
);
}
if
(
h
->
sps
.
pic_struct_present_flag
)
{
if
(
h
->
sps
.
pic_struct_present_flag
)
{
unsigned
int
i
,
num_clock_ts
;
h
->
sei_pic_struct
=
get_bits
(
&
h
->
gb
,
4
);
h
->
sei_ct_type
=
0
;
...
...
@@ -59,81 +65,91 @@ static int decode_picture_timing(H264Context *h){
num_clock_ts
=
sei_num_clock_ts_table
[
h
->
sei_pic_struct
];
for
(
i
=
0
;
i
<
num_clock_ts
;
i
++
)
{
if
(
get_bits
(
&
h
->
gb
,
1
)){
/* clock_timestamp_flag */
for
(
i
=
0
;
i
<
num_clock_ts
;
i
++
)
{
if
(
get_bits
(
&
h
->
gb
,
1
))
{
/* clock_timestamp_flag */
unsigned
int
full_timestamp_flag
;
h
->
sei_ct_type
|=
1
<<
get_bits
(
&
h
->
gb
,
2
);
h
->
sei_ct_type
|=
1
<<
get_bits
(
&
h
->
gb
,
2
);
skip_bits
(
&
h
->
gb
,
1
);
/* nuit_field_based_flag */
skip_bits
(
&
h
->
gb
,
5
);
/* counting_type */
full_timestamp_flag
=
get_bits
(
&
h
->
gb
,
1
);
skip_bits
(
&
h
->
gb
,
1
);
/* discontinuity_flag */
skip_bits
(
&
h
->
gb
,
1
);
/* cnt_dropped_flag */
skip_bits
(
&
h
->
gb
,
8
);
/* n_frames */
if
(
full_timestamp_flag
)
{
if
(
full_timestamp_flag
)
{
skip_bits
(
&
h
->
gb
,
6
);
/* seconds_value 0..59 */
skip_bits
(
&
h
->
gb
,
6
);
/* minutes_value 0..59 */
skip_bits
(
&
h
->
gb
,
5
);
/* hours_value 0..23 */
}
else
{
if
(
get_bits
(
&
h
->
gb
,
1
)){
/* seconds_flag */
}
else
{
if
(
get_bits
(
&
h
->
gb
,
1
))
{
/* seconds_flag */
skip_bits
(
&
h
->
gb
,
6
);
/* seconds_value range 0..59 */
if
(
get_bits
(
&
h
->
gb
,
1
)){
/* minutes_flag */
if
(
get_bits
(
&
h
->
gb
,
1
))
{
/* minutes_flag */
skip_bits
(
&
h
->
gb
,
6
);
/* minutes_value 0..59 */
if
(
get_bits
(
&
h
->
gb
,
1
))
/* hours_flag */
if
(
get_bits
(
&
h
->
gb
,
1
))
/* hours_flag */
skip_bits
(
&
h
->
gb
,
5
);
/* hours_value 0..23 */
}
}
}
if
(
h
->
sps
.
time_offset_length
>
0
)
skip_bits
(
&
h
->
gb
,
h
->
sps
.
time_offset_length
);
/* time_offset */
if
(
h
->
sps
.
time_offset_length
>
0
)
skip_bits
(
&
h
->
gb
,
h
->
sps
.
time_offset_length
);
/* time_offset */
}
}
if
(
h
->
avctx
->
debug
&
FF_DEBUG_PICT_INFO
)
av_log
(
h
->
avctx
,
AV_LOG_DEBUG
,
"ct_type:%X pic_struct:%d
\n
"
,
h
->
sei_ct_type
,
h
->
sei_pic_struct
);
if
(
h
->
avctx
->
debug
&
FF_DEBUG_PICT_INFO
)
av_log
(
h
->
avctx
,
AV_LOG_DEBUG
,
"ct_type:%X pic_struct:%d
\n
"
,
h
->
sei_ct_type
,
h
->
sei_pic_struct
);
}
return
0
;
}
static
int
decode_unregistered_user_data
(
H264Context
*
h
,
int
size
){
uint8_t
user_data
[
16
+
256
];
static
int
decode_unregistered_user_data
(
H264Context
*
h
,
int
size
)
{
uint8_t
user_data
[
16
+
256
];
int
e
,
build
,
i
;
if
(
size
<
16
)
if
(
size
<
16
)
return
-
1
;
for
(
i
=
0
;
i
<
sizeof
(
user_data
)
-
1
&&
i
<
size
;
i
++
){
user_data
[
i
]
=
get_bits
(
&
h
->
gb
,
8
);
}
for
(
i
=
0
;
i
<
sizeof
(
user_data
)
-
1
&&
i
<
size
;
i
++
)
user_data
[
i
]
=
get_bits
(
&
h
->
gb
,
8
);
user_data
[
i
]
=
0
;
user_data
[
i
]
=
0
;
e
=
sscanf
(
user_data
+
16
,
"x264 - core %d"
,
&
build
);
if
(
e
==
1
&&
build
>
0
)
h
->
x264_build
=
build
;
if
(
e
==
1
&&
build
>
0
)
h
->
x264_build
=
build
;
if
(
h
->
avctx
->
debug
&
FF_DEBUG_BUGS
)
av_log
(
h
->
avctx
,
AV_LOG_DEBUG
,
"user data:
\"
%s
\"\n
"
,
user_data
+
16
);
if
(
h
->
avctx
->
debug
&
FF_DEBUG_BUGS
)
av_log
(
h
->
avctx
,
AV_LOG_DEBUG
,
"user data:
\"
%s
\"\n
"
,
user_data
+
16
);
for
(;
i
<
size
;
i
++
)
for
(;
i
<
size
;
i
++
)
skip_bits
(
&
h
->
gb
,
8
);
return
0
;
}
static
int
decode_recovery_point
(
H264Context
*
h
){
static
int
decode_recovery_point
(
H264Context
*
h
)
{
h
->
sei_recovery_frame_cnt
=
get_ue_golomb
(
&
h
->
gb
);
skip_bits
(
&
h
->
gb
,
4
);
/* 1b exact_match_flag, 1b broken_link_flag, 2b changing_slice_group_idc */
/* 1b exact_match_flag,
* 1b broken_link_flag,
* 2b changing_slice_group_idc */
skip_bits
(
&
h
->
gb
,
4
);
return
0
;
}
static
int
decode_buffering_period
(
H264Context
*
h
){
static
int
decode_buffering_period
(
H264Context
*
h
)
{
unsigned
int
sps_id
;
int
sched_sel_idx
;
SPS
*
sps
;
sps_id
=
get_ue_golomb_31
(
&
h
->
gb
);
if
(
sps_id
>
31
||
!
h
->
sps_buffers
[
sps_id
])
{
av_log
(
h
->
avctx
,
AV_LOG_ERROR
,
"non-existing SPS %d referenced in buffering period
\n
"
,
sps_id
);
if
(
sps_id
>
31
||
!
h
->
sps_buffers
[
sps_id
])
{
av_log
(
h
->
avctx
,
AV_LOG_ERROR
,
"non-existing SPS %d referenced in buffering period
\n
"
,
sps_id
);
return
-
1
;
}
sps
=
h
->
sps_buffers
[
sps_id
];
...
...
@@ -141,14 +157,18 @@ static int decode_buffering_period(H264Context *h){
// NOTE: This is really so duplicated in the standard... See H.264, D.1.1
if
(
sps
->
nal_hrd_parameters_present_flag
)
{
for
(
sched_sel_idx
=
0
;
sched_sel_idx
<
sps
->
cpb_cnt
;
sched_sel_idx
++
)
{
h
->
initial_cpb_removal_delay
[
sched_sel_idx
]
=
get_bits
(
&
h
->
gb
,
sps
->
initial_cpb_removal_delay_length
);
skip_bits
(
&
h
->
gb
,
sps
->
initial_cpb_removal_delay_length
);
// initial_cpb_removal_delay_offset
h
->
initial_cpb_removal_delay
[
sched_sel_idx
]
=
get_bits
(
&
h
->
gb
,
sps
->
initial_cpb_removal_delay_length
);
// initial_cpb_removal_delay_offset
skip_bits
(
&
h
->
gb
,
sps
->
initial_cpb_removal_delay_length
);
}
}
if
(
sps
->
vcl_hrd_parameters_present_flag
)
{
for
(
sched_sel_idx
=
0
;
sched_sel_idx
<
sps
->
cpb_cnt
;
sched_sel_idx
++
)
{
h
->
initial_cpb_removal_delay
[
sched_sel_idx
]
=
get_bits
(
&
h
->
gb
,
sps
->
initial_cpb_removal_delay_length
);
skip_bits
(
&
h
->
gb
,
sps
->
initial_cpb_removal_delay_length
);
// initial_cpb_removal_delay_offset
h
->
initial_cpb_removal_delay
[
sched_sel_idx
]
=
get_bits
(
&
h
->
gb
,
sps
->
initial_cpb_removal_delay_length
);
// initial_cpb_removal_delay_offset
skip_bits
(
&
h
->
gb
,
sps
->
initial_cpb_removal_delay_length
);
}
}
...
...
@@ -156,42 +176,42 @@ static int decode_buffering_period(H264Context *h){
return
0
;
}
int
ff_h264_decode_sei
(
H264Context
*
h
){
int
ff_h264_decode_sei
(
H264Context
*
h
)
{
while
(
get_bits_left
(
&
h
->
gb
)
>
16
)
{
int
size
,
type
;
int
size
=
0
;
int
type
=
0
;
type
=
0
;
do
{
type
+=
show_bits
(
&
h
->
gb
,
8
);
}
while
(
get_bits
(
&
h
->
gb
,
8
)
==
255
);
do
type
+=
show_bits
(
&
h
->
gb
,
8
);
while
(
get_bits
(
&
h
->
gb
,
8
)
==
255
);
size
=
0
;
do
{
size
+=
show_bits
(
&
h
->
gb
,
8
);
}
while
(
get_bits
(
&
h
->
gb
,
8
)
==
255
);
do
size
+=
show_bits
(
&
h
->
gb
,
8
);
while
(
get_bits
(
&
h
->
gb
,
8
)
==
255
);
switch
(
type
)
{
switch
(
type
)
{
case
SEI_TYPE_PIC_TIMING
:
// Picture timing SEI
if
(
decode_picture_timing
(
h
)
<
0
)
if
(
decode_picture_timing
(
h
)
<
0
)
return
-
1
;
break
;
case
SEI_TYPE_USER_DATA_UNREGISTERED
:
if
(
decode_unregistered_user_data
(
h
,
size
)
<
0
)
if
(
decode_unregistered_user_data
(
h
,
size
)
<
0
)
return
-
1
;
break
;
case
SEI_TYPE_RECOVERY_POINT
:
if
(
decode_recovery_point
(
h
)
<
0
)
if
(
decode_recovery_point
(
h
)
<
0
)
return
-
1
;
break
;
case
SEI_BUFFERING_PERIOD
:
if
(
decode_buffering_period
(
h
)
<
0
)
if
(
decode_buffering_period
(
h
)
<
0
)
return
-
1
;
break
;
default:
skip_bits
(
&
h
->
gb
,
8
*
size
);
skip_bits
(
&
h
->
gb
,
8
*
size
);
}
//FIXME check bits here
//
FIXME check bits here
align_get_bits
(
&
h
->
gb
);
}
...
...
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