From 320b7f08f457455f1d16b4c36d149bdc3f6ceead Mon Sep 17 00:00:00 2001 From: Zhenyu Wang Date: Wed, 26 Sep 2007 15:02:33 +0800 Subject: [PATCH] Revert to origin xvmc setup steps We have to grab xvadaptor's PutImage earlier than xv init, otherwise no chance to do that.. --- src/i830_hwmc.c | 16 ++++++++++++---- src/i830_hwmc.h | 3 ++- src/i830_video.c | 13 +++++++++---- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/i830_hwmc.c b/src/i830_hwmc.c index b651072b..5cc37be5 100644 --- a/src/i830_hwmc.c +++ b/src/i830_hwmc.c @@ -58,8 +58,6 @@ Bool intel_xvmc_probe(ScrnInfoPtr pScrn) else ret = intel_xvmc_set_driver(&i965_xvmc_driver); */ - if (ret) - pI830->XvMCEnabled = TRUE; } else { ErrorF("Your chipset doesn't support XvMC.\n"); return FALSE; @@ -74,10 +72,9 @@ void intel_xvmc_finish(ScrnInfoPtr pScrn) (*xvmc_driver->fini)(pScrn); } -Bool intel_xvmc_init(ScreenPtr pScreen, XF86VideoAdaptorPtr xv_adaptor) +Bool intel_xvmc_xv_init(ScreenPtr pScreen, XF86VideoAdaptorPtr xv_adaptor) { ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; - I830Ptr pI830 = I830PTR(pScrn); if (!xvmc_driver) { ErrorF("Failed to probe XvMC driver.\n"); @@ -88,11 +85,22 @@ Bool intel_xvmc_init(ScreenPtr pScreen, XF86VideoAdaptorPtr xv_adaptor) ErrorF("XvMC driver initialize failed.\n"); return FALSE; } + return TRUE; +} + +Bool intel_xvmc_init(ScreenPtr pScreen) +{ + ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; + I830Ptr pI830 = I830PTR(pScrn); + + if (!xvmc_driver) + return FALSE; if (xf86XvMCScreenInit(pScreen, 1, &xvmc_driver->adaptor)) { xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[XvMC] %s driver initialized.\n", xvmc_driver->name); + pI830->XvMCEnabled = TRUE; } else { intel_xvmc_finish(pScrn); pI830->XvMCEnabled = FALSE; diff --git a/src/i830_hwmc.h b/src/i830_hwmc.h index 539621b9..e295da64 100644 --- a/src/i830_hwmc.h +++ b/src/i830_hwmc.h @@ -51,7 +51,8 @@ extern struct intel_xvmc_driver i915_xvmc_driver; extern Bool intel_xvmc_set_driver(struct intel_xvmc_driver *); extern Bool intel_xvmc_probe(ScrnInfoPtr); -extern Bool intel_xvmc_init(ScreenPtr, XF86VideoAdaptorPtr); +extern Bool intel_xvmc_xv_init(ScreenPtr, XF86VideoAdaptorPtr); +extern Bool intel_xvmc_init(ScreenPtr); extern void intel_xvmc_finish(ScrnInfoPtr); extern int intel_xvmc_putimage_size(ScrnInfoPtr); diff --git a/src/i830_video.c b/src/i830_video.c index 050f808f..65cd2d5e 100644 --- a/src/i830_video.c +++ b/src/i830_video.c @@ -560,6 +560,7 @@ I830InitVideo(ScreenPtr pScreen) XF86VideoAdaptorPtr *adaptors, *newAdaptors = NULL; XF86VideoAdaptorPtr overlayAdaptor = NULL, texturedAdaptor = NULL; int num_adaptors; + Bool ret = FALSE; #if 0 { @@ -622,15 +623,19 @@ I830InitVideo(ScreenPtr pScreen) } I830InitOffscreenImages(pScreen); } +#ifdef XvMCExtension + if (intel_xvmc_probe(pScrn)) { + if (texturedAdaptor) + ret = intel_xvmc_xv_init(pScreen, texturedAdaptor); + } +#endif if (num_adaptors) xf86XVScreenInit(pScreen, adaptors, num_adaptors); #ifdef XvMCExtension - if (intel_xvmc_probe(pScrn)) { - if (texturedAdaptor) - intel_xvmc_init(pScreen, texturedAdaptor); - } + if (ret) + intel_xvmc_init(pScreen); #endif xfree(adaptors); }