pipe: Add int return value to video end_frame

Make it possible to report errors to frontend.

Reviewed-By: Sil Vilerino <sivileri@microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30780>
This commit is contained in:
David Rosca
2024-08-22 14:45:11 +02:00
committed by Marge Bot
parent 96fe9fde3f
commit db45d16dfe
22 changed files with 66 additions and 47 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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;
}
/**

View File

@@ -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);

View File

@@ -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

View File

@@ -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);

View File

@@ -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

View File

@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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 *

View File

@@ -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;
}
/**

View File

@@ -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,

View File

@@ -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;
}
/**

View File

@@ -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)

View File

@@ -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,

View File

@@ -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;
}
/**

View File

@@ -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)

View File

@@ -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

View File

@@ -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,

View File

@@ -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