Commit 78e871eb authored by Matthieu Bouron's avatar Matthieu Bouron

Merge commit '7e2561fa'

* commit '7e2561fa':
  lavfi: Use ff_get_video_buffer in all filters using hwframes
  vf_hwupload_cuda: Fix build error
Merged-by: 's avatarMatthieu Bouron <matthieu.bouron@gmail.com>
parents b4016ef3 7e2561fa
...@@ -434,13 +434,11 @@ static int process_frame(AVFilterContext *ctx, const AVFrame *in, ...@@ -434,13 +434,11 @@ static int process_frame(AVFilterContext *ctx, const AVFrame *in,
mfxStatus err; mfxStatus err;
int ret, again = 0; int ret, again = 0;
out = av_frame_alloc(); out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
if (!out) if (!out) {
return AVERROR(ENOMEM); ret = AVERROR(ENOMEM);
ret = av_hwframe_get_buffer(s->hw_frames_ctx, out, 0);
if (ret < 0)
goto fail; goto fail;
}
surf_out = (mfxFrameSurface1*)out->data[3]; surf_out = (mfxFrameSurface1*)out->data[3];
surf_out->Info.CropW = outlink->w; surf_out->Info.CropW = outlink->w;
......
...@@ -159,15 +159,10 @@ static int hwupload_filter_frame(AVFilterLink *link, AVFrame *input) ...@@ -159,15 +159,10 @@ static int hwupload_filter_frame(AVFilterLink *link, AVFrame *input)
if (input->format == outlink->format) if (input->format == outlink->format)
return ff_filter_frame(outlink, input); return ff_filter_frame(outlink, input);
output = av_frame_alloc(); output = ff_get_video_buffer(outlink, outlink->w, outlink->h);
if (!output) { if (!output) {
err = AVERROR(ENOMEM);
goto fail;
}
err = av_hwframe_get_buffer(ctx->hwframes_ref, output, 0);
if (err < 0) {
av_log(ctx, AV_LOG_ERROR, "Failed to allocate frame to upload to.\n"); av_log(ctx, AV_LOG_ERROR, "Failed to allocate frame to upload to.\n");
err = AVERROR(ENOMEM);
goto fail; goto fail;
} }
......
...@@ -113,21 +113,17 @@ static int cudaupload_config_output(AVFilterLink *outlink) ...@@ -113,21 +113,17 @@ static int cudaupload_config_output(AVFilterLink *outlink)
static int cudaupload_filter_frame(AVFilterLink *link, AVFrame *in) static int cudaupload_filter_frame(AVFilterLink *link, AVFrame *in)
{ {
AVFilterContext *ctx = link->dst; AVFilterContext *ctx = link->dst;
CudaUploadContext *s = ctx->priv; AVFilterLink *outlink = ctx->outputs[0];
AVFrame *out = NULL; AVFrame *out = NULL;
int ret; int ret;
out = av_frame_alloc(); out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
if (!out) { if (!out) {
ret = AVERROR(ENOMEM); ret = AVERROR(ENOMEM);
goto fail; goto fail;
} }
ret = av_hwframe_get_buffer(s->hwframe, out, 0);
if (ret < 0)
goto fail;
out->width = in->width; out->width = in->width;
out->height = in->height; out->height = in->height;
......
...@@ -530,16 +530,12 @@ static int qsvscale_filter_frame(AVFilterLink *link, AVFrame *in) ...@@ -530,16 +530,12 @@ static int qsvscale_filter_frame(AVFilterLink *link, AVFrame *in)
AVFrame *out = NULL; AVFrame *out = NULL;
int ret = 0; int ret = 0;
out = av_frame_alloc(); out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
if (!out) { if (!out) {
ret = AVERROR(ENOMEM); ret = AVERROR(ENOMEM);
goto fail; goto fail;
} }
ret = av_hwframe_get_buffer(s->out_frames_ref, out, 0);
if (ret < 0)
goto fail;
do { do {
err = MFXVideoVPP_RunFrameVPPAsync(s->session, err = MFXVideoVPP_RunFrameVPPAsync(s->session,
(mfxFrameSurface1*)in->data[3], (mfxFrameSurface1*)in->data[3],
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "formats.h" #include "formats.h"
#include "internal.h" #include "internal.h"
#include "scale.h" #include "scale.h"
#include "video.h"
typedef struct ScaleVAAPIContext { typedef struct ScaleVAAPIContext {
const AVClass *class; const AVClass *class;
...@@ -288,19 +289,13 @@ static int scale_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame) ...@@ -288,19 +289,13 @@ static int scale_vaapi_filter_frame(AVFilterLink *inlink, AVFrame *input_frame)
av_log(ctx, AV_LOG_DEBUG, "Using surface %#x for scale input.\n", av_log(ctx, AV_LOG_DEBUG, "Using surface %#x for scale input.\n",
input_surface); input_surface);
output_frame = av_frame_alloc(); output_frame = ff_get_video_buffer(outlink, ctx->output_width,
ctx->output_height);
if (!output_frame) { if (!output_frame) {
av_log(ctx, AV_LOG_ERROR, "Failed to allocate output frame.");
err = AVERROR(ENOMEM); err = AVERROR(ENOMEM);
goto fail; goto fail;
} }
err = av_hwframe_get_buffer(ctx->output_frames_ref, output_frame, 0);
if (err < 0) {
av_log(ctx, AV_LOG_ERROR, "Failed to get surface for "
"output: %d\n.", err);
}
output_surface = (VASurfaceID)(uintptr_t)output_frame->data[3]; output_surface = (VASurfaceID)(uintptr_t)output_frame->data[3];
av_log(ctx, AV_LOG_DEBUG, "Using surface %#x for scale output.\n", av_log(ctx, AV_LOG_DEBUG, "Using surface %#x for scale output.\n",
output_surface); output_surface);
......
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