7 #include <X11/extensions/Xv.h>
8 #include <X11/extensions/XvMC.h>
12 #define FOURCC_RGB 0x0000003
19 'R', 'G', 'B', 0x00, \
20 0x00,0x00,0x00,0x10,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71 \
25 24, 0x00FF0000, 0x0000FF00, 0x000000FF, \
31 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 \
36 static int subpicture_index_list[] =
41 static XF86MCImageIDList subpicture_list =
47 static XF86MCSurfaceInfoRec yv12_mpeg2_surface =
50 XVMC_CHROMA_FORMAT_420,
56 /*XVMC_IDCT*/ XVMC_MOCOMP | XVMC_MPEG_2,
57 XVMC_INTRA_UNSIGNED | XVMC_SUBPICTURE_INDEPENDENT_SCALING | XVMC_BACKEND_SUBPICTURE,
61 static XF86MCSurfaceInfoPtr surfaces[] =
63 (XF86MCSurfaceInfoPtr)&yv12_mpeg2_surface
66 static XF86ImageRec rgb_subpicture = XVIMAGE_RGB;
68 static XF86ImagePtr subpictures[] =
70 (XF86ImagePtr)&rgb_subpicture
73 static XF86MCAdaptorRec adaptor_template =
80 (xf86XvMCCreateContextProcPtr)NULL,
81 (xf86XvMCDestroyContextProcPtr)NULL,
82 (xf86XvMCCreateSurfaceProcPtr)NULL,
83 (xf86XvMCDestroySurfaceProcPtr)NULL,
84 (xf86XvMCCreateSubpictureProcPtr)NULL,
85 (xf86XvMCDestroySubpictureProcPtr)NULL
88 XF86MCAdaptorPtr vlCreateAdaptorXvMC(ScreenPtr pScreen, char *xv_adaptor_name)
90 XF86MCAdaptorPtr adaptor;
94 assert(xv_adaptor_name);
96 pScrn = xf86Screens[pScreen->myNum];
97 adaptor = xf86XvMCCreateAdaptorRec();
101 xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] Memory allocation failed.\n");
105 *adaptor = adaptor_template;
106 adaptor->name = xv_adaptor_name;
108 xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[XvMC] Associated with %s.\n", xv_adaptor_name);
113 void vlDestroyAdaptorXvMC(XF86MCAdaptorPtr adaptor)
116 xf86XvMCDestroyAdaptorRec(adaptor);
119 /* TODO: Manage adaptor list and adaptor rec memory internally */
121 void vlInitXvMC(ScreenPtr pScreen, unsigned int num_adaptors, XF86MCAdaptorPtr *adaptors)
129 for (i = 0; i < num_adaptors; ++i)
132 pScrn = xf86Screens[pScreen->myNum];
134 if (!xf86XvMCScreenInit(pScreen, num_adaptors, adaptors))
135 xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] Failed to initialize extension.\n");
137 xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[XvMC] Extension initialized.\n");
139 #if (XvMCVersion > 1) || (XvMCRevision > 0)
141 if (xf86XvMCRegisterDRInfo(pScreen, "XvMCg3dvl", "0:0.0", -1, -1, -1) != Success)
142 xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "[XvMC] Failed to register client library, using XvMCConfig.\n");
144 xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[XvMC] Registered client library.\n");