avutil/frame: make frame copy functions hwframe aware

This commit is contained in:
Timo Rothenpieler 2020-03-20 16:00:16 +01:00
parent b06ae06e6a
commit 77d5ea1c7c
2 changed files with 10 additions and 2 deletions

View File

@ -25,6 +25,7 @@
#include "imgutils.h" #include "imgutils.h"
#include "mem.h" #include "mem.h"
#include "samplefmt.h" #include "samplefmt.h"
#include "hwcontext.h"
#if FF_API_FRAME_GET_SET #if FF_API_FRAME_GET_SET
MAKE_ACCESSORS(AVFrame, frame, int64_t, best_effort_timestamp) MAKE_ACCESSORS(AVFrame, frame, int64_t, best_effort_timestamp)
@ -626,6 +627,10 @@ int av_frame_make_writable(AVFrame *frame)
tmp.channels = frame->channels; tmp.channels = frame->channels;
tmp.channel_layout = frame->channel_layout; tmp.channel_layout = frame->channel_layout;
tmp.nb_samples = frame->nb_samples; tmp.nb_samples = frame->nb_samples;
if (frame->hw_frames_ctx)
ret = av_hwframe_get_buffer(frame->hw_frames_ctx, &tmp, 0);
else
ret = av_frame_get_buffer(&tmp, 32); ret = av_frame_get_buffer(&tmp, 32);
if (ret < 0) if (ret < 0)
return ret; return ret;
@ -752,6 +757,9 @@ static int frame_copy_video(AVFrame *dst, const AVFrame *src)
dst->height < src->height) dst->height < src->height)
return AVERROR(EINVAL); return AVERROR(EINVAL);
if (src->hw_frames_ctx || dst->hw_frames_ctx)
return av_hwframe_transfer_data(dst, src, 0);
planes = av_pix_fmt_count_planes(dst->format); planes = av_pix_fmt_count_planes(dst->format);
for (i = 0; i < planes; i++) for (i = 0; i < planes; i++)
if (!dst->data[i] || !src->data[i]) if (!dst->data[i] || !src->data[i])

View File

@ -80,7 +80,7 @@
#define LIBAVUTIL_VERSION_MAJOR 56 #define LIBAVUTIL_VERSION_MAJOR 56
#define LIBAVUTIL_VERSION_MINOR 42 #define LIBAVUTIL_VERSION_MINOR 42
#define LIBAVUTIL_VERSION_MICRO 101 #define LIBAVUTIL_VERSION_MICRO 102
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
LIBAVUTIL_VERSION_MINOR, \ LIBAVUTIL_VERSION_MINOR, \