Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

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