1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "xorg_tracker.h" 2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <xf86.h> 4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <xf86xv.h> 5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <xf86xvmc.h> 6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <X11/extensions/Xv.h> 7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <X11/extensions/XvMC.h> 8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <fourcc.h> 9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define FOURCC_RGB 0x0000003 11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#define XVIMAGE_RGB \ 12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ \ 13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FOURCC_RGB, \ 14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XvRGB, \ 15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org LSBFirst, \ 16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { \ 17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 'R', 'G', 'B', 0x00, \ 18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0x00,0x00,0x00,0x10,0x80,0x00,0x00,0xAA,0x00,0x38,0x9B,0x71 \ 19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }, \ 20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 32, \ 21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XvPacked, \ 22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 1, \ 23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 24, 0x00FF0000, 0x0000FF00, 0x000000FF, \ 24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, 0, 0, \ 25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, 0, 0, \ 26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, 0, 0, \ 27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org { \ 28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 'B','G','R','X', \ 29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 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 \ 30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org }, \ 31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XvTopToBottom \ 32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic int subpicture_index_list[] = { 35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FOURCC_RGB, 36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FOURCC_IA44, 37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FOURCC_AI44 38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XF86MCImageIDList subpicture_list = 41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sizeof(subpicture_index_list)/sizeof(*subpicture_index_list), 43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org subpicture_index_list 44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XF86MCSurfaceInfoRec yv12_mpeg2_surface = 47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FOURCC_I420, 49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVMC_CHROMA_FORMAT_420, 50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, 51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2048, 2048, 2048, 2048, 52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVMC_IDCT | XVMC_MPEG_2, 53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVMC_SUBPICTURE_INDEPENDENT_SCALING | XVMC_BACKEND_SUBPICTURE, 54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &subpicture_list 55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const XF86MCSurfaceInfoRec uyvy_mpeg2_surface = 58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org FOURCC_UYVY, 60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVMC_CHROMA_FORMAT_422, 61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 0, 62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 2048, 2048, 2048, 2048, 63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVMC_IDCT | XVMC_MPEG_2, 64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XVMC_SUBPICTURE_INDEPENDENT_SCALING | XVMC_BACKEND_SUBPICTURE, 65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org &subpicture_list 66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XF86MCSurfaceInfoPtr surfaces[] = 69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (XF86MCSurfaceInfoPtr)&yv12_mpeg2_surface, 71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (XF86MCSurfaceInfoPtr)&uyvy_mpeg2_surface 72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const XF86ImageRec rgb_subpicture = XVIMAGE_RGB; 75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const XF86ImageRec ia44_subpicture = XVIMAGE_IA44; 76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const XF86ImageRec ai44_subpicture = XVIMAGE_AI44; 77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic XF86ImagePtr subpictures[] = 79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (XF86ImagePtr)&rgb_subpicture, 81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (XF86ImagePtr)&ia44_subpicture, 82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (XF86ImagePtr)&ai44_subpicture 83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic const XF86MCAdaptorRec adaptor_template = 86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "", 88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sizeof(surfaces)/sizeof(*surfaces), 89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org surfaces, 90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org sizeof(subpictures)/sizeof(*subpictures), 91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org subpictures, 92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (xf86XvMCCreateContextProcPtr)NULL, 93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (xf86XvMCDestroyContextProcPtr)NULL, 94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (xf86XvMCCreateSurfaceProcPtr)NULL, 95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (xf86XvMCDestroySurfaceProcPtr)NULL, 96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (xf86XvMCCreateSubpictureProcPtr)NULL, 97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (xf86XvMCDestroySubpictureProcPtr)NULL 98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}; 99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgvoid 101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgxorg_xvmc_init(ScreenPtr pScreen, char *name) 102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{ 103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); 104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org XF86MCAdaptorPtr adaptorXvMC = xf86XvMCCreateAdaptorRec(); 105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!adaptorXvMC) 106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org return; 107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org 108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org *adaptorXvMC = adaptor_template; 109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org adaptorXvMC->name = name; 110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xf86DrvMsg(pScrn->scrnIndex, X_INFO, 111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "[XvMC] Associated with %s.\n", name); 112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org if (!xf86XvMCScreenInit(pScreen, 1, &adaptorXvMC)) 113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xf86DrvMsg(pScrn->scrnIndex, X_ERROR, 114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "[XvMC] Failed to initialize extension.\n"); 115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org else 116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xf86DrvMsg(pScrn->scrnIndex, X_INFO, 117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org "[XvMC] Extension initialized.\n"); 118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org xf86XvMCDestroyAdaptorRec(adaptorXvMC); 119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org} 120