From: paul.kocialkowski@bootlin.com (Paul Kocialkowski)
To: linux-arm-kernel@lists.infradead.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@bootlin.com>
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@bootlin.com>
Signed-off-by: Florent Revest <florent.revest@free-electrons.com>
---
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
2018-04-19 15:41 ` [PATCH v2 01/10] media: v4l2-ctrls: Add missing v4l2 ctrl unlock Paul Kocialkowski
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
2018-04-20 13:48 ` Hans Verkuil
2018-04-24 8:28 ` Sakari Ailus
2018-05-04 8:03 ` Paul Kocialkowski
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-20 13:43 ` Hans Verkuil
2018-04-24 8:37 ` Sakari Ailus
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
2018-05-04 8:24 ` Paul Kocialkowski
2018-04-20 13:57 ` Hans Verkuil
2018-05-04 8:22 ` Paul Kocialkowski
2018-04-20 14:00 ` Hans Verkuil
2018-04-24 9:01 ` Sakari Ailus
2018-05-04 8:21 ` Paul Kocialkowski
2018-05-04 8:48 ` Paul Kocialkowski
2018-04-19 15:45 ` [PATCH v2 06/10] media: v4l: Add definition for Allwinner's MB32-tiled NV12 format Paul Kocialkowski
2018-04-20 13:59 ` Hans Verkuil
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
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
2018-04-19 16:04 ` Philipp Zabel
2018-04-20 1:31 ` Tomasz Figa
2018-04-20 7:22 ` Paul Kocialkowski
2018-04-27 3:04 ` Rob Herring
2018-05-04 7:56 ` Paul Kocialkowski
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
2018-04-20 7:39 ` Maxime Ripard
2018-05-04 7:49 ` Paul Kocialkowski
2018-05-04 8:40 ` Maxime Ripard
2018-05-04 8:47 ` Paul Kocialkowski
2018-05-04 8:54 ` Paul Kocialkowski
2018-05-04 9:15 ` Maxime Ripard
2018-05-04 12:04 ` Paul Kocialkowski
2018-05-04 13:40 ` Maxime Ripard
2018-05-04 13:57 ` Paul Kocialkowski
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@bootlin.com \
--cc=linux-arm-kernel@lists.infradead.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).