mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-20 14:20:36 +02:00
virgl/video: Add support for mpeg12 decoding
Implement for mpeg12 virgl video decoding. Signed-off-by: Honglei Huang <honglei1.huang@amd.com> Reviewed-by: Leo Liu <leo.liu@amd.com> Reviewed-by: Boyuan Zhang <boyuan.zhang@amd.com> Reviewed-by: Daniel Almeida <daniel.almeida@collabora.com> Reviewed-by: Feng Jiang <jiangfeng@kylinos.cn> Signed-off-by: Huang Rui <ray.huang@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22108>
This commit is contained in:
parent
61a90c2968
commit
deafeab1ee
3 changed files with 67 additions and 1 deletions
|
|
@ -498,6 +498,9 @@ virgl_get_video_param(struct pipe_screen *screen,
|
|||
drv_supported = (entrypoint == PIPE_VIDEO_ENTRYPOINT_BITSTREAM ||
|
||||
entrypoint == PIPE_VIDEO_ENTRYPOINT_ENCODE);
|
||||
break;
|
||||
case PIPE_VIDEO_FORMAT_MPEG12:
|
||||
drv_supported = (entrypoint == PIPE_VIDEO_ENTRYPOINT_BITSTREAM);
|
||||
break;
|
||||
default:
|
||||
drv_supported = false;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -559,6 +559,41 @@ static int fill_mpeg4_picture_desc(const struct pipe_picture_desc *desc,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int fill_mpeg12_picture_desc(const struct pipe_picture_desc *desc,
|
||||
union virgl_picture_desc *vdsc)
|
||||
{
|
||||
unsigned i;
|
||||
struct virgl_video_buffer *vbuf;
|
||||
struct virgl_mpeg12_picture_desc *vmpeg12 = &vdsc->mpeg12;
|
||||
struct pipe_mpeg12_picture_desc *mpeg12 = (struct pipe_mpeg12_picture_desc *)desc;
|
||||
|
||||
fill_base_picture_desc(desc, &vmpeg12->base);
|
||||
|
||||
for (i = 0; i < 2; i++) {
|
||||
vbuf = virgl_video_buffer(mpeg12->ref[i]);
|
||||
vmpeg12->ref[i] = vbuf ? vbuf->handle : 0;
|
||||
}
|
||||
|
||||
memcpy(vmpeg12->intra_matrix, mpeg12->intra_matrix, 64);
|
||||
memcpy(vmpeg12->non_intra_matrix, mpeg12->non_intra_matrix, 64);
|
||||
|
||||
ITEM_SET(vmpeg12, mpeg12, picture_coding_type);
|
||||
vmpeg12->f_code[0][0] = mpeg12->f_code[0][0] ;
|
||||
vmpeg12->f_code[0][1] = mpeg12->f_code[0][1] ;
|
||||
vmpeg12->f_code[1][0] = mpeg12->f_code[1][0] ;
|
||||
vmpeg12->f_code[1][1] = mpeg12->f_code[1][1] ;
|
||||
ITEM_SET(vmpeg12, mpeg12, intra_dc_precision);
|
||||
ITEM_SET(vmpeg12, mpeg12, picture_structure);
|
||||
ITEM_SET(vmpeg12, mpeg12, top_field_first);
|
||||
ITEM_SET(vmpeg12, mpeg12, frame_pred_frame_dct);
|
||||
ITEM_SET(vmpeg12, mpeg12, concealment_motion_vectors);
|
||||
ITEM_SET(vmpeg12, mpeg12, q_scale_type);
|
||||
ITEM_SET(vmpeg12, mpeg12, intra_vlc_format);
|
||||
ITEM_SET(vmpeg12, mpeg12, alternate_scan);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#undef ITEM_SET
|
||||
#undef ITEM_CPY
|
||||
|
||||
|
|
@ -572,6 +607,8 @@ static int fill_picture_desc(const struct pipe_picture_desc *desc,
|
|||
return fill_h264_picture_desc(desc, vdsc);
|
||||
case PIPE_VIDEO_FORMAT_HEVC:
|
||||
return fill_h265_picture_desc(desc, vdsc);
|
||||
case PIPE_VIDEO_FORMAT_MPEG12:
|
||||
return fill_mpeg12_picture_desc(desc, vdsc);
|
||||
default:
|
||||
return -1;
|
||||
}
|
||||
|
|
@ -824,7 +861,8 @@ virgl_video_create_codec(struct pipe_context *ctx,
|
|||
width = align(width, VL_MACROBLOCK_WIDTH);
|
||||
height = align(height, VL_MACROBLOCK_HEIGHT);
|
||||
break;
|
||||
case PIPE_VIDEO_FORMAT_HEVC: /* fall through */
|
||||
case PIPE_VIDEO_FORMAT_HEVC:
|
||||
case PIPE_VIDEO_FORMAT_MPEG12: /* fall through */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -558,11 +558,36 @@ struct virgl_mpeg4_picture_desc
|
|||
uint32_t ref[2];
|
||||
};
|
||||
|
||||
struct virgl_mpeg12_picture_desc
|
||||
{
|
||||
struct virgl_base_picture_desc base;
|
||||
|
||||
unsigned picture_coding_type;
|
||||
unsigned picture_structure;
|
||||
unsigned frame_pred_frame_dct;
|
||||
unsigned q_scale_type;
|
||||
unsigned alternate_scan;
|
||||
unsigned intra_vlc_format;
|
||||
unsigned concealment_motion_vectors;
|
||||
unsigned intra_dc_precision;
|
||||
unsigned f_code[2][2];
|
||||
unsigned top_field_first;
|
||||
unsigned full_pel_forward_vector;
|
||||
unsigned full_pel_backward_vector;
|
||||
unsigned num_slices;
|
||||
|
||||
uint8_t intra_matrix[64];
|
||||
uint8_t non_intra_matrix[64];
|
||||
|
||||
uint32_t ref[2];
|
||||
};
|
||||
|
||||
union virgl_picture_desc {
|
||||
struct virgl_base_picture_desc base;
|
||||
struct virgl_h264_picture_desc h264;
|
||||
struct virgl_h265_picture_desc h265;
|
||||
struct virgl_mpeg4_picture_desc mpeg4;
|
||||
struct virgl_mpeg12_picture_desc mpeg12;
|
||||
struct virgl_h264_enc_picture_desc h264_enc;
|
||||
struct virgl_h265_enc_picture_desc h265_enc;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue