Quoting Ville Syrjälä: > Attached are some patches that improve field parity and triple buffering > in the matrox driver.
Impressive :) > I've moved the buffer flipping completely to the kernel which should make > it less probable that the hardware flips the buffers when we're not > looking. The other major benefit is that field parity no longer causes the > Flip() call to block. The application will continue without further > delays. This is especially nice with mplayer since it's single threaded. Great :) > The field parity part is obviously for CRTC2 but the patch makes triple > buffering more robust on BES too. > > One patch is for matroxfb obviously and one for DirectFB. > > The third patch is for mplayer and it makes dfbmga use the field parity > information from the codec. That should make it possible to watch > soft-telecined stuff on the TV with near perfect field order. > > Oh and if you try this use CVS DirectFB since there was a problem with > dynamic field parity changes. I fixed it yeasterday (or was it the day > before that). Anyways everyone who likes this field parity stuff should > definately try these patches ;) I'm sure there will be comparable ioctls in other drivers soon, or even a new standardized flip/wait ioctl that we've talked about. This is a BIG step towards it :) > + FBDev *dfb_fbdev = dfb_system_data(); > + struct matrox_address address; > + > + bes_calc_regs( mdrv, mbes, &mbes->config, surface ); > + > + address.device = MATROX_ADDRESS_DEVICE_BES; > + address.field = -1; > + address.count = mbes->last_count + 1; > + address.offset[0] = mbes->regs.besA1ORG; > + address.offset[1] = mbes->regs.besA2ORG; > + address.offset[2] = mbes->regs.besA1CORG; > + address.offset[3] = mbes->regs.besA2CORG; > + address.offset[4] = mbes->regs.besA1C3ORG; > + address.offset[5] = mbes->regs.besA2C3ORG; > + > + if (ioctl( dfb_fbdev->fd, MATROXFB_ADDRESS, &address )) > + D_ERROR( "DirectFB/Matrox/BES Address ioctl() failed!\n" ); > + > + dfb_surface_flip_buffers( surface, address.count == > mbes->last_count ); > + > + mbes->last_count = address.count; YES, you're using the second argument to dfb_surface_flip_buffers()! I've never seen it in action after adding it :) Time to hook the primary layer and implement Flip() with that feature on CRTC1 ;) -- Best regards, Denis Oliver Kropp .------------------------------------------. | DirectFB - Hardware accelerated graphics | | http://www.directfb.org/ | "------------------------------------------" _______________________________________________ directfb-dev mailing list [email protected] http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-dev
