⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intel_xvmc.h

📁 显驱动 Intel英特尔G45G43G41G35G33G31G965Q963Q965GM965系列显卡最新X.Org驱动2.4.0版For Linux
💻 H
字号:
/* * Copyright © 2007 Intel Corporation * * 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. * * Authors: *    Zhenyu Wang <zhenyu.z.wang@intel.com> * */#ifndef INTEL_XVMC_H#define INTEL_XVMC_H#include <pthread.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>#include <signal.h>#include <fcntl.h>#include <dirent.h>#include <string.h>#include <assert.h>#include <signal.h>#include <stdint.h>#include <xf86drm.h>#include "i830_common.h"#include "i830_hwmc.h"#include <X11/X.h>#include <X11/Xlibint.h>#include <X11/Xutil.h>#include <fourcc.h>#include <X11/extensions/Xv.h>#include <X11/extensions/Xvlib.h>#include <X11/extensions/XvMC.h>#include <X11/extensions/XvMClib.h>#include <drm_sarea.h>#include "xf86dri.h"#include "intel_batchbuffer.h"extern int DEBUG;#define XVMC_ERR(s, arg...)					\    do {							\	fprintf(stderr, "[intel_xvmc] err: " s "\n", ##arg);	\    } while (0)#define XVMC_INFO(s, arg...)					\    do {							\	fprintf(stderr, "[intel_xvmc] info: " s "\n", ##arg);	\    } while (0)#define XVMC_DBG(s, arg...)						\    do {								\	if (DEBUG)							\	    fprintf(stderr, "[intel_xvmc] debug: " s "\n", ##arg);	\    } while (0)/* Subpicture fourcc */#define FOURCC_IA44 0x34344149/*  Definitions for temporary wire protocol hooks to be replaced  when a HW independent libXvMC is created.*/extern Status _xvmc_create_context(Display *dpy, XvMCContext *context,				   int *priv_count, CARD32 **priv_data);extern Status _xvmc_destroy_context(Display *dpy, XvMCContext *context);extern Status _xvmc_create_surface(Display *dpy, XvMCContext *context,				   XvMCSurface *surface, int *priv_count,				   CARD32 **priv_data);extern Status _xvmc_destroy_surface(Display *dpy, XvMCSurface *surface);extern Status  _xvmc_create_subpicture(Display *dpy, XvMCContext *context,				       XvMCSubpicture *subpicture,				       int *priv_count, uint **priv_data);extern Status   _xvmc_destroy_subpicture(Display *dpy,					 XvMCSubpicture *subpicture);typedef struct _intel_xvmc_context {    XvMCContext *context;    drm_context_t hw_context;	/* context id to kernel drm */    struct _intel_xvmc_context *next;} intel_xvmc_context_t, *intel_xvmc_context_ptr;typedef struct _intel_xvmc_surface {    XvMCSurface *surface;    XvImage *image;    GC gc;    Bool gc_init;    Drawable last_draw;    struct intel_xvmc_command data;    struct _intel_xvmc_surface *next;} intel_xvmc_surface_t, *intel_xvmc_surface_ptr;typedef struct _intel_xvmc_drm_map {    drm_handle_t handle;    unsigned long offset;    unsigned long size;    unsigned long bus_addr;    drmAddress map;} intel_xvmc_drm_map_t, *intel_xvmc_drm_map_ptr;typedef struct _intel_xvmc_driver {    int type;			/* hw xvmc type - i830_hwmc.h */    int screen;			/* current screen num*/    int fd;			/* drm file handler */    drm_handle_t hsarea;	/* DRI open connect */    char busID[32];    unsigned int sarea_size;    drmAddress sarea_address;    struct {	unsigned int start_offset;	unsigned int size;	unsigned int space;	unsigned char *ptr;    } batch;    struct    {        void *ptr;        unsigned int size;        unsigned int offset;        unsigned int active_buf;        unsigned int irq_emitted;    } alloc;    intel_xvmc_drm_map_t batchbuffer;    unsigned int last_render;    sigset_t sa_mask;    pthread_mutex_t ctxmutex;    int lock;   /* Lightweight lock to avoid locking twice */    int locked;    drmLock *driHwLock;    int num_ctx;    intel_xvmc_context_ptr ctx_list;    int num_surf;    intel_xvmc_surface_ptr surf_list;    void *private;    /* driver specific xvmc callbacks */    Status (*create_context)(Display* display, XvMCContext *context,	    int priv_count, CARD32 *priv_data);    Status (*destroy_context)(Display* display, XvMCContext *context);    Status (*create_surface)(Display* display, XvMCContext *context,	    XvMCSurface *surface, int priv_count, CARD32 *priv_data);    Status (*destroy_surface)(Display* display, XvMCSurface *surface);    Status (*render_surface)(Display *display, XvMCContext *context,	    unsigned int picture_structure,	    XvMCSurface *target_surface,	    XvMCSurface *past_surface,	    XvMCSurface *future_surface,	    unsigned int flags,	    unsigned int num_macroblocks,	    unsigned int first_macroblock,	    XvMCMacroBlockArray *macroblock_array,	    XvMCBlockArray *blocks);    Status (*put_surface)(Display *display, XvMCSurface *surface,	    Drawable draw, short srcx, short srcy,	    unsigned short srcw, unsigned short srch,	    short destx, short desty,	    unsigned short destw, unsigned short desth,	    int flags, struct intel_xvmc_command *data);    Status (*get_surface_status)(Display *display, XvMCSurface *surface, int *stat);    /* XXX more for vld */} intel_xvmc_driver_t, *intel_xvmc_driver_ptr;extern struct _intel_xvmc_driver i915_xvmc_mc_driver;extern struct _intel_xvmc_driver *xvmc_driver;#define SET_BLOCKED_SIGSET()   do {    \        sigset_t bl_mask;                       \        sigfillset(&bl_mask);           \        sigdelset(&bl_mask, SIGFPE);    \        sigdelset(&bl_mask, SIGILL);    \        sigdelset(&bl_mask, SIGSEGV);   \        sigdelset(&bl_mask, SIGBUS);    \        sigdelset(&bl_mask, SIGKILL);   \        pthread_sigmask(SIG_SETMASK, &bl_mask, &xvmc_driver->sa_mask); \    } while (0)#define RESTORE_BLOCKED_SIGSET() do {    \        pthread_sigmask(SIG_SETMASK, &xvmc_driver->sa_mask, NULL); \    } while (0)#define PPTHREAD_MUTEX_LOCK() do {             \        SET_BLOCKED_SIGSET();                  \        pthread_mutex_lock(&xvmc_driver->ctxmutex);       \    } while (0)#define PPTHREAD_MUTEX_UNLOCK() do {           \        pthread_mutex_unlock(&xvmc_driver->ctxmutex);     \        RESTORE_BLOCKED_SIGSET();              \    } while (0)extern void LOCK_HARDWARE(drm_context_t);extern void UNLOCK_HARDWARE(drm_context_t);static inline const char* intel_xvmc_decoder_string(int flag){    switch (flag) {	case XVMC_I915_MPEG2_MC:	    return "i915/945 MPEG2 MC decoder";	case XVMC_I965_MPEG2_MC:	    return "i965 MPEG2 MC decoder";	case XVMC_I945_MPEG2_VLD:	    return "i945 MPEG2 VLD decoder";	case XVMC_I965_MPEG2_VLD:	    return "i965 MPEG2 VLD decoder";	default:	    return "Unknown decoder";    }}extern intel_xvmc_context_ptr intel_xvmc_find_context(XID id);extern intel_xvmc_surface_ptr intel_xvmc_find_surface(XID id);extern unsigned int mb_bytes_420[64];/* dump function */extern void intel_xvmc_dump_open(void);extern void intel_xvmc_dump_close(void);extern void intel_xvmc_dump_render(XvMCContext *context, unsigned int picture_structure,	    XvMCSurface *target_surface, XvMCSurface *past_surface,	    XvMCSurface *future_surface, unsigned int flags,	    unsigned int num_macroblocks, unsigned int first_macroblock,	    XvMCMacroBlockArray *macroblock_array, XvMCBlockArray *blocks);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -