rkvdec: h264: Refuse to decode unsupported bitstream
The hardware only supports 4:2:2, 4:2:0 or 4:0:0 (monochrome), 8-bit or 10-bit depth content. Verify that the SPS refers to a supported bitstream, and refuse unsupported bitstreams by failing at TRY_EXT_CTRLS time. The driver is currently broken on 10-bit and 4:2:2 so disallow those as well. Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com> Reviewed-by: Jonas Karlman <jonas@kwiboo.se> 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
46d7aaebbe
commit
9363aa33f6
|
@ -27,6 +27,32 @@
|
||||||
#include "rkvdec.h"
|
#include "rkvdec.h"
|
||||||
#include "rkvdec-regs.h"
|
#include "rkvdec-regs.h"
|
||||||
|
|
||||||
|
static int rkvdec_try_ctrl(struct v4l2_ctrl *ctrl)
|
||||||
|
{
|
||||||
|
if (ctrl->id == V4L2_CID_MPEG_VIDEO_H264_SPS) {
|
||||||
|
const struct v4l2_ctrl_h264_sps *sps = ctrl->p_new.p_h264_sps;
|
||||||
|
/*
|
||||||
|
* TODO: The hardware supports 10-bit and 4:2:2 profiles,
|
||||||
|
* but it's currently broken in the driver.
|
||||||
|
* Reject them for now, until it's fixed.
|
||||||
|
*/
|
||||||
|
if (sps->chroma_format_idc > 1)
|
||||||
|
/* Only 4:0:0 and 4:2:0 are supported */
|
||||||
|
return -EINVAL;
|
||||||
|
if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8)
|
||||||
|
/* Luma and chroma bit depth mismatch */
|
||||||
|
return -EINVAL;
|
||||||
|
if (sps->bit_depth_luma_minus8 != 0)
|
||||||
|
/* Only 8-bit is supported */
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct v4l2_ctrl_ops rkvdec_ctrl_ops = {
|
||||||
|
.try_ctrl = rkvdec_try_ctrl,
|
||||||
|
};
|
||||||
|
|
||||||
static const struct rkvdec_ctrl_desc rkvdec_h264_ctrl_descs[] = {
|
static const struct rkvdec_ctrl_desc rkvdec_h264_ctrl_descs[] = {
|
||||||
{
|
{
|
||||||
.per_request = true,
|
.per_request = true,
|
||||||
|
@ -42,6 +68,7 @@ static const struct rkvdec_ctrl_desc rkvdec_h264_ctrl_descs[] = {
|
||||||
.per_request = true,
|
.per_request = true,
|
||||||
.mandatory = true,
|
.mandatory = true,
|
||||||
.cfg.id = V4L2_CID_MPEG_VIDEO_H264_SPS,
|
.cfg.id = V4L2_CID_MPEG_VIDEO_H264_SPS,
|
||||||
|
.cfg.ops = &rkvdec_ctrl_ops,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.per_request = true,
|
.per_request = true,
|
||||||
|
|
Loading…
Reference in New Issue