lkml.org 
[lkml]   [2020]   [Jun]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/2] rkvdec: h264: Refuse to decode unsupported bitstream
    Date
    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 PPS 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>
    ---
    drivers/staging/media/rkvdec/rkvdec.c | 27 +++++++++++++++++++++++++++
    1 file changed, 27 insertions(+)

    diff --git a/drivers/staging/media/rkvdec/rkvdec.c b/drivers/staging/media/rkvdec/rkvdec.c
    index 225eeca73356..0f81b47792f6 100644
    --- a/drivers/staging/media/rkvdec/rkvdec.c
    +++ b/drivers/staging/media/rkvdec/rkvdec.c
    @@ -27,6 +27,32 @@
    #include "rkvdec.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_cur.p;
    + /*
    + * 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[] = {
    {
    .per_request = true,
    @@ -42,6 +68,7 @@ static const struct rkvdec_ctrl_desc rkvdec_h264_ctrl_descs[] = {
    .per_request = true,
    .mandatory = true,
    .cfg.id = V4L2_CID_MPEG_VIDEO_H264_SPS,
    + .cfg.ops = &rkvdec_ctrl_ops,
    },
    {
    .per_request = true,
    --
    2.26.0.rc2
    \
     
     \ /
      Last update: 2020-06-26 19:12    [W:5.381 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site