Commit 0f9ce9c5 authored by Hendrik Leppkes's avatar Hendrik Leppkes

Merge commit '5a1d605c'

* commit '5a1d605c':
  hwcontext_dxva2: split transfer_data() into upload/download functions
Merged-by: 's avatarHendrik Leppkes <h.leppkes@gmail.com>
parents fbfa7291 5a1d605c
...@@ -325,12 +325,34 @@ fail: ...@@ -325,12 +325,34 @@ fail:
return err; return err;
} }
static int dxva2_transfer_data(AVHWFramesContext *ctx, AVFrame *dst, static int dxva2_transfer_data_to(AVHWFramesContext *ctx, AVFrame *dst,
const AVFrame *src) const AVFrame *src)
{ {
int download = !!src->hw_frames_ctx; AVFrame *map;
int ret;
map = av_frame_alloc();
if (!map)
return AVERROR(ENOMEM);
map->format = dst->format;
ret = dxva2_map_frame(ctx, map, dst, AV_HWFRAME_MAP_WRITE | AV_HWFRAME_MAP_OVERWRITE);
if (ret < 0)
goto fail;
av_image_copy(map->data, map->linesize, src->data, src->linesize,
ctx->sw_format, src->width, src->height);
fail:
av_frame_free(&map);
return ret;
}
static int dxva2_transfer_data_from(AVHWFramesContext *ctx, AVFrame *dst,
const AVFrame *src)
{
AVFrame *map; AVFrame *map;
ptrdiff_t src_linesize[4], dst_linesize[4];
int ret, i; int ret, i;
map = av_frame_alloc(); map = av_frame_alloc();
...@@ -338,25 +360,16 @@ static int dxva2_transfer_data(AVHWFramesContext *ctx, AVFrame *dst, ...@@ -338,25 +360,16 @@ static int dxva2_transfer_data(AVHWFramesContext *ctx, AVFrame *dst,
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
map->format = dst->format; map->format = dst->format;
ret = dxva2_map_frame(ctx, map, download ? src : dst, ret = dxva2_map_frame(ctx, map, src, AV_HWFRAME_MAP_READ);
download ? AV_HWFRAME_MAP_READ :
AV_HWFRAME_MAP_WRITE | AV_HWFRAME_MAP_OVERWRITE);
if (ret < 0) if (ret < 0)
goto fail; goto fail;
if (download) { for (i = 0; i < 4; i++) {
ptrdiff_t src_linesize[4], dst_linesize[4]; dst_linesize[i] = dst->linesize[i];
for (i = 0; i < 4; i++) { src_linesize[i] = map->linesize[i];
dst_linesize[i] = dst->linesize[i];
src_linesize[i] = map->linesize[i];
}
av_image_copy_uc_from(dst->data, dst_linesize, map->data, src_linesize,
ctx->sw_format, src->width, src->height);
} else {
av_image_copy(map->data, map->linesize, src->data, src->linesize,
ctx->sw_format, src->width, src->height);
} }
av_image_copy_uc_from(dst->data, dst_linesize, map->data, src_linesize,
ctx->sw_format, src->width, src->height);
fail: fail:
av_frame_free(&map); av_frame_free(&map);
return ret; return ret;
...@@ -557,8 +570,8 @@ const HWContextType ff_hwcontext_type_dxva2 = { ...@@ -557,8 +570,8 @@ const HWContextType ff_hwcontext_type_dxva2 = {
.frames_uninit = dxva2_frames_uninit, .frames_uninit = dxva2_frames_uninit,
.frames_get_buffer = dxva2_get_buffer, .frames_get_buffer = dxva2_get_buffer,
.transfer_get_formats = dxva2_transfer_get_formats, .transfer_get_formats = dxva2_transfer_get_formats,
.transfer_data_to = dxva2_transfer_data, .transfer_data_to = dxva2_transfer_data_to,
.transfer_data_from = dxva2_transfer_data, .transfer_data_from = dxva2_transfer_data_from,
.map_from = dxva2_map_from, .map_from = dxva2_map_from,
.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_DXVA2_VLD, AV_PIX_FMT_NONE }, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_DXVA2_VLD, AV_PIX_FMT_NONE },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment