int ShowVideo(void) { Image *Output; int SX,SY; /* Must have active video image, X11 display */ if(!VideoImg||!VideoImg->Data) return(0); /* Allocate image buffer if none */ //if(!OutImg.Data&&!NewImage(&OutImg,XSize,YSize)) return(0); /* If not scaling or post-processing image, avoid extra work */ if(!(Effects&(EFF_SOFTEN|EFF_SCALE|EFF_TVLINES))) { FlipImage(VideoImg); return(1); } /* By default, we will be showing OutImg */ Output = &OutImg; SX = 0; SY = 0; if(Effects&EFF_SOFTEN) { /* Apply softening */ SoftenImage(&OutImg,VideoImg,VideoX,VideoY,VideoW,VideoH); /* Apply TV scanlines, if needed */ if(Effects&EFF_TVLINES) TelevizeImage(&OutImg,0,0,OutImg.W,OutImg.H); } else if(Effects&EFF_TVLINES) { if(Effects&EFF_SCALE) { /* Scale VideoImg into OutImg */ ScaleImage(&OutImg,VideoImg,VideoX,VideoY,VideoW,VideoH); /* Apply TV scanlines */ TelevizeImage(&OutImg,0,0,OutImg.W,OutImg.H); } else { /* Center VideoImg in OutImg */ IMGCopy(&OutImg,(OutImg.W-VideoW)>>1,(OutImg.H-VideoH)>>1,VideoImg,VideoX,VideoY,VideoW,VideoH,-1); /* Apply TV scanlines */ TelevizeImage(&OutImg,(OutImg.W-VideoW)>>1,(OutImg.H-VideoH)>>1,VideoW,VideoH); } } else if((OutImg.W==VideoW)&&(OutImg.H==VideoH))
int ShowVideo(void) { int SW,SH,J; /* Must have active video image */ if(!VideoImg||!VideoImg->Data) return(0); switch(VGAMode) { case 1: SW=320;SH=200;break; case 2: SW=256;SH=240;break; case 3: SW=800;SH=600;break; case 4: SW=640;SH=480;break; default: return(0); } /* If applying image effects... */ if(Effects&(EFF_SOFTEN|EFF_SCALE|EFF_TVLINES)) { /* Allocate effect buffer if needed */ if(!OutScreen.Data||(OutScreen.W!=SW)||(OutScreen.H!=SH)) { FreeImage(&OutScreen);NewImage(&OutScreen,SW,SH); } /* If effect buffer present... */ if(OutScreen.Data) { Image Img; int W,H; /* Apply effects */ if(Effects&EFF_SOFTEN) { /* If video is squished, unsquish it */ H = VideoW/VideoH; H = H>1? VideoH*H:VideoH; W = VideoH/VideoW; W = W>1? VideoW*W:VideoW; /* Try filling the screen */ if(W*SH/H>SW) { H=H*SW/W;W=SW; } else { W=W*SH/H;H=SH; } /* Crop work region with the right W/H ratio */ CropImage(&Img,&OutScreen,(SW-W)>>1,(SH-H)>>1,W,H); /* Scale VideoImg with softening algorithm */ SoftenImage(&Img,VideoImg,VideoX,VideoY,VideoW,VideoH); } else if(Effects&EFF_SCALE)
int ShowVideo(void) { Image *Output; int SX,SY; /* Must have active video image, X11 display */ if(!VideoImg||!VideoImg->Data) return(0); /* Allocate image buffer if none */ if(!OutImg.Data&&!NewImage(&OutImg,XSize,YSize)) return(0); /* Count framerate */ if((Effects&EFF_SHOWFPS)&&(++FrameCount>=120)) { struct timeval NewTS; int Time; gettimeofday(&NewTS,0); Time = (NewTS.tv_sec-TimeStamp.tv_sec)*1000 + (NewTS.tv_usec-TimeStamp.tv_usec)/1000; FrameRate = 1000*FrameCount/(Time>0? Time:1); TimeStamp = NewTS; FrameCount = 0; FrameRate = FrameRate>999? 999:FrameRate; } /* If not scaling or post-processing image, avoid extra work */ if(!(Effects&(EFF_SOFTEN|EFF_SCALE|EFF_TVLINES))) { /* Show framerate if requested */ if((Effects&EFF_SHOWFPS)&&(FrameRate>0)) { char S[8]; sprintf(S,"%02dfps",FrameRate); PrintXY(VideoImg,S, 8,8, FPS_COLOR,PIXEL(255,255,255) ); } screen_buffer_t screen_buf[1]; screen_get_window_property_pv(window, SCREEN_PROPERTY_RENDER_BUFFERS, (void **)screen_buf); int bg[] = { SCREEN_BLIT_END }; screen_blit(ctxt, screen_buf[0], VideoImg->pbuf, bg); screen_post_window(window, screen_buf[0], 1, rect, 0); return 1; } /* By default, we will be showing OutImg */ Output = &OutImg; SX = 0; SY = 0; if(Effects&EFF_SOFTEN) { /* Apply softening */ SoftenImage(&OutImg,VideoImg,VideoX,VideoY,VideoW,VideoH); /* Apply TV scanlines, if needed */ if(Effects&EFF_TVLINES) TelevizeImage(&OutImg,0,0,OutImg.W,OutImg.H); } else if(Effects&EFF_TVLINES) { if(Effects&EFF_SCALE) { /* Scale VideoImg into OutImg */ ScaleImage(&OutImg,VideoImg,VideoX,VideoY,VideoW,VideoH); /* Apply TV scanlines */ TelevizeImage(&OutImg,0,0,OutImg.W,OutImg.H); } else { /* Center VideoImg in OutImg */ IMGCopy(&OutImg,(OutImg.W-VideoW)>>1,(OutImg.H-VideoH)>>1,VideoImg,VideoX,VideoY,VideoW,VideoH,-1); /* Apply TV scanlines */ TelevizeImage(&OutImg,(OutImg.W-VideoW)>>1,(OutImg.H-VideoH)>>1,VideoW,VideoH); } } else if((OutImg.W==VideoW)&&(OutImg.H==VideoH))