mirror of https://github.com/mpv-player/mpv
keep aspect ratio - based on Fredrik Kuivinen's idea
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6061 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
762d6ac6aa
commit
6ab0d987ad
|
@ -13,24 +13,30 @@ struct vf_priv_s {
|
|||
int crop_x,crop_y;
|
||||
};
|
||||
|
||||
extern int opt_screen_size_x;
|
||||
extern int opt_screen_size_y;
|
||||
|
||||
//===========================================================================//
|
||||
|
||||
static int config(struct vf_instance_s* vf,
|
||||
int width, int height, int d_width, int d_height,
|
||||
unsigned int flags, unsigned int outfmt){
|
||||
int ret;
|
||||
printf("crop->config() called\n");
|
||||
// calculate the missing parameters:
|
||||
if(vf->priv->crop_w<=0 || vf->priv->crop_w>width) vf->priv->crop_w=width;
|
||||
if(vf->priv->crop_h<=0 || vf->priv->crop_h>height) vf->priv->crop_h=height;
|
||||
if(vf->priv->crop_x<0) vf->priv->crop_x=(width-vf->priv->crop_w)/2;
|
||||
if(vf->priv->crop_y<0) vf->priv->crop_y=(height-vf->priv->crop_h)/2;
|
||||
// check:
|
||||
if(vf->priv->crop_w+vf->priv->crop_x>width) return 0; // bad width
|
||||
if(vf->priv->crop_h+vf->priv->crop_y>height) return 0; // bad height
|
||||
ret=vf_next_config(vf,vf->priv->crop_w,vf->priv->crop_h,d_width,d_height,flags,outfmt);
|
||||
printf("crop->config() return %d\n",ret);
|
||||
return ret;
|
||||
if(vf->priv->crop_w+vf->priv->crop_x>width ||
|
||||
vf->priv->crop_h+vf->priv->crop_y>height){
|
||||
printf("crop: bad position/width/height - cropped area is out of the original!\n");
|
||||
return 0;
|
||||
}
|
||||
if(!opt_screen_size_x && !opt_screen_size_y){
|
||||
d_width=d_width*vf->priv->crop_w/width;
|
||||
d_height=d_height*vf->priv->crop_h/height;
|
||||
}
|
||||
return vf_next_config(vf,vf->priv->crop_w,vf->priv->crop_h,d_width,d_height,flags,outfmt);
|
||||
}
|
||||
|
||||
static void put_image(struct vf_instance_s* vf, mp_image_t *mpi){
|
||||
|
|
|
@ -26,6 +26,9 @@ struct vf_priv_s {
|
|||
unsigned char* fb_ptr;
|
||||
};
|
||||
|
||||
extern int opt_screen_size_x;
|
||||
extern int opt_screen_size_y;
|
||||
|
||||
//===========================================================================//
|
||||
#ifdef OSD_SUPPORT
|
||||
|
||||
|
@ -143,7 +146,6 @@ static void draw_osd(struct vf_instance_s* vf_,int w,int h){
|
|||
static int config(struct vf_instance_s* vf,
|
||||
int width, int height, int d_width, int d_height,
|
||||
unsigned int flags, unsigned int outfmt){
|
||||
int ret;
|
||||
// calculate the missing parameters:
|
||||
#if 0
|
||||
if(vf->priv->exp_w<width) vf->priv->exp_w=width;
|
||||
|
@ -159,8 +161,12 @@ static int config(struct vf_instance_s* vf,
|
|||
if(vf->priv->exp_x<0 || vf->priv->exp_x+width>vf->priv->exp_w) vf->priv->exp_x=(vf->priv->exp_w-width)/2;
|
||||
if(vf->priv->exp_y<0 || vf->priv->exp_y+height>vf->priv->exp_h) vf->priv->exp_y=(vf->priv->exp_h-height)/2;
|
||||
vf->priv->fb_ptr=NULL;
|
||||
ret=vf_next_config(vf,vf->priv->exp_w,vf->priv->exp_h,d_width,d_height,flags,outfmt);
|
||||
return ret;
|
||||
|
||||
if(!opt_screen_size_x && !opt_screen_size_y){
|
||||
d_width=d_width*vf->priv->exp_w/width;
|
||||
d_height=d_height*vf->priv->exp_h/height;
|
||||
}
|
||||
return vf_next_config(vf,vf->priv->exp_w,vf->priv->exp_h,d_width,d_height,flags,outfmt);
|
||||
}
|
||||
|
||||
// there are 4 cases:
|
||||
|
|
|
@ -19,6 +19,9 @@ struct vf_priv_s {
|
|||
SwsContext *ctx;
|
||||
};
|
||||
|
||||
extern int opt_screen_size_x;
|
||||
extern int opt_screen_size_y;
|
||||
|
||||
//===========================================================================//
|
||||
|
||||
static unsigned int outfmt_list[]={
|
||||
|
@ -106,6 +109,10 @@ static int config(struct vf_instance_s* vf,
|
|||
}
|
||||
vf->priv->fmt=best;
|
||||
|
||||
if(!opt_screen_size_x && !opt_screen_size_y){
|
||||
d_width=d_width*vf->priv->w/width;
|
||||
d_height=d_height*vf->priv->h/height;
|
||||
}
|
||||
return vf_next_config(vf,vf->priv->w,vf->priv->h,d_width,d_height,flags,best);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue