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

Reply via email to