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

📄 xv.c

📁 SDL库 在进行视频显示程序spcaview安装时必须的库文件
💻 C
📖 第 1 页 / 共 2 页
字号:
intSDL_NAME(XvStopVideo)(     Display *dpy,     XvPortID port,     Drawable draw){  XExtDisplayInfo *info = xv_find_display(dpy);  xvStopVideoReq *req;  XvCheckExtension(dpy, info, XvBadExtension);  LockDisplay(dpy);  XvGetReq(StopVideo, req);  req->port = port;  req->drawable = draw;  UnlockDisplay(dpy);  SyncHandle();  return Success;}intSDL_NAME(XvGrabPort)(     Display *dpy,     XvPortID port,     Time time){  XExtDisplayInfo *info = xv_find_display(dpy);  int result;  xvGrabPortReply rep;  xvGrabPortReq *req;  XvCheckExtension(dpy, info, XvBadExtension);  LockDisplay(dpy);  XvGetReq(GrabPort, req);  req->port = port;  req->time = time;  if (_XReply (dpy, (xReply *) &rep, 0, xTrue) == 0)     rep.result = GrabSuccess;  result = rep.result;  UnlockDisplay(dpy);  SyncHandle();  return result;}intSDL_NAME(XvUngrabPort)(     Display *dpy,     XvPortID port,     Time time){  XExtDisplayInfo *info = xv_find_display(dpy);  xvUngrabPortReq *req;  XvCheckExtension(dpy, info, XvBadExtension);  LockDisplay(dpy);  XvGetReq(UngrabPort, req);  req->port = port;  req->time = time;  UnlockDisplay(dpy);  SyncHandle();  return Success;}intSDL_NAME(XvSelectVideoNotify)(     Display *dpy,     Drawable drawable,     Bool onoff){  XExtDisplayInfo *info = xv_find_display(dpy);  xvSelectVideoNotifyReq *req;  XvCheckExtension(dpy, info, XvBadExtension);  LockDisplay(dpy);  XvGetReq(SelectVideoNotify, req);  req->drawable = drawable;  req->onoff = onoff;  UnlockDisplay(dpy);  SyncHandle();  return Success;}intSDL_NAME(XvSelectPortNotify)(     Display *dpy,     XvPortID port,     Bool onoff){  XExtDisplayInfo *info = xv_find_display(dpy);  xvSelectPortNotifyReq *req;  XvCheckExtension(dpy, info, XvBadExtension);  LockDisplay(dpy);  XvGetReq(SelectPortNotify, req);  req->port = port;  req->onoff = onoff;  UnlockDisplay(dpy);  SyncHandle();  return Success;}intSDL_NAME(XvSetPortAttribute) (     Display *dpy,     XvPortID port,     Atom attribute,     int value){  XExtDisplayInfo *info = xv_find_display(dpy);  xvSetPortAttributeReq *req;  XvCheckExtension(dpy, info, XvBadExtension);  LockDisplay(dpy);  XvGetReq(SetPortAttribute, req);  req->port = port;  req->attribute = attribute;  req->value = value;  UnlockDisplay(dpy);  SyncHandle();  return (Success);}intSDL_NAME(XvGetPortAttribute) (     Display *dpy,     XvPortID port,     Atom attribute,     int *p_value){  XExtDisplayInfo *info = xv_find_display(dpy);  xvGetPortAttributeReq *req;  xvGetPortAttributeReply rep;  XvCheckExtension(dpy, info, XvBadExtension);  LockDisplay(dpy);  XvGetReq(GetPortAttribute, req);  req->port = port;  req->attribute = attribute;  /* READ THE REPLY */  if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {      UnlockDisplay(dpy);      SyncHandle();      return(XvBadReply);  }  *p_value = rep.value;    UnlockDisplay(dpy);  SyncHandle();  return (Success);}intSDL_NAME(XvQueryBestSize)(     Display *dpy,     XvPortID port,     Bool motion,     unsigned int vid_w,      unsigned int vid_h,     unsigned int drw_w,      unsigned int drw_h,     unsigned int *p_actual_width,      unsigned int *p_actual_height){  XExtDisplayInfo *info = xv_find_display(dpy);  xvQueryBestSizeReq *req;  xvQueryBestSizeReply rep;  XvCheckExtension(dpy, info, XvBadExtension);  LockDisplay(dpy);  XvGetReq(QueryBestSize, req);  req->port = port;  req->motion = motion;  req->vid_w = vid_w;  req->vid_h = vid_h;  req->drw_w = drw_w;  req->drw_h = drw_h;  /* READ THE REPLY */  if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {      UnlockDisplay(dpy);      SyncHandle();      return(XvBadReply);  }  *p_actual_width = rep.actual_width;  *p_actual_height = rep.actual_height;  UnlockDisplay(dpy);  SyncHandle();  return (Success);}SDL_NAME(XvAttribute)* SDL_NAME(XvQueryPortAttributes)(Display *dpy, XvPortID port, int *num){  XExtDisplayInfo *info = xv_find_display(dpy);  xvQueryPortAttributesReq *req;  xvQueryPortAttributesReply rep;  SDL_NAME(XvAttribute) *ret = NULL;  *num = 0;  XvCheckExtension(dpy, info, NULL);  LockDisplay(dpy);  XvGetReq(QueryPortAttributes, req);  req->port = port;  /* READ THE REPLY */  if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {      UnlockDisplay(dpy);      SyncHandle();      return ret;  }  if(rep.num_attributes) {      int size = (rep.num_attributes * sizeof(SDL_NAME(XvAttribute))) + rep.text_size;      if((ret = Xmalloc(size))) {	  char* marker = (char*)(&ret[rep.num_attributes]);	  xvAttributeInfo Info;	  int i;		  for(i = 0; i < rep.num_attributes; i++) {             _XRead(dpy, (char*)(&Info), sz_xvAttributeInfo);	      ret[i].flags = (int)Info.flags;	      	      ret[i].min_value = Info.min;	      	      ret[i].max_value = Info.max;	      	      ret[i].name = marker;	      _XRead(dpy, marker, Info.size);	      marker += Info.size;	      (*num)++;	  }      } else	_XEatData(dpy, rep.length << 2);  }  UnlockDisplay(dpy);  SyncHandle();  return ret;}SDL_NAME(XvImageFormatValues) * SDL_NAME(XvListImageFormats) (   Display 	*dpy,   XvPortID 	port,   int 		*num){  XExtDisplayInfo *info = xv_find_display(dpy);  xvListImageFormatsReq *req;  xvListImageFormatsReply rep;  SDL_NAME(XvImageFormatValues) *ret = NULL;  *num = 0;  XvCheckExtension(dpy, info, NULL);  LockDisplay(dpy);  XvGetReq(ListImageFormats, req);  req->port = port;  /* READ THE REPLY */  if (_XReply(dpy, (xReply *)&rep, 0, xFalse) == 0) {      UnlockDisplay(dpy);      SyncHandle();      return NULL;  }  if(rep.num_formats) {      int size = (rep.num_formats * sizeof(SDL_NAME(XvImageFormatValues)));      if((ret = Xmalloc(size))) {	  xvImageFormatInfo Info;	  int i;		  for(i = 0; i < rep.num_formats; i++) {              _XRead(dpy, (char*)(&Info), sz_xvImageFormatInfo);	      ret[i].id = Info.id;	      	      ret[i].type = Info.type;	      	      ret[i].byte_order = Info.byte_order;	      	      memcpy(&(ret[i].guid[0]), &(Info.guid[0]), 16);	      ret[i].bits_per_pixel = Info.bpp;	        	      ret[i].format = Info.format;	         	      ret[i].num_planes = Info.num_planes;	          	      ret[i].depth = Info.depth;	          	      ret[i].red_mask = Info.red_mask;	          	      ret[i].green_mask = Info.green_mask;	          	      ret[i].blue_mask = Info.blue_mask;	          	      ret[i].y_sample_bits = Info.y_sample_bits;	          	      ret[i].u_sample_bits = Info.u_sample_bits;	          	      ret[i].v_sample_bits = Info.v_sample_bits;    	      ret[i].horz_y_period = Info.horz_y_period;    	      ret[i].horz_u_period = Info.horz_u_period;    	      ret[i].horz_v_period = Info.horz_v_period;    	      ret[i].vert_y_period = Info.vert_y_period;    	      ret[i].vert_u_period = Info.vert_u_period;    	      ret[i].vert_v_period = Info.vert_v_period;	      memcpy(&(ret[i].component_order[0]), &(Info.comp_order[0]), 32);    	      ret[i].scanline_order = Info.scanline_order;	      (*num)++;	  }      } else	_XEatData(dpy, rep.length << 2);  }  UnlockDisplay(dpy);  SyncHandle();  return ret;}SDL_NAME(XvImage) * SDL_NAME(XvCreateImage) (   Display *dpy,   XvPortID port,   int id,   char *data,   int width,    int height ) {   XExtDisplayInfo *info = xv_find_display(dpy);   xvQueryImageAttributesReq *req;   xvQueryImageAttributesReply rep;   SDL_NAME(XvImage) *ret = NULL;   XvCheckExtension(dpy, info, NULL);   LockDisplay(dpy);   XvGetReq(QueryImageAttributes, req);   req->id = id;   req->port = port;   req->width = width;   req->height = height;   /* READ THE REPLY */   if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {       UnlockDisplay(dpy);       SyncHandle();      return NULL;   }   if((ret = (SDL_NAME(XvImage)*)Xmalloc(sizeof(SDL_NAME(XvImage)) + (rep.num_planes << 3)))) {	ret->id = id;	ret->width = rep.width;	ret->height = rep.height;	ret->data_size = rep.data_size;	ret->num_planes = rep.num_planes;	ret->pitches = (int*)(&ret[1]);	ret->offsets = ret->pitches + rep.num_planes;	ret->data = data;	ret->obdata = NULL;  	_XRead(dpy, (char*)(ret->pitches), rep.num_planes << 2);	_XRead(dpy, (char*)(ret->offsets), rep.num_planes << 2);   } else	_XEatData(dpy, rep.length << 2);   UnlockDisplay(dpy);   SyncHandle();   return ret;}SDL_NAME(XvImage) * SDL_NAME(XvShmCreateImage) (   Display *dpy,   XvPortID port,   int id,   char *data,   int width,    int height,   XShmSegmentInfo *shminfo){   SDL_NAME(XvImage) *ret;   ret = SDL_NAME(XvCreateImage)(dpy, port, id, data, width, height);   if(ret) ret->obdata = (XPointer)shminfo;   return ret;}int SDL_NAME(XvPutImage) (   Display *dpy,   XvPortID port,   Drawable d,   GC gc,   SDL_NAME(XvImage) *image,   int src_x,   int src_y,   unsigned int src_w,   unsigned int src_h,   int dest_x,    int dest_y,   unsigned int dest_w,   unsigned int dest_h){  XExtDisplayInfo *info = xv_find_display(dpy);  xvPutImageReq *req;  int len;  XvCheckExtension(dpy, info, XvBadExtension);  LockDisplay(dpy);  FlushGC(dpy, gc);  XvGetReq(PutImage, req);  req->port = port;  req->drawable = d;  req->gc = gc->gid;  req->id = image->id;  req->src_x = src_x;  req->src_y = src_y;  req->src_w = src_w;  req->src_h = src_h;  req->drw_x = dest_x;  req->drw_y = dest_y;  req->drw_w = dest_w;  req->drw_h = dest_h;  req->width = image->width;  req->height = image->height;  len = (image->data_size + 3) >> 2;  SetReqLen(req, len, len);  /* Yes it's kindof lame that we are sending the whole thing,     but for video all of it may be needed even if displaying     only a subsection, and I don't want to go through the      trouble of creating subregions to send */  Data(dpy, (char *)image->data, image->data_size);  UnlockDisplay(dpy);  SyncHandle();  return Success;}int SDL_NAME(XvShmPutImage) (   Display *dpy,   XvPortID port,   Drawable d,   GC gc,   SDL_NAME(XvImage) *image,   int src_x,   int src_y,   unsigned int src_w,   unsigned int src_h,   int dest_x,    int dest_y,   unsigned int dest_w,   unsigned int dest_h,   Bool send_event){  XExtDisplayInfo *info = xv_find_display(dpy);  XShmSegmentInfo *shminfo = (XShmSegmentInfo *)image->obdata;  xvShmPutImageReq *req;  XvCheckExtension(dpy, info, XvBadExtension);  LockDisplay(dpy);    FlushGC(dpy, gc);  XvGetReq(ShmPutImage, req);  req->port = port;  req->drawable = d;  req->gc = gc->gid;  req->shmseg = shminfo->shmseg;  req->id = image->id;  req->src_x = src_x;  req->src_y = src_y;  req->src_w = src_w;  req->src_h = src_h;  req->drw_x = dest_x;  req->drw_y = dest_y;  req->drw_w = dest_w;  req->drw_h = dest_h;  req->offset = image->data - shminfo->shmaddr;  req->width = image->width;  req->height = image->height;  req->send_event = send_event;  UnlockDisplay(dpy);  SyncHandle();  return Success;}static Boolxv_wire_to_event(Display *dpy, XEvent *host, xEvent *wire){  XExtDisplayInfo *info = xv_find_display(dpy);  SDL_NAME(XvEvent) *re    = (SDL_NAME(XvEvent) *)host;  xvEvent *event = (xvEvent *)wire;  XvCheckExtension(dpy, info, False);  switch((event->u.u.type & 0x7F) - info->codes->first_event)  {    case XvVideoNotify:      re->xvvideo.type = event->u.u.type & 0x7f;      re->xvvideo.serial = 	_XSetLastRequestRead(dpy, (xGenericReply *)event);      re->xvvideo.send_event = ((event->u.u.type & 0x80) != 0);      re->xvvideo.display = dpy;      re->xvvideo.time = event->u.videoNotify.time;      re->xvvideo.reason = event->u.videoNotify.reason;      re->xvvideo.drawable = event->u.videoNotify.drawable;      re->xvvideo.port_id = event->u.videoNotify.port;      break;    case XvPortNotify:      re->xvport.type = event->u.u.type & 0x7f;      re->xvport.serial = 	_XSetLastRequestRead(dpy, (xGenericReply *)event);      re->xvport.send_event = ((event->u.u.type & 0x80) != 0);      re->xvport.display = dpy;      re->xvport.time = event->u.portNotify.time;      re->xvport.port_id = event->u.portNotify.port;      re->xvport.attribute = event->u.portNotify.attribute;      re->xvport.value = event->u.portNotify.value;      break;    default:      return False;   }  return (True);}

⌨️ 快捷键说明

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