Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
772c87c5
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,发现更多精彩内容 >>
提交
772c87c5
编写于
8月 05, 2015
作者:
A
Anton Khirnov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
qsvenc: support passing arbitrary external buffers to the encoder
上级
68e00ad6
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
34 addition
and
5 deletion
+34
-5
libavcodec/qsvenc.c
libavcodec/qsvenc.c
+32
-4
libavcodec/qsvenc.h
libavcodec/qsvenc.h
+2
-1
未找到文件。
libavcodec/qsvenc.c
浏览文件 @
772c87c5
...
...
@@ -134,10 +134,7 @@ static int init_video_param(AVCodecContext *avctx, QSVEncContext *q)
q
->
extco
.
CAVLC
=
avctx
->
coder_type
==
FF_CODER_TYPE_VLC
?
MFX_CODINGOPTION_ON
:
MFX_CODINGOPTION_UNKNOWN
;
q
->
extparam
[
0
]
=
(
mfxExtBuffer
*
)
&
q
->
extco
;
q
->
param
.
ExtParam
=
q
->
extparam
;
q
->
param
.
NumExtParam
=
FF_ARRAY_ELEMS
(
q
->
extparam
);
q
->
extparam_internal
[
0
]
=
(
mfxExtBuffer
*
)
&
q
->
extco
;
}
return
0
;
...
...
@@ -228,6 +225,35 @@ int ff_qsv_enc_init(AVCodecContext *avctx, QSVEncContext *q)
return
ff_qsv_error
(
ret
);
}
if
(
avctx
->
hwaccel_context
)
{
AVQSVContext
*
qsv
=
avctx
->
hwaccel_context
;
int
i
,
j
;
q
->
extparam
=
av_mallocz_array
(
qsv
->
nb_ext_buffers
+
FF_ARRAY_ELEMS
(
q
->
extparam_internal
),
sizeof
(
*
q
->
extparam
));
if
(
!
q
->
extparam
)
return
AVERROR
(
ENOMEM
);
q
->
param
.
ExtParam
=
q
->
extparam
;
for
(
i
=
0
;
i
<
qsv
->
nb_ext_buffers
;
i
++
)
q
->
param
.
ExtParam
[
i
]
=
qsv
->
ext_buffers
[
i
];
q
->
param
.
NumExtParam
=
qsv
->
nb_ext_buffers
;
for
(
i
=
0
;
i
<
FF_ARRAY_ELEMS
(
q
->
extparam_internal
);
i
++
)
{
for
(
j
=
0
;
j
<
qsv
->
nb_ext_buffers
;
j
++
)
{
if
(
qsv
->
ext_buffers
[
j
]
->
BufferId
==
q
->
extparam_internal
[
i
]
->
BufferId
)
break
;
}
if
(
j
<
qsv
->
nb_ext_buffers
)
continue
;
q
->
param
.
ExtParam
[
q
->
param
.
NumExtParam
++
]
=
q
->
extparam_internal
[
i
];
}
}
else
{
q
->
param
.
ExtParam
=
q
->
extparam_internal
;
q
->
param
.
NumExtParam
=
FF_ARRAY_ELEMS
(
q
->
extparam_internal
);
}
ret
=
MFXVideoENCODE_Init
(
q
->
session
,
&
q
->
param
);
if
(
ret
<
0
)
{
av_log
(
avctx
,
AV_LOG_ERROR
,
"Error initializing the encoder
\n
"
);
...
...
@@ -512,5 +538,7 @@ int ff_qsv_enc_close(AVCodecContext *avctx, QSVEncContext *q)
av_fifo_free
(
q
->
async_fifo
);
q
->
async_fifo
=
NULL
;
av_freep
(
&
q
->
extparam
);
return
0
;
}
libavcodec/qsvenc.h
浏览文件 @
772c87c5
...
...
@@ -49,7 +49,8 @@ typedef struct QSVEncContext {
mfxFrameAllocRequest
req
;
mfxExtCodingOption
extco
;
mfxExtBuffer
*
extparam
[
1
];
mfxExtBuffer
*
extparam_internal
[
1
];
mfxExtBuffer
**
extparam
;
AVFifoBuffer
*
async_fifo
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录