Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
4ef766e7
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,发现更多精彩内容 >>
提交
4ef766e7
编写于
6月 15, 2020
作者:
L
Limin Wang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
avcodec/nvenc: add more sei data support
Signed-off-by:
N
Limin Wang
<
lance.lmwang@gmail.com
>
上级
9294f5b4
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
22 addition
and
14 deletion
+22
-14
libavcodec/nvenc.c
libavcodec/nvenc.c
+22
-14
未找到文件。
libavcodec/nvenc.c
浏览文件 @
4ef766e7
...
...
@@ -1783,7 +1783,8 @@ static int nvenc_upload_frame(AVCodecContext *avctx, const AVFrame *frame,
static
void
nvenc_codec_specific_pic_params
(
AVCodecContext
*
avctx
,
NV_ENC_PIC_PARAMS
*
params
,
NV_ENC_SEI_PAYLOAD
*
sei_data
)
NV_ENC_SEI_PAYLOAD
*
sei_data
,
int
sei_count
)
{
NvencContext
*
ctx
=
avctx
->
priv_data
;
...
...
@@ -1793,9 +1794,9 @@ static void nvenc_codec_specific_pic_params(AVCodecContext *avctx,
ctx
->
encode_config
.
encodeCodecConfig
.
h264Config
.
sliceMode
;
params
->
codecPicParams
.
h264PicParams
.
sliceModeData
=
ctx
->
encode_config
.
encodeCodecConfig
.
h264Config
.
sliceModeData
;
if
(
sei_
data
)
{
if
(
sei_
count
>
0
)
{
params
->
codecPicParams
.
h264PicParams
.
seiPayloadArray
=
sei_data
;
params
->
codecPicParams
.
h264PicParams
.
seiPayloadArrayCnt
=
1
;
params
->
codecPicParams
.
h264PicParams
.
seiPayloadArrayCnt
=
sei_count
;
}
break
;
...
...
@@ -1804,9 +1805,9 @@ static void nvenc_codec_specific_pic_params(AVCodecContext *avctx,
ctx
->
encode_config
.
encodeCodecConfig
.
hevcConfig
.
sliceMode
;
params
->
codecPicParams
.
hevcPicParams
.
sliceModeData
=
ctx
->
encode_config
.
encodeCodecConfig
.
hevcConfig
.
sliceModeData
;
if
(
sei_
data
)
{
if
(
sei_
count
>
0
)
{
params
->
codecPicParams
.
hevcPicParams
.
seiPayloadArray
=
sei_data
;
params
->
codecPicParams
.
hevcPicParams
.
seiPayloadArrayCnt
=
1
;
params
->
codecPicParams
.
hevcPicParams
.
seiPayloadArrayCnt
=
sei_count
;
}
break
;
...
...
@@ -2077,8 +2078,9 @@ static int nvenc_send_frame(AVCodecContext *avctx, const AVFrame *frame)
NVENCSTATUS
nv_status
;
NvencSurface
*
tmp_out_surf
,
*
in_surf
;
int
res
,
res2
;
NV_ENC_SEI_PAYLOAD
*
sei_data
=
NULL
;
size_t
sei_size
;
NV_ENC_SEI_PAYLOAD
sei_data
[
8
];
int
sei_count
=
0
;
int
i
;
NvencContext
*
ctx
=
avctx
->
priv_data
;
NvencDynLoadFunctions
*
dl_fn
=
&
ctx
->
nvenc_dload_funcs
;
...
...
@@ -2136,18 +2138,22 @@ static int nvenc_send_frame(AVCodecContext *avctx, const AVFrame *frame)
pic_params
.
inputTimeStamp
=
frame
->
pts
;
if
(
ctx
->
a53_cc
&&
av_frame_get_side_data
(
frame
,
AV_FRAME_DATA_A53_CC
))
{
if
(
ff_alloc_a53_sei
(
frame
,
sizeof
(
NV_ENC_SEI_PAYLOAD
),
(
void
**
)
&
sei_data
,
&
sei_size
)
<
0
)
{
void
*
a53_data
=
NULL
;
size_t
a53_size
=
0
;
if
(
ff_alloc_a53_sei
(
frame
,
0
,
(
void
**
)
&
a53_data
,
&
a53_size
)
<
0
)
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"Not enough memory for closed captions, skipping
\n
"
);
}
if
(
sei_data
)
{
sei_data
->
payloadSize
=
(
uint32_t
)
sei_size
;
sei_data
->
payloadType
=
4
;
sei_data
->
payload
=
(
uint8_t
*
)(
sei_data
+
1
);
if
(
a53_data
)
{
sei_data
[
sei_count
].
payloadSize
=
(
uint32_t
)
a53_size
;
sei_data
[
sei_count
].
payloadType
=
4
;
sei_data
[
sei_count
].
payload
=
(
uint8_t
*
)
a53_data
;
sei_count
++
;
}
}
nvenc_codec_specific_pic_params
(
avctx
,
&
pic_params
,
sei_data
);
nvenc_codec_specific_pic_params
(
avctx
,
&
pic_params
,
sei_data
,
sei_count
);
}
else
{
pic_params
.
encodePicFlags
=
NV_ENC_PIC_FLAG_EOS
;
}
...
...
@@ -2157,7 +2163,9 @@ static int nvenc_send_frame(AVCodecContext *avctx, const AVFrame *frame)
return
res
;
nv_status
=
p_nvenc
->
nvEncEncodePicture
(
ctx
->
nvencoder
,
&
pic_params
);
av_free
(
sei_data
);
for
(
i
=
0
;
i
<
sei_count
;
i
++
)
av_freep
(
&
sei_data
[
i
].
payload
);
res
=
nvenc_pop_context
(
avctx
);
if
(
res
<
0
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录