Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
038a5125
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,发现更多精彩内容 >>
提交
038a5125
编写于
7月 23, 2017
作者:
M
Mark Thompson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
vaapi_h265: Add support for AUD NAL units
Matching the H.264 encoder. (cherry picked from commit
e3e8eab3
)
上级
00179664
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
39 addition
and
0 deletion
+39
-0
libavcodec/vaapi_encode_h265.c
libavcodec/vaapi_encode_h265.c
+39
-0
未找到文件。
libavcodec/vaapi_encode_h265.c
浏览文件 @
038a5125
...
...
@@ -42,6 +42,7 @@ typedef struct VAAPIEncodeH265Context {
int
fixed_qp_p
;
int
fixed_qp_b
;
H265RawAUD
aud
;
H265RawVPS
vps
;
H265RawSPS
sps
;
H265RawPPS
pps
;
...
...
@@ -52,13 +53,16 @@ typedef struct VAAPIEncodeH265Context {
int
slice_nal_unit
;
int
slice_type
;
int
pic_type
;
CodedBitstreamContext
*
cbc
;
CodedBitstreamFragment
current_access_unit
;
int
aud_needed
;
}
VAAPIEncodeH265Context
;
typedef
struct
VAAPIEncodeH265Options
{
int
qp
;
int
aud
;
}
VAAPIEncodeH265Options
;
...
...
@@ -117,6 +121,13 @@ static int vaapi_encode_h265_write_sequence_header(AVCodecContext *avctx,
CodedBitstreamFragment
*
au
=
&
priv
->
current_access_unit
;
int
err
;
if
(
priv
->
aud_needed
)
{
err
=
vaapi_encode_h265_add_nal
(
avctx
,
au
,
&
priv
->
aud
);
if
(
err
<
0
)
goto
fail
;
priv
->
aud_needed
=
0
;
}
err
=
vaapi_encode_h265_add_nal
(
avctx
,
au
,
&
priv
->
vps
);
if
(
err
<
0
)
goto
fail
;
...
...
@@ -145,6 +156,13 @@ static int vaapi_encode_h265_write_slice_header(AVCodecContext *avctx,
CodedBitstreamFragment
*
au
=
&
priv
->
current_access_unit
;
int
err
;
if
(
priv
->
aud_needed
)
{
err
=
vaapi_encode_h265_add_nal
(
avctx
,
au
,
&
priv
->
aud
);
if
(
err
<
0
)
goto
fail
;
priv
->
aud_needed
=
0
;
}
err
=
vaapi_encode_h265_add_nal
(
avctx
,
au
,
&
priv
->
slice
);
if
(
err
<
0
)
goto
fail
;
...
...
@@ -519,6 +537,7 @@ static int vaapi_encode_h265_init_picture_params(AVCodecContext *avctx,
{
VAAPIEncodeContext
*
ctx
=
avctx
->
priv_data
;
VAAPIEncodeH265Context
*
priv
=
ctx
->
priv_data
;
VAAPIEncodeH265Options
*
opt
=
ctx
->
codec_options
;
VAEncPictureParameterBufferHEVC
*
vpic
=
pic
->
codec_picture_params
;
int
i
;
...
...
@@ -529,16 +548,19 @@ static int vaapi_encode_h265_init_picture_params(AVCodecContext *avctx,
priv
->
slice_nal_unit
=
HEVC_NAL_IDR_W_RADL
;
priv
->
slice_type
=
HEVC_SLICE_I
;
priv
->
pic_type
=
0
;
}
else
{
av_assert0
(
pic
->
encode_order
>
priv
->
last_idr_frame
);
if
(
pic
->
type
==
PICTURE_TYPE_I
)
{
priv
->
slice_nal_unit
=
HEVC_NAL_CRA_NUT
;
priv
->
slice_type
=
HEVC_SLICE_I
;
priv
->
pic_type
=
0
;
}
else
if
(
pic
->
type
==
PICTURE_TYPE_P
)
{
av_assert0
(
pic
->
refs
[
0
]);
priv
->
slice_nal_unit
=
HEVC_NAL_TRAIL_R
;
priv
->
slice_type
=
HEVC_SLICE_P
;
priv
->
pic_type
=
1
;
}
else
{
av_assert0
(
pic
->
refs
[
0
]
&&
pic
->
refs
[
1
]);
if
(
pic
->
refs
[
1
]
->
type
==
PICTURE_TYPE_I
)
...
...
@@ -546,10 +568,23 @@ static int vaapi_encode_h265_init_picture_params(AVCodecContext *avctx,
else
priv
->
slice_nal_unit
=
HEVC_NAL_TRAIL_N
;
priv
->
slice_type
=
HEVC_SLICE_B
;
priv
->
pic_type
=
2
;
}
}
priv
->
pic_order_cnt
=
pic
->
display_order
-
priv
->
last_idr_frame
;
if
(
opt
->
aud
)
{
priv
->
aud_needed
=
1
;
priv
->
aud
.
nal_unit_header
=
(
H265RawNALUnitHeader
)
{
.
nal_unit_type
=
HEVC_NAL_AUD
,
.
nuh_layer_id
=
0
,
.
nuh_temporal_id_plus1
=
1
,
};
priv
->
aud
.
pic_type
=
priv
->
pic_type
;
}
else
{
priv
->
aud_needed
=
0
;
}
vpic
->
decoded_curr_pic
=
(
VAPictureHEVC
)
{
.
picture_id
=
pic
->
recon_surface
,
.
pic_order_cnt
=
priv
->
pic_order_cnt
,
...
...
@@ -907,6 +942,10 @@ static av_cold int vaapi_encode_h265_close(AVCodecContext *avctx)
static
const
AVOption
vaapi_encode_h265_options
[]
=
{
{
"qp"
,
"Constant QP (for P-frames; scaled by qfactor/qoffset for I/B)"
,
OFFSET
(
qp
),
AV_OPT_TYPE_INT
,
{
.
i64
=
25
},
0
,
52
,
FLAGS
},
{
"aud"
,
"Include AUD"
,
OFFSET
(
aud
),
AV_OPT_TYPE_INT
,
{
.
i64
=
0
},
0
,
1
,
FLAGS
},
{
NULL
},
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录