mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 20:28:04 +02:00
st/omx/dec: result buffers size should match codec decoder size
Otherwise fails the check of matching between decoder size and buffers size in kernel. Signed-off-by: Leo Liu <leo.liu@amd.com> Cc: 13.0 <mesa-stable@lists.freedesktop.org>
This commit is contained in:
parent
55fb874376
commit
d9b2c4048d
3 changed files with 18 additions and 19 deletions
|
|
@ -425,24 +425,19 @@ void vid_dec_NeedTarget(vid_dec_PrivateType *priv)
|
|||
struct pipe_video_buffer templat = {};
|
||||
struct vl_screen *omx_screen;
|
||||
struct pipe_screen *pscreen;
|
||||
omx_base_video_PortType *port;
|
||||
|
||||
omx_screen = priv->screen;
|
||||
port = (omx_base_video_PortType *)priv->ports[OMX_BASE_FILTER_INPUTPORT_INDEX];
|
||||
|
||||
assert(omx_screen);
|
||||
assert(port);
|
||||
|
||||
pscreen = omx_screen->pscreen;
|
||||
|
||||
assert(pscreen);
|
||||
|
||||
if (!priv->target) {
|
||||
memset(&templat, 0, sizeof(templat));
|
||||
|
||||
templat.chroma_format = PIPE_VIDEO_CHROMA_FORMAT_420;
|
||||
templat.width = port->sPortParam.format.video.nFrameWidth;
|
||||
templat.height = port->sPortParam.format.video.nFrameHeight;
|
||||
templat.width = priv->codec->width;
|
||||
templat.height = priv->codec->height;
|
||||
templat.buffer_format = pscreen->get_video_param(
|
||||
pscreen,
|
||||
PIPE_VIDEO_PROFILE_UNKNOWN,
|
||||
|
|
|
|||
|
|
@ -105,13 +105,6 @@ static void vid_dec_h264_BeginFrame(vid_dec_PrivateType *priv)
|
|||
if (priv->frame_started)
|
||||
return;
|
||||
|
||||
vid_dec_NeedTarget(priv);
|
||||
if (priv->first_buf_in_frame)
|
||||
priv->timestamp = priv->timestamps[0];
|
||||
priv->first_buf_in_frame = false;
|
||||
|
||||
priv->picture.h264.num_ref_frames = priv->picture.h264.pps->sps->max_num_ref_frames;
|
||||
|
||||
if (!priv->codec) {
|
||||
struct pipe_video_codec templat = {};
|
||||
omx_base_video_PortType *port;
|
||||
|
|
@ -128,6 +121,15 @@ static void vid_dec_h264_BeginFrame(vid_dec_PrivateType *priv)
|
|||
|
||||
priv->codec = priv->pipe->create_video_codec(priv->pipe, &templat);
|
||||
}
|
||||
|
||||
vid_dec_NeedTarget(priv);
|
||||
|
||||
if (priv->first_buf_in_frame)
|
||||
priv->timestamp = priv->timestamps[0];
|
||||
priv->first_buf_in_frame = false;
|
||||
|
||||
priv->picture.h264.num_ref_frames = priv->picture.h264.pps->sps->max_num_ref_frames;
|
||||
|
||||
priv->picture.h264.slice_count = 0;
|
||||
priv->codec->begin_frame(priv->codec, priv->target, &priv->picture.base);
|
||||
priv->frame_started = true;
|
||||
|
|
|
|||
|
|
@ -612,11 +612,6 @@ static void vid_dec_h265_BeginFrame(vid_dec_PrivateType *priv)
|
|||
if (priv->frame_started)
|
||||
return;
|
||||
|
||||
vid_dec_NeedTarget(priv);
|
||||
if (priv->first_buf_in_frame)
|
||||
priv->timestamp = priv->timestamps[0];
|
||||
priv->first_buf_in_frame = false;
|
||||
|
||||
if (!priv->codec) {
|
||||
struct pipe_video_codec templat = {};
|
||||
|
||||
|
|
@ -629,6 +624,13 @@ static void vid_dec_h265_BeginFrame(vid_dec_PrivateType *priv)
|
|||
templat.level = priv->codec_data.h265.level_idc;
|
||||
priv->codec = priv->pipe->create_video_codec(priv->pipe, &templat);
|
||||
}
|
||||
|
||||
vid_dec_NeedTarget(priv);
|
||||
|
||||
if (priv->first_buf_in_frame)
|
||||
priv->timestamp = priv->timestamps[0];
|
||||
priv->first_buf_in_frame = false;
|
||||
|
||||
priv->codec->begin_frame(priv->codec, priv->target, &priv->picture.base);
|
||||
priv->frame_started = true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue