linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC] SDI timings and API
@ 2016-06-01 14:46 Charles-Antoine Couret
  0 siblings, 0 replies; only message in thread
From: Charles-Antoine Couret @ 2016-06-01 14:46 UTC (permalink / raw)
  To: Linux Media Mailing List; +Cc: Petr Nohavica, Hans Verkuil

Hello all,
The purpose of this RFC is to define SDI timings structure and potentially the associated API in the V4L2 API.

** Context **

Currently, V4L2 API has a structure to define CEA-861 / VESA timings. If these timings are common in monitor and general market, in the industry or television context there are some components which used SDI timings with different properties.

** Issues **

There are not the notion of front/back/syncporch. Instead, there are vertical / horizontal blanking defined before the video signal. This blanking could have ancillary data used by audio signal or other metadata.
The horizontal blanking are delimited by EAV and SAV words, because of SDI is a digital interface.

Some timings are very... strange. Like the SMPTE-125M:

The organization of lines :
Line 1 to 9 : blanking
Line 10 to 20 : options (ancillary data)
Line 21 to 264 : field 1
Line 265 to 272 : blanking
Line 273 to 282 : options
Line 283 to 525 : field 2

The blanking lines are not regular: 19 then 18 lines.
The size of fields are different too: 243 then 242.

The Field signal is changed in line 266 (during the second vertical blanking !)
* Complete format size (with blanking) ; 858x525
* Image size : 720x487 (yes, a odd number)
* Pixelclock : 27 MHz
* Interlaced image

The current v4l2_bt_timings structure can not represent that correctly.

Notice that some SDI / VESA components could detect automatically input signal format. A way to represent auto-mode activation should be useful.

** Possible solutions **

Indeed, it needs a new constant: V4L2_DV__STD_SDI (or other name).

I'm working on the first new structure proposal:

struct v4l2_sdi_timings {
	__u32   width;
        __u32   height;
        __u32   interlaced;
        __u32   polarities;
        __u64   pixelclock;
        __u32   hanc;
        __u32   vanc1;
        __u32   vanc2; 		/* if interlaced */
        __u32   field1;
        __u32   field2; 	/* if interlaced */
        __u32   standards;
        __u32   flags;		/* add auto-mode flag */
        __u32   reserved[?];
} __attribute__ ((packed));

The auto-mode should be set into flags value (V4L2_DV_AUTO_MODE ?). Or add a specific field in this structure, but I think it is not necessary.
We need to add this structure into v4l2_dv_timings I think.
But, if this solution is used, we need to rewrite some generic functions about timings in the V4L2 API...

It was a RFC based on my difficulties to write a driver for GS1662. Maybe others components or elements have other issues and need a different solution.
Thanks in advance.
Regards,

Charles-Antoine Couret

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2016-06-01 16:03 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-01 14:46 [RFC] SDI timings and API Charles-Antoine Couret

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).