diff --git a/src/gallium/auxiliary/driver_trace/tr_video.c b/src/gallium/auxiliary/driver_trace/tr_video.c index 05594bdd2a6..512ec548f82 100644 --- a/src/gallium/auxiliary/driver_trace/tr_video.c +++ b/src/gallium/auxiliary/driver_trace/tr_video.c @@ -202,7 +202,7 @@ trace_video_codec_encode_bitstream(struct pipe_video_codec *_codec, codec->encode_bitstream(codec, source, destination, feedback); } -static void +static int trace_video_codec_process_frame(struct pipe_video_codec *_codec, struct pipe_video_buffer *_source, const struct pipe_vpp_desc *process_properties) @@ -219,6 +219,7 @@ trace_video_codec_process_frame(struct pipe_video_codec *_codec, trace_dump_call_end(); codec->process_frame(codec, source, process_properties); + return 0; } static int diff --git a/src/gallium/drivers/d3d12/d3d12_video_proc.cpp b/src/gallium/drivers/d3d12/d3d12_video_proc.cpp index c16556dea11..b02fbcddde7 100644 --- a/src/gallium/drivers/d3d12/d3d12_video_proc.cpp +++ b/src/gallium/drivers/d3d12/d3d12_video_proc.cpp @@ -185,7 +185,7 @@ d3d12_video_processor_end_frame(struct pipe_video_codec * codec, return 0; } -void +int d3d12_video_processor_process_frame(struct pipe_video_codec *codec, struct pipe_video_buffer *input_texture, const struct pipe_vpp_desc *process_properties) @@ -284,6 +284,7 @@ d3d12_video_processor_process_frame(struct pipe_video_codec *codec, /// Flush work to the GPU and blocking wait until GPU finishes /// pD3D12Proc->m_needsGPUFlush = true; + return 0; } void diff --git a/src/gallium/drivers/d3d12/d3d12_video_proc.h b/src/gallium/drivers/d3d12/d3d12_video_proc.h index 8e2293e7533..dfec438cdfc 100644 --- a/src/gallium/drivers/d3d12/d3d12_video_proc.h +++ b/src/gallium/drivers/d3d12/d3d12_video_proc.h @@ -53,7 +53,7 @@ d3d12_video_processor_begin_frame(struct pipe_video_codec * codec, /** * Perform post-process effect */ -void +int d3d12_video_processor_process_frame(struct pipe_video_codec *codec, struct pipe_video_buffer *input_texture, const struct pipe_vpp_desc *process_properties); diff --git a/src/gallium/drivers/radeonsi/si_vpe.c b/src/gallium/drivers/radeonsi/si_vpe.c index e2b18143360..b5f56682562 100755 --- a/src/gallium/drivers/radeonsi/si_vpe.c +++ b/src/gallium/drivers/radeonsi/si_vpe.c @@ -726,7 +726,7 @@ si_vpe_cs_add_surface_buffer(struct vpe_video_processor *vpeproc, } } -static void +static int si_vpe_processor_process_frame(struct pipe_video_codec *codec, struct pipe_video_buffer *input_texture, const struct pipe_vpp_desc *process_properties) @@ -747,7 +747,7 @@ si_vpe_processor_process_frame(struct pipe_video_codec *codec, src_surfaces = input_texture->get_surfaces(input_texture); if (!src_surfaces || !src_surfaces[0]) { SIVPE_ERR("Get source surface failed\n"); - return; + return 1; } vpeproc->src_surfaces = src_surfaces; @@ -756,12 +756,12 @@ si_vpe_processor_process_frame(struct pipe_video_codec *codec, build_param->num_streams = 1; if (build_param->num_streams > VPE_STREAM_MAX_NUM) { SIVPE_ERR("Can only suppport %d stream(s) now\n", VPE_STREAM_MAX_NUM); - return; + return 1; } if (!build_param->streams) { SIVPE_ERR("Streams structure is not allocated\n"); - return; + return 1; } si_vpe_set_surface_info(vpeproc, @@ -854,7 +854,7 @@ si_vpe_processor_process_frame(struct pipe_video_codec *codec, PIPE_MAP_WRITE | RADEON_MAP_TEMPORARY); if (!vpe_ptr) { SIVPE_ERR("Mapping Embbuf failed\n"); - return; + return 1; } vpeproc->vpe_build_bufs->emb_buf.cpu_va = (uintptr_t)vpe_ptr; vpeproc->vpe_build_bufs->emb_buf.gpu_va = vpeproc->ws->buffer_get_virtual_address(emb_buf->res->buf); @@ -990,12 +990,12 @@ si_vpe_processor_process_frame(struct pipe_video_codec *codec, si_vpe_cs_add_surface_buffer(vpeproc, vpeproc->dst_surfaces, RADEON_USAGE_WRITE); SIVPE_DBG(vpeproc->log_level, "Success\n"); - return; + return 0; fail: vpeproc->ws->buffer_unmap(vpeproc->ws, emb_buf->res->buf); SIVPE_ERR("Failed\n"); - return; + return 1; } static int diff --git a/src/gallium/frontends/va/postproc.c b/src/gallium/frontends/va/postproc.c index e65d2d36bf2..eb6e4aa0256 100644 --- a/src/gallium/frontends/va/postproc.c +++ b/src/gallium/frontends/va/postproc.c @@ -341,7 +341,9 @@ static VAStatus vlVaVidEngineBlit(vlVaDriver *drv, vlVaContext *context, &context->desc.base); context->needs_begin_frame = false; } - context->decoder->process_frame(context->decoder, src, &context->desc.vidproc); + + if (context->decoder->process_frame(context->decoder, src, &context->desc.vidproc)) + return VA_STATUS_ERROR_OPERATION_FAILED; return VA_STATUS_SUCCESS; } diff --git a/src/gallium/include/pipe/p_video_codec.h b/src/gallium/include/pipe/p_video_codec.h index d37a9267b5f..523e899616e 100644 --- a/src/gallium/include/pipe/p_video_codec.h +++ b/src/gallium/include/pipe/p_video_codec.h @@ -98,7 +98,7 @@ struct pipe_video_codec /** * Perform post-process effect */ - void (*process_frame)(struct pipe_video_codec *codec, + int (*process_frame)(struct pipe_video_codec *codec, struct pipe_video_buffer *source, const struct pipe_vpp_desc *process_properties);