On Thursday 05 June 2008 23:24:05 Hannu Savolainen wrote: > Hi all, > > There are some bugs in the current hdaudio driver that may cause empty > groups. The driver will create a new group after adding 4 to 8 controls > to the group. The purpose of this hack is to prevent the mixer screen > from becoming too wide. Unfortunately the driver may after that figure > out that none of the remaining controls are connected to anywhere. This > will leave unused groups. > > One solution might be moving this logic to ossxmix. The driver will > create just one group and ossxmix will break it to multiple "lines" if > the current box is getting too wide. Would that be implementable?
I think this is implementable though not trivial: 1. Get width (I think this is related to gdk_screen_get_width (GTK >= 2.2), and use some X function for other case?). I don't know if this works on more exotic configurations (Xinerama?), but I suspect it does. 2. Check constantly in load_devinfo that adding a control won't get past the width. 3. If so, decide to move/split group downward. 4. Gtk only has concept of Horizontal/Vertical boxes. We'll have to recreate some of the box hierarchy in order to get it lower. > The mixer API is developing to a direction where drivers can create > empty groups in advance and the populate them later "on demand". This > may cause problems if ossmix just throws away all groups it thinks are > empty. It is acceptable if the group h/vboxes are not shown until > something is created inside them. At the moment, the only way I know of to discover whether new control have been added with the current API is to poll the device for total number of mixers (via SNDCTL_MIX_NREXT) and to compare this to the previous number (this is what ossxmix does for VMIX). If so, than the groups may be ignored/throwed away and it won't matter. (BTW, If controls can also be removed, and not just added, than there's an edge case: A. Total number can be the same even in a case of change. (1-1=0) B. ossxmix polls the controls, if all the newly added mixers have the same control numbers than get_value won't fail and the display won't be reloaded. Not sure how to really fix this: A separate flag in SNDCTL_MIXERINFO to inform of such changes? Or maybe changing a group's modify_counter in SNDCTL_MIX_EXTINFO?) Yours, Yair K. _______________________________________________ oss-devel mailing list oss-devel@mailman.opensound.com http://mailman.opensound.com/mailman/listinfo/oss-devel