From: Paul Kocialkowski <paul.kocialkowski@bootlin.com> To: linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-sunxi@googlegroups.com Cc: Icenowy Zheng <icenowy@aosc.xyz>, Florent Revest <revestflo@gmail.com>, Alexandre Courbot <acourbot@chromium.org>, Hans Verkuil <hans.verkuil@cisco.com>, Laurent Pinchart <laurent.pinchart@ideasonboard.com>, Sakari Ailus <sakari.ailus@linux.intel.com>, Maxime Ripard <maxime.ripard@bootlin.com>, Thomas van Kleef <thomas@vitsch.nl>, "Signed-off-by : Bob Ham" <rah@settrans.net>, Thomas Petazzoni <thomas.petazzoni@bootlin.com>, Chen-Yu Tsai <wens@csie.org> Subject: [PATCH 4/9] v4l: Add MPEG2 low-level decoder API control Date: Fri, 9 Mar 2018 11:14:40 +0100 [thread overview] Message-ID: <20180309101445.16190-2-paul.kocialkowski@bootlin.com> (raw) In-Reply-To: <20180309100933.15922-3-paul.kocialkowski@bootlin.com> From: Florent Revest <florent.revest@free-electrons.com> This control is to be used with the new low-level decoder API for MPEG2 to provide additional parameters for the hardware that cannot parse the input stream. Signed-off-by: Florent Revest <florent.revest@free-electrons.com> --- drivers/media/v4l2-core/v4l2-ctrls.c | 15 +++++++++++++++ drivers/media/v4l2-core/v4l2-ioctl.c | 1 + include/uapi/linux/v4l2-controls.h | 26 ++++++++++++++++++++++++++ include/uapi/linux/videodev2.h | 5 +++++ 4 files changed, 47 insertions(+) diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c index d7b1aeb32470..fa23e4ea1084 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls.c +++ b/drivers/media/v4l2-core/v4l2-ctrls.c @@ -763,6 +763,8 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER: return "Repeat Sequence Header"; case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME: return "Force Key Frame"; + case V4L2_CID_MPEG_VIDEO_MPEG2_FRAME_HDR: return "MPEG2 Frame Header"; + /* VPX controls */ case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS: return "VPX Number of Partitions"; case V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4: return "VPX Intra Mode Decision Disable"; @@ -1153,6 +1155,9 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, case V4L2_CID_RDS_TX_ALT_FREQS: *type = V4L2_CTRL_TYPE_U32; break; + case V4L2_CID_MPEG_VIDEO_MPEG2_FRAME_HDR: + *type = V4L2_CTRL_TYPE_MPEG2_FRAME_HDR; + break; default: *type = V4L2_CTRL_TYPE_INTEGER; break; @@ -1473,6 +1478,13 @@ static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx, return -ERANGE; return 0; + case V4L2_CTRL_TYPE_MPEG2_FRAME_HDR: + return 0; + + /* FIXME:just return 0 for now */ + case V4L2_CTRL_TYPE_PRIVATE: + return 0; + default: return -EINVAL; } @@ -2032,6 +2044,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl, case V4L2_CTRL_TYPE_U32: elem_size = sizeof(u32); break; + case V4L2_CTRL_TYPE_MPEG2_FRAME_HDR: + elem_size = sizeof(struct v4l2_ctrl_mpeg2_frame_hdr); + break; default: if (type < V4L2_CTRL_COMPOUND_TYPES) elem_size = sizeof(s32); diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c index a45fe078f8ae..284bace60499 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c @@ -1281,6 +1281,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) case V4L2_PIX_FMT_VC1_ANNEX_L: descr = "VC-1 (SMPTE 412M Annex L)"; break; case V4L2_PIX_FMT_VP8: descr = "VP8"; break; case V4L2_PIX_FMT_VP9: descr = "VP9"; break; + case V4L2_PIX_FMT_MPEG2_FRAME: descr = "MPEG2 FRAME"; break; case V4L2_PIX_FMT_CPIA1: descr = "GSPCA CPiA YUV"; break; case V4L2_PIX_FMT_WNVA: descr = "WNVA"; break; case V4L2_PIX_FMT_SN9C10X: descr = "GSPCA SN9C10X"; break; diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h index cbbb750d87d1..c8f25d4abce7 100644 --- a/include/uapi/linux/v4l2-controls.h +++ b/include/uapi/linux/v4l2-controls.h @@ -557,6 +557,8 @@ enum v4l2_mpeg_video_mpeg4_profile { }; #define V4L2_CID_MPEG_VIDEO_MPEG4_QPEL (V4L2_CID_MPEG_BASE+407) +#define V4L2_CID_MPEG_VIDEO_MPEG2_FRAME_HDR (V4L2_CID_MPEG_BASE+450) + /* Control IDs for VP8 streams * Although VP8 is not part of MPEG we add these controls to the MPEG class * as that class is already handling other video compression standards @@ -985,4 +987,28 @@ enum v4l2_detect_md_mode { #define V4L2_CID_DETECT_MD_THRESHOLD_GRID (V4L2_CID_DETECT_CLASS_BASE + 3) #define V4L2_CID_DETECT_MD_REGION_GRID (V4L2_CID_DETECT_CLASS_BASE + 4) +struct v4l2_ctrl_mpeg2_frame_hdr { + __u32 slice_len; + __u32 slice_pos; + enum { MPEG1, MPEG2 } type; + + __u16 width; + __u16 height; + + enum { PCT_I = 1, PCT_P, PCT_B, PCT_D } picture_coding_type; + __u8 f_code[2][2]; + + __u8 intra_dc_precision; + __u8 picture_structure; + __u8 top_field_first; + __u8 frame_pred_frame_dct; + __u8 concealment_motion_vectors; + __u8 q_scale_type; + __u8 intra_vlc_format; + __u8 alternate_scan; + + __u8 backward_index; + __u8 forward_index; +}; + #endif diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index cee906681db7..3f085f633d7e 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h @@ -636,6 +636,7 @@ struct v4l2_pix_format { #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */ #define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0') /* VP8 */ #define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0') /* VP9 */ +#define V4L2_PIX_FMT_MPEG2_FRAME v4l2_fourcc('M', 'G', '2', 'F') /* MPEG2 frame */ /* Vendor-specific formats */ #define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */ @@ -1581,6 +1582,7 @@ struct v4l2_ext_control { __u8 __user *p_u8; __u16 __user *p_u16; __u32 __user *p_u32; + struct v4l2_ctrl_mpeg2_frame_hdr __user *p_mpeg2_frame_hdr; void __user *ptr; }; } __attribute__ ((packed)); @@ -1625,6 +1627,9 @@ enum v4l2_ctrl_type { V4L2_CTRL_TYPE_U8 = 0x0100, V4L2_CTRL_TYPE_U16 = 0x0101, V4L2_CTRL_TYPE_U32 = 0x0102, + V4L2_CTRL_TYPE_MPEG2_FRAME_HDR = 0x0109, + + V4L2_CTRL_TYPE_PRIVATE = 0xffff, }; /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ -- 2.16.2
WARNING: multiple messages have this Message-ID (diff)
From: paul.kocialkowski@bootlin.com (Paul Kocialkowski) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 4/9] v4l: Add MPEG2 low-level decoder API control Date: Fri, 9 Mar 2018 11:14:40 +0100 [thread overview] Message-ID: <20180309101445.16190-2-paul.kocialkowski@bootlin.com> (raw) In-Reply-To: <20180309100933.15922-3-paul.kocialkowski@bootlin.com> From: Florent Revest <florent.revest@free-electrons.com> This control is to be used with the new low-level decoder API for MPEG2 to provide additional parameters for the hardware that cannot parse the input stream. Signed-off-by: Florent Revest <florent.revest@free-electrons.com> --- drivers/media/v4l2-core/v4l2-ctrls.c | 15 +++++++++++++++ drivers/media/v4l2-core/v4l2-ioctl.c | 1 + include/uapi/linux/v4l2-controls.h | 26 ++++++++++++++++++++++++++ include/uapi/linux/videodev2.h | 5 +++++ 4 files changed, 47 insertions(+) diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c index d7b1aeb32470..fa23e4ea1084 100644 --- a/drivers/media/v4l2-core/v4l2-ctrls.c +++ b/drivers/media/v4l2-core/v4l2-ctrls.c @@ -763,6 +763,8 @@ const char *v4l2_ctrl_get_name(u32 id) case V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER: return "Repeat Sequence Header"; case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME: return "Force Key Frame"; + case V4L2_CID_MPEG_VIDEO_MPEG2_FRAME_HDR: return "MPEG2 Frame Header"; + /* VPX controls */ case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS: return "VPX Number of Partitions"; case V4L2_CID_MPEG_VIDEO_VPX_IMD_DISABLE_4X4: return "VPX Intra Mode Decision Disable"; @@ -1153,6 +1155,9 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type, case V4L2_CID_RDS_TX_ALT_FREQS: *type = V4L2_CTRL_TYPE_U32; break; + case V4L2_CID_MPEG_VIDEO_MPEG2_FRAME_HDR: + *type = V4L2_CTRL_TYPE_MPEG2_FRAME_HDR; + break; default: *type = V4L2_CTRL_TYPE_INTEGER; break; @@ -1473,6 +1478,13 @@ static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx, return -ERANGE; return 0; + case V4L2_CTRL_TYPE_MPEG2_FRAME_HDR: + return 0; + + /* FIXME:just return 0 for now */ + case V4L2_CTRL_TYPE_PRIVATE: + return 0; + default: return -EINVAL; } @@ -2032,6 +2044,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl, case V4L2_CTRL_TYPE_U32: elem_size = sizeof(u32); break; + case V4L2_CTRL_TYPE_MPEG2_FRAME_HDR: + elem_size = sizeof(struct v4l2_ctrl_mpeg2_frame_hdr); + break; default: if (type < V4L2_CTRL_COMPOUND_TYPES) elem_size = sizeof(s32); diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c index a45fe078f8ae..284bace60499 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c @@ -1281,6 +1281,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) case V4L2_PIX_FMT_VC1_ANNEX_L: descr = "VC-1 (SMPTE 412M Annex L)"; break; case V4L2_PIX_FMT_VP8: descr = "VP8"; break; case V4L2_PIX_FMT_VP9: descr = "VP9"; break; + case V4L2_PIX_FMT_MPEG2_FRAME: descr = "MPEG2 FRAME"; break; case V4L2_PIX_FMT_CPIA1: descr = "GSPCA CPiA YUV"; break; case V4L2_PIX_FMT_WNVA: descr = "WNVA"; break; case V4L2_PIX_FMT_SN9C10X: descr = "GSPCA SN9C10X"; break; diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h index cbbb750d87d1..c8f25d4abce7 100644 --- a/include/uapi/linux/v4l2-controls.h +++ b/include/uapi/linux/v4l2-controls.h @@ -557,6 +557,8 @@ enum v4l2_mpeg_video_mpeg4_profile { }; #define V4L2_CID_MPEG_VIDEO_MPEG4_QPEL (V4L2_CID_MPEG_BASE+407) +#define V4L2_CID_MPEG_VIDEO_MPEG2_FRAME_HDR (V4L2_CID_MPEG_BASE+450) + /* Control IDs for VP8 streams * Although VP8 is not part of MPEG we add these controls to the MPEG class * as that class is already handling other video compression standards @@ -985,4 +987,28 @@ enum v4l2_detect_md_mode { #define V4L2_CID_DETECT_MD_THRESHOLD_GRID (V4L2_CID_DETECT_CLASS_BASE + 3) #define V4L2_CID_DETECT_MD_REGION_GRID (V4L2_CID_DETECT_CLASS_BASE + 4) +struct v4l2_ctrl_mpeg2_frame_hdr { + __u32 slice_len; + __u32 slice_pos; + enum { MPEG1, MPEG2 } type; + + __u16 width; + __u16 height; + + enum { PCT_I = 1, PCT_P, PCT_B, PCT_D } picture_coding_type; + __u8 f_code[2][2]; + + __u8 intra_dc_precision; + __u8 picture_structure; + __u8 top_field_first; + __u8 frame_pred_frame_dct; + __u8 concealment_motion_vectors; + __u8 q_scale_type; + __u8 intra_vlc_format; + __u8 alternate_scan; + + __u8 backward_index; + __u8 forward_index; +}; + #endif diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index cee906681db7..3f085f633d7e 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h @@ -636,6 +636,7 @@ struct v4l2_pix_format { #define V4L2_PIX_FMT_VC1_ANNEX_L v4l2_fourcc('V', 'C', '1', 'L') /* SMPTE 421M Annex L compliant stream */ #define V4L2_PIX_FMT_VP8 v4l2_fourcc('V', 'P', '8', '0') /* VP8 */ #define V4L2_PIX_FMT_VP9 v4l2_fourcc('V', 'P', '9', '0') /* VP9 */ +#define V4L2_PIX_FMT_MPEG2_FRAME v4l2_fourcc('M', 'G', '2', 'F') /* MPEG2 frame */ /* Vendor-specific formats */ #define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */ @@ -1581,6 +1582,7 @@ struct v4l2_ext_control { __u8 __user *p_u8; __u16 __user *p_u16; __u32 __user *p_u32; + struct v4l2_ctrl_mpeg2_frame_hdr __user *p_mpeg2_frame_hdr; void __user *ptr; }; } __attribute__ ((packed)); @@ -1625,6 +1627,9 @@ enum v4l2_ctrl_type { V4L2_CTRL_TYPE_U8 = 0x0100, V4L2_CTRL_TYPE_U16 = 0x0101, V4L2_CTRL_TYPE_U32 = 0x0102, + V4L2_CTRL_TYPE_MPEG2_FRAME_HDR = 0x0109, + + V4L2_CTRL_TYPE_PRIVATE = 0xffff, }; /* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */ -- 2.16.2
next prev parent reply other threads:[~2018-03-09 10:15 UTC|newest] Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-03-09 10:09 [PATCH 0/9] Sunxi-Cedrus driver for the Allwinner Video Engine, using the V4L2 request API Paul Kocialkowski 2018-03-09 10:09 ` Paul Kocialkowski 2018-03-09 10:09 ` [PATCH 1/9] media: vim2m: Try to schedule a m2m device run on request submission Paul Kocialkowski 2018-03-09 10:09 ` Paul Kocialkowski 2018-03-09 10:09 ` Paul Kocialkowski 2018-03-09 10:09 ` [PATCH 2/9] media: videobuf2-v4l2: Copy planes when needed in request qbuf Paul Kocialkowski 2018-03-09 10:09 ` Paul Kocialkowski 2018-03-09 10:14 ` [PATCH 3/9] v4l: Add sunxi Video Engine pixel format Paul Kocialkowski 2018-03-09 10:14 ` Paul Kocialkowski 2018-03-09 10:14 ` Paul Kocialkowski 2018-03-09 10:14 ` Paul Kocialkowski [this message] 2018-03-09 10:14 ` [PATCH 4/9] v4l: Add MPEG2 low-level decoder API control Paul Kocialkowski 2018-03-09 10:14 ` [PATCH 5/9] media: platform: Add Sunxi Cedrus decoder driver Paul Kocialkowski 2018-03-09 10:14 ` Paul Kocialkowski 2018-03-09 13:57 ` Maxime Ripard 2018-03-09 13:57 ` Maxime Ripard 2018-03-09 14:25 ` Paul Kocialkowski 2018-03-09 14:25 ` Paul Kocialkowski 2018-04-19 14:58 ` Paul Kocialkowski 2018-04-19 14:58 ` Paul Kocialkowski 2018-04-19 14:58 ` Paul Kocialkowski 2018-03-12 17:15 ` [linux-sunxi] " Joonas Kylmälä 2018-03-12 17:15 ` Joonas Kylmälä 2018-03-12 17:15 ` Joonas Kylmälä 2018-04-19 14:56 ` [linux-sunxi] " Paul Kocialkowski 2018-04-19 14:56 ` Paul Kocialkowski 2018-04-19 14:56 ` Paul Kocialkowski 2018-03-12 20:29 ` [linux-sunxi] " Joonas Kylmälä 2018-03-12 20:29 ` Joonas Kylmälä 2018-03-12 20:29 ` Joonas Kylmälä 2018-04-19 14:56 ` [linux-sunxi] " Paul Kocialkowski 2018-04-19 14:56 ` Paul Kocialkowski 2018-04-19 14:56 ` Paul Kocialkowski 2018-03-09 10:14 ` [PATCH 6/9] sunxi-cedrus: Add device tree binding document Paul Kocialkowski 2018-03-09 10:14 ` Paul Kocialkowski 2018-03-09 10:14 ` Paul Kocialkowski 2018-03-09 13:38 ` [linux-sunxi] " Priit Laes 2018-03-09 13:38 ` Priit Laes 2018-03-09 13:38 ` Priit Laes 2018-03-09 13:45 ` [linux-sunxi] " Paul Kocialkowski 2018-03-09 13:45 ` Paul Kocialkowski 2018-03-18 12:48 ` Rob Herring 2018-03-18 12:48 ` Rob Herring 2018-03-18 12:48 ` Rob Herring 2018-04-19 14:55 ` Paul Kocialkowski 2018-04-19 14:55 ` Paul Kocialkowski 2018-04-19 14:55 ` Paul Kocialkowski 2018-03-09 10:14 ` [PATCH 7/9] ARM: dts: sun5i: Use video-engine node Paul Kocialkowski 2018-03-09 10:14 ` Paul Kocialkowski 2018-03-09 10:14 ` [PATCH 8/9] ARM: dts: sun8i: add video engine support for A33 Paul Kocialkowski 2018-03-09 10:14 ` Paul Kocialkowski 2018-03-09 10:14 ` [PATCH 9/9] ARM: dts: sun7i: Add video engine support for the A20 Paul Kocialkowski 2018-03-09 10:14 ` Paul Kocialkowski 2018-03-12 18:18 ` [linux-sunxi] [PATCH 2/9] media: videobuf2-v4l2: Copy planes when needed in request qbuf Joonas Kylmälä 2018-03-12 18:18 ` Joonas Kylmälä 2018-03-12 18:18 ` Joonas Kylmälä 2018-03-09 10:18 ` [PATCH 0/9] Sunxi-Cedrus driver for the Allwinner Video Engine, using the V4L2 request API Paul Kocialkowski 2018-03-09 10:18 ` Paul Kocialkowski
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180309101445.16190-2-paul.kocialkowski@bootlin.com \ --to=paul.kocialkowski@bootlin.com \ --cc=acourbot@chromium.org \ --cc=devicetree@vger.kernel.org \ --cc=hans.verkuil@cisco.com \ --cc=icenowy@aosc.xyz \ --cc=laurent.pinchart@ideasonboard.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-media@vger.kernel.org \ --cc=linux-sunxi@googlegroups.com \ --cc=maxime.ripard@bootlin.com \ --cc=rah@settrans.net \ --cc=revestflo@gmail.com \ --cc=sakari.ailus@linux.intel.com \ --cc=thomas.petazzoni@bootlin.com \ --cc=thomas@vitsch.nl \ --cc=wens@csie.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.