mirror of
https://github.com/mpv-player/mpv
synced 2024-12-27 17:42:17 +00:00
pan&scan support with -vo xv by ?? <mplayer@svennevid.net>
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6305 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
d20d9e132a
commit
e598b63ddc
@ -57,6 +57,7 @@ extern int vo_gamma_green_intensity;
|
||||
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 @@ static config_t mplayer_opts[]={
|
||||
// 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
|
||||
|
@ -65,6 +65,7 @@ static mp_cmd_t mp_cmds[] = {
|
||||
#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 @@ static mp_cmd_bind_t def_cmd_binds[] = {
|
||||
#endif
|
||||
{ { 'f', 0 }, "vo_fullscreen" },
|
||||
{ { 's', 0 }, "screenshot" },
|
||||
{ { 'w', 0 }, "panscan -0.1" },
|
||||
{ { 'e', 0 }, "panscan +0.1" },
|
||||
{ { 0 }, NULL }
|
||||
};
|
||||
|
||||
|
@ -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
|
||||
|
@ -74,6 +74,7 @@ extern void* vo_vobsub;
|
||||
#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
|
||||
|
@ -56,6 +56,7 @@ int vo_doublebuffering = 0;
|
||||
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
|
||||
|
@ -216,6 +216,7 @@ extern int vo_directrendering;
|
||||
extern int vo_vsync;
|
||||
extern int vo_fs;
|
||||
extern int vo_fsmode;
|
||||
extern float vo_panscan;
|
||||
|
||||
extern int vo_mouse_timer_const;
|
||||
|
||||
|
@ -94,6 +94,10 @@ static uint32_t image_height;
|
||||
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 config(uint32_t width, uint32_t height, uint32_t d_width, uint32
|
||||
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 draw_osd(void)
|
||||
|
||||
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;
|
||||
|
18
mplayer.c
18
mplayer.c
@ -2544,6 +2544,24 @@ if (stream->type==STREAMTYPE_DVDNAV && dvd_nav_still)
|
||||
#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;
|
||||
|
Loading…
Reference in New Issue
Block a user