From: Paul Kocialkowski <paul.kocialkowski-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
To: linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Cc: Mauro Carvalho Chehab
<mchehab-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
Maxime Ripard
<maxime.ripard-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>,
Chen-Yu Tsai <wens-jdAy2FN1RRM@public.gmane.org>,
Pawel Osciak <pawel-FA/gS7QP4orQT0dZR+AlfA@public.gmane.org>,
Marek Szyprowski
<m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
Kyungmin Park
<kyungmin.park-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
Hans Verkuil
<hans.verkuil-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>,
Sakari Ailus
<sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
Philipp Zabel <p.zabel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org>,
Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
Alexandre Courbot
<acourbot-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>,
Tomasz Figa <tfiga-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>,
Paul Kocialkowski
<paul.kocialkowski-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
Subject: [PATCH v2 05/10] media: v4l: Add definitions for MPEG2 frame format and header metadata
Date: Thu, 19 Apr 2018 17:45:31 +0200 [thread overview]
Message-ID: <20180419154536.17846-1-paul.kocialkowski@bootlin.com> (raw)
In-Reply-To: <20180419154124.17512-1-paul.kocialkowski-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
Stateless video decoding engines require both the MPEG slices and
associated metadata from the video stream in order to decode frames.
This introduces definitions for a new pixel format, describing buffers
with MPEG2 slice data, as well as a control structure for passing the
frame header (metadata) to drivers.
Signed-off-by: Paul Kocialkowski <paul.kocialkowski-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
Signed-off-by: Florent Revest <florent.revest-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
---
drivers/media/v4l2-core/v4l2-ctrls.c | 10 ++++++++++
drivers/media/v4l2-core/v4l2-ioctl.c | 1 +
include/uapi/linux/v4l2-controls.h | 26 ++++++++++++++++++++++++++
include/uapi/linux/videodev2.h | 3 +++
4 files changed, 40 insertions(+)
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index ba05a8b9a095..fcdc12b9a9e0 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -761,6 +761,7 @@ const char *v4l2_ctrl_get_name(u32 id)
case V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE: return "Vertical MV Search Range";
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";
@@ -1152,6 +1153,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;
@@ -1472,6 +1476,9 @@ static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx,
return -ERANGE;
return 0;
+ case V4L2_CTRL_TYPE_MPEG2_FRAME_HDR:
+ return 0;
+
default:
return -EINVAL;
}
@@ -2046,6 +2053,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 468c3c65362d..8070203da5d2 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -1273,6 +1273,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..8431b2a540c7 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_ref_index;
+ __u8 forward_ref_index;
+};
+
#endif
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 31b5728b56e9..4b8336f7bcf0 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -635,6 +635,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 */
@@ -1586,6 +1587,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));
@@ -1631,6 +1633,7 @@ 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,
};
/* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
--
2.16.3
next prev parent reply other threads:[~2018-04-19 15:45 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-19 15:41 [PATCH v2 00/10] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
[not found] ` <20180419154124.17512-1-paul.kocialkowski-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
2018-04-19 15:41 ` [PATCH v2 01/10] media: v4l2-ctrls: Add missing v4l2 ctrl unlock Paul Kocialkowski
[not found] ` <20180419154124.17512-2-paul.kocialkowski-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
2018-04-20 7:23 ` Maxime Ripard
2018-04-20 13:38 ` Hans Verkuil
2018-04-19 15:41 ` [PATCH v2 02/10] media-request: Add a request complete operation to allow m2m scheduling Paul Kocialkowski
2018-04-20 7:38 ` Alexandre Courbot
[not found] ` <20180419154124.17512-3-paul.kocialkowski-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
2018-04-20 13:48 ` Hans Verkuil
2018-05-04 8:03 ` Paul Kocialkowski
2018-04-24 8:28 ` Sakari Ailus
2018-04-19 15:41 ` [PATCH v2 03/10] videobuf2-core: Add helper to get buffer private data from media request Paul Kocialkowski
2018-04-24 8:37 ` Sakari Ailus
[not found] ` <20180419154124.17512-4-paul.kocialkowski-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
2018-04-20 13:43 ` Hans Verkuil
2018-05-04 8:03 ` Paul Kocialkowski
2018-04-19 15:41 ` [PATCH v2 04/10] media: vim2m: Implement media request complete op to schedule m2m run Paul Kocialkowski
2018-04-19 15:45 ` Paul Kocialkowski [this message]
2018-04-20 9:51 ` [PATCH v2 05/10] media: v4l: Add definitions for MPEG2 frame format and header metadata Tomasz Figa
[not found] ` <CAAFQd5Dq4OeshtFaoxFK2357+-_=hzh0C7W=zksTWtaDuDCiGg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-05-04 8:24 ` Paul Kocialkowski
[not found] ` <20180419154536.17846-1-paul.kocialkowski-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
2018-04-20 13:57 ` Hans Verkuil
[not found] ` <4e6c4cb7-01b2-3278-4f12-c0ce8cd82ecc-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
2018-05-04 8:22 ` Paul Kocialkowski
2018-04-20 14:00 ` Hans Verkuil
2018-05-04 8:48 ` Paul Kocialkowski
2018-04-24 9:01 ` Sakari Ailus
[not found] ` <20180424090150.rtbejfjaddd6wysk-z7MJbOB4PBP+e+fPlCVrcFDQ4js95KgL@public.gmane.org>
2018-05-04 8:21 ` Paul Kocialkowski
2018-04-19 15:45 ` [PATCH v2 06/10] media: v4l: Add definition for Allwinner's MB32-tiled NV12 format Paul Kocialkowski
[not found] ` <20180419154536.17846-2-paul.kocialkowski-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
2018-04-20 13:59 ` Hans Verkuil
[not found] ` <198e991c-1052-5bfb-f397-0e7d388b3c00-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org>
2018-05-04 7:58 ` Paul Kocialkowski
2018-04-19 15:45 ` [PATCH v2 07/10] media: platform: Add Sunxi-Cedrus VPU decoder driver Paul Kocialkowski
2018-04-24 9:13 ` Sakari Ailus
[not found] ` <20180424091328.jsqp36nxekuj23am-z7MJbOB4PBP+e+fPlCVrcFDQ4js95KgL@public.gmane.org>
2018-05-04 7:57 ` Paul Kocialkowski
2018-04-19 15:45 ` [PATCH v2 08/10] dt-bindings: media: Document bindings for the Sunxi-Cedrus VPU driver Paul Kocialkowski
[not found] ` <20180419154536.17846-4-paul.kocialkowski-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
2018-04-19 16:04 ` Philipp Zabel
2018-04-20 1:31 ` Tomasz Figa
[not found] ` <CAAFQd5DT_xjUbZzFOoKk7_duiSZ8Awb1J=0dPEhVTBk0P3gppA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2018-04-20 7:22 ` Paul Kocialkowski
[not found] ` <5fa80b1e88ad2a215f51ea3a2b9b62274fa9b1ec.camel-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
2018-04-27 3:04 ` Rob Herring
2018-05-04 7:56 ` Paul Kocialkowski
[not found] ` <ce85c790b639bf9101b8c33526bdf149070bcc03.camel-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
2018-05-04 8:12 ` Maxime Ripard
2018-04-27 3:06 ` Rob Herring
2018-04-19 15:45 ` [PATCH v2 09/10] ARM: dts: sun7i-a20: Add Video Engine and reserved memory nodes Paul Kocialkowski
[not found] ` <20180419154536.17846-5-paul.kocialkowski-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
2018-04-20 7:39 ` Maxime Ripard
2018-05-04 7:49 ` Paul Kocialkowski
[not found] ` <82057e2f734137a3902d9313c228b01ceb345ee7.camel-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
2018-05-04 8:40 ` Maxime Ripard
2018-05-04 8:47 ` Paul Kocialkowski
[not found] ` <e8cd340605ab4db8ebf2888a4fce645e8bc481d0.camel-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
2018-05-04 8:54 ` Paul Kocialkowski
2018-05-04 9:15 ` Maxime Ripard
2018-05-04 12:04 ` Paul Kocialkowski
[not found] ` <fc064c3f1534a6082dc2b4e18454e054b53e5aee.camel-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
2018-05-04 13:40 ` Maxime Ripard
2018-05-04 13:57 ` Paul Kocialkowski
[not found] ` <dd6b502c66aad1fe34eb0b16a1e44a4ebfd172f1.camel-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org>
2018-05-04 15:44 ` Maxime Ripard
2018-04-19 15:45 ` [PATCH v2 10/10] ARM: dts: sun8i-a33: " 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=20180419154536.17846-1-paul.kocialkowski@bootlin.com \
--to=paul.kocialkowski-ldxbnhwyfcjbdgjk7y7tuq@public.gmane.org \
--cc=acourbot-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=arnd-r2nGTMty4D4@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=hans.verkuil-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org \
--cc=kyungmin.park-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-sunxi-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
--cc=m.szyprowski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=maxime.ripard-LDxbnhwyfcJBDgjK7y7TUQ@public.gmane.org \
--cc=mchehab-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=p.zabel-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org \
--cc=pawel-FA/gS7QP4orQT0dZR+AlfA@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=tfiga-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=wens-jdAy2FN1RRM@public.gmane.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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).