mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
video: add hdr metadata and color aspects support
PD#167533 add hdr metadata and color aspects support fix cts below test cases: android.media.cts.DecoderTest#testH265HDR10StaticMetadata android.media.cts.DecoderTest#testH264ColorAspects android.media.cts.DecoderTest#testH265ColorAspects android.media.cts.DecoderTest#testMPEG2ColorAspectsTV Change-Id: I7a7f3b3d7ec1079c4b4094e3c6b9a14c5fe9d791 Signed-off-by: peter wang <peter.wang@amlogic.com> Signed-off-by: jintao xu <jintao.xu@amlogic.com>
This commit is contained in:
@@ -128,6 +128,22 @@ static int vidioc_s_ctrl(struct file *file, void *priv,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vidioc_g_parm(struct file *file, void *priv,
|
||||
struct v4l2_streamparm *parms)
|
||||
{
|
||||
struct ionvideo_dev *dev = video_drvdata(file);
|
||||
struct v4l2_amlogic_parm *ap
|
||||
= (struct v4l2_amlogic_parm *)&parms->parm.capture;
|
||||
|
||||
if (parms->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
return -EINVAL;
|
||||
|
||||
memset(ap, 0, sizeof(struct v4l2_amlogic_parm));
|
||||
*ap = dev->am_parm;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct ionvideo_fmt *__get_format(u32 pixelformat)
|
||||
{
|
||||
const struct ionvideo_fmt *fmt;
|
||||
@@ -318,6 +334,9 @@ static int ionvideo_fillbuff(struct ionvideo_dev *dev,
|
||||
dev->wait_ge2d_timeout = false;
|
||||
videoc_omx_compute_pts(dev, vf);
|
||||
buf->timecode.frames = 0;
|
||||
dev->am_parm.signal_type = vf->signal_type;
|
||||
dev->am_parm.master_display_colour
|
||||
= vf->prop.master_display_colour;
|
||||
vf_put(vf, dev->vf_receiver_name);
|
||||
buf->timestamp.tv_sec = dev->pts >> 32;
|
||||
buf->timestamp.tv_usec = dev->pts & 0xFFFFFFFF;
|
||||
@@ -876,6 +895,7 @@ static const struct v4l2_ioctl_ops ionvideo_ioctl_ops = {
|
||||
.vidioc_streamon = vidioc_streamon,
|
||||
.vidioc_streamoff = vidioc_streamoff,
|
||||
.vidioc_s_ctrl = vidioc_s_ctrl,
|
||||
.vidioc_g_parm = vidioc_g_parm,
|
||||
};
|
||||
|
||||
static const struct video_device ionvideo_template = {
|
||||
|
||||
@@ -74,6 +74,13 @@ do { \
|
||||
|
||||
#define PPMGR2_CANVAS_INDEX_SRC (PPMGR2_CANVAS_INDEX + 3)
|
||||
|
||||
/* v4l2_amlogic_parm must < u8[200] */
|
||||
struct v4l2_amlogic_parm {
|
||||
u32 signal_type;
|
||||
struct vframe_master_display_colour_s
|
||||
master_display_colour;
|
||||
};
|
||||
|
||||
struct v4l2q_s {
|
||||
int rp;
|
||||
int wp;
|
||||
@@ -303,6 +310,7 @@ struct ionvideo_dev {
|
||||
struct mutex mutex_output;
|
||||
struct v4l2_buffer ionvideo_input[IONVIDEO_POOL_SIZE + 1];
|
||||
bool wait_ge2d_timeout;
|
||||
struct v4l2_amlogic_parm am_parm;
|
||||
};
|
||||
|
||||
unsigned int get_ionvideo_debug(void);
|
||||
|
||||
@@ -294,6 +294,23 @@ static const struct vframe_receiver_op_s video_vf_receiver = {
|
||||
* Videobuf operations
|
||||
* ------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
static int vidioc_g_parm(struct file *file, void *priv,
|
||||
struct v4l2_streamparm *parms)
|
||||
{
|
||||
struct vivi_dev *dev = video_drvdata(file);
|
||||
struct v4l2_amlogic_parm *ap
|
||||
= (struct v4l2_amlogic_parm *)&parms->parm.capture;
|
||||
|
||||
if (parms->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
|
||||
return -EINVAL;
|
||||
|
||||
memset(ap, 0, sizeof(struct v4l2_amlogic_parm));
|
||||
*ap = dev->am_parm;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int buffer_setup(struct videobuf_queue *vq, unsigned int *count,
|
||||
unsigned int *size)
|
||||
{
|
||||
@@ -525,6 +542,9 @@ static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p)
|
||||
return -EAGAIN;
|
||||
}
|
||||
dev->vf->omx_index = dev->frame_num;
|
||||
dev->am_parm.signal_type = dev->vf->signal_type;
|
||||
dev->am_parm.master_display_colour
|
||||
= dev->vf->prop.master_display_colour;
|
||||
|
||||
if (dev->vf->pts_us64) {
|
||||
dev->first_frame = 1;
|
||||
@@ -774,6 +794,8 @@ static const struct v4l2_ioctl_ops amlvideo_ioctl_ops = {
|
||||
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||
.vidiocgmbuf = vidiocgmbuf,
|
||||
#endif
|
||||
.vidioc_g_parm = vidioc_g_parm,
|
||||
|
||||
};
|
||||
|
||||
static struct video_device amlvideo_template = {
|
||||
|
||||
@@ -18,9 +18,17 @@
|
||||
#ifndef AMLVIDEO_H_
|
||||
#define AMLVIDEO_H_
|
||||
|
||||
#include <linux/amlogic/media/vfm/vframe.h>
|
||||
|
||||
#define AMLVIDEO_POOL_SIZE 16
|
||||
|
||||
/* v4l2_amlogic_parm must < u8[200] */
|
||||
struct v4l2_amlogic_parm {
|
||||
u32 signal_type;
|
||||
struct vframe_master_display_colour_s
|
||||
master_display_colour;
|
||||
};
|
||||
|
||||
struct vivi_fmt {
|
||||
char *name;
|
||||
u32 fourcc; /* v4l2 format id */
|
||||
@@ -80,6 +88,7 @@ struct vivi_dev {
|
||||
struct vframe_provider_s video_vf_prov;
|
||||
struct vframe_receiver_s video_vf_recv;
|
||||
u32 frame_num;
|
||||
struct v4l2_amlogic_parm am_parm;
|
||||
};
|
||||
|
||||
struct vivi_fh {
|
||||
|
||||
Reference in New Issue
Block a user