Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
78f787c2
F
Ffmpeg
项目概览
小白菜888
/
Ffmpeg
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Ffmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
78f787c2
编写于
6月 15, 2020
作者:
L
Limin Wang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
avcodec/hevc_sei: support HEVC timecode decode
Signed-off-by:
N
Limin Wang
<
lance.lmwang@gmail.com
>
上级
acca2aec
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
70 addition
and
0 deletion
+70
-0
libavcodec/hevc_sei.c
libavcodec/hevc_sei.c
+49
-0
libavcodec/hevc_sei.h
libavcodec/hevc_sei.h
+21
-0
未找到文件。
libavcodec/hevc_sei.c
浏览文件 @
78f787c2
...
...
@@ -306,6 +306,53 @@ static int decode_nal_sei_alternative_transfer(HEVCSEIAlternativeTransfer *s, Ge
return
0
;
}
static
int
decode_nal_sei_timecode
(
HEVCSEITimeCode
*
s
,
GetBitContext
*
gb
)
{
s
->
num_clock_ts
=
get_bits
(
gb
,
2
);
for
(
int
i
=
0
;
i
<
s
->
num_clock_ts
;
i
++
)
{
s
->
clock_timestamp_flag
[
i
]
=
get_bits
(
gb
,
1
);
if
(
s
->
clock_timestamp_flag
[
i
])
{
s
->
units_field_based_flag
[
i
]
=
get_bits
(
gb
,
1
);
s
->
counting_type
[
i
]
=
get_bits
(
gb
,
5
);
s
->
full_timestamp_flag
[
i
]
=
get_bits
(
gb
,
1
);
s
->
discontinuity_flag
[
i
]
=
get_bits
(
gb
,
1
);
s
->
cnt_dropped_flag
[
i
]
=
get_bits
(
gb
,
1
);
s
->
n_frames
[
i
]
=
get_bits
(
gb
,
9
);
if
(
s
->
full_timestamp_flag
[
i
])
{
s
->
seconds_value
[
i
]
=
av_clip
(
get_bits
(
gb
,
6
),
0
,
59
);
s
->
minutes_value
[
i
]
=
av_clip
(
get_bits
(
gb
,
6
),
0
,
59
);
s
->
hours_value
[
i
]
=
av_clip
(
get_bits
(
gb
,
5
),
0
,
23
);
}
else
{
s
->
seconds_flag
[
i
]
=
get_bits
(
gb
,
1
);
if
(
s
->
seconds_flag
[
i
])
{
s
->
seconds_value
[
i
]
=
av_clip
(
get_bits
(
gb
,
6
),
0
,
59
);
s
->
minutes_flag
[
i
]
=
get_bits
(
gb
,
1
);
if
(
s
->
minutes_flag
[
i
])
{
s
->
minutes_value
[
i
]
=
av_clip
(
get_bits
(
gb
,
6
),
0
,
59
);
s
->
hours_flag
[
i
]
=
get_bits
(
gb
,
1
);
if
(
s
->
hours_flag
[
i
])
{
s
->
hours_value
[
i
]
=
av_clip
(
get_bits
(
gb
,
5
),
0
,
23
);
}
}
}
}
s
->
time_offset_length
[
i
]
=
get_bits
(
gb
,
5
);
if
(
s
->
time_offset_length
[
i
]
>
0
)
{
s
->
time_offset_value
[
i
]
=
get_bits
(
gb
,
s
->
time_offset_length
[
i
]);
}
}
}
s
->
present
=
1
;
return
0
;
}
static
int
decode_nal_sei_prefix
(
GetBitContext
*
gb
,
void
*
logctx
,
HEVCSEI
*
s
,
const
HEVCParamSets
*
ps
,
int
type
,
int
size
)
{
...
...
@@ -330,6 +377,8 @@ static int decode_nal_sei_prefix(GetBitContext *gb, void *logctx, HEVCSEI *s,
return
decode_nal_sei_user_data_unregistered
(
&
s
->
unregistered
,
gb
,
size
);
case
HEVC_SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS
:
return
decode_nal_sei_alternative_transfer
(
&
s
->
alternative_transfer
,
gb
);
case
HEVC_SEI_TYPE_TIME_CODE
:
return
decode_nal_sei_timecode
(
&
s
->
timecode
,
gb
);
default:
av_log
(
logctx
,
AV_LOG_DEBUG
,
"Skipped PREFIX SEI %d
\n
"
,
type
);
skip_bits_long
(
gb
,
8
*
size
);
...
...
libavcodec/hevc_sei.h
浏览文件 @
78f787c2
...
...
@@ -115,6 +115,26 @@ typedef struct HEVCSEIAlternativeTransfer {
int
preferred_transfer_characteristics
;
}
HEVCSEIAlternativeTransfer
;
typedef
struct
HEVCSEITimeCode
{
int
present
;
uint8_t
num_clock_ts
;
uint8_t
clock_timestamp_flag
[
3
];
uint8_t
units_field_based_flag
[
3
];
uint8_t
counting_type
[
3
];
uint8_t
full_timestamp_flag
[
3
];
uint8_t
discontinuity_flag
[
3
];
uint8_t
cnt_dropped_flag
[
3
];
uint16_t
n_frames
[
3
];
uint8_t
seconds_value
[
3
];
uint8_t
minutes_value
[
3
];
uint8_t
hours_value
[
3
];
uint8_t
seconds_flag
[
3
];
uint8_t
minutes_flag
[
3
];
uint8_t
hours_flag
[
3
];
uint8_t
time_offset_length
[
3
];
int32_t
time_offset_value
[
3
];
}
HEVCSEITimeCode
;
typedef
struct
HEVCSEI
{
HEVCSEIPictureHash
picture_hash
;
HEVCSEIFramePacking
frame_packing
;
...
...
@@ -126,6 +146,7 @@ typedef struct HEVCSEI {
HEVCSEIContentLight
content_light
;
int
active_seq_parameter_set_id
;
HEVCSEIAlternativeTransfer
alternative_transfer
;
HEVCSEITimeCode
timecode
;
}
HEVCSEI
;
struct
HEVCParamSets
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录