summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCooper Yuan <cooperyuan@gmail.com>2009-09-12 18:10:04 -0400
committerCooper Yuan <cooperyuan@gmail.com>2009-09-12 18:10:04 -0400
commit86ae1d55c6f6d51046eefa1ceb513cf0f2ca137a (patch)
tree84aa734e14039c513aa77201e79a49bae6473a6a
parent1fd0dd6c19d55241490cf617935f3434a4ae923d (diff)
xvmc: migrate to gallium archteture
xvmc driver based on gallium architecture can benefit from draw_array pipe, and surface management, xvmc in ddx part has no responsibility to create context and surface, but it need to initialize xvmc stuff when ddx driver invoke RADEONInitVideo.
-rw-r--r--src/Makefile.am2
-rw-r--r--src/r500_hwmc.c79
-rw-r--r--src/r500_hwmc.h10
-rw-r--r--src/radeon_hwmc.c188
-rw-r--r--src/radeon_hwmc.h47
-rw-r--r--src/xvmc/r500_xvmc.c2
-rw-r--r--src/xvmc/r500_xvmc.h19
-rw-r--r--src/xvmc/radeon_xvmc.c104
-rw-r--r--src/xvmc/radeon_xvmc.h4
9 files changed, 344 insertions, 111 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index c83da18..b768445 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -94,7 +94,7 @@ radeon_drv_la_SOURCES = \
radeon_driver.c radeon_video.c radeon_bios.c radeon_mm_i2c.c \
radeon_vip.c radeon_misc.c radeon_probe.c \
legacy_crtc.c legacy_output.c \
- r500_hwmc.c \
+ radeon_hwmc.c \
radeon_textured_video.c radeon_pm.c \
radeon_crtc.c radeon_output.c radeon_modes.c radeon_tv.c \
$(RADEON_ATOMBIOS_SOURCES) radeon_atombios.c radeon_atomwrapper.c \
diff --git a/src/r500_hwmc.c b/src/r500_hwmc.c
index 64babf8..9e2e1fa 100644
--- a/src/r500_hwmc.c
+++ b/src/r500_hwmc.c
@@ -45,8 +45,6 @@
#define _RADEON_XVMC_SERVER_
#include "r500_hwmc.h"
-struct radeon_hwmc_driver *hwmc_driver_ptr;
-
#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
enum
@@ -66,10 +64,9 @@ static XF86MCSurfaceInfoRec r500_YV12_mpg2_surface =
720,
576,
XVMC_MPEG_2,
- /* XVMC_OVERLAID_SURFACE | XVMC_SUBPICTURE_INDEPENDENT_SCALING,*/
- 0,
- /* &yv12_subpicture_list*/
- NULL,
+ XVMC_OVERLAID_SURFACE |
+ XVMC_SUBPICTURE_INDEPENDENT_SCALING,
+ &yv12_subpicture_list,
};
static XF86MCSurfaceInfoRec r500_YV12_mpg1_surface =
@@ -77,49 +74,29 @@ static XF86MCSurfaceInfoRec r500_YV12_mpg1_surface =
SURFACE_TYPE_MPEG1_MPML,
XVMC_CHROMA_FORMAT_420,
0,
- 720,
- 576,
- 720,
- 576,
+ 2048,
+ 2048,
+ 2048,
+ 2048,
XVMC_MPEG_1,
- /* XVMC_OVERLAID_SURFACE | XVMC_SUBPICTURE_INDEPENDENT_SCALING,*/
- 0,
- /* &yv12_subpicture_list*/
- NULL,
+ XVMC_INTRA_UNSIGNED |
+ XVMC_SUBPICTURE_INDEPENDENT_SCALING |
+ XVMC-BACKEND_SUBPICTURE,
+ &yv12_subpicture_list,
};
-static XF86MCSurfaceInfoPtr ppSI[2] =
+static XF86ImageRec = XVIMAGE_RGB;
+
+static XF86MCSurfaceInfoPtr Surfaces[2] =
{
(XF86MCSurfaceInfoPtr)&r500_YV12_mpg2_surface,
(XF86MCSurfaceInfoPtr)&r500_YV12_mpg1_surface
};
-static int r500_hwmc_create_context (ScrnInfoPtr pScrn, XvMCContextPtr pContext,
- int *num_priv, long **priv )
-{
-}
-
-static void r500_hwmc_destroy_context (ScrnInfoPtr pScrn, XvMCContextPtr pContext)
+static XF86ImagePtr SubPictures[] =
{
-}
-
-static int r500_hwmc_create_surface (ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf,
- int *num_priv, long **priv )
-{
-}
-
-static void r500_hwmc_destroy_surface (ScrnInfoPtr pScrn, XvMCSurfacePtr pSurf)
-{
-}
-
-static int r500_hwmc_create_subpict(ScrnInfoPtr pScrn, XvMCSubpicturePtr pSubp,
- int *num_priv, long **priv )
-{
-}
-
-static void r500_hwmc_destroy_subpict (ScrnInfoPtr pScrn, XvMCSubpicturePtr pSubp)
-{
-}
+ (XF86ImagePtr) &r500_subpicture
+};
static Bool r500_hwmc_init(ScrnInfoPtr pScrn, XF86VideoAdaptorPtr XvAdapt)
{
@@ -131,17 +108,17 @@ static void r500_hwmc_fini(ScrnInfoPtr pScrn)
static XF86MCAdaptorRec pAdapt =
{
- .name = "AMD(R) XcMC Video",
- .num_surfaces = ARRAY_SIZE(ppSI),
- .surfaces = ppSI,
- .num_subpictures = 0,
- .subpictures = NULL,
- .CreateContext = (xf86XvMCCreateContextProcPtr) r500_hwmc_create_context,
- .DestroyContext = (xf86XvMCDestroyContextProcPtr) r500_hwmc_destroy_context,
- .CreateSurface = (xf86XvMCCreateSurfaceProcPtr) r500_hwmc_create_surface,
- .DestroySurface = (xf86XvMCDestroySurfaceProcPtr) r500_hwmc_destroy_surface,
- .CreateSubpicture = (xf86XvMCCreateSubpictureProcPtr) r500_hwmc_create_subpict,
- .DestroySubpicture = (xf86XvMCDestroySubpictureProcPtr) r500_hwmc_destroy_subpict,
+ .name = "AMD(R) R500 XvMC Video",
+ .num_surfaces = ARRAY_SIZE(Surfaces),
+ .surfaces = Surfaces,
+ .num_subpictures = ARRAY_SIZE(SubPictures),
+ .subpictures = SubPictures;,
+ .CreateContext = NULL,
+ .DestroyContext = NULL,
+ .CreateSurface = NULL,
+ .DestroySurface = NULL,
+ .CreateSubpicture = NULL,
+ .DestroySubpicture = NULL,
};
struct radeon_hwmc_driver r500_hwmc_driver =
diff --git a/src/r500_hwmc.h b/src/r500_hwmc.h
index db4fdaf..6b0c96b 100644
--- a/src/r500_hwmc.h
+++ b/src/r500_hwmc.h
@@ -24,11 +24,12 @@
*
*/
-#ifndef RADEON_HWMC_H
-#define RADEON_HWMC_H
+#ifndef R500_HWMC_H
+#define R500_HWMC_H
#define FOURCC_XVMC (('C' << 24) + ('M' << 16) + ('V' << 8) + 'X')
-#define XVMC_R500_MPEG2_MC 0x1
+#define XVMC_R500_MPEG2_MC 0x1
+#define XVMC_R500_MPEG2_IDCT_MC 0x2
struct hwmc_buffer
{
@@ -60,8 +61,7 @@ struct radeon_hwmc_driver
void* devPrivate;
};
-extern struct radeon_hwmc_driver *hwmc_driver_ptr;
-extern struct radeon_hwmc_driver *r500_hwmc_driver_ptr;
+extern struct radeon_hwmc_driver r500_hwmc_driver;
#endif
#endif \ No newline at end of file
diff --git a/src/radeon_hwmc.c b/src/radeon_hwmc.c
new file mode 100644
index 0000000..4d6cdb6
--- /dev/null
+++ b/src/radeon_hwmc.c
@@ -0,0 +1,188 @@
+/*
+ * Copyright 2008 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Cooper Yuan <cooper.yuan@amd.com>
+ *
+ */
+#include <xf86.h>
+#include <xf86xvmc.h>
+#include <X11/extensions/Xv.h>
+#include <X11/extensions/XvMC.h>
+#include "fourcc.h"
+#include "radeon.h"
+#include "radeon_hwmc.h"
+
+static int subpicture_index_list[] =
+{
+ // XXX, todo fourcc
+ 0x3
+};
+
+static XF86MCImageIDList subpicture_list =
+{
+ 1,
+ subpicture_index_list
+};
+
+static XF86MCSurfaceInfoRec radeon_YV12_mpg2_surface =
+{
+ SURFACE_TYPE_MPEG2_MPML,
+ XVMC_CHROMA_FORMAT_420,
+ 0,
+ 720,
+ 576,
+ 720,
+ 576,
+ XVMC_MPEG_2,
+ XVMC_OVERLAID_SURFACE |
+ XVMC_SUBPICTURE_INDEPENDENT_SCALING,
+ &subpicture_list,
+};
+
+static XF86MCSurfaceInfoRec radeon_YV12_mpg1_surface =
+{
+ SURFACE_TYPE_MPEG1_MPML,
+ XVMC_CHROMA_FORMAT_420,
+ 0,
+ 2048,
+ 2048,
+ 2048,
+ 2048,
+ XVMC_MPEG_1,
+ XVMC_INTRA_UNSIGNED |
+ XVMC_SUBPICTURE_INDEPENDENT_SCALING |
+ XVMC_BACKEND_SUBPICTURE,
+ &subpicture_list,
+};
+
+static XF86MCSurfaceInfoPtr Surfaces[2] =
+{
+ (XF86MCSurfaceInfoPtr)&radeon_YV12_mpg2_surface,
+ (XF86MCSurfaceInfoPtr)&radeon_YV12_mpg1_surface
+};
+
+static XF86ImageRec radeon_subpicture;
+
+static XF86ImagePtr SubPictures[] =
+{
+ (XF86ImagePtr) &radeon_subpicture
+};
+
+static XF86MCAdaptorRec R100Adapt =
+{
+ .name = "AMD(R) R100 XvMC Video",
+ .num_surfaces = ARRAY_SIZE(Surfaces),
+ .surfaces = Surfaces,
+ .num_subpictures = ARRAY_SIZE(SubPictures),
+ .subpictures = SubPictures,
+ .CreateContext = NULL,
+ .DestroyContext = NULL,
+ .CreateSurface = NULL,
+ .DestroySurface = NULL,
+ .CreateSubpicture = NULL,
+ .DestroySubpicture = NULL,
+};
+
+static XF86MCAdaptorRec R300Adapt =
+{
+ .name = "AMD(R) R300 XvMC Video",
+ .num_surfaces = ARRAY_SIZE(Surfaces),
+ .surfaces = Surfaces,
+ .num_subpictures = ARRAY_SIZE(SubPictures),
+ .subpictures = SubPictures,
+ .CreateContext = NULL,
+ .DestroyContext = NULL,
+ .CreateSurface = NULL,
+ .DestroySurface = NULL,
+ .CreateSubpicture = NULL,
+ .DestroySubpicture = NULL,
+};
+
+XF86MCAdaptorPtr RADEONCreateAdaptor(ScreenPtr pScreen)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ XF86MCAdaptorPtr xv_adaptor;
+
+ assert(pScreen);
+
+ xv_adaptor = xf86XvMCCreateAdaptorRec();
+ if (!xv_adaptor)
+ {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] Create adaptor failed\n");
+ return NULL;
+ }
+
+ if (info->ChipFamily >= CHIP_FAMILY_RV100 &&
+ info->ChipFamily < CHIP_FAMILY_R300)
+ {
+ *xv_adaptor = R100Adapt;
+ }
+ else if (info->ChipFamily >= CHIP_FAMILY_R300 &&
+ info->ChipFamily < CHIP_FAMILY_RS600)
+ {
+ *xv_adaptor = R300Adapt;
+ }
+
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ "[XvMC] Create adaptor for %s\n", xv_adaptor->name);
+
+ return xv_adaptor;
+}
+
+void RADEONDestroyAdaptor(XF86MCAdaptorPtr xv_adaptor)
+{
+ assert(xv_adaptor);
+ xf86XvMCDestoryAdaptorRec(xv_adaptor);
+}
+
+Bool RADEONInitHwmc(ScreenPtr pScreen, unsigned int num_adaptors,
+ XF86VideoAdaptorPtr *xv_adaptors)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ Bool status = FALSE;
+ int i;
+
+ assert(pScrn);
+ assert(xv_adaptors);
+
+ if (xf86XvMCScreenInit(pScreen, num_adaptors, xv_adaptors))
+ {
+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[XvMC] Driver initialized\n");
+ status = TRUE;
+ }
+ else
+ {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "[XvMC] Failed to initialize\n");
+ }
+
+
+ xf86XvMCRegisterDRInfo(pScreen, RADEON_XVMC_LIBNAME,
+ info->dri->pDRIInfo->busIdString,
+ RADEON_XVMC_MAJOR,
+ RADEON_XVMC_MINOR,
+ RADEON_XVMC_PATCHLEVEL);
+
+ return status;
+}
+
diff --git a/src/radeon_hwmc.h b/src/radeon_hwmc.h
new file mode 100644
index 0000000..337d76c
--- /dev/null
+++ b/src/radeon_hwmc.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2008 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Author: Cooper Yuan <cooper.yuan@amd.com>
+ *
+ */
+
+#ifndef RADEON_HWMC_H
+#define RADEON_HWMC_H
+
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0]))
+
+#define FOURCC_XVMC (('C' << 24) + ('M' << 16) + ('V' << 8) + 'X')
+
+#define XVMC_R500_MPEG2_MC 0x1
+#define RADEON_XVMC_LIBNAME "RadeonXvMC"
+#define RADEON_XVMC_MAJOR 0
+#define RADEON_XVMC_MINOR 1
+#define RADEON_XVMC_PATCHLEVEL 0
+
+enum
+{
+ SURFACE_TYPE_MPEG2_MPML = FOURCC_XVMC,
+ SURFACE_TYPE_MPEG1_MPML,
+ SURFACE_TYPE_MAX
+};
+
+#endif \ No newline at end of file
diff --git a/src/xvmc/r500_xvmc.c b/src/xvmc/r500_xvmc.c
index dc3fa5c..3328de7 100644
--- a/src/xvmc/r500_xvmc.c
+++ b/src/xvmc/r500_xvmc.c
@@ -24,10 +24,12 @@
*
*/
#include "radeon_xvmc.h"
+#include "r500_xvmc.h"
static Status r500_xvmc_create_context(Display *display, XvMCContext *context,
int priv_count, CARD32 *priv_data)
{
+
}
static int r500_xvmc_destroy_context(Display *display, XvMCContext *context)
diff --git a/src/xvmc/r500_xvmc.h b/src/xvmc/r500_xvmc.h
index 4d57b15..e998e23 100644
--- a/src/xvmc/r500_xvmc.h
+++ b/src/xvmc/r500_xvmc.h
@@ -28,4 +28,23 @@
extern struct radeon_xvmc_driver r500_xvmc_driver;
+typedef struct _r500XvMCContext
+{
+ unsigned int ctx_id;
+ unsigned int last_flip;
+ unsigned int dual_prime; /* whether dual prime is in use. */
+ unsigned int yStride;
+ unsigned int uvStride;
+ unsigned short ref;
+ unsigned int sarea_priv_offset; /* Offset in sarea to private part */
+ unsigned int depth;
+ XvPortID port; /* Xv Port ID when displaying */
+ int haveXv; /* Have I initialized the Xv? */
+ XvImage *xvImage; /* Fake Xv Image used for command */
+ GC gc; /* X GC needed for displaying */
+ Drawable draw; /* Drawable to undisplay from */
+ void *drawHash;
+ int deviceID;
+} r500XvMCContext;
+
#endif \ No newline at end of file
diff --git a/src/xvmc/radeon_xvmc.c b/src/xvmc/radeon_xvmc.c
index 5fb88c3..790be0d 100644
--- a/src/xvmc/radeon_xvmc.c
+++ b/src/xvmc/radeon_xvmc.c
@@ -26,7 +26,7 @@
#include "radeon_xvmc.h"
-struct radeon_xvmc_driver *xvmc_driver_ptr = NULL;
+struct radeon_xvmc_driver *radeon_xvmc_ptr = NULL;
static radeon_xvmc_context_ptr radeon_xvmc_new_context(Display *dpy)
{
@@ -36,9 +36,9 @@ static radeon_xvmc_context_ptr radeon_xvmc_new_context(Display *dpy)
if (!ret)
return NULL;
- ret->next = xvmc_driver_ptr->ctx_list;
- xvmc_driver_ptr->ctx_list = ret;
- xvmc_driver_ptr->num_ctx++;
+ ret->next = radeon_xvmc_ptr->ctx_list;
+ radeon_xvmc_ptr->ctx_list = ret;
+ radeon_xvmc_ptr->num_ctx++;
return ret;
@@ -46,15 +46,15 @@ static radeon_xvmc_context_ptr radeon_xvmc_new_context(Display *dpy)
static void radeon_xvmc_free_context(XID id)
{
- radeon_xvmc_context_ptr p = xvmc_driver_ptr->ctx_list;
+ radeon_xvmc_context_ptr p = radeon_xvmc_ptr->ctx_list;
radeon_xvmc_context_ptr pre = p;
while(p)
{
if (p->context && p->context->context_id == id)
{
- if (p == xvmc_driver_ptr->ctx_list)
- xvmc_driver_ptr->ctx_list = p->next;
+ if (p == radeon_xvmc_ptr->ctx_list)
+ radeon_xvmc_ptr->ctx_list = p->next;
else
pre->next = p->next;
break;
@@ -66,13 +66,13 @@ static void radeon_xvmc_free_context(XID id)
if (p)
{
free(p);
- xvmc_driver_ptr->num_ctx--;
+ radeon_xvmc_ptr->num_ctx--;
}
}
radeon_xvmc_context_ptr radeon_xvmc_find_context(XID id)
{
- radeon_xvmc_context_ptr p = xvmc_driver_ptr->ctx_list;
+ radeon_xvmc_context_ptr p = radeon_xvmc_ptr->ctx_list;
while(p)
{
@@ -91,9 +91,9 @@ static radeon_xvmc_surface_ptr radeon_xvmc_new_surface(Display *dpy)
if (!ret)
return NULL;
- ret->next = xvmc_driver_ptr->surf_list;
- xvmc_driver_ptr->surf_list = ret;
- xvmc_driver_ptr->num_surf++;
+ ret->next = radeon_xvmc_ptr->surf_list;
+ radeon_xvmc_ptr->surf_list = ret;
+ radeon_xvmc_ptr->num_surf++;
ret->image = NULL;
ret->gc_init = FALSE;
@@ -103,15 +103,15 @@ static radeon_xvmc_surface_ptr radeon_xvmc_new_surface(Display *dpy)
static void radeon_xvmc_free_surface(XID id)
{
- radeon_xvmc_surface_ptr p = xvmc_driver_ptr->surf_list;
+ radeon_xvmc_surface_ptr p = radeon_xvmc_ptr->surf_list;
radeon_xvmc_surface_ptr pre = p;
while(p)
{
if (p->surface && p->surface->surface_id == id)
{
- if (p == xvmc_driver_ptr->surf_list)
- xvmc_driver_ptr->surf_list = p->next;
+ if (p == radeon_xvmc_ptr->surf_list)
+ radeon_xvmc_ptr->surf_list = p->next;
else
pre->next = p->next;
break;
@@ -123,13 +123,13 @@ static void radeon_xvmc_free_surface(XID id)
if (p)
{
free(p);
- xvmc_driver_ptr->num_surf--;
+ radeon_xvmc_ptr->num_surf--;
}
}
radeon_xvmc_surface_ptr radeon_xvmc_find_surface(XID id)
{
- radeon_xvmc_surface_ptr p = xvmc_driver_ptr->surf_list;
+ radeon_xvmc_surface_ptr p = radeon_xvmc_ptr->surf_list;
while(p)
{
@@ -215,12 +215,12 @@ _X_EXPORT Status XvMCCreateContext(Display *display, XvPortID port,
comm = (struct radeon_xvmc_common *)priv_data;
- if (xvmc_driver_ptr == NULL || xvmc_driver_ptr->type != comm->type)
+ if (radeon_xvmc_ptr == NULL || radeon_xvmc_ptr->type != comm->type)
{
switch (comm->type)
{
case XVMC_R500_MPEG2_MC:
- xvmc_driver_ptr = &r500_xvmc_driver;
+ radeon_xvmc_ptr = &r500_xvmc_driver;
break;
default:
ErrorF("[XvMC]: Radeon: unimplemented xvmc type %d", comm->type);
@@ -230,16 +230,16 @@ _X_EXPORT Status XvMCCreateContext(Display *display, XvPortID port,
}
}
- if (xvmc_driver_ptr == NULL || xvmc_driver_ptr->type != comm->type)
+ if (radeon_xvmc_ptr == NULL || radeon_xvmc_ptr->type != comm->type)
{
ErrorF("[XvMC]: Radeon: fail to load xvmc driver for type %d\n", comm->type);
return BadValue;
}
- xvmc_driver_ptr->sarea_size = comm->sarea_size;
- xvmc_driver_ptr->batchbuffer.handle = comm->batchbuffer.handle;
- xvmc_driver_ptr->batchbuffer.offset = comm->batchbuffer.offset;
- xvmc_driver_ptr->batchbuffer.size = comm->batchbuffer.size;
+ radeon_xvmc_ptr->sarea_size = comm->sarea_size;
+ radeon_xvmc_ptr->batchbuffer.handle = comm->batchbuffer.handle;
+ radeon_xvmc_ptr->batchbuffer.offset = comm->batchbuffer.offset;
+ radeon_xvmc_ptr->batchbuffer.size = comm->batchbuffer.size;
/* assign local ctx info */
radeon_ctx = radeon_xvmc_new_context(display);
@@ -258,7 +258,7 @@ _X_EXPORT Status XvMCCreateContext(Display *display, XvPortID port,
return BadValue;
}
- if (!uniDRIOpenConnection(display, screen, &xvmc_driver_ptr->hsarea, &curBusID))
+ if (!uniDRIOpenConnection(display, screen, &radeon_xvmc_ptr->hsarea, &curBusID))
{
ErrorF("[XvMC]: Could not open DRI connection to X server!");
XFree(priv_data);
@@ -274,19 +274,19 @@ _X_EXPORT Status XvMCCreateContext(Display *display, XvPortID port,
return BadValue;
}
- xvmc_driver_ptr->fd = fd;
+ radeon_xvmc_ptr->fd = fd;
- strncpy(xvmc_driver_ptr->busID, curBusID, 20);
- xvmc_driver_ptr->busID[20] = '\0';
+ strncpy(radeon_xvmc_ptr->busID, curBusID, 20);
+ radeon_xvmc_ptr->busID[20] = '\0';
XFree(curBusID);
/* Get magic number */
- drmGetMagic(xvmc_driver_ptr->fd, &magic);
+ drmGetMagic(radeon_xvmc_ptr->fd, &magic);
if (!uniDRIAuthConnection(display, screen, magic))
{
ErrorF("[XvMC]: X server did not allow DRI. Check permissions.");
- xvmc_driver_ptr = NULL;
+ radeon_xvmc_ptr = NULL;
XFree(priv_data);
return BadAlloc;
}
@@ -294,17 +294,17 @@ _X_EXPORT Status XvMCCreateContext(Display *display, XvPortID port,
/*
* Map DRI Sarea. we always want it right?
*/
- if (drmMap(xvmc_driver_ptr->fd, xvmc_driver_ptr->hsarea,
- xvmc_driver_ptr->sarea_size, &xvmc_driver_ptr->sarea_address) < 0)
+ if (drmMap(radeon_xvmc_ptr->fd, radeon_xvmc_ptr->hsarea,
+ radeon_xvmc_ptr->sarea_size, &radeon_xvmc_ptr->sarea_address) < 0)
{
XVMC_ERR("[XvMC]: Unable to map DRI SAREA.\n");
- xvmc_driver_ptr = NULL;
+ radeon_xvmc_ptr = NULL;
XFree(priv_data);
return BadAlloc;
}
- pSAREA = (drm_sarea_t *)xvmc_driver_ptr->sarea_address;
- xvmc_driver_ptr->driHwLock = (drmLock *)&pSAREA->lock;
- pthread_mutex_init(&xvmc_driver_ptr->ctxmutex, NULL);
+ pSAREA = (drm_sarea_t *)radeon_xvmc_ptr->sarea_address;
+ radeon_xvmc_ptr->driHwLock = (drmLock *)&pSAREA->lock;
+ pthread_mutex_init(&radeon_xvmc_ptr->ctxmutex, NULL);
/* context_id is alloc in _xvmc_create_context */
if (!uniDRICreateContext(display, screen, DefaultVisual(display, screen),
@@ -315,7 +315,7 @@ _X_EXPORT Status XvMCCreateContext(Display *display, XvPortID port,
(int)context->context_id);
XFree(priv_data);
context->privData = NULL;
- drmUnmap(xvmc_driver_ptr->sarea_address, xvmc_driver_ptr->sarea_size);
+ drmUnmap(radeon_xvmc_ptr->sarea_address, radeon_xvmc_ptr->sarea_size);
return BadAlloc;
}
@@ -323,12 +323,12 @@ _X_EXPORT Status XvMCCreateContext(Display *display, XvPortID port,
* call driver hook.
* driver hook should free priv_data after return if success.
*/
- ret = (xvmc_driver_ptr->create_context)(display, context, priv_count, priv_data);
+ ret = (radeon_xvmc_ptr->create_context)(display, context, priv_count, priv_data);
if (ret)
{
ErrorF("[XvMC]: driver create context failed\n");
XFree(priv_data);
- drmUnmap(xvmc_driver_ptr->sarea_address, xvmc_driver_ptr->sarea_size);
+ drmUnmap(radeon_xvmc_ptr->sarea_address, radeon_xvmc_ptr->sarea_size);
return ret;
}
@@ -352,7 +352,7 @@ _X_EXPORT Status XvMCDestroyContext(Display *display, XvMCContext *context)
if (!display || !context)
return XvMCBadContext;
screen = DefaultScreen(display);
- ret = (xvmc_driver_ptr->destroy_context)(display, context);
+ ret = (radeon_xvmc_ptr->destroy_context)(display, context);
if (ret)
{
ErrorF("[XvMC]: destroy context fail\n");
@@ -369,16 +369,16 @@ _X_EXPORT Status XvMCDestroyContext(Display *display, XvMCContext *context)
return ret;
}
- if (xvmc_driver_ptr->num_ctx == 0)
+ if (radeon_xvmc_ptr->num_ctx == 0)
{
uniDRICloseConnection(display, screen);
- pthread_mutex_destroy(&xvmc_driver_ptr->ctxmutex);
+ pthread_mutex_destroy(&radeon_xvmc_ptr->ctxmutex);
- drmUnmap(xvmc_driver_ptr->sarea_address, xvmc_driver_ptr->sarea_size);
+ drmUnmap(radeon_xvmc_ptr->sarea_address, radeon_xvmc_ptr->sarea_size);
- if (xvmc_driver_ptr->fd >= 0)
- drmClose(xvmc_driver_ptr->fd);
- xvmc_driver_ptr->fd = -1;
+ if (radeon_xvmc_ptr->fd >= 0)
+ drmClose(radeon_xvmc_ptr->fd);
+ radeon_xvmc_ptr->fd = -1;
}
return Success;
}
@@ -426,8 +426,8 @@ _X_EXPORT Status XvMCCreateSurface(Display *display, XvMCContext *context, XvMCS
radeon_surf->image->data = (char *)&radeon_surf->data;
- ret = (xvmc_driver_ptr->create_surface)(display, context, surface,
- priv_count, priv_data);
+ ret = (radeon_xvmc_ptr->create_surface)(display, context, surface,
+ priv_count, priv_data);
if (ret)
{
ErrorF("[XvMC]: create surface failed\n");
@@ -456,7 +456,7 @@ _X_EXPORT Status XvMCDestroySurface(Display *display, XvMCSurface *surface)
XFreeGC(display, radeon_surf->gc);
radeon_xvmc_free_surface(surface->surface_id);
- (xvmc_driver_ptr->destroy_surface)(display, surface);
+ (radeon_xvmc_ptr->destroy_surface)(display, surface);
_xvmc_destroy_surface(display, surface);
@@ -575,7 +575,7 @@ _X_EXPORT Status XvMCRenderSurface(Display *display, XvMCContext *context,
if (!target_surface)
return XvMCBadSurface;
- ret = (xvmc_driver_ptr->render_surface)(display, context,
+ ret = (radeon_xvmc_ptr->render_surface)(display, context,
picture_structure,
target_surface, past_surface,
future_surface, flags,
@@ -649,7 +649,7 @@ _X_EXPORT Status XvMCPutSurface(Display *display,XvMCSurface *surface,
radeon_surf->last_draw = draw;
/* fill intel_surf->data */
- ret = (xvmc_driver_ptr->put_surface)(display, surface, draw, srcx, srcy,
+ ret = (radeon_xvmc_ptr->put_surface)(display, surface, draw, srcx, srcy,
srcw, srch, destx, desty, destw, desth, flags, &radeon_surf->data);
if (ret)
{
@@ -719,7 +719,7 @@ _X_EXPORT Status XvMCGetSurfaceStatus(Display *display, XvMCSurface *surface, in
if (!display || !surface || !stat)
return XvMCBadSurface;
- ret = (xvmc_driver_ptr->get_surface_status)(display, surface, stat);
+ ret = (radeon_xvmc_ptr->get_surface_status)(display, surface, stat);
if (ret)
{
ErrorF("[XvMC]: get surface status fail\n");
diff --git a/src/xvmc/radeon_xvmc.h b/src/xvmc/radeon_xvmc.h
index 5561088..473ef12 100644
--- a/src/xvmc/radeon_xvmc.h
+++ b/src/xvmc/radeon_xvmc.h
@@ -168,9 +168,9 @@ typedef struct radeon_xvmc_driver
Status (*get_surface_status)(Display *display, XvMCSurface *surface,
int *stat);
-}radeon_xvmc_driver_t, *radeon_xvmc_driver_ptr;
+}radeon_xvmc_driver_t;
-extern struct radeon_xvmc_driver *xvmc_driver_ptr;
+extern struct radeon_xvmc_driver *radeon_xvmc_ptr;
extern radeon_xvmc_context_ptr radeon_xvmc_find_context(XID id);
extern radeon_xvmc_surface_ptr radeon_xvmc_find_surface(XID id);