# HG changeset patch # User cehoyos # Date 1351434750 0 # Node ID 14913ddea4f5c27886b349ff15afe6a4f40610ed # Parent ffbbb8391c3e25e499d8f25f069a0a73a4265a3b Allow telecine filter to work for YUV16 formats. diff -r ffbbb8391c3e -r 14913ddea4f5 libmpcodecs/vf_telecine.c --- a/libmpcodecs/vf_telecine.c Sat Oct 27 20:31:06 2012 +0000 +++ b/libmpcodecs/vf_telecine.c Sun Oct 28 14:32:30 2012 +0000 @@ -37,6 +37,8 @@ { mp_image_t *dmpi; int ret; + int w = (IMGFMT_IS_YUVP16(mpi->imgfmt) ? 2 : 1) * mpi->w; + int chroma_width = (IMGFMT_IS_YUVP16(mpi->imgfmt) ? 2 : 1) * mpi->chroma_width; vf->priv->frame = (vf->priv->frame+1)%4; @@ -49,56 +51,56 @@ switch (vf->priv->frame) { case 0: my_memcpy_pic(dmpi->planes[0]+dmpi->stride[0], - mpi->planes[0]+mpi->stride[0], mpi->w, mpi->h/2, + mpi->planes[0]+mpi->stride[0], w, mpi->h/2, dmpi->stride[0]*2, mpi->stride[0]*2); if (mpi->flags & MP_IMGFLAG_PLANAR) { my_memcpy_pic(dmpi->planes[1]+dmpi->stride[1], mpi->planes[1]+mpi->stride[1], - mpi->chroma_width, mpi->chroma_height/2, + chroma_width, mpi->chroma_height/2, dmpi->stride[1]*2, mpi->stride[1]*2); my_memcpy_pic(dmpi->planes[2]+dmpi->stride[2], mpi->planes[2]+mpi->stride[2], - mpi->chroma_width, mpi->chroma_height/2, + chroma_width, mpi->chroma_height/2, dmpi->stride[2]*2, mpi->stride[2]*2); } ret = vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE); /* Fallthrough */ case 1: case 2: - memcpy_pic(dmpi->planes[0], mpi->planes[0], mpi->w, mpi->h, + memcpy_pic(dmpi->planes[0], mpi->planes[0], w, mpi->h, dmpi->stride[0], mpi->stride[0]); if (mpi->flags & MP_IMGFLAG_PLANAR) { memcpy_pic(dmpi->planes[1], mpi->planes[1], - mpi->chroma_width, mpi->chroma_height, + chroma_width, mpi->chroma_height, dmpi->stride[1], mpi->stride[1]); memcpy_pic(dmpi->planes[2], mpi->planes[2], - mpi->chroma_width, mpi->chroma_height, + chroma_width, mpi->chroma_height, dmpi->stride[2], mpi->stride[2]); } return vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE) || ret; case 3: my_memcpy_pic(dmpi->planes[0]+dmpi->stride[0], - mpi->planes[0]+mpi->stride[0], mpi->w, mpi->h/2, + mpi->planes[0]+mpi->stride[0], w, mpi->h/2, dmpi->stride[0]*2, mpi->stride[0]*2); if (mpi->flags & MP_IMGFLAG_PLANAR) { my_memcpy_pic(dmpi->planes[1]+dmpi->stride[1], mpi->planes[1]+mpi->stride[1], - mpi->chroma_width, mpi->chroma_height/2, + chroma_width, mpi->chroma_height/2, dmpi->stride[1]*2, mpi->stride[1]*2); my_memcpy_pic(dmpi->planes[2]+dmpi->stride[2], mpi->planes[2]+mpi->stride[2], - mpi->chroma_width, mpi->chroma_height/2, + chroma_width, mpi->chroma_height/2, dmpi->stride[2]*2, mpi->stride[2]*2); } ret = vf_next_put_image(vf, dmpi, MP_NOPTS_VALUE); - my_memcpy_pic(dmpi->planes[0], mpi->planes[0], mpi->w, mpi->h/2, + my_memcpy_pic(dmpi->planes[0], mpi->planes[0], w, mpi->h/2, dmpi->stride[0]*2, mpi->stride[0]*2); if (mpi->flags & MP_IMGFLAG_PLANAR) { my_memcpy_pic(dmpi->planes[1], mpi->planes[1], - mpi->chroma_width, mpi->chroma_height/2, + chroma_width, mpi->chroma_height/2, dmpi->stride[1]*2, mpi->stride[1]*2); my_memcpy_pic(dmpi->planes[2], mpi->planes[2], - mpi->chroma_width, mpi->chroma_height/2, + chroma_width, mpi->chroma_height/2, dmpi->stride[2]*2, mpi->stride[2]*2); } return ret;