summaryrefslogtreecommitdiff
path: root/libavcodec/vdpau_internal.h
diff options
context:
space:
mode:
authorRĂ©mi Denis-Courmont <remi@remlab.net>2014-10-04 16:55:04 +0300
committerAnton Khirnov <anton@khirnov.net>2014-10-05 10:17:02 +0000
commitce083282f0a8b7d63c4047c30b7bac498f9806dd (patch)
tree4e037d8711625aa88c239161f62a907be8890385 /libavcodec/vdpau_internal.h
parentfcc1022611f79c2f3aa2f392a5ce14c74be9c1d7 (diff)
vdpau: common support for managing the VdpDecoder in avcodec
Using the not so new init and uninit callbacks, avcodec can now take care of creating and destroying the VDPAU decoder instance. The application is still responsible for creating the VDPAU device and allocating video surfaces - this is necessary to keep video surfaces on the GPU all the way to the output. But the application will no longer needs to care about any codec-specific aspects. Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diffstat (limited to 'libavcodec/vdpau_internal.h')
-rw-r--r--libavcodec/vdpau_internal.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/libavcodec/vdpau_internal.h b/libavcodec/vdpau_internal.h
index 3f55ee7dc9..94fa9aae89 100644
--- a/libavcodec/vdpau_internal.h
+++ b/libavcodec/vdpau_internal.h
@@ -48,6 +48,34 @@ union AVVDPAUPictureInfo {
#include "vdpau.h"
#endif
+typedef struct VDPAUHWContext {
+ AVVDPAUContext context;
+ VdpDevice device;
+ VdpGetProcAddress *get_proc_address;
+} VDPAUHWContext;
+
+typedef struct VDPAUContext {
+ /**
+ * VDPAU device handle
+ */
+ VdpDevice device;
+
+ /**
+ * VDPAU decoder handle
+ */
+ VdpDecoder decoder;
+
+ /**
+ * VDPAU device driver
+ */
+ VdpGetProcAddress *get_proc_address;
+
+ /**
+ * VDPAU decoder render callback
+ */
+ VdpDecoderRender *render;
+} VDPAUContext;
+
struct vdpau_picture_context {
/**
* VDPAU picture information.
@@ -70,6 +98,10 @@ struct vdpau_picture_context {
VdpBitstreamBuffer *bitstream_buffers;
};
+int ff_vdpau_common_init(AVCodecContext *avctx, VdpDecoderProfile profile,
+ int level);
+int ff_vdpau_common_uninit(AVCodecContext *avctx);
+
int ff_vdpau_common_start_frame(struct vdpau_picture_context *pic,
const uint8_t *buffer, uint32_t size);
int ff_vdpau_common_end_frame(AVCodecContext *avctx, AVFrame *frame,