From be5f71963baab4b4500d1b97434462503de58f98 Mon Sep 17 00:00:00 2001 From: arpi Date: Sun, 5 Jan 2003 15:39:52 +0000 Subject: [PATCH] - added x/y rounding for YUV formats (should be moved to mp_image.c|h later) - 10l in planar formats, use chroma_?_shift insteda or hardcoded >>1 git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8802 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpcodecs/vf_crop.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/libmpcodecs/vf_crop.c b/libmpcodecs/vf_crop.c index b9b20c8258..45758d9199 100644 --- a/libmpcodecs/vf_crop.c +++ b/libmpcodecs/vf_crop.c @@ -26,6 +26,27 @@ static int config(struct vf_instance_s* vf, 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; + // rounding: + if(!IMGFMT_IS_RGB(outfmt) && !IMGFMT_IS_BGR(outfmt)){ + switch(outfmt){ + case IMGFMT_444P: + case IMGFMT_Y800: + case IMGFMT_Y8: + break; + case IMGFMT_YVU9: + case IMGFMT_IF09: + vf->priv->crop_y&=~3; + case IMGFMT_411P: + vf->priv->crop_x&=~3; + break; + case IMGFMT_YV12: + case IMGFMT_I420: + case IMGFMT_IYUV: + vf->priv->crop_y&=~1; + default: + vf->priv->crop_x&=~1; + } + } // check: if(vf->priv->crop_w+vf->priv->crop_x>width || vf->priv->crop_h+vf->priv->crop_y>height){ @@ -47,9 +68,9 @@ static int put_image(struct vf_instance_s* vf, mp_image_t *mpi){ dmpi->planes[0]=mpi->planes[0]+ vf->priv->crop_y*mpi->stride[0]+vf->priv->crop_x; dmpi->planes[1]=mpi->planes[1]+ - (vf->priv->crop_y>>1)*mpi->stride[1]+(vf->priv->crop_x>>1); + (vf->priv->crop_y>>mpi->chroma_y_shift)*mpi->stride[1]+(vf->priv->crop_x>>mpi->chroma_x_shift); dmpi->planes[2]=mpi->planes[2]+ - (vf->priv->crop_y>>1)*mpi->stride[2]+(vf->priv->crop_x>>1); + (vf->priv->crop_y>>mpi->chroma_y_shift)*mpi->stride[2]+(vf->priv->crop_x>>mpi->chroma_x_shift); dmpi->stride[1]=mpi->stride[1]; dmpi->stride[2]=mpi->stride[2]; } else {