diff options
author | Cooper Yuan <cooperyuan@gmail.com> | 2009-09-12 18:10:04 -0400 |
---|---|---|
committer | Cooper Yuan <cooperyuan@gmail.com> | 2009-09-12 18:10:04 -0400 |
commit | 86ae1d55c6f6d51046eefa1ceb513cf0f2ca137a (patch) | |
tree | 84aa734e14039c513aa77201e79a49bae6473a6a | |
parent | 1fd0dd6c19d55241490cf617935f3434a4ae923d (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.am | 2 | ||||
-rw-r--r-- | src/r500_hwmc.c | 79 | ||||
-rw-r--r-- | src/r500_hwmc.h | 10 | ||||
-rw-r--r-- | src/radeon_hwmc.c | 188 | ||||
-rw-r--r-- | src/radeon_hwmc.h | 47 | ||||
-rw-r--r-- | src/xvmc/r500_xvmc.c | 2 | ||||
-rw-r--r-- | src/xvmc/r500_xvmc.h | 19 | ||||
-rw-r--r-- | src/xvmc/radeon_xvmc.c | 104 | ||||
-rw-r--r-- | src/xvmc/radeon_xvmc.h | 4 |
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); |