|
|
@@ -455,6 +455,11 @@ int av_hwframe_get_buffer(AVBufferRef *hwframe_ref, AVFrame *frame, int flags) |
|
|
|
// and map the frame immediately. |
|
|
|
AVFrame *src_frame; |
|
|
|
|
|
|
|
frame->format = ctx->format; |
|
|
|
frame->hw_frames_ctx = av_buffer_ref(hwframe_ref); |
|
|
|
if (!frame->hw_frames_ctx) |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
src_frame = av_frame_alloc(); |
|
|
|
if (!src_frame) |
|
|
|
return AVERROR(ENOMEM); |
|
|
@@ -464,7 +469,8 @@ int av_hwframe_get_buffer(AVBufferRef *hwframe_ref, AVFrame *frame, int flags) |
|
|
|
if (ret < 0) |
|
|
|
return ret; |
|
|
|
|
|
|
|
ret = av_hwframe_map(frame, src_frame, 0); |
|
|
|
ret = av_hwframe_map(frame, src_frame, |
|
|
|
ctx->internal->source_allocation_map_flags); |
|
|
|
if (ret) { |
|
|
|
av_log(ctx, AV_LOG_ERROR, "Failed to map frame into derived " |
|
|
|
"frame context: %d.\n", ret); |
|
|
@@ -816,6 +822,12 @@ int av_hwframe_ctx_create_derived(AVBufferRef **derived_frame_ctx, |
|
|
|
goto fail; |
|
|
|
} |
|
|
|
|
|
|
|
dst->internal->source_allocation_map_flags = |
|
|
|
flags & (AV_HWFRAME_MAP_READ | |
|
|
|
AV_HWFRAME_MAP_WRITE | |
|
|
|
AV_HWFRAME_MAP_OVERWRITE | |
|
|
|
AV_HWFRAME_MAP_DIRECT); |
|
|
|
|
|
|
|
ret = AVERROR(ENOSYS); |
|
|
|
if (src->internal->hw_type->frames_derive_from) |
|
|
|
ret = src->internal->hw_type->frames_derive_from(dst, src, flags); |
|
|
|