Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
B1ack1e
FFmpeg
提交
9f7590f4
F
FFmpeg
项目概览
B1ack1e
/
FFmpeg
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
FFmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9f7590f4
编写于
5月 19, 2016
作者:
A
Anton Khirnov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
avconv_vaapi: use the hwcontext device creation API
上级
18c506e9
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
4 addition
and
92 deletion
+4
-92
avconv_vaapi.c
avconv_vaapi.c
+4
-92
未找到文件。
avconv_vaapi.c
浏览文件 @
9f7590f4
...
...
@@ -523,102 +523,14 @@ fail:
static
AVClass
*
vaapi_log
=
&
vaapi_class
;
static
av_cold
void
vaapi_device_uninit
(
AVHWDeviceContext
*
hwdev
)
{
AVVAAPIDeviceContext
*
hwctx
=
hwdev
->
hwctx
;
av_log
(
&
vaapi_log
,
AV_LOG_VERBOSE
,
"Terminating VAAPI connection.
\n
"
);
vaTerminate
(
hwctx
->
display
);
}
av_cold
int
vaapi_device_init
(
const
char
*
device
)
{
AVHWDeviceContext
*
hwdev
;
AVVAAPIDeviceContext
*
hwctx
;
VADisplay
display
;
VAStatus
vas
;
int
major
,
minor
,
err
;
display
=
0
;
#if HAVE_VAAPI_X11
if
(
!
display
)
{
Display
*
x11_display
;
// Try to open the device as an X11 display.
x11_display
=
XOpenDisplay
(
device
);
if
(
!
x11_display
)
{
av_log
(
&
vaapi_log
,
AV_LOG_WARNING
,
"Cannot open X11 display "
"%s.
\n
"
,
XDisplayName
(
device
));
}
else
{
display
=
vaGetDisplay
(
x11_display
);
if
(
!
display
)
{
av_log
(
&
vaapi_log
,
AV_LOG_WARNING
,
"Cannot open a VA display "
"from X11 display %s.
\n
"
,
XDisplayName
(
device
));
XCloseDisplay
(
x11_display
);
}
else
{
av_log
(
&
vaapi_log
,
AV_LOG_VERBOSE
,
"Opened VA display via "
"X11 display %s.
\n
"
,
XDisplayName
(
device
));
}
}
}
#endif
#if HAVE_VAAPI_DRM
if
(
!
display
&&
device
)
{
int
drm_fd
;
// Try to open the device as a DRM path.
drm_fd
=
open
(
device
,
O_RDWR
);
if
(
drm_fd
<
0
)
{
av_log
(
&
vaapi_log
,
AV_LOG_WARNING
,
"Cannot open DRM device %s.
\n
"
,
device
);
}
else
{
display
=
vaGetDisplayDRM
(
drm_fd
);
if
(
!
display
)
{
av_log
(
&
vaapi_log
,
AV_LOG_WARNING
,
"Cannot open a VA display "
"from DRM device %s.
\n
"
,
device
);
close
(
drm_fd
);
}
else
{
av_log
(
&
vaapi_log
,
AV_LOG_VERBOSE
,
"Opened VA display via "
"DRM device %s.
\n
"
,
device
);
}
}
}
#endif
if
(
!
display
)
{
av_log
(
&
vaapi_log
,
AV_LOG_ERROR
,
"No VA display found for "
"device %s.
\n
"
,
device
);
return
AVERROR
(
EINVAL
);
}
vas
=
vaInitialize
(
display
,
&
major
,
&
minor
);
if
(
vas
!=
VA_STATUS_SUCCESS
)
{
av_log
(
&
vaapi_log
,
AV_LOG_ERROR
,
"Failed to initialise VAAPI "
"connection: %d (%s).
\n
"
,
vas
,
vaErrorStr
(
vas
));
return
AVERROR
(
EIO
);
}
av_log
(
&
vaapi_log
,
AV_LOG_VERBOSE
,
"Initialised VAAPI connection: "
"version %d.%d
\n
"
,
major
,
minor
);
hw_device_ctx
=
av_hwdevice_ctx_alloc
(
AV_HWDEVICE_TYPE_VAAPI
);
if
(
!
hw_device_ctx
)
{
av_log
(
&
vaapi_log
,
AV_LOG_ERROR
,
"Failed to create VAAPI "
"hardware context.
\n
"
);
vaTerminate
(
display
);
return
AVERROR
(
ENOMEM
);
}
hwdev
=
(
AVHWDeviceContext
*
)
hw_device_ctx
->
data
;
hwdev
->
free
=
&
vaapi_device_uninit
;
hwctx
=
hwdev
->
hwctx
;
hwctx
->
display
=
display
;
int
err
;
err
=
av_hwdevice_ctx_init
(
hw_device_ctx
);
err
=
av_hwdevice_ctx_create
(
&
hw_device_ctx
,
AV_HWDEVICE_TYPE_VAAPI
,
device
,
NULL
,
0
);
if
(
err
<
0
)
{
av_log
(
&
vaapi_log
,
AV_LOG_ERROR
,
"Failed to initialise VAAPI "
"hardware context: %d
\n
"
,
err
);
av_log
(
&
vaapi_log
,
AV_LOG_ERROR
,
"Failed to create a VAAPI device
\n
"
);
return
err
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录