mirror of https://gitee.com/openkylin/linux.git
media: meson: vdec: enable mcrcc for VP9
The motion compensation reference cache controller allows caching
parts of reference frames for faster decoding.
Fixes: 00c43088aa
("media: meson: vdec: add VP9 decoder support")
Signed-off-by: Maxime Jourdan <mjourdan@baylibre.com>
Signed-off-by: Neil Armstrong <narmstrong@baylibre.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
parent
149d65e549
commit
f84fdf99e9
|
@ -854,6 +854,36 @@ static int codec_vp9_stop(struct amvdec_session *sess)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Program LAST & GOLDEN frames into the motion compensation reference cache
|
||||
* controller
|
||||
*/
|
||||
static void codec_vp9_set_mcrcc(struct amvdec_session *sess)
|
||||
{
|
||||
struct amvdec_core *core = sess->core;
|
||||
struct codec_vp9 *vp9 = sess->priv;
|
||||
u32 val;
|
||||
|
||||
/* Reset mcrcc */
|
||||
amvdec_write_dos(core, HEVCD_MCRCC_CTL1, 0x2);
|
||||
/* Disable on I-frame */
|
||||
if (vp9->cur_frame->type == KEY_FRAME || vp9->cur_frame->intra_only) {
|
||||
amvdec_write_dos(core, HEVCD_MCRCC_CTL1, 0x0);
|
||||
return;
|
||||
}
|
||||
|
||||
amvdec_write_dos(core, HEVCD_MPP_ANC_CANVAS_ACCCONFIG_ADDR, BIT(1));
|
||||
val = amvdec_read_dos(core, HEVCD_MPP_ANC_CANVAS_DATA_ADDR) & 0xffff;
|
||||
val |= (val << 16);
|
||||
amvdec_write_dos(core, HEVCD_MCRCC_CTL2, val);
|
||||
val = amvdec_read_dos(core, HEVCD_MPP_ANC_CANVAS_DATA_ADDR) & 0xffff;
|
||||
val |= (val << 16);
|
||||
amvdec_write_dos(core, HEVCD_MCRCC_CTL3, val);
|
||||
|
||||
/* Enable mcrcc progressive-mode */
|
||||
amvdec_write_dos(core, HEVCD_MCRCC_CTL1, 0xff0);
|
||||
}
|
||||
|
||||
static void codec_vp9_set_sao(struct amvdec_session *sess,
|
||||
struct vb2_buffer *vb)
|
||||
{
|
||||
|
@ -1267,6 +1297,7 @@ static void codec_vp9_process_frame(struct amvdec_session *sess)
|
|||
|
||||
amvdec_write_dos(core, HEVC_PARSER_PICTURE_SIZE,
|
||||
(vp9->height << 16) | vp9->width);
|
||||
codec_vp9_set_mcrcc(sess);
|
||||
codec_vp9_set_sao(sess, &vp9->cur_frame->vbuf->vb2_buf);
|
||||
|
||||
vp9_loop_filter_frame_init(core, &vp9->seg_4lf,
|
||||
|
|
Loading…
Reference in New Issue