mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-20 19:08:30 +02:00
st/va: count number of slices
The counter was not set but used by the nouveau driver. It is required otherwise visual output is garbage. Signed-off-by: Julien Isorce <j.isorce@samsung.com> Reviewed-by: Christian Koenig <christian.koenig@amd.com>
This commit is contained in:
parent
14f21f53d5
commit
851e7e12aa
5 changed files with 25 additions and 0 deletions
|
|
@ -174,6 +174,14 @@ static void
|
|||
handleSliceParameterBuffer(vlVaContext *context, vlVaBuffer *buf)
|
||||
{
|
||||
switch (u_reduce_video_profile(context->templat.profile)) {
|
||||
case PIPE_VIDEO_FORMAT_MPEG12:
|
||||
vlVaHandleSliceParameterBufferMPEG12(context, buf);
|
||||
break;
|
||||
|
||||
case PIPE_VIDEO_FORMAT_VC1:
|
||||
vlVaHandleSliceParameterBufferVC1(context, buf);
|
||||
break;
|
||||
|
||||
case PIPE_VIDEO_FORMAT_MPEG4_AVC:
|
||||
vlVaHandleSliceParameterBufferH264(context, buf);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ void vlVaHandlePictureParameterBufferH264(vlVaDriver *drv, vlVaContext *context,
|
|||
unsigned i;
|
||||
|
||||
assert(buf->size >= sizeof(VAPictureParameterBufferH264) && buf->num_elements == 1);
|
||||
context->desc.h264.slice_count = 0;
|
||||
/*CurrPic*/
|
||||
context->desc.h264.field_order_cnt[0] = h264->CurrPic.TopFieldOrderCnt;
|
||||
context->desc.h264.field_order_cnt[1] = h264->CurrPic.BottomFieldOrderCnt;
|
||||
|
|
@ -162,6 +163,7 @@ void vlVaHandleSliceParameterBufferH264(vlVaContext *context, vlVaBuffer *buf)
|
|||
VASliceParameterBufferH264 *h264 = buf->data;
|
||||
|
||||
assert(buf->size >= sizeof(VASliceParameterBufferH264) && buf->num_elements == 1);
|
||||
context->desc.h264.slice_count += buf->num_elements;
|
||||
context->desc.h264.num_ref_idx_l0_active_minus1 =
|
||||
h264->num_ref_idx_l0_active_minus1;
|
||||
context->desc.h264.num_ref_idx_l1_active_minus1 =
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ void vlVaHandlePictureParameterBufferMPEG12(vlVaDriver *drv, vlVaContext *contex
|
|||
VAPictureParameterBufferMPEG2 *mpeg2 = buf->data;
|
||||
|
||||
assert(buf->size >= sizeof(VAPictureParameterBufferMPEG2) && buf->num_elements == 1);
|
||||
context->desc.mpeg12.num_slices = 0;
|
||||
/*horizontal_size;*/
|
||||
/*vertical_size;*/
|
||||
vlVaGetReferenceFrame(drv, mpeg2->forward_reference_picture, &context->desc.mpeg12.ref[0]);
|
||||
|
|
@ -78,3 +79,8 @@ void vlVaHandleIQMatrixBufferMPEG12(vlVaContext *context, vlVaBuffer *buf)
|
|||
context->desc.mpeg12.non_intra_matrix = NULL;
|
||||
}
|
||||
|
||||
void vlVaHandleSliceParameterBufferMPEG12(vlVaContext *context, vlVaBuffer *buf)
|
||||
{
|
||||
assert(buf->size >= sizeof(VASliceParameterBufferMPEG2) && buf->num_elements == 1);
|
||||
context->desc.mpeg12.num_slices += buf->num_elements;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ void vlVaHandlePictureParameterBufferVC1(vlVaDriver *drv, vlVaContext *context,
|
|||
VAPictureParameterBufferVC1 * vc1 = buf->data;
|
||||
|
||||
assert(buf->size >= sizeof(VAPictureParameterBufferVC1) && buf->num_elements == 1);
|
||||
context->desc.vc1.slice_count = 0;
|
||||
vlVaGetReferenceFrame(drv, vc1->forward_reference_picture, &context->desc.vc1.ref[0]);
|
||||
vlVaGetReferenceFrame(drv, vc1->backward_reference_picture, &context->desc.vc1.ref[1]);
|
||||
context->desc.vc1.picture_type = vc1->picture_fields.bits.picture_type;
|
||||
|
|
@ -65,3 +66,9 @@ void vlVaHandlePictureParameterBufferVC1(vlVaDriver *drv, vlVaContext *context,
|
|||
context->desc.vc1.deblockEnable = vc1->post_processing != 0;
|
||||
context->desc.vc1.pquant = vc1->pic_quantizer_fields.bits.pic_quantizer_scale;
|
||||
}
|
||||
|
||||
void vlVaHandleSliceParameterBufferVC1(vlVaContext *context, vlVaBuffer *buf)
|
||||
{
|
||||
assert(buf->size >= sizeof(VASliceParameterBufferVC1) && buf->num_elements == 1);
|
||||
context->desc.vc1.slice_count += buf->num_elements;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -351,10 +351,12 @@ VAStatus vlVaHandleVAProcPipelineParameterBufferType(vlVaDriver *drv, vlVaContex
|
|||
void vlVaGetReferenceFrame(vlVaDriver *drv, VASurfaceID surface_id, struct pipe_video_buffer **ref_frame);
|
||||
void vlVaHandlePictureParameterBufferMPEG12(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf);
|
||||
void vlVaHandleIQMatrixBufferMPEG12(vlVaContext *context, vlVaBuffer *buf);
|
||||
void vlVaHandleSliceParameterBufferMPEG12(vlVaContext *context, vlVaBuffer *buf);
|
||||
void vlVaHandlePictureParameterBufferH264(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf);
|
||||
void vlVaHandleIQMatrixBufferH264(vlVaContext *context, vlVaBuffer *buf);
|
||||
void vlVaHandleSliceParameterBufferH264(vlVaContext *context, vlVaBuffer *buf);
|
||||
void vlVaHandlePictureParameterBufferVC1(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf);
|
||||
void vlVaHandleSliceParameterBufferVC1(vlVaContext *context, vlVaBuffer *buf);
|
||||
void vlVaHandlePictureParameterBufferMPEG4(vlVaDriver *drv, vlVaContext *context, vlVaBuffer *buf);
|
||||
void vlVaHandleIQMatrixBufferMPEG4(vlVaContext *context, vlVaBuffer *buf);
|
||||
void vlVaHandleSliceParameterBufferMPEG4(vlVaContext *context, vlVaBuffer *buf);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue