drm plane helper functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This set intoduces a bunch of helper functions for help drm plane
driver writers deal with scaling and other details. Still work in progress,
escpecially the last patch.

Some open questions:
- In which file should this kind of stuff be placed?

- How should the functions be named?

- Should the scaling factor helpers also perform pre-decimation, by
  increasing the stride or skipping pixels. OMAP is the only hardware
  I've seen that can skip pixels horizontally, but increasing the stride
  should be possible practically on every hardware.

- User space API for the CSC stuff

There is also a bunch of other stuff missing from the API:
- interlaced buffers
  This should be a fairly simple addition to addfb2. I'll try to
  propose something next week.

- color keying
  One question here is whether to expose just plain key values
  or perhaps min+max, or key+mask, or both depending on what the 
  hardware actually supports. I think for now I'll just ignore the
  fact that color keying may or may not be plane specific.

- alpha blending
  Constant alpha and per pixel alpha. I don't recall of the v4l2 fourccs
  had any alpha channel stuff in them, so we may need extra fourccs, or
  just some extra per-pixel alpha enable bit in the API.

- zorder
  What's a nice API for this? A signed int with 0 being reserved for
  the "CRTC plane". Negative values would place the planes below the
  "CRTC plane", and positive values above it. Setting a plane to a
  specific zorder would move the existing stack of planes away from
  zero to make room for the new plane, any holes in the stack would
  get squashed. Does that sound reasonable?

- gamma correction
  I've seen three major variations in hardware; selection from a small
  fixed set of functions, a single curve with some number of points
  which may or may not be spaced equally, and a full LUT.

- color adjustment
  My proposal would be something close to what DirectFB uses.
  Brightness,contrast,saturation,hue adjustments. Valid values 0x0000-0xffff,
  where 0x8000 means "no change", smaller values mean decrease and larger
  values increase. The drivers would then map that to hardware specific
  values however they see fit. I think a good guideline would be to utilize
  the full range even if the hardware only supports a few adjustment steps.
  This would allow the users of the API to remain hardware agnostic.

- VC1 range mapping
  I left this out of the CSC enums for now. I'm not 100% sure, but I think
  this simply boils down to two small integers which are used to multiply
  the luma and chroma values before color space conversion. I also don't know
  what the range of the resulting luma and chroma values is, ie. is it always
  full range or not, or can that detail still be specified separately.

If no one beats me to it I'll try to come up with some actual code/structs for these
things soon. Feel free to propose something if you think I've left something important
out.
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel


[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux