Hi Denis,

as always, thanks for the detailed reply.

> With one layer (fb ioctls) limited to pixel aligned fullscreen output (no
DLCAPS_SCREEN_POS/SIZE)
> and no mixers, encoders or outputs, the fbdev system module implies
encoder settings (mode
> switching) to keep the (virtual) mixer's dimension aligned with the new
layer size AND output
> format (display mode).

OK, that's consistent with how I understood it.

>> In my system, I have a "N screen x M layer" system and *all* layer
handling
>> is done by the gfx driver - I dont expose an explicit primarySetRegion;
so
>> the primary layer is treated no differently to any other layer.

> So you have one layer driver implementation for all planes, that's fine.

Cool.

>> For this reason, I currently expect modes for all screens to have been
set
>> as required before the app is run, and resizing the primary layer just
>> moves it within the existing mode.

> That has been the behaviour on STB like platforms, most likely with the
encoder
> settings and mixer dimensions fixed to 720x576 or 720x480.
> It's also the correct behaviour, as opposed to the fbdev implementation
which
> suffers from cruft sitting between CoreLayer API and the hardware.

OK - that's good to hear - it does feel cleaner, more flexible and
consistent this way.

> Do you have distinct groups of layers, mixers and encoders? Otherwise you
would
> have one (primary) 'screen' entity with multiple outputs for multiple
displays (screens).

I have multiple screens, each screen has its own distinct set of layers.
The encoder and mixer aren't currently exposed - so each screen has an
implicit single encoder and mixer.
So, I guess I'm really trying to decide how best (to what degree) to expose
configuration of the screen's encoder/mixer.
Hooking the base layer resizing to trigger a mode change is a simple way
that provides behaviour consistent with fbdev type implementations.
But this would only provide for resolution change and means that the base
layer is always aligned to the mode - i.e. is always 'fullscreen'.
I think this is why you suggest using the encoder API since that should
allows more flexibility...

> Please look at the encoder and maybe mixer configuration instead, letting
layers
> be independent viewports mixed in another coordinate system (mixer
dimension) for
> display via one of the encoders.

This is where I become a little unstuck. It's not clear to me with the
current interfaces how the client should specify the mode.
I think it's something like this:

- Establish available encoders
      IDirectFBScreen.GetEncoderDescriptions( FBScreenEncoderDescription )

- Configure screen encoder (PAL, NTSC etc)
      IDirectFBScreen.SetEncoderConfiguration( 0,  DFBScreenEncoderConfig )

- Configure screen output to use the encoder and connector.
      IDirectFBScreen.SetOutputConfiguration( 0,  DFBScreenOutputConfig )

In FBScreenEncoderDescription, DFBScreenEncoderType provides for either
DSET_CRTC or DSET_TV.
In DFBScreenEncoderConfig, DFBScreenEncoderTVStandards provides DSETV_PAL,
DSETV_NTSC etc.

So, I think the client might set an encoder of type DSET_TV to say output
DSETV_PAL (which will implicitly define resolution and frequency).
Is that correct?

What is DSET_CRTC? Is it 'cathode ray tube'? For type DSET_CRTC how are
timings (resolution and frequency) specified?
Likewise, how would HD modes be selected? - e.g. 720p etc?

It looks like there should be an equivalent entry to
DFBScreenEncoderTVStandards where the mode is fully configurable.
e.g. DFBScreenEncoderMode, which is a struct containing timing related
fields - perhaps just "width,height,frequency"
(which is more or less what you are suggesting I think).

Of course this 'generic device' might not actually be a CRT or TV - so
perhaps it would be best to add a DSET_GENERIC to DFBScreenEncoderType.
Or would DSET_UNKNOWN be sufficient here?

So a client can select an encoder of type DSET_GENERIC (or DSET_UNKNOWN)
and then provide resolution and frequency using DFBScreenEncoderMode.
DFBScreenEncoderDescription should expose support for variable modes
(timings) perhaps in the DFBScreenEncoderCapabilities field (e.g.
DSECAPS_MODE)

> Does DSETV_DIGITAL plus resolution, scanmode etc. suffice?
Instead of adding new type to DFBScreenEncoderType? Perhaps...
It may be digital or analog, LCD panel, VGA etc - so a new
DFBScreenEncoderType entry of 'GENERIC' might be useful as a catch-all.

BTW, it seems the client can specify DFBScreenOutputSignals in
SetEncoderConfiguration() and SetOutputConfiguration() - why is this?

Regards,
Jason.


_______________________________________________
directfb-dev mailing list
directfb-dev@directfb.org
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev

Reply via email to