avutil/hwcontext_vaapi: return ENOSYS for unsupported operation

av_hwframe_transfer_data try with src_ctx first. If the operation
failed with AVERROR(ENOSYS), it will try again with dst_ctx. Return
AVERROR(EINVAL) makes the second step being skipped.

Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
pull/390/head
Zhao Zhili 1 year ago
parent 2233b51283
commit 1e84d9c5da
  1. 6
      libavutil/hwcontext_vaapi.c

@ -217,7 +217,7 @@ static int vaapi_get_image_format(AVHWDeviceContext *hwdev,
return 0; return 0;
} }
} }
return AVERROR(EINVAL); return AVERROR(ENOSYS);
} }
static int vaapi_frames_get_constraints(AVHWDeviceContext *hwdev, static int vaapi_frames_get_constraints(AVHWDeviceContext *hwdev,
@ -817,7 +817,7 @@ static int vaapi_map_frame(AVHWFramesContext *hwfc,
err = vaapi_get_image_format(hwfc->device_ctx, dst->format, &image_format); err = vaapi_get_image_format(hwfc->device_ctx, dst->format, &image_format);
if (err < 0) { if (err < 0) {
// Requested format is not a valid output format. // Requested format is not a valid output format.
return AVERROR(EINVAL); return err;
} }
map = av_malloc(sizeof(*map)); map = av_malloc(sizeof(*map));
@ -992,7 +992,7 @@ static int vaapi_map_to_memory(AVHWFramesContext *hwfc, AVFrame *dst,
if (dst->format != AV_PIX_FMT_NONE) { if (dst->format != AV_PIX_FMT_NONE) {
err = vaapi_get_image_format(hwfc->device_ctx, dst->format, NULL); err = vaapi_get_image_format(hwfc->device_ctx, dst->format, NULL);
if (err < 0) if (err < 0)
return AVERROR(ENOSYS); return err;
} }
err = vaapi_map_frame(hwfc, dst, src, flags); err = vaapi_map_frame(hwfc, dst, src, flags);

Loading…
Cancel
Save