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

📄 main.c

📁 一个GNU的开源软件,基于linux下X-Window的flash播放器,工作稳定,方便移植和修改
💻 C
📖 第 1 页 / 共 2 页
字号:
	return length;}void drawInfo(){	char msg[1024];	sprintf(msg,"%s (Flash %d)  - Frames = %d  - Rate = %d fps",			filename,(int)fi.version,(int)fi.frameCount,(int)fi.frameRate);	XSetForeground(dpy,gc,WhitePixel(dpy, DefaultScreen(dpy)));	XDrawString(dpy,control,gc,10,15,msg, strlen(msg));	sprintf(msg, "  (Q)uit (R)eplay (P)ause (C)ontinue");	XDrawString(dpy,control,gc,10,35,msg, strlen(msg));	XFlush(dpy);}void playMovie(FlashHandle flashHandle, Display *dpy, Window movie, int onRoot){	struct timeval wd,de,now;	//struct timeval	//	{	//		long tv_sec;	//		long tv_usec;	//	};	XEvent event;	long cmd; /* evMask, */	fd_set fdset;	int status;	long delay = 0;	long wakeUp;	long z = 1;/*	long x = 0;	long y = 0;*/        FlashEvent fe;	cmd = FLASH_WAKEUP;	wakeUp = FlashExec(flashHandle, cmd, 0, &wd);	if (!onRoot) {		XSelectInput(dpy, movie, FLASH_XEVENT_MASK|KeyPressMask);	}	XSync(dpy,False);	while(1) {		FD_ZERO(&fdset);		FD_SET(ConnectionNumber(dpy),&fdset);		//printf("WakeUp = %d  Delay = %d\n", wakeUp, delay);		if (delay < 0) {			delay = 20;		}                if (xc->fd.flash_refresh) {                    FlashCopyX11(0);                    xc->fd.flash_refresh = 0;                }		if (wakeUp) {			de.tv_sec = delay/1000;			de.tv_usec = (delay%1000)*1000;			status = select(ConnectionNumber(dpy)+1, &fdset, 0, 0, &de);		} else {			status = select(ConnectionNumber(dpy)+1, &fdset, 0, 0, 0);		}		if (status == 0) {			cmd = FLASH_WAKEUP;			wakeUp = FlashExec(flashHandle, cmd, 0, &wd);		} else {			XNextEvent(dpy, &event);			//printf("Event %d (%d)\n",event.type,event.xany.serial);			if (event.xany.window == movie) {				int keycode;				KeySym keysym;				switch (event.type) {				case KeyPress:					keycode = event.xkey.keycode;					keysym = XLookupKeysym((XKeyEvent*)&event, 0);                                        fe.type = FeKeyPress;                                        fe.key = 0;					switch (keysym) {						case XK_Up:                                                    fe.key = FeKeyUp;                                                    break;						case XK_Down:                                                    fe.key = FeKeyDown;                                                    break;						case XK_Left:                                                    fe.key = FeKeyLeft;                                                    break;						case XK_Right:                                                    fe.key = FeKeyRight;                                                    break;						case XK_Return:                                                    fe.key = FeKeyEnter;                                                    break;						case XK_Tab:                                                    fe.key = FeKeyNext;                                                    break;                                        }                                        if (fe.key != 0) {                                            cmd = FLASH_EVENT;                                            if (FlashExec(flashHandle, cmd, &fe, &wd)) {                                                wakeUp = 1;                                            }                                        } else {                                            switch (keysym) {#if 0						case XK_Up:							y -= 10;							FlashOffset(flashHandle,x,y);							break;						case XK_Down:							y += 10;							FlashOffset(flashHandle,x,y);							break;						case XK_Left:							x -= 10;							FlashOffset(flashHandle,x,y);							break;						case XK_Right:							x += 10;							FlashOffset(flashHandle,x,y);							break;#endif						case XK_KP_Add:							FlashZoom(flashHandle,++z);							break;						case XK_KP_Subtract:							FlashZoom(flashHandle,--z);							break;						case XK_q:							return;							break;						case XK_c:							cmd = FLASH_CONT;							wakeUp = FlashExec(flashHandle, cmd, 0, &wd);							break;						case XK_p:							cmd = FLASH_STOP;							wakeUp = FlashExec(flashHandle, cmd, 0, &wd);							break;						case XK_r:							cmd = FLASH_REWIND;							FlashExec(flashHandle, cmd, 0, &wd);							cmd = FLASH_CONT;							wakeUp = FlashExec(flashHandle, cmd, 0, &wd);							break;                                            }                                        }					break;				case Expose:				        FlashCopyX11(1);					break;				case NoExpose:					break;				default:					cmd = FLASH_EVENT;					if (FlashExecX11(flashHandle, cmd, &event, &wd)) {                                            wakeUp = 1;                                        }					break;				}			}			if (!onRoot && event.xany.window == control) {				if (event.type == Expose) {					drawInfo();				}			}		}		/* Recompute delay */		gettimeofday(&now,0);		delay = (wd.tv_sec-now.tv_sec)*1000 + (wd.tv_usec-now.tv_usec)/1000;	}}voidshowUrl(char *url, char *target, void *client_data){	printf("GetURL : %s\n", url);}voidgetSwf(char *url, int level, void *client_data){	FlashHandle flashHandle;	char *buffer;	long size;	flashHandle = (FlashHandle) client_data;	printf("LoadMovie: %s @ %d\n", url, level);	if (readFile(url, &buffer, &size) > 0) {		FlashParse(flashHandle, level, buffer, size);	}}int main(int argc, char **argv){	char *buffer;	long size;	FlashHandle flashHandle;	int status;	int onRoot = 0;	Screen *screen;	if (argc < 2) {		fprintf(stderr,"Usage : %s [ -root ] <file.swf>\n", argv[0]);		exit(1);	}	if (argc == 3) {		if (!strcmp(argv[1],"-root") || !strcmp(argv[1],"-inroot")) {			onRoot = 1;		}		argc--;		argv++;	}	dpy = XOpenDisplay(getenv("DISPLAY"));	if (dpy == 0) {		fprintf(stderr,"Can't open X display\n");		exit(1);	}	screen = DefaultScreenOfDisplay(dpy);//return the default screen of the display dpy	gc = DefaultGC(dpy, DefaultScreen(dpy));//DefaultScreen returns the number of the screen belonging to the display dpy	filename = argv[1];	if (readFile(filename, &buffer, &size) < 0) {		exit(2);	}	flashHandle = FlashNew();	if (flashHandle == 0) {		exit(1);	}	printf("starting flashparser\n");	// Load level 0 movie	do {		status = FlashParse(flashHandle, 0, buffer, size);	} while (status & FLASH_PARSE_NEED_DATA);	printf("flashparser done\n");	free(buffer);	FlashGetInfo(flashHandle, &fi);	if (onRoot == 0) {//?		frame = XCreateSimpleWindow(dpy, RootWindow(dpy, DefaultScreen(dpy))//parent window,					    0, 0,					    fi.frameWidth/20, fi.frameHeight/20+40,					    0, WhitePixel(dpy, DefaultScreen(dpy)), BlackPixel(dpy, DefaultScreen(dpy))					    );//create a window whose parent is root window		XMapWindow(dpy, frame);//enable the window viewable in dpy(if its parent is unviewable,it will wait for its parent becoming viewable by using this function)		movie = XCreateSimpleWindow(dpy, frame, 0, 0, fi.frameWidth/20,fi.frameHeight/20,					    0, WhitePixel(dpy, DefaultScreen(dpy)), BlackPixel(dpy, DefaultScreen(dpy))					    );//its parent is frame		XMapWindow(dpy, movie);//		control = XCreateSimpleWindow(dpy, frame, 0, fi.frameHeight/20, fi.frameWidth/20,40,					    0, BlackPixel(dpy, DefaultScreen(dpy)), BlackPixel(dpy, DefaultScreen(dpy))					    );//its parent is frame,too		XMapWindow(dpy, control);//		XSelectInput(dpy, control, ExposureMask);//select input events from the window "control" with the event mask ExposureMask		                                         //this function requests that the X Server report the events associated with the specified event mask		drawInfo();	} else {		movie = VirtualRootWindowOfScreen(screen);		// Auto loop when onRoot		FlashSettings(flashHandle, PLAYER_LOOP);	}	XFlush(dpy);//flushes the output buffer of dpy        FlashGraphicInitX11(flashHandle, dpy, movie, onRoot);//initialize X	FlashSoundInit(flashHandle, "/dev/dsp");	FlashSetGetUrlMethod(flashHandle, showUrl, 0);	FlashSetGetSwfMethod(flashHandle, getSwf, (void*)flashHandle);	playMovie(flashHandle, dpy, movie, onRoot);	FlashClose(flashHandle);	exit(0);}

⌨️ 快捷键说明

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