Re: [PATCH v8 0/7] TDA1997x HDMI video reciver

From: Hans Verkuil
Date: Thu Feb 08 2018 - 06:56:49 EST


On 02/08/18 11:46, Philipp Zabel wrote:
> On Wed, 2018-02-07 at 23:19 +0100, Hans Verkuil wrote:
>> On 02/07/2018 11:05 PM, Tim Harvey wrote:
>>> On Wed, Feb 7, 2018 at 1:09 AM, Hans Verkuil <hverkuil@xxxxxxxxx> wrote:
>>>> On 02/07/18 09:22, Hans Verkuil wrote:
>>>>> On 02/07/2018 12:29 AM, Tim Harvey wrote:
>>>>>> Media Controller ioctls:
>>>>>> fail: v4l2-test-media.cpp(141): ent.function ==
>>>>>> MEDIA_ENT_F_V4L2_SUBDEV_UNKNOWN
>>>>>
>>>>> Weird, this shouldn't happen. I'll look into this a bit more.
>>>>
>>>> Can you run 'mc_nextgen_test -e -i' and post the output?
>>>>
>>>> It's found in contrib/test.
>>>>
>>>
>>> root@ventana:~# ./v4l-utils/contrib/test/mc_nextgen_test -e -i
>>> Device: imx-media (driver imx-media)
>>> Bus:
>>> version: 0
>>> number of entities: 24
>>> number of interfaces: 24
>>> number of pads: 48
>>> number of links: 50
>>> entity entity#1: 'unknown entity type' adv7180 2-0020, 1 pad(s), 1 source(s)
>>> entity entity#3: 'unknown entity type' tda19971 2-0048, 1 pad(s), 1 source(s)
>>> entity entity#5: 'unknown entity type' ipu1_vdic, 3 pad(s), 2 sink(s),
>>> 1 source(s)
>>> entity entity#9: 'unknown entity type' ipu2_vdic, 3 pad(s), 2 sink(s),
>>> 1 source(s)
>>> entity entity#13: 'unknown entity type' ipu1_ic_prp, 3 pad(s), 1
>>> sink(s), 2 source(s)
>>> entity entity#17: 'unknown entity type' ipu1_ic_prpenc, 2 pad(s), 1
>>> sink(s), 1 source(s)
>>> entity entity#20: 'V4L I/O' ipu1_ic_prpenc capture, 1 pad(s), 1 sink(s)
>>> entity entity#26: 'unknown entity type' ipu1_ic_prpvf, 2 pad(s), 1
>>> sink(s), 1 source(s)
>>> entity entity#29: 'V4L I/O' ipu1_ic_prpvf capture, 1 pad(s), 1 sink(s)
>>> entity entity#35: 'unknown entity type' ipu2_ic_prp, 3 pad(s), 1
>>> sink(s), 2 source(s)
>>> entity entity#39: 'unknown entity type' ipu2_ic_prpenc, 2 pad(s), 1
>>> sink(s), 1 source(s)
>>> entity entity#42: 'V4L I/O' ipu2_ic_prpenc capture, 1 pad(s), 1 sink(s)
>>> entity entity#48: 'unknown entity type' ipu2_ic_prpvf, 2 pad(s), 1
>>> sink(s), 1 source(s)
>>> entity entity#51: 'V4L I/O' ipu2_ic_prpvf capture, 1 pad(s), 1 sink(s)
>>> entity entity#57: 'unknown entity type' ipu1_csi0, 3 pad(s), 1
>>> sink(s), 2 source(s)
>>> entity entity#61: 'V4L I/O' ipu1_csi0 capture, 1 pad(s), 1 sink(s)
>>> entity entity#67: 'unknown entity type' ipu1_csi1, 3 pad(s), 1
>>> sink(s), 2 source(s)
>>> entity entity#71: 'V4L I/O' ipu1_csi1 capture, 1 pad(s), 1 sink(s)
>>> entity entity#77: 'unknown entity type' ipu2_csi0, 3 pad(s), 1
>>> sink(s), 2 source(s)
>>> entity entity#81: 'V4L I/O' ipu2_csi0 capture, 1 pad(s), 1 sink(s)
>>> entity entity#87: 'unknown entity type' ipu2_csi1, 3 pad(s), 1
>>> sink(s), 2 source(s)
>>> entity entity#91: 'V4L I/O' ipu2_csi1 capture, 1 pad(s), 1 sink(s)
>>> entity entity#97: 'unknown entity type' ipu1_csi0_mux, 3 pad(s), 2
>>> sink(s), 1 source(s)
>>> entity entity#101: 'unknown entity type' ipu2_csi1_mux, 3 pad(s), 2
>>> sink(s), 1 source(s)
>>
>> Yuck. So nobody in imx (and adv7180!) is setting a valid function.
>> And I see the mc_nextgen_test.c doesn't know all the latest functions
>> anyway.
>
> That's probably because for most of the entities it's a bit unclear
> which function should be assigned.

Well, that's one reason. The other is that there never was a utility
to test this :-)

> ipu[12]_csi[01]_mux are video multiplexers, so MEDIA_ENT_F_VID_MUX. I
> thought those should already be set correctly in the video-mux driver.

They are. The mc_nextgen_test, media-ctl and now v4l2-ctl/v4l2-compliance
all have their own list of functions that they know about and it's all
different. It's one of the things I want to fix.

> ipu[12]_csi[01] are the interfaces to the outside parallel busses, but
> they can also 'downscale' by skipping, skip frames and pack or expand
> pixels from the bus into the internal FIFOs that lead to the next
> element. These are not MEDIA_ENT_F_VID_IF_BRIDGE, are they?

Yes, they are. One limitation of the current API is that you cannot
represent correctly devices with multiple functions. This is planned for
a long time now, but nobody actually did the work. So for now just fill
in the primary function with a comment that in the future other functions
should be set as well.

> ipu[12]_vdic are mainly deinterlacers, so a new function
> MEDIA_ENT_F_PROC_VIDEO_DEINTERLACER ? These entities could also be used
> as composers in a mem2mem scenario (MEDIA_ENT_F_PROC_VIDEO_COMPOSER ?),
> but this is currently not supported.

Yes, we need a PROC_VIDEO_DEINTERLACER function.

>
> ipu[12]_ic_prp is just a tee element that feeds both ipu[12]_ic_prpenc
> and ipu[12]_ic_prpvf. These are both scalers and colorspace converters.
> MEDIA_ENT_F_PROC_VIDEO_SCALER ?
> MEDIA_ENT_F_PROC_VIDEO_PIXEL_ENC_CONV ?

The tee element would be a new PROC_VIDEO_SPLITTER function.

The other two would be scalers, but should add the VIDEO_PIXEL_ENC_CONV
function once it is possible to do so.

>
> "ipu[12]_csi[01] capture" are the DMA elements writing to memory, so
> MEDIA_ENT_F_PROC_VIDEO_PIXEL_FORMATTER ?

These are likely to be filled correctly already. I've just added a commit
to v4l2-compliance to make it easier to see what function is used:

v4l2-compliance -m0 -v

Regards,

Hans