st/omx/dec: add h264 decoder level support
v2: use sps level idc as level to driver Signed-off-by: Leo Liu <leo.liu@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
parent
1a5e2bb5ce
commit
b2596efeb7
|
@ -33,6 +33,7 @@
|
|||
|
||||
#include "pipe/p_video_codec.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_video.h"
|
||||
#include "vl/vl_rbsp.h"
|
||||
|
||||
#include "entrypoint.h"
|
||||
|
@ -113,10 +114,11 @@ static void vid_dec_h264_BeginFrame(vid_dec_PrivateType *priv)
|
|||
templat.profile = priv->profile;
|
||||
templat.entrypoint = PIPE_VIDEO_ENTRYPOINT_BITSTREAM;
|
||||
templat.chroma_format = PIPE_VIDEO_CHROMA_FORMAT_420;
|
||||
templat.max_references = 2;
|
||||
templat.max_references = priv->picture.h264.num_ref_frames;
|
||||
templat.expect_chunked_decode = true;
|
||||
templat.width = port->sPortParam.format.video.nFrameWidth;
|
||||
templat.height = port->sPortParam.format.video.nFrameHeight;
|
||||
templat.level = priv->picture.h264.pps->sps->level_idc;
|
||||
|
||||
priv->codec = priv->pipe->create_video_codec(priv->pipe, &templat);
|
||||
}
|
||||
|
@ -239,7 +241,7 @@ static struct pipe_h264_sps *seq_parameter_set_id(vid_dec_PrivateType *priv, str
|
|||
static void seq_parameter_set(vid_dec_PrivateType *priv, struct vl_rbsp *rbsp)
|
||||
{
|
||||
struct pipe_h264_sps *sps;
|
||||
unsigned profile_idc;
|
||||
unsigned profile_idc, level_idc;
|
||||
unsigned i;
|
||||
|
||||
/* Sequence parameter set */
|
||||
|
@ -267,7 +269,7 @@ static void seq_parameter_set(vid_dec_PrivateType *priv, struct vl_rbsp *rbsp)
|
|||
vl_rbsp_u(rbsp, 2);
|
||||
|
||||
/* level_idc */
|
||||
vl_rbsp_u(rbsp, 8);
|
||||
level_idc = vl_rbsp_u(rbsp, 8);
|
||||
|
||||
sps = seq_parameter_set_id(priv, rbsp);
|
||||
if (!sps)
|
||||
|
@ -277,6 +279,8 @@ static void seq_parameter_set(vid_dec_PrivateType *priv, struct vl_rbsp *rbsp)
|
|||
memset(sps->ScalingList4x4, 16, sizeof(sps->ScalingList4x4));
|
||||
memset(sps->ScalingList8x8, 16, sizeof(sps->ScalingList8x8));
|
||||
|
||||
sps->level_idc = level_idc;
|
||||
|
||||
if (profile_idc == 100 || profile_idc == 110 || profile_idc == 122 || profile_idc == 244 ||
|
||||
profile_idc == 44 || profile_idc == 83 || profile_idc == 86 || profile_idc == 118 ||
|
||||
profile_idc == 128 || profile_idc == 138) {
|
||||
|
|
Loading…
Reference in New Issue