Skip to content

Commit

Permalink
add gpu accelarate copy interface
Browse files Browse the repository at this point in the history
Author:Dmitry Rogozhkin <[email protected]>
Author:XinfengZhang <[email protected]>

Signed-off-by: XinfengZhang <[email protected]>
  • Loading branch information
XinfengZhang committed Feb 25, 2020
1 parent 8e467a6 commit 6fcb471
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 1 deletion.
38 changes: 38 additions & 0 deletions va/va.c
Original file line number Diff line number Diff line change
Expand Up @@ -2247,3 +2247,41 @@ vaQueryVideoProcPipelineCaps(
VA_TRACE_RET(dpy, status);
return status;
}

VAStatus
vaCopy(
VADisplay dpy,
VACopyObject *src,
VACopyObject *dst,
uint32_t flags,
uintptr_t* sync_handle
)
{
VAStatus va_status;
VADriverContextP ctx;
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);

if(ctx->vtable->vaCopy == NULL)
va_status = VA_STATUS_ERROR_UNIMPLEMENTED;
else
va_status = ctx->vtable->vaCopy( ctx, src, dst, flags, sync_handle);
return va_status;
}

VAStatus
vaHWAccelCopyWait(
VADisplay dpy,
uintptr_t sync_handle
)
{
VAStatus va_status;
VADriverContextP ctx;
CHECK_DISPLAY(dpy);
ctx = CTX(dpy);
if(ctx->vtable->vaCopyWait == NULL)
va_status = VA_STATUS_ERROR_UNIMPLEMENTED;
else
va_status = ctx->vtable->vaCopyWait( ctx, sync_handle);
return va_status;
}
40 changes: 40 additions & 0 deletions va/va.h
Original file line number Diff line number Diff line change
Expand Up @@ -4620,6 +4620,46 @@ typedef struct _VAPictureHEVC
*/
#define VA_PICTURE_HEVC_RPS_LT_CURR 0x00000040

typedef enum{
VACopyObjectSurface = 0,
VACopyObjectBuffer = 1,
VACopyObjectUserPTR = 2
} VACopyObjectType;

typedef struct _VACopyObject {
VACopyObjectType obj_type; // type of object.
union
{
VASurfaceID surface_id;
VABufferID buffer_id;
uint8_t * userptr; // pointer to system memory
} object;

uint32_t size; // for userptr, it should be same with surface/buffer size
uint32_t width_stride; // for user ptr only,
uint32_t height_stride; // for user ptr only
uint32_t va_reserved[VA_PADDING_LOW];
} VACopyObject;

#define VA_COPY_BLOCK 0x00000001
#define VA_COPY_NONBLOCK 0x00000002

/** \brief Copies an object.
*
* Copies specified object (surface or buffer). If non-blocking copy
* is requested (VA_COPY_NONBLOCK), sync_handle will contain a handle
* to pass to vaCopyWait to wait for completion.
*
* @param[in] dpy the VA display
* @param[in] src Source object to copy from
* @param[in,out] buf_info Destination object to copy to
* @param[out] sync_handle Synchronization handle to sync on
* @return VA_STATUS_SUCCESS if successful
*/
VAStatus vaCopy(VADisplay dpy, VACopyObject * src, VACopyObject * dst, uint32_t flags, uintptr_t* sync_handle);

VAStatus vaCopyWait(VADisplay dpy, uintptr_t sync_handle);

#include <va/va_dec_hevc.h>
#include <va/va_dec_jpeg.h>
#include <va/va_dec_vp8.h>
Expand Down
16 changes: 15 additions & 1 deletion va/va_backend.h
Original file line number Diff line number Diff line change
Expand Up @@ -484,9 +484,23 @@ struct VADriverVTable
uint32_t flags, /* in */
void *descriptor /* out */
);
VAStatus
(*vaCopy)(
VADriverContextP ctx, /* in */
VACopyObject *src, /* in */
VACopyObject *dst, /* in */
uint32_t flags, /* in */
uintptr_t* sync_handle /* out */
);

VAStatus
(*vaCopyWait)(
VADriverContextP ctx, /* in */
uintptr_t sync_handle /* in */
);

/** \brief Reserved bytes for future use, must be zero */
unsigned long reserved[57];
unsigned long reserved[55];
};

struct VADriverContext
Expand Down

0 comments on commit 6fcb471

Please sign in to comment.