summaryrefslogtreecommitdiffstats
path: root/libmpcodecs/vf_crop.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-05 15:39:52 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-05 15:39:52 +0000
commitbe5f71963baab4b4500d1b97434462503de58f98 (patch)
tree1da28c2e3a26650e81d561f7b2c91b48b327550f /libmpcodecs/vf_crop.c
parente93e130b5c478c3a85227312d276d3a2b24da080 (diff)
downloadmpv-be5f71963baab4b4500d1b97434462503de58f98.tar.bz2
mpv-be5f71963baab4b4500d1b97434462503de58f98.tar.xz
- 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
Diffstat (limited to 'libmpcodecs/vf_crop.c')
-rw-r--r--libmpcodecs/vf_crop.c25
1 files 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 {