mirror of
https://github.com/nyanmisaka/ffmpeg-rockchip.git
synced 2025-10-07 09:41:32 +08:00
hwcontext: Improve allocation in derived contexts
Use the flags argument of av_hwframe_ctx_create_derived() to pass the mapping flags which will be used on allocation. Also, set the format and hardware context on the allocated frame automatically - the user should not be required to do this themselves.
This commit is contained in:
@@ -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);
|
||||
|
Reference in New Issue
Block a user