From db45d16dfefe6260a71138b44be4bcb6f3aa654b Mon Sep 17 00:00:00 2001 From: David Rosca Date: Thu, 22 Aug 2024 14:45:11 +0200 Subject: [PATCH] pipe: Add int return value to video end_frame Make it possible to report errors to frontend. Reviewed-By: Sil Vilerino Part-of: --- src/gallium/auxiliary/driver_trace/tr_video.c | 3 ++- src/gallium/auxiliary/vl/vl_mpeg12_decoder.c | 3 ++- src/gallium/drivers/d3d12/d3d12_video_dec.cpp | 7 ++++--- src/gallium/drivers/d3d12/d3d12_video_dec.h | 2 +- src/gallium/drivers/d3d12/d3d12_video_enc.cpp | 5 +++-- src/gallium/drivers/d3d12/d3d12_video_enc.h | 2 +- src/gallium/drivers/d3d12/d3d12_video_proc.cpp | 3 ++- src/gallium/drivers/d3d12/d3d12_video_proc.h | 2 +- src/gallium/drivers/nouveau/nouveau_video.c | 3 ++- src/gallium/drivers/nouveau/nouveau_vp3_video.c | 3 ++- src/gallium/drivers/nouveau/nv50/nv84_video.c | 6 ++++-- src/gallium/drivers/nouveau/nvc0/nvc0_video.c | 3 ++- src/gallium/drivers/r600/radeon_uvd.c | 7 ++++--- src/gallium/drivers/r600/radeon_vce.c | 3 ++- src/gallium/drivers/radeonsi/radeon_uvd.c | 7 ++++--- src/gallium/drivers/radeonsi/radeon_uvd_enc.c | 8 ++++---- src/gallium/drivers/radeonsi/radeon_vce.c | 5 +++-- src/gallium/drivers/radeonsi/radeon_vcn_dec.c | 14 ++++++++------ src/gallium/drivers/radeonsi/radeon_vcn_enc.c | 10 +++++----- src/gallium/drivers/radeonsi/si_vpe.c | 3 ++- src/gallium/drivers/virgl/virgl_video.c | 7 ++++--- src/gallium/include/pipe/p_video_codec.h | 7 ++++--- 22 files changed, 66 insertions(+), 47 deletions(-) diff --git a/src/gallium/auxiliary/driver_trace/tr_video.c b/src/gallium/auxiliary/driver_trace/tr_video.c index ba36a98c885..f7dd9ff87ad 100644 --- a/src/gallium/auxiliary/driver_trace/tr_video.c +++ b/src/gallium/auxiliary/driver_trace/tr_video.c @@ -221,7 +221,7 @@ trace_video_codec_process_frame(struct pipe_video_codec *_codec, codec->process_frame(codec, source, process_properties); } -static void +static int trace_video_codec_end_frame(struct pipe_video_codec *_codec, struct pipe_video_buffer *_target, struct pipe_picture_desc *picture) @@ -241,6 +241,7 @@ trace_video_codec_end_frame(struct pipe_video_codec *_codec, codec->end_frame(codec, target, picture); if (copied) FREE(picture); + return 0; } static void diff --git a/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c b/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c index 32945f7ddb4..96adb105096 100644 --- a/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c +++ b/src/gallium/auxiliary/vl/vl_mpeg12_decoder.c @@ -746,7 +746,7 @@ vl_mpeg12_decode_bitstream(struct pipe_video_codec *decoder, vl_mpg12_bs_decode(&buf->bs, target, desc, num_buffers, buffers, sizes); } -static void +static int vl_mpeg12_end_frame(struct pipe_video_codec *decoder, struct pipe_video_buffer *target, struct pipe_picture_desc *picture) @@ -843,6 +843,7 @@ vl_mpeg12_end_frame(struct pipe_video_codec *decoder, dec->context->flush(dec->context, NULL, 0); ++dec->current_buffer; dec->current_buffer %= 4; + return 0; } static void diff --git a/src/gallium/drivers/d3d12/d3d12_video_dec.cpp b/src/gallium/drivers/d3d12/d3d12_video_dec.cpp index fb28a9d950f..fa5be8872bc 100644 --- a/src/gallium/drivers/d3d12/d3d12_video_dec.cpp +++ b/src/gallium/drivers/d3d12/d3d12_video_dec.cpp @@ -396,7 +396,7 @@ d3d12_video_decoder_store_upper_layer_references(struct d3d12_video_decoder *pD3 /** * end decoding of the current frame */ -void +int d3d12_video_decoder_end_frame(struct pipe_video_codec *codec, struct pipe_video_buffer *target, struct pipe_picture_desc *picture) @@ -449,7 +449,7 @@ d3d12_video_decoder_end_frame(struct pipe_video_codec *codec, debug_printf("[d3d12_video_decoder] d3d12_video_decoder_end_frame failed for fenceValue: %d\n", pD3D12Dec->m_fenceValue); assert(false); - return; + return 1; } } @@ -545,7 +545,7 @@ d3d12_video_decoder_end_frame(struct pipe_video_codec *codec, debug_printf("[d3d12_video_decoder] d3d12_video_decoder_end_frame failed for fenceValue: %d\n", pD3D12Dec->m_fenceValue); assert(false); - return; + return 1; } /// @@ -728,6 +728,7 @@ d3d12_video_decoder_end_frame(struct pipe_video_codec *codec, // The output surface fence is the graphics queue that will signal after the copy ends pD3D12Dec->base.context->flush(pD3D12Dec->base.context, picture->fence, PIPE_FLUSH_ASYNC | PIPE_FLUSH_HINT_FINISH); } + return 0; } /** diff --git a/src/gallium/drivers/d3d12/d3d12_video_dec.h b/src/gallium/drivers/d3d12/d3d12_video_dec.h index cf8bab50f36..f5145ae0aa6 100644 --- a/src/gallium/drivers/d3d12/d3d12_video_dec.h +++ b/src/gallium/drivers/d3d12/d3d12_video_dec.h @@ -65,7 +65,7 @@ d3d12_video_decoder_decode_bitstream(struct pipe_video_codec * codec, /** * end decoding of the current frame */ -void +int d3d12_video_decoder_end_frame(struct pipe_video_codec * codec, struct pipe_video_buffer *target, struct pipe_picture_desc *picture); diff --git a/src/gallium/drivers/d3d12/d3d12_video_enc.cpp b/src/gallium/drivers/d3d12/d3d12_video_enc.cpp index 279966822c1..fd3201b3939 100644 --- a/src/gallium/drivers/d3d12/d3d12_video_enc.cpp +++ b/src/gallium/drivers/d3d12/d3d12_video_enc.cpp @@ -2579,7 +2579,7 @@ d3d12_video_encoder_extract_encode_metadata( /** * end encoding of the current frame */ -void +int d3d12_video_encoder_end_frame(struct pipe_video_codec * codec, struct pipe_video_buffer *target, struct pipe_picture_desc *picture) @@ -2592,7 +2592,7 @@ d3d12_video_encoder_end_frame(struct pipe_video_codec * codec, if (pD3D12Enc->m_inflightResourcesPool[d3d12_video_encoder_pool_current_index(pD3D12Enc)].encode_result != PIPE_VIDEO_FEEDBACK_METADATA_ENCODE_FLAG_OK) { debug_printf("WARNING: [d3d12_video_encoder] d3d12_video_encoder_end_frame - Frame submission %" PRIu64 " failed. Encoder lost, please recreate pipe_video_codec object\n", pD3D12Enc->m_fenceValue); assert(false); - return; + return 1; } // Signal finish of current frame encoding to the picture management tracker @@ -2608,6 +2608,7 @@ d3d12_video_encoder_end_frame(struct pipe_video_codec * codec, pD3D12Enc->m_fenceValue); pD3D12Enc->m_bPendingWorkNotFlushed = true; + return 0; } void diff --git a/src/gallium/drivers/d3d12/d3d12_video_enc.h b/src/gallium/drivers/d3d12/d3d12_video_enc.h index 6b692f92e5f..59ea3244a98 100644 --- a/src/gallium/drivers/d3d12/d3d12_video_enc.h +++ b/src/gallium/drivers/d3d12/d3d12_video_enc.h @@ -82,7 +82,7 @@ d3d12_video_encoder_get_feedback(struct pipe_video_codec *codec, /** * end encoding of the current frame */ -void +int d3d12_video_encoder_end_frame(struct pipe_video_codec * codec, struct pipe_video_buffer *target, struct pipe_picture_desc *picture); diff --git a/src/gallium/drivers/d3d12/d3d12_video_proc.cpp b/src/gallium/drivers/d3d12/d3d12_video_proc.cpp index 3fe8aecbf12..5f2260849f7 100644 --- a/src/gallium/drivers/d3d12/d3d12_video_proc.cpp +++ b/src/gallium/drivers/d3d12/d3d12_video_proc.cpp @@ -86,7 +86,7 @@ d3d12_video_processor_begin_frame(struct pipe_video_codec * codec, debug_printf("d3d12_video_processor_begin_frame: Beginning new scene with Output ID3D12Resource: %p (%d %d)\n", pDstD3D12Res, (int) dstDesc.Width, (int) dstDesc.Height); } -void +int d3d12_video_processor_end_frame(struct pipe_video_codec * codec, struct pipe_video_buffer *target, struct pipe_picture_desc *picture) @@ -182,6 +182,7 @@ d3d12_video_processor_end_frame(struct pipe_video_codec * codec, pD3D12Proc->m_PendingFences[d3d12_video_processor_pool_current_index(pD3D12Proc)].value = pD3D12Proc->m_fenceValue; pD3D12Proc->m_PendingFences[d3d12_video_processor_pool_current_index(pD3D12Proc)].cmdqueue_fence = pD3D12Proc->m_spFence.Get(); *picture->fence = (pipe_fence_handle*) &pD3D12Proc->m_PendingFences[d3d12_video_processor_pool_current_index(pD3D12Proc)]; + return 0; } void diff --git a/src/gallium/drivers/d3d12/d3d12_video_proc.h b/src/gallium/drivers/d3d12/d3d12_video_proc.h index 5631a71982e..294d65fd11d 100644 --- a/src/gallium/drivers/d3d12/d3d12_video_proc.h +++ b/src/gallium/drivers/d3d12/d3d12_video_proc.h @@ -60,7 +60,7 @@ d3d12_video_processor_process_frame(struct pipe_video_codec *codec, /** * end processing of the current frame */ -void +int d3d12_video_processor_end_frame(struct pipe_video_codec * codec, struct pipe_video_buffer *target, struct pipe_picture_desc *picture); diff --git a/src/gallium/drivers/nouveau/nouveau_video.c b/src/gallium/drivers/nouveau/nouveau_video.c index 88ec0a55073..a7de4bf0bcd 100644 --- a/src/gallium/drivers/nouveau/nouveau_video.c +++ b/src/gallium/drivers/nouveau/nouveau_video.c @@ -454,11 +454,12 @@ nouveau_decoder_decode_macroblock(struct pipe_video_codec *decoder, } } -static void +static int nouveau_decoder_end_frame(struct pipe_video_codec *decoder, struct pipe_video_buffer *target, struct pipe_picture_desc *picture) { + return 0; } static void diff --git a/src/gallium/drivers/nouveau/nouveau_vp3_video.c b/src/gallium/drivers/nouveau/nouveau_vp3_video.c index 19965c762df..5da65ce22dc 100644 --- a/src/gallium/drivers/nouveau/nouveau_vp3_video.c +++ b/src/gallium/drivers/nouveau/nouveau_vp3_video.c @@ -198,11 +198,12 @@ nouveau_vp3_decoder_begin_frame(struct pipe_video_codec *decoder, { } -static void +static int nouveau_vp3_decoder_end_frame(struct pipe_video_codec *decoder, struct pipe_video_buffer *target, struct pipe_picture_desc *picture) { + return 0; } static void diff --git a/src/gallium/drivers/nouveau/nv50/nv84_video.c b/src/gallium/drivers/nouveau/nv50/nv84_video.c index 9d79200617a..04bee83e01d 100644 --- a/src/gallium/drivers/nouveau/nv50/nv84_video.c +++ b/src/gallium/drivers/nouveau/nv50/nv84_video.c @@ -152,11 +152,12 @@ nv84_decoder_begin_frame_h264(struct pipe_video_codec *decoder, { } -static void +static int nv84_decoder_end_frame_h264(struct pipe_video_codec *decoder, struct pipe_video_buffer *target, struct pipe_picture_desc *picture) { + return 0; } static void @@ -203,7 +204,7 @@ nv84_decoder_begin_frame_mpeg12(struct pipe_video_codec *decoder, } } -static void +static int nv84_decoder_end_frame_mpeg12(struct pipe_video_codec *decoder, struct pipe_video_buffer *target, struct pipe_picture_desc *picture) @@ -212,6 +213,7 @@ nv84_decoder_end_frame_mpeg12(struct pipe_video_codec *decoder, (struct nv84_decoder *)decoder, (struct pipe_mpeg12_picture_desc *)picture, (struct nv84_video_buffer *)target); + return 0; } static void diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_video.c b/src/gallium/drivers/nouveau/nvc0/nvc0_video.c index 905544ee9ed..4de4625fdea 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_video.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_video.c @@ -62,7 +62,7 @@ nvc0_decoder_decode_bitstream(struct pipe_video_codec *decoder, assert(ret == 2); } -static void +static int nvc0_decoder_end_frame(struct pipe_video_codec *decoder, struct pipe_video_buffer *video_target, struct pipe_picture_desc *picture) @@ -85,6 +85,7 @@ nvc0_decoder_end_frame(struct pipe_video_codec *decoder, nvc0_decoder_vp(dec, desc, target, comm_seq, vp_caps, is_ref, refs); nvc0_decoder_ppp(dec, desc, target, comm_seq); + return 0; } struct pipe_video_codec * diff --git a/src/gallium/drivers/r600/radeon_uvd.c b/src/gallium/drivers/r600/radeon_uvd.c index c185e7905a0..7ea1a22aa8b 100644 --- a/src/gallium/drivers/r600/radeon_uvd.c +++ b/src/gallium/drivers/r600/radeon_uvd.c @@ -897,7 +897,7 @@ static void ruvd_decode_bitstream(struct pipe_video_codec *decoder, /** * end decoding of the current frame */ -static void ruvd_end_frame(struct pipe_video_codec *decoder, +static int ruvd_end_frame(struct pipe_video_codec *decoder, struct pipe_video_buffer *target, struct pipe_picture_desc *picture) { @@ -909,7 +909,7 @@ static void ruvd_end_frame(struct pipe_video_codec *decoder, assert(decoder); if (!dec->bs_ptr) - return; + return 1; msg_fb_it_buf = &dec->msg_fb_it_buffers[dec->cur_buffer]; bs_buf = &dec->bs_buffers[dec->cur_buffer]; @@ -965,7 +965,7 @@ static void ruvd_end_frame(struct pipe_video_codec *decoder, default: assert(0); - return; + return 1; } dec->msg->body.decode.db_surf_tile_config = dec->msg->body.decode.dt_surf_tile_config; @@ -996,6 +996,7 @@ static void ruvd_end_frame(struct pipe_video_codec *decoder, flush(dec, PIPE_FLUSH_ASYNC, picture->fence); next_buffer(dec); + return 0; } /** diff --git a/src/gallium/drivers/r600/radeon_vce.c b/src/gallium/drivers/r600/radeon_vce.c index 794a539e6ea..0d1b538ebca 100644 --- a/src/gallium/drivers/r600/radeon_vce.c +++ b/src/gallium/drivers/r600/radeon_vce.c @@ -303,7 +303,7 @@ static void rvce_encode_bitstream(struct pipe_video_codec *encoder, enc->feedback(enc); } -static void rvce_end_frame(struct pipe_video_codec *encoder, +static int rvce_end_frame(struct pipe_video_codec *encoder, struct pipe_video_buffer *source, struct pipe_picture_desc *picture) { @@ -323,6 +323,7 @@ static void rvce_end_frame(struct pipe_video_codec *encoder, list_del(&slot->list); list_add(&slot->list, &enc->cpb_slots); } + return 0; } static void rvce_get_feedback(struct pipe_video_codec *encoder, diff --git a/src/gallium/drivers/radeonsi/radeon_uvd.c b/src/gallium/drivers/radeonsi/radeon_uvd.c index 459de7b4bf5..087963686e9 100644 --- a/src/gallium/drivers/radeonsi/radeon_uvd.c +++ b/src/gallium/drivers/radeonsi/radeon_uvd.c @@ -1073,7 +1073,7 @@ static void ruvd_decode_bitstream(struct pipe_video_codec *decoder, /** * end decoding of the current frame */ -static void ruvd_end_frame(struct pipe_video_codec *decoder, struct pipe_video_buffer *target, +static int ruvd_end_frame(struct pipe_video_codec *decoder, struct pipe_video_buffer *target, struct pipe_picture_desc *picture) { struct ruvd_decoder *dec = (struct ruvd_decoder *)decoder; @@ -1084,7 +1084,7 @@ static void ruvd_end_frame(struct pipe_video_codec *decoder, struct pipe_video_b assert(decoder); if (!dec->bs_ptr) - return; + return 1; msg_fb_it_buf = &dec->msg_fb_it_buffers[dec->cur_buffer]; bs_buf = &dec->bs_buffers[dec->cur_buffer]; @@ -1169,7 +1169,7 @@ static void ruvd_end_frame(struct pipe_video_codec *decoder, struct pipe_video_b default: assert(0); - return; + return 1; } dec->msg->body.decode.db_surf_tile_config = dec->msg->body.decode.dt_surf_tile_config; @@ -1199,6 +1199,7 @@ static void ruvd_end_frame(struct pipe_video_codec *decoder, struct pipe_video_b flush(dec, picture->flush_flags, picture->fence); next_buffer(dec); + return 0; } /** diff --git a/src/gallium/drivers/radeonsi/radeon_uvd_enc.c b/src/gallium/drivers/radeonsi/radeon_uvd_enc.c index 93be78f46a6..bb0a2a93d06 100644 --- a/src/gallium/drivers/radeonsi/radeon_uvd_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_uvd_enc.c @@ -114,9 +114,9 @@ static void radeon_uvd_enc_get_param(struct radeon_uvd_encoder *enc, radeon_uvd_enc_get_vui_param(enc, pic); } -static void flush(struct radeon_uvd_encoder *enc, unsigned flags) +static int flush(struct radeon_uvd_encoder *enc, unsigned flags) { - enc->ws->cs_flush(&enc->cs, flags, NULL); + return enc->ws->cs_flush(&enc->cs, flags, NULL); } static void radeon_uvd_enc_flush(struct pipe_video_codec *encoder) @@ -225,12 +225,12 @@ static void radeon_uvd_enc_encode_bitstream(struct pipe_video_codec *encoder, enc->encode(enc); } -static void radeon_uvd_enc_end_frame(struct pipe_video_codec *encoder, +static int radeon_uvd_enc_end_frame(struct pipe_video_codec *encoder, struct pipe_video_buffer *source, struct pipe_picture_desc *picture) { struct radeon_uvd_encoder *enc = (struct radeon_uvd_encoder *)encoder; - flush(enc, picture->flush_flags); + return flush(enc, picture->flush_flags); } static void radeon_uvd_enc_destroy(struct pipe_video_codec *encoder) diff --git a/src/gallium/drivers/radeonsi/radeon_vce.c b/src/gallium/drivers/radeonsi/radeon_vce.c index 2e5770964d9..7b24db3b6be 100644 --- a/src/gallium/drivers/radeonsi/radeon_vce.c +++ b/src/gallium/drivers/radeonsi/radeon_vce.c @@ -303,8 +303,8 @@ static void rvce_encode_bitstream(struct pipe_video_codec *encoder, enc->feedback(enc); } -static void rvce_end_frame(struct pipe_video_codec *encoder, struct pipe_video_buffer *source, - struct pipe_picture_desc *picture) +static int rvce_end_frame(struct pipe_video_codec *encoder, struct pipe_video_buffer *source, + struct pipe_picture_desc *picture) { struct rvce_encoder *enc = (struct rvce_encoder *)encoder; struct rvce_cpb_slot *slot = list_entry(enc->cpb_slots.prev, struct rvce_cpb_slot, list); @@ -320,6 +320,7 @@ static void rvce_end_frame(struct pipe_video_codec *encoder, struct pipe_video_b list_del(&slot->list); list_add(&slot->list, &enc->cpb_slots); } + return 0; } static void rvce_get_feedback(struct pipe_video_codec *encoder, void *feedback, unsigned *size, diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_dec.c b/src/gallium/drivers/radeonsi/radeon_vcn_dec.c index 77105219aa7..502914d76c1 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_dec.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_dec.c @@ -2569,15 +2569,15 @@ void send_cmd_dec(struct radeon_decoder *dec, struct pipe_video_buffer *target, /** * end decoding of the current frame */ -static void radeon_dec_end_frame(struct pipe_video_codec *decoder, struct pipe_video_buffer *target, - struct pipe_picture_desc *picture) +static int radeon_dec_end_frame(struct pipe_video_codec *decoder, struct pipe_video_buffer *target, + struct pipe_picture_desc *picture) { struct radeon_decoder *dec = (struct radeon_decoder *)decoder; assert(decoder); if (!dec->bs_ptr) - return; + return 1; dec->send_cmd(dec, target, picture); flush(dec, picture->flush_flags, picture->fence); @@ -2585,13 +2585,14 @@ static void radeon_dec_end_frame(struct pipe_video_codec *decoder, struct pipe_v dec->ws->fence_reference(dec->ws, &dec->prev_fence, *picture->fence); next_buffer(dec); + return 0; } /** * end decoding of the current jpeg frame */ -static void radeon_dec_jpeg_end_frame(struct pipe_video_codec *decoder, struct pipe_video_buffer *target, - struct pipe_picture_desc *picture) +static int radeon_dec_jpeg_end_frame(struct pipe_video_codec *decoder, struct pipe_video_buffer *target, + struct pipe_picture_desc *picture) { struct radeon_decoder *dec = (struct radeon_decoder *)decoder; struct pipe_mjpeg_picture_desc *pic = (struct pipe_mjpeg_picture_desc *)picture; @@ -2599,7 +2600,7 @@ static void radeon_dec_jpeg_end_frame(struct pipe_video_codec *decoder, struct p assert(decoder); if (!dec->bs_ptr) - return; + return 1; dec->jpg.crop_x = ROUND_DOWN_TO(pic->picture_parameter.crop_x, VL_MACROBLOCK_WIDTH); dec->jpg.crop_y = ROUND_DOWN_TO(pic->picture_parameter.crop_y, VL_MACROBLOCK_HEIGHT); @@ -2613,6 +2614,7 @@ static void radeon_dec_jpeg_end_frame(struct pipe_video_codec *decoder, struct p dec->ws->cs_flush(&dec->jcs[dec->cb_idx], picture->flush_flags, NULL); next_buffer(dec); dec->cb_idx = (dec->cb_idx+1) % dec->njctx; + return 0; } /** diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c index e9bb58e2b1f..2c4a2a0e3c0 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c @@ -992,9 +992,9 @@ static void radeon_vcn_enc_get_param(struct radeon_encoder *enc, struct pipe_pic radeon_vcn_enc_av1_get_param(enc, (struct pipe_av1_enc_picture_desc *)picture); } -static void flush(struct radeon_encoder *enc, unsigned flags) +static int flush(struct radeon_encoder *enc, unsigned flags) { - enc->ws->cs_flush(&enc->cs, flags, NULL); + return enc->ws->cs_flush(&enc->cs, flags, NULL); } static void radeon_enc_flush(struct pipe_video_codec *encoder) @@ -1546,11 +1546,11 @@ static void radeon_enc_encode_bitstream(struct pipe_video_codec *encoder, enc->encode(enc); } -static void radeon_enc_end_frame(struct pipe_video_codec *encoder, struct pipe_video_buffer *source, - struct pipe_picture_desc *picture) +static int radeon_enc_end_frame(struct pipe_video_codec *encoder, struct pipe_video_buffer *source, + struct pipe_picture_desc *picture) { struct radeon_encoder *enc = (struct radeon_encoder *)encoder; - flush(enc, picture->flush_flags); + return flush(enc, picture->flush_flags); } static void radeon_enc_destroy(struct pipe_video_codec *encoder) diff --git a/src/gallium/drivers/radeonsi/si_vpe.c b/src/gallium/drivers/radeonsi/si_vpe.c index 59d7192bb1e..f4f95b5349a 100755 --- a/src/gallium/drivers/radeonsi/si_vpe.c +++ b/src/gallium/drivers/radeonsi/si_vpe.c @@ -988,7 +988,7 @@ fail: return; } -static void +static int si_vpe_processor_end_frame(struct pipe_video_codec *codec, struct pipe_video_buffer *target, struct pipe_picture_desc *picture) @@ -1007,6 +1007,7 @@ si_vpe_processor_end_frame(struct pipe_video_codec *codec, SIVPE_WARN(vpeproc->log_level, "Fence may have problem!\n"); SIVPE_INFO(vpeproc->log_level, "Success\n"); + return 0; } static void diff --git a/src/gallium/drivers/virgl/virgl_video.c b/src/gallium/drivers/virgl/virgl_video.c index 8f755909a23..ed98d1e1e77 100644 --- a/src/gallium/drivers/virgl/virgl_video.c +++ b/src/gallium/drivers/virgl/virgl_video.c @@ -1106,9 +1106,9 @@ static void virgl_video_encode_bitstream(struct pipe_video_codec *codec, virgl_resource(target)); } -static void virgl_video_end_frame(struct pipe_video_codec *codec, - struct pipe_video_buffer *target, - struct pipe_picture_desc *picture) +static int virgl_video_end_frame(struct pipe_video_codec *codec, + struct pipe_video_buffer *target, + struct pipe_picture_desc *picture) { struct virgl_video_codec *vcdc = virgl_video_codec(codec); struct virgl_context *vctx = virgl_context(vcdc->base.context); @@ -1118,6 +1118,7 @@ static void virgl_video_end_frame(struct pipe_video_codec *codec, virgl_flush_eq(vctx, vctx, NULL); switch_buffer(vcdc); + return 0; } static int virgl_video_get_decoder_fence(struct pipe_video_codec *decoder, diff --git a/src/gallium/include/pipe/p_video_codec.h b/src/gallium/include/pipe/p_video_codec.h index 82644daa4f0..a6c14d80ecc 100644 --- a/src/gallium/include/pipe/p_video_codec.h +++ b/src/gallium/include/pipe/p_video_codec.h @@ -104,10 +104,11 @@ struct pipe_video_codec /** * end decoding of the current frame + * returns 0 on success */ - void (*end_frame)(struct pipe_video_codec *codec, - struct pipe_video_buffer *target, - struct pipe_picture_desc *picture); + int (*end_frame)(struct pipe_video_codec *codec, + struct pipe_video_buffer *target, + struct pipe_picture_desc *picture); /** * flush any outstanding command buffers to the hardware