# HG changeset patch # User arpi # Date 1023221827 0 # Node ID ee65527096c2bf6ceb9c7b3f84cadca359342f48 # Parent ad98962908acf08673c12fc4d9aba00763372ae3 pan&scan support with -vo xv by ?? diff -r ad98962908ac -r ee65527096c2 cfg-mplayer.h --- a/cfg-mplayer.h Tue Jun 04 20:12:34 2002 +0000 +++ b/cfg-mplayer.h Tue Jun 04 20:17:07 2002 +0000 @@ -57,6 +57,7 @@ extern int vo_gamma_blue_intensity; extern int vo_directrendering; extern int vd_use_slices; +extern float vo_panscan; #ifdef USE_OSD extern int osd_level; @@ -238,6 +239,7 @@ // wait for v-sync (vesa) {"vsync", &vo_vsync, CONF_TYPE_FLAG, 0, 0, 1, NULL}, {"novsync", &vo_vsync, CONF_TYPE_FLAG, 0, 1, 0, NULL}, + {"panscan", &vo_panscan, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 1.0, NULL}, #ifdef HAVE_X11 // x11,xv,xmga,xvidix diff -r ad98962908ac -r ee65527096c2 input/input.c --- a/input/input.c Tue Jun 04 20:12:34 2002 +0000 +++ b/input/input.c Tue Jun 04 20:17:07 2002 +0000 @@ -65,6 +65,7 @@ #endif { MP_CMD_VO_FULLSCREEN, "vo_fullscreen", 0, { {-1,{0}} } }, { MP_CMD_SCREENSHOT, "screenshot", 0, { {-1,{0}} } }, + { MP_CMD_PANSCAN, "panscan",1, { {MP_CMD_ARG_FLOAT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } }, #ifdef HAVE_NEW_GUI { MP_CMD_GUI_LOADFILE, "gui_loadfile", 0, { {-1,{0}} } }, @@ -243,6 +244,8 @@ #endif { { 'f', 0 }, "vo_fullscreen" }, { { 's', 0 }, "screenshot" }, + { { 'w', 0 }, "panscan -0.1" }, + { { 'e', 0 }, "panscan +0.1" }, { { 0 }, NULL } }; diff -r ad98962908ac -r ee65527096c2 input/input.h --- a/input/input.h Tue Jun 04 20:12:34 2002 +0000 +++ b/input/input.h Tue Jun 04 20:17:07 2002 +0000 @@ -26,6 +26,7 @@ #define MP_CMD_SUB_POS 21 #define MP_CMD_DVDNAV 22 #define MP_CMD_SCREENSHOT 23 +#define MP_CMD_PANSCAN 24 #define MP_CMD_GUI_EVENTS 5000 #define MP_CMD_GUI_LOADFILE 5001 diff -r ad98962908ac -r ee65527096c2 libvo/sub.h --- a/libvo/sub.h Tue Jun 04 20:12:34 2002 +0000 +++ b/libvo/sub.h Tue Jun 04 20:17:07 2002 +0000 @@ -74,6 +74,7 @@ #define OSD_VOLUME 0x09 #define OSD_BRIGHTNESS 0x0A #define OSD_HUE 0x0B +#define OSD_PANSCAN 0x50 #define OSD_PB_START 0x10 #define OSD_PB_0 0x11 diff -r ad98962908ac -r ee65527096c2 libvo/video_out.c --- a/libvo/video_out.c Tue Jun 04 20:12:34 2002 +0000 +++ b/libvo/video_out.c Tue Jun 04 20:17:07 2002 +0000 @@ -56,6 +56,7 @@ int vo_vsync = 0; int vo_fs = 0; int vo_fsmode = 0; +float vo_panscan = 0.0f; int vo_pts=0; // for hw decoding float vo_fps=0; // for mp1e rte diff -r ad98962908ac -r ee65527096c2 libvo/video_out.h --- a/libvo/video_out.h Tue Jun 04 20:12:34 2002 +0000 +++ b/libvo/video_out.h Tue Jun 04 20:17:07 2002 +0000 @@ -216,6 +216,7 @@ extern int vo_vsync; extern int vo_fs; extern int vo_fsmode; +extern float vo_panscan; extern int vo_mouse_timer_const; diff -r ad98962908ac -r ee65527096c2 libvo/vo_xv.c --- a/libvo/vo_xv.c Tue Jun 04 20:12:34 2002 +0000 +++ b/libvo/vo_xv.c Tue Jun 04 20:17:07 2002 +0000 @@ -94,6 +94,10 @@ static uint32_t image_format; static int flip_flag; +static int panscan_x; +static int panscan_y; +static float panscan_amount; + static Window mRoot; static uint32_t drwX,drwY,drwBorderWidth,drwDepth; static uint32_t dwidth,dheight; @@ -334,6 +338,10 @@ static uint32_t vm_height; #endif + panscan_x = 0; + panscan_y = 0; + panscan_amount = 0.0f; + aspect_save_orig(width,height); aspect_save_prescale(d_width,d_height); @@ -596,18 +604,31 @@ static void flip_page(void) { + if((vo_fs && (vo_panscan != panscan_amount)) || (!vo_fs && panscan_amount)) + { + int panscan_area = (vo_screenheight-vo_dheight); + + panscan_amount = vo_fs ? vo_panscan : 0; + + panscan_x = panscan_area * panscan_amount * (image_width / (float)image_height); + panscan_y = panscan_area * panscan_amount; + + XClearWindow(mDisplay, vo_window); + XFlush(mDisplay); + } + if ( Shmem_Flag ) { XvShmPutImage(mDisplay, xv_port, vo_window, vo_gc, xvimage[current_buf], 0, 0, image_width, image_height, - drwX,drwY,vo_dwidth,(vo_fs?vo_dheight - 1:vo_dheight), + drwX-(panscan_x>>1),drwY-(panscan_y>>1),vo_dwidth+panscan_x,(vo_fs?vo_dheight - 1:vo_dheight)+panscan_y, False); } else { XvPutImage(mDisplay, xv_port, vo_window, vo_gc, xvimage[current_buf], 0, 0, image_width, image_height, - drwX,drwY,vo_dwidth,(vo_fs?vo_dheight - 1:vo_dheight)); + drwX-(panscan_x>>1),drwY-(panscan_y>>1),vo_dwidth+panscan_x,(vo_fs?vo_dheight - 1:vo_dheight)+panscan_y); } if (num_buffers>1){ current_buf=(current_buf+1)%num_buffers; diff -r ad98962908ac -r ee65527096c2 mplayer.c --- a/mplayer.c Tue Jun 04 20:12:34 2002 +0000 +++ b/mplayer.c Tue Jun 04 20:17:07 2002 +0000 @@ -2544,6 +2544,24 @@ #endif if(video_out && vo_config_count) video_out->control(VOCTRL_FULLSCREEN, 0); } break; + case MP_CMD_PANSCAN : { + int abs= cmd->args[1].v.i; + float v = cmd->args[0].v.f; + float res; + if(abs) + res = v; + else + res = vo_panscan+v; + vo_panscan = res > 1 ? 1 : res < 0 ? 0 : res; +#ifdef USE_OSD + if(osd_level){ + osd_visible=sh_video->fps; // 1 sec + vo_osd_progbar_type=OSD_PANSCAN; + vo_osd_progbar_value=vo_panscan*256; + vo_osd_changed(OSDTYPE_PROGBAR); + } +#endif + } break; case MP_CMD_SUB_POS: { int v;