コード例 #1
0
static int preinit(const char *vo_subdevice)
{
	uint32_t ver;
  const char *devname=vo_subdevice?vo_subdevice:"/dev/mga_vid";
	sws_rgb2rgb_init(get_sws_cpuflags());

	f = open(devname,O_RDWR);
	if(f == -1)
	{
		perror("open");
		mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_MGA_CouldntOpen,devname);
		return -1;
	}

	// check whether the mga_vid driver has the same
	// version as we expect

	ioctl(f,MGA_VID_GET_VERSION,&ver);
	if(MGA_VID_VERSION != ver)
	{
		mp_msg(MSGT_VO, MSGL_ERR, MSGTR_LIBVO_MGA_mgavidVersionMismatch, ver, MGA_VID_VERSION);
		return -1;
	}

#ifdef VO_XMGA
  if (!vo_init()) {
    close(f);
    return -1;
  }
#endif

  return 0;
}
コード例 #2
0
static int config(struct vf_instance_s* vf,
        int width, int height, int d_width, int d_height,
	unsigned int flags, unsigned int outfmt){

    sws_rgb2rgb_init(get_sws_cpuflags());
    
    if(vf_next_query_format(vf,IMGFMT_YUY2)<=0){
	mp_msg(MSGT_VFILTER, MSGL_WARN, MSGTR_MPCODECS_WarnNextFilterDoesntSupport, "YUY2");
	return 0;
    }
    
    return vf_next_config(vf,width,height,d_width,d_height,flags,IMGFMT_YUY2);
}
コード例 #3
0
//exact copy from vf_scale.c
// will use sws_flags & src_filter (from cmd line)
struct SwsContext *sws_getContextFromCmdLine(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat)
{
        int flags, i;
        SwsFilter *dstFilterParam, *srcFilterParam;
        enum PixelFormat dfmt, sfmt;

        for(i=0; conversion_map[i].fmt && dstFormat != conversion_map[i].fmt; i++);
        dfmt= conversion_map[i].pix_fmt;
        for(i=0; conversion_map[i].fmt && srcFormat != conversion_map[i].fmt; i++);
        sfmt= conversion_map[i].pix_fmt;

        if (srcFormat == IMGFMT_RGB8 || srcFormat == IMGFMT_BGR8) sfmt = PIX_FMT_PAL8;
        sws_getFlagsAndFilterFromCmdLine(&flags, &srcFilterParam, &dstFilterParam);

        return sws_getContext(srcW, srcH, sfmt, dstW, dstH, dfmt, flags | get_sws_cpuflags(), srcFilterParam, dstFilterParam, NULL);
}
コード例 #4
0
ファイル: vf_smartblur.c プロジェクト: batman52/dingux-code
static int allocStuff(FilterParam *f, int width, int height){
	SwsVector *vec;
	SwsFilter swsF;

	vec = sws_getGaussianVec(f->radius, f->quality);
	sws_scaleVec(vec, f->strength);
	vec->coeff[vec->length/2]+= 1.0 - f->strength;
	swsF.lumH= swsF.lumV= vec;
	swsF.chrH= swsF.chrV= NULL;
	f->filterContext= sws_getContext(
		width, height, PIX_FMT_GRAY8, width, height, PIX_FMT_GRAY8, get_sws_cpuflags(), &swsF, NULL, NULL);

	sws_freeVec(vec);

	return 0;
}
コード例 #5
0
static int allocStuff(FilterParam *f, int width, int height){
	int stride= (width+7)&~7;
	SwsVector *vec;
	SwsFilter swsF;
	int i,x,y;
	f->preFilterBuf= (uint8_t*)memalign(8, stride*height);
	f->preFilterStride= stride;

	vec = sws_getGaussianVec(f->preFilterRadius, f->quality);
	swsF.lumH= swsF.lumV= vec;
	swsF.chrH= swsF.chrV= NULL;
	f->preFilterContext= sws_getContext(
		width, height, PIX_FMT_GRAY8, width, height, PIX_FMT_GRAY8, get_sws_cpuflags()|SWS_POINT, &swsF, NULL, NULL);

	sws_freeVec(vec);
	vec = sws_getGaussianVec(f->strength, 5.0);
	for(i=0; i<512; i++){
		double d;
		int index= i-256 + vec->length/2;

		if(index<0 || index>=vec->length) 	d= 0.0;
		else					d= vec->coeff[index];

		f->colorDiffCoeff[i]= (int)(d/vec->coeff[vec->length/2]*(1<<12) + 0.5);
	}
	sws_freeVec(vec);
	vec = sws_getGaussianVec(f->radius, f->quality);
	f->distWidth= vec->length;
	f->distStride= (vec->length+7)&~7;
	f->distCoeff= (int32_t*)memalign(8, f->distWidth*f->distStride*sizeof(int32_t));

	for(y=0; y<vec->length; y++){
		for(x=0; x<vec->length; x++){
			double d= vec->coeff[x] * vec->coeff[y];

			f->distCoeff[x + y*f->distStride]= (int)(d*(1<<10) + 0.5);
//			if(y==vec->length/2)
//				printf("%6d ", f->distCoeff[x + y*f->distStride]);
		}
	}
	sws_freeVec(vec);

	return 0;
}
コード例 #6
0
static int config(struct vf_instance *vf,
        int width, int height, int d_width, int d_height,
	unsigned int flags, unsigned int outfmt){
    unsigned int best=find_best_out(vf, outfmt);
    int vo_flags;
    int int_sws_flags=0;
    int round_w=0, round_h=0;
    int i;
    SwsFilter *srcFilter, *dstFilter;
    enum PixelFormat dfmt, sfmt;

    if(!best){
	mp_msg(MSGT_VFILTER,MSGL_WARN,"SwScale: no supported outfmt found :(\n");
	return 0;
    }
    sfmt = imgfmt2pixfmt(outfmt);
    if (outfmt == IMGFMT_RGB8 || outfmt == IMGFMT_BGR8) sfmt = PIX_FMT_PAL8;
    dfmt = imgfmt2pixfmt(best);

    vo_flags=vf->next->query_format(vf->next,best);

    // scaling to dwidth*d_height, if all these TRUE:
    // - option -zoom
    // - no other sw/hw up/down scaling avail.
    // - we're after postproc
    // - user didn't set w:h
    if(!(vo_flags&VFCAP_POSTPROC) && (flags&4) &&
	    vf->priv->w<0 && vf->priv->h<0){	// -zoom
	int x=(vo_flags&VFCAP_SWSCALE) ? 0 : 1;
	if(d_width<width || d_height<height){
	    // downscale!
	    if(vo_flags&VFCAP_HWSCALE_DOWN) x=0;
	} else {
	    // upscale:
	    if(vo_flags&VFCAP_HWSCALE_UP) x=0;
	}
	if(x){
	    // user wants sw scaling! (-zoom)
	    vf->priv->w=d_width;
	    vf->priv->h=d_height;
	}
    }

    if(vf->priv->noup){
        if((vf->priv->w > width) + (vf->priv->h > height) >= vf->priv->noup){
            vf->priv->w= width;
            vf->priv->h= height;
        }
    }

    if (vf->priv->w <= -8) {
      vf->priv->w += 8;
      round_w = 1;
    }
    if (vf->priv->h <= -8) {
      vf->priv->h += 8;
      round_h = 1;
    }

    if (vf->priv->w < -3 || vf->priv->h < -3 ||
         (vf->priv->w < -1 && vf->priv->h < -1)) {
      // TODO: establish a direct connection to the user's brain
      // and find out what the heck he thinks MPlayer should do
      // with this nonsense.
      mp_msg(MSGT_VFILTER, MSGL_ERR, "SwScale: EUSERBROKEN Check your parameters, they make no sense!\n");
      return 0;
    }

    if (vf->priv->w == -1)
      vf->priv->w = width;
    if (vf->priv->w == 0)
      vf->priv->w = d_width;

    if (vf->priv->h == -1)
      vf->priv->h = height;
    if (vf->priv->h == 0)
      vf->priv->h = d_height;

    if (vf->priv->w == -3)
      vf->priv->w = vf->priv->h * width / height;
    if (vf->priv->w == -2)
      vf->priv->w = vf->priv->h * d_width / d_height;

    if (vf->priv->h == -3)
      vf->priv->h = vf->priv->w * height / width;
    if (vf->priv->h == -2)
      vf->priv->h = vf->priv->w * d_height / d_width;

    if (round_w)
      vf->priv->w = ((vf->priv->w + 8) / 16) * 16;
    if (round_h)
      vf->priv->h = ((vf->priv->h + 8) / 16) * 16;

    // calculate the missing parameters:
    switch(best) {
    case IMGFMT_YV12:		/* YV12 needs w & h rounded to 2 */
    case IMGFMT_I420:
    case IMGFMT_IYUV:
    case IMGFMT_NV12:
    case IMGFMT_NV21:
      vf->priv->h = (vf->priv->h + 1) & ~1;
    case IMGFMT_YUY2:		/* YUY2 needs w rounded to 2 */
    case IMGFMT_UYVY:
      vf->priv->w = (vf->priv->w + 1) & ~1;
    }

    mp_msg(MSGT_VFILTER,MSGL_DBG2,"SwScale: scaling %dx%d %s to %dx%d %s  \n",
	width,height,vo_format_name(outfmt),
	vf->priv->w,vf->priv->h,vo_format_name(best));

    // free old ctx:
    if(vf->priv->ctx) sws_freeContext(vf->priv->ctx);
    if(vf->priv->ctx2)sws_freeContext(vf->priv->ctx2);

    // new swscaler:
    sws_getFlagsAndFilterFromCmdLine(&int_sws_flags, &srcFilter, &dstFilter);
    int_sws_flags|= vf->priv->v_chr_drop << SWS_SRC_V_CHR_DROP_SHIFT;
    int_sws_flags|= vf->priv->accurate_rnd * SWS_ACCURATE_RND;
    vf->priv->ctx=sws_getContext(width, height >> vf->priv->interlaced,
	    sfmt,
		  vf->priv->w, vf->priv->h >> vf->priv->interlaced,
	    dfmt,
	    int_sws_flags | get_sws_cpuflags(), srcFilter, dstFilter, vf->priv->param);
    if(vf->priv->interlaced){
        vf->priv->ctx2=sws_getContext(width, height >> 1,
	    sfmt,
		  vf->priv->w, vf->priv->h >> 1,
	    dfmt,
	    int_sws_flags | get_sws_cpuflags(), srcFilter, dstFilter, vf->priv->param);
    }
コード例 #7
0
ファイル: ws.c プロジェクト: DanielGit/Intrisit201202
void wsXInit( void* mDisplay )
{
 int    eventbase;
 int    errorbase;

if(mDisplay){
 wsDisplay=mDisplay;
} else {
 char * DisplayName = ":0.0";
 if ( getenv( "DISPLAY" ) ) DisplayName=getenv( "DISPLAY" );
 wsDisplay=XOpenDisplay( DisplayName );
 if ( !wsDisplay )
  {
   mp_msg( MSGT_GPLAYER,MSGL_FATAL,MSGTR_WS_CouldNotOpenDisplay );
   exit( 0 );
  }
}

/* enable DND atoms */
wsXDNDInitialize();
 
{ /* on remote display XShm will be disabled - LGB */
 char *dispname=DisplayString(wsDisplay);
 int localdisp=1;
 if (dispname&&*dispname!=':') {
    localdisp=0;
    wsUseXShm=0;
 }
 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"[ws] display name: %s => %s display.\n",dispname,localdisp?"local":"REMOTE");
 if (!localdisp) mp_msg( MSGT_GPLAYER,MSGL_V,MSGTR_WS_RemoteDisplay );
}

 if ( !XShmQueryExtension( wsDisplay ) )
  {
   mp_msg( MSGT_GPLAYER,MSGL_ERR,MSGTR_WS_NoXshm );
   wsUseXShm=0;
  }
#ifdef HAVE_XSHAPE
  if ( !XShapeQueryExtension( wsDisplay,&eventbase,&errorbase ) )
   {
    mp_msg( MSGT_GPLAYER,MSGL_ERR,MSGTR_WS_NoXshape );
    wsUseXShape=0;
   }
#else
  wsUseXShape=0;
#endif

 XSynchronize( wsDisplay,True );

 wsScreen=DefaultScreen( wsDisplay );
 wsRootWin=RootWindow( wsDisplay,wsScreen );
#ifdef HAVE_XF86VM
    {
      int clock;
      XF86VidModeModeLine modeline;

      XF86VidModeGetModeLine( wsDisplay,wsScreen,&clock ,&modeline );
      wsMaxX=modeline.hdisplay;
      wsMaxY=modeline.vdisplay;
    }
#endif
 {
 wsOrgX = wsOrgY = 0;
 if ( !wsMaxX )
 wsMaxX=DisplayWidth( wsDisplay,wsScreen );
 if ( !wsMaxY )
 wsMaxY=DisplayHeight( wsDisplay,wsScreen );
 }
  vo_screenwidth = wsMaxX; vo_screenheight = wsMaxY;
  xinerama_x = wsOrgX; xinerama_y = wsOrgY;
  update_xinerama_info();
  wsMaxX = vo_screenwidth; wsMaxY = vo_screenheight;
  wsOrgX = xinerama_x; wsOrgY = xinerama_y;

 wsGetDepthOnScreen();
#ifdef DEBUG
  {
   int minor,major,shp;
   mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws] Screen depth: %d\n",wsDepthOnScreen );
   mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws]  size: %dx%d\n",wsMaxX,wsMaxY );
#ifdef HAVE_XINERAMA
   mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws]  origin: +%d+%d\n",wsOrgX,wsOrgY );
#endif
   mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws]  red mask: 0x%x\n",wsRedMask );
   mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws]  green mask: 0x%x\n",wsGreenMask );
   mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws]  blue mask: 0x%x\n",wsBlueMask );
   if ( wsUseXShm )
    {
     XShmQueryVersion( wsDisplay,&major,&minor,&shp );
     mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws] XShm version is %d.%d\n",major,minor );
    }
   #ifdef HAVE_XSHAPE
    if ( wsUseXShape )
     {
      XShapeQueryVersion( wsDisplay,&major,&minor );
      mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[ws] XShape version is %d.%d\n",major,minor );
     }
   #endif
  }
#endif
 wsOutMask=wsGetOutMask();
 mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"[ws] Initialized converter: " );
 sws_rgb2rgb_init(get_sws_cpuflags());
 switch ( wsOutMask )
  {
   case wsRGB32:
     mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to rgb32\n" );
     wsConvFunc=rgb32torgb32;
     break;
   case wsBGR32:
     mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to bgr32\n" );
     wsConvFunc=rgb32tobgr32;
     break;
   case wsRGB24:
     mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to rgb24\n" );
     wsConvFunc=rgb32to24;
     break;
   case wsBGR24:
     mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to bgr24\n" );
     wsConvFunc=rgb32tobgr24;
     break;
   case wsRGB16:
     mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to rgb16\n" );
     wsConvFunc=rgb32to16;
     break;
   case wsBGR16:
     mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to bgr16\n" );
     wsConvFunc=rgb32tobgr16;
     break;
   case wsRGB15:
     mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to rgb15\n" );
     wsConvFunc=rgb32to15;
     break;
   case wsBGR15:
     mp_dbg( MSGT_GPLAYER,MSGL_DBG2,"rgb32 to bgr15\n" );
     wsConvFunc=rgb32tobgr15;
     break;
  }
 XSetErrorHandler( wsErrorHandler );
}
コード例 #8
0
ファイル: cs_test.c プロジェクト: achintsetia/ffmpeg0.4.9
main(int argc, char **argv)
{
	int i, funcNum;
	uint8_t *srcBuffer= (uint8_t*)memalign(128, SIZE);
	uint8_t *dstBuffer= (uint8_t*)memalign(128, SIZE);
	int failedNum=0;
	int passedNum=0;
	
	printf("memory corruption test ...\n");
	
	if(argc==2){
		GetCpuCaps(&gCpuCaps);
		printf("testing mmx\n");
	}
	
	sws_rgb2rgb_init(get_sws_cpuflags());
	
	for(funcNum=0; funcNum<100; funcNum++){
		int width;
		int failed=0;
		int srcBpp=0;
		int dstBpp=0;

		printf("."); fflush(stdout);
		memset(srcBuffer, srcByte, SIZE);

		for(width=32; width<64; width++){
			int dstOffset;
			for(dstOffset=128; dstOffset<196; dstOffset++){
				int srcOffset;
				memset(dstBuffer, dstByte, SIZE);

				for(srcOffset=128; srcOffset<196; srcOffset++){
					uint8_t *src= srcBuffer+srcOffset;
					uint8_t *dst= dstBuffer+dstOffset;
					char *name=NULL;
					
					if(failed) break; //don't fill the screen with shit ...

					switch(funcNum){
					case 0:
						srcBpp=2;
						dstBpp=2;
						name="rgb15to16";
						rgb15to16(src, dst, width*srcBpp);
						break;
					case 1:
						srcBpp=2;
						dstBpp=3;
						name="rgb15to24";
						rgb15to24(src, dst, width*srcBpp);
						break;
					case 2:
						srcBpp=2;
						dstBpp=4;
						name="rgb15to32";
						rgb15to32(src, dst, width*srcBpp);
						break;
					case 3:
						srcBpp=2;
						dstBpp=3;
						name="rgb16to24";
						rgb16to24(src, dst, width*srcBpp);
						break;
					case 4:
						srcBpp=2;
						dstBpp=4;
						name="rgb16to32";
						rgb16to32(src, dst, width*srcBpp);
						break;
					case 5:
						srcBpp=3;
						dstBpp=2;
						name="rgb24to15";
						rgb24to15(src, dst, width*srcBpp);
						break;
					case 6:
						srcBpp=3;
						dstBpp=2;
						name="rgb24to16";
						rgb24to16(src, dst, width*srcBpp);
						break;
					case 7:
						srcBpp=3;
						dstBpp=4;
						name="rgb24to32";
						rgb24to32(src, dst, width*srcBpp);
						break;
					case 8:
						srcBpp=4;
						dstBpp=2;
						name="rgb32to15";
						rgb32to15(src, dst, width*srcBpp);
						break;
					case 9:
						srcBpp=4;
						dstBpp=2;
						name="rgb32to16";
						rgb32to16(src, dst, width*srcBpp);
						break;
					case 10:
						srcBpp=4;
						dstBpp=3;
						name="rgb32to24";
						rgb32to24(src, dst, width*srcBpp);
						break;
					case 11:
						srcBpp=2;
						dstBpp=2;
						name="rgb16to15";
						rgb16to15(src, dst, width*srcBpp);
						break;
					
					case 14:
						srcBpp=2;
						dstBpp=2;
						name="rgb15tobgr15";
						rgb15tobgr15(src, dst, width*srcBpp);
						break;
					case 15:
						srcBpp=2;
						dstBpp=2;
						name="rgb15tobgr16";
						rgb15tobgr16(src, dst, width*srcBpp);
						break;
					case 16:
						srcBpp=2;
						dstBpp=3;
						name="rgb15tobgr24";
						rgb15tobgr24(src, dst, width*srcBpp);
						break;
					case 17:
						srcBpp=2;
						dstBpp=4;
						name="rgb15tobgr32";
						rgb15tobgr32(src, dst, width*srcBpp);
						break;
					case 18:
						srcBpp=2;
						dstBpp=2;
						name="rgb16tobgr15";
						rgb16tobgr15(src, dst, width*srcBpp);
						break;
					case 19:
						srcBpp=2;
						dstBpp=2;
						name="rgb16tobgr16";
						rgb16tobgr16(src, dst, width*srcBpp);
						break;
					case 20:
						srcBpp=2;
						dstBpp=3;
						name="rgb16tobgr24";
						rgb16tobgr24(src, dst, width*srcBpp);
						break;
					case 21:
						srcBpp=2;
						dstBpp=4;
						name="rgb16tobgr32";
						rgb16tobgr32(src, dst, width*srcBpp);
						break;
					case 22:
						srcBpp=3;
						dstBpp=2;
						name="rgb24tobgr15";
						rgb24tobgr15(src, dst, width*srcBpp);
						break;
					case 23:
						srcBpp=3;
						dstBpp=2;
						name="rgb24tobgr16";
						rgb24tobgr16(src, dst, width*srcBpp);
						break;
					case 24:
						srcBpp=3;
						dstBpp=3;
						name="rgb24tobgr24";
						rgb24tobgr24(src, dst, width*srcBpp);
						break;
					case 25:
						srcBpp=3;
						dstBpp=4;
						name="rgb24tobgr32";
						rgb24tobgr32(src, dst, width*srcBpp);
						break;
					case 26:
						srcBpp=4;
						dstBpp=2;
						name="rgb32tobgr15";
						rgb32tobgr15(src, dst, width*srcBpp);
						break;
					case 27:
						srcBpp=4;
						dstBpp=2;
						name="rgb32tobgr16";
						rgb32tobgr16(src, dst, width*srcBpp);
						break;
					case 28:
						srcBpp=4;
						dstBpp=3;
						name="rgb32tobgr24";
						rgb32tobgr24(src, dst, width*srcBpp);
						break;
					case 29:
						srcBpp=4;
						dstBpp=4;
						name="rgb32tobgr32";
						rgb32tobgr32(src, dst, width*srcBpp);
						break;

					}
					if(!srcBpp) break;

					for(i=0; i<SIZE; i++){
						if(srcBuffer[i]!=srcByte){
							printf("src damaged at %d w:%d src:%d dst:%d %s\n", 
								i, width, srcOffset, dstOffset, name);
							failed=1;
							break;
						}
					}
					for(i=0; i<dstOffset; i++){
						if(dstBuffer[i]!=dstByte){
							printf("dst damaged at %d w:%d src:%d dst:%d %s\n", 
								i, width, srcOffset, dstOffset, name);
							failed=1;
							break;
						}
					}
					for(i=dstOffset + width*dstBpp; i<SIZE; i++){
						if(dstBuffer[i]!=dstByte){
							printf("dst damaged at %d w:%d src:%d dst:%d %s\n", 
								i, width, srcOffset, dstOffset, name);
							failed=1;
							break;
						}
					}
				}
			}
		}
		if(failed) failedNum++;
		else if(srcBpp) passedNum++;
	}
	
	printf("%d converters passed, %d converters randomly overwrote memory\n", passedNum, failedNum);
	return failedNum;
}