summaryrefslogtreecommitdiffstats
path: root/libmpcodecs/vf_rectangle.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-03 12:53:48 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-03 12:53:48 +0000
commit72d2aaf2ac4002d79656b572142f0f183bdf5940 (patch)
treecdcbef576a85ae79c885a3bb0f2a3878e333f526 /libmpcodecs/vf_rectangle.c
parentf1d7c16d8d284540e87f8b101fbda455cfc8fc7f (diff)
downloadmpv-72d2aaf2ac4002d79656b572142f0f183bdf5940.tar.bz2
mpv-72d2aaf2ac4002d79656b572142f0f183bdf5940.tar.xz
better image/plane copy
based on patch by Michael Halcrow <mah69@email.byu.edu> git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8738 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs/vf_rectangle.c')
-rw-r--r--libmpcodecs/vf_rectangle.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/libmpcodecs/vf_rectangle.c b/libmpcodecs/vf_rectangle.c
index 21090a0acd..a27c3f8bff 100644
--- a/libmpcodecs/vf_rectangle.c
+++ b/libmpcodecs/vf_rectangle.c
@@ -66,19 +66,26 @@ control(struct vf_instance_s* vf, int request, void *data)
static int
put_image(struct vf_instance_s* vf, mp_image_t* mpi){
mp_image_t* dmpi;
- unsigned int bpp;
+ unsigned int bpp = mpi->bpp / 8;
unsigned int x, y, w, h;
dmpi = vf_get_image(vf->next, mpi->imgfmt, MP_IMGTYPE_TEMP,
MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_PREFER_ALIGNED_STRIDE,
mpi->w, mpi->h);
- bpp = dmpi->bpp / 8;
- memcpy(dmpi->planes[0], mpi->planes[0], dmpi->stride[0] * bpp * mpi->height);
- memcpy(dmpi->planes[1], mpi->planes[1], dmpi->stride[1] * mpi->chroma_height);
- memcpy(dmpi->planes[2], mpi->planes[2], dmpi->stride[2] * mpi->chroma_height);
+
+ memcpy_pic(dmpi->planes[0],mpi->planes[0],mpi->w*bpp, mpi->h,
+ dmpi->stride[0],mpi->stride[0]);
+ if(mpi->flags&MP_IMGFLAG_PLANAR && mpi->flags&MP_IMGFLAG_YUV){
+ memcpy_pic(dmpi->planes[1],mpi->planes[1],
+ mpi->w>>mpi->chroma_x_shift, mpi->h>>mpi->chroma_y_shift,
+ dmpi->stride[1],mpi->stride[1]);
+ memcpy_pic(dmpi->planes[2],mpi->planes[2],
+ mpi->w>>mpi->chroma_x_shift, mpi->h>>mpi->chroma_y_shift,
+ dmpi->stride[2],mpi->stride[2]);
+ }
/* Draw the rectangle */
- mp_msg(MSGT_VFILTER,MSGL_INFO, "rectangle: -vop crop=%d:%d:%d:%d \n", vf->priv->w, vf->priv->h, vf->priv->x, vf->priv->y);
+ mp_msg(MSGT_VFILTER,MSGL_INFO, "rectangle: -vop rectangle=%d:%d:%d:%d \n", vf->priv->w, vf->priv->h, vf->priv->x, vf->priv->y);
if (vf->priv->x < 0)
x = 0;