Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
38392b2a
Commit
38392b2a
authored
May 19, 2016
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
hwcontext_vdpau: implement device creation
parent
1c9e8616
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
82 additions
and
2 deletions
+82
-2
configure
configure
+1
-2
hwcontext_vdpau.c
libavutil/hwcontext_vdpau.c
+81
-0
No files found.
configure
View file @
38392b2a
...
...
@@ -4766,8 +4766,7 @@ enabled vdpau &&
disable vdpau
enabled vdpau
&&
enabled xlib
&&
check_func_headers
"vdpau/vdpau.h vdpau/vdpau_x11.h"
vdp_device_create_x11
-lvdpau
&&
prepend avconv_libs
$(
$ldflags_filter
"-lvdpau"
)
&&
check_lib2
"vdpau/vdpau.h vdpau/vdpau_x11.h"
vdp_device_create_x11
-lvdpau
&&
enable
vdpau_x11
enabled debug
&&
add_cflags
-g
"
$debuglevel
"
&&
add_asflags
-g
"
$debuglevel
"
...
...
libavutil/hwcontext_vdpau.c
View file @
38392b2a
...
...
@@ -16,6 +16,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "config.h"
#include <stdint.h>
#include <string.h>
...
...
@@ -388,6 +390,82 @@ static int vdpau_transfer_data_to(AVHWFramesContext *ctx, AVFrame *dst,
return
0
;
}
#if HAVE_VDPAU_X11
#include <vdpau/vdpau_x11.h>
#include <X11/Xlib.h>
typedef
struct
VDPAUDevicePriv
{
VdpDeviceDestroy
*
device_destroy
;
Display
*
dpy
;
}
VDPAUDevicePriv
;
static
void
vdpau_device_free
(
AVHWDeviceContext
*
ctx
)
{
AVVDPAUDeviceContext
*
hwctx
=
ctx
->
hwctx
;
VDPAUDevicePriv
*
priv
=
ctx
->
user_opaque
;
if
(
priv
->
device_destroy
)
priv
->
device_destroy
(
hwctx
->
device
);
if
(
priv
->
dpy
)
XCloseDisplay
(
priv
->
dpy
);
av_freep
(
&
priv
);
}
static
int
vdpau_device_create
(
AVHWDeviceContext
*
ctx
,
const
char
*
device
,
AVDictionary
*
opts
,
int
flags
)
{
AVVDPAUDeviceContext
*
hwctx
=
ctx
->
hwctx
;
VDPAUDevicePriv
*
priv
;
VdpStatus
err
;
VdpGetInformationString
*
get_information_string
;
const
char
*
display
,
*
vendor
;
priv
=
av_mallocz
(
sizeof
(
*
priv
));
if
(
!
priv
)
return
AVERROR
(
ENOMEM
);
ctx
->
user_opaque
=
priv
;
ctx
->
free
=
vdpau_device_free
;
priv
->
dpy
=
XOpenDisplay
(
device
);
if
(
!
priv
->
dpy
)
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"Cannot open the X11 display %s.
\n
"
,
XDisplayName
(
device
));
return
AVERROR_UNKNOWN
;
}
display
=
XDisplayString
(
priv
->
dpy
);
err
=
vdp_device_create_x11
(
priv
->
dpy
,
XDefaultScreen
(
priv
->
dpy
),
&
hwctx
->
device
,
&
hwctx
->
get_proc_address
);
if
(
err
!=
VDP_STATUS_OK
)
{
av_log
(
ctx
,
AV_LOG_ERROR
,
"VDPAU device creation on X11 display %s failed.
\n
"
,
display
);
return
AVERROR_UNKNOWN
;
}
#define GET_CALLBACK(id, result) \
do { \
void *tmp; \
err = hwctx->get_proc_address(hwctx->device, id, &tmp); \
if (err != VDP_STATUS_OK) { \
av_log(ctx, AV_LOG_ERROR, "Error getting the " #id " callback.\n"); \
return AVERROR_UNKNOWN; \
} \
result = tmp; \
} while (0)
GET_CALLBACK
(
VDP_FUNC_ID_GET_INFORMATION_STRING
,
get_information_string
);
GET_CALLBACK
(
VDP_FUNC_ID_DEVICE_DESTROY
,
priv
->
device_destroy
);
get_information_string
(
&
vendor
);
av_log
(
ctx
,
AV_LOG_VERBOSE
,
"Successfully created a VDPAU device (%s) on "
"X11 display %s
\n
"
,
vendor
,
display
);
return
0
;
}
#endif
const
HWContextType
ff_hwcontext_type_vdpau
=
{
.
type
=
AV_HWDEVICE_TYPE_VDPAU
,
.
name
=
"VDPAU"
,
...
...
@@ -396,6 +474,9 @@ const HWContextType ff_hwcontext_type_vdpau = {
.
device_priv_size
=
sizeof
(
VDPAUDeviceContext
),
.
frames_priv_size
=
sizeof
(
VDPAUFramesContext
),
#if HAVE_VDPAU_X11
.
device_create
=
vdpau_device_create
,
#endif
.
device_init
=
vdpau_device_init
,
.
device_uninit
=
vdpau_device_uninit
,
.
frames_init
=
vdpau_frames_init
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment