From 05692698875f5359bc7813e78fe71da63f69ba38 Mon Sep 17 00:00:00 2001 From: reimar Date: Sun, 14 Nov 2010 15:24:12 +0000 Subject: vf_stereo3d: Adjust d_height instead of bad ad-hoc scaling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Patch by Endre Kollár [taxy443 gmail com] git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@32625 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpcodecs/vf_stereo3d.c | 72 ++++++++++++++++++----------------------------- 1 file changed, 28 insertions(+), 44 deletions(-) (limited to 'libmpcodecs') diff --git a/libmpcodecs/vf_stereo3d.c b/libmpcodecs/vf_stereo3d.c index b65169adb5..6ca0705680 100644 --- a/libmpcodecs/vf_stereo3d.c +++ b/libmpcodecs/vf_stereo3d.c @@ -66,7 +66,6 @@ typedef struct component { unsigned int off_left; unsigned int off_right; unsigned int stride; - unsigned int hres; } component; //==global variables==// @@ -139,7 +138,6 @@ static int config(struct vf_instance *vf, int width, int height, int d_width, vf->priv->height = height; vf->priv->in.width = width; vf->priv->in.height = height; - vf->priv->in.hres = 1; vf->priv->in.off_left = 0; vf->priv->in.off_right = 0; vf->priv->in.stride = vf->priv->width * 3; @@ -156,22 +154,18 @@ static int config(struct vf_instance *vf, int width, int height, int d_width, vf->priv->in.off_left = vf->priv->width * 3; vf->priv->in.stride = vf->priv->width * 6; break; + case ABOVE_BELOW_2_LR: + d_height *= 2; case ABOVE_BELOW_LR: vf->priv->height = height / 2; vf->priv->in.off_right = vf->priv->width * vf->priv->height * 3; break; + case ABOVE_BELOW_2_RL: + d_height *= 2; case ABOVE_BELOW_RL: vf->priv->height = height / 2; vf->priv->in.off_left = vf->priv->width * vf->priv->height * 3; break; - case ABOVE_BELOW_2_LR: - vf->priv->in.hres = 2; - vf->priv->in.off_right = vf->priv->width * vf->priv->height / 2 * 3; - break; - case ABOVE_BELOW_2_RL: - vf->priv->in.hres = 2; - vf->priv->in.off_left = vf->priv->width * vf->priv->height / 2 * 3; - break; default: mp_msg(MSGT_VFILTER, MSGL_WARN, "[stereo3d] stereo format of input is not supported\n"); @@ -181,7 +175,6 @@ static int config(struct vf_instance *vf, int width, int height, int d_width, //default output values vf->priv->out.width = vf->priv->width; vf->priv->out.height = vf->priv->height; - vf->priv->out.hres = 1; vf->priv->out.off_left = 0; vf->priv->out.off_right = 0; vf->priv->out.stride = vf->priv->width * 3; @@ -211,22 +204,18 @@ static int config(struct vf_instance *vf, int width, int height, int d_width, vf->priv->out.off_left = vf->priv->width * 3; vf->priv->out.stride = vf->priv->width * 6; break; + case ABOVE_BELOW_2_LR: + d_height /= 2; case ABOVE_BELOW_LR: vf->priv->out.height = vf->priv->height * 2; vf->priv->out.off_right = vf->priv->width * vf->priv->height * 3; break; + case ABOVE_BELOW_2_RL: + d_height /= 2; case ABOVE_BELOW_RL: vf->priv->out.height = vf->priv->height * 2; vf->priv->out.off_left = vf->priv->width * vf->priv->height * 3; break; - case ABOVE_BELOW_2_LR: - vf->priv->out.hres = 2; - vf->priv->out.off_right = vf->priv->width * vf->priv->height / 2 * 3; - break; - case ABOVE_BELOW_2_RL: - vf->priv->out.hres = 2; - vf->priv->out.off_left = vf->priv->width * vf->priv->height / 2 * 3; - break; case MONO_R: //same as MONO_L only needs switching of input offsets vf->priv->in.off_left = vf->priv->in.off_right; @@ -265,32 +254,27 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts) case ABOVE_BELOW_RL: case ABOVE_BELOW_2_LR: case ABOVE_BELOW_2_RL: - for (int i = 0; i < vf->priv->in.hres; i++) { - memcpy_pic(dmpi->planes[0] + vf->priv->out.off_left + - (i * vf->priv->out.stride), mpi->planes[0] + - vf->priv->in.off_left, 3 * vf->priv->width, - vf->priv->height / (vf->priv->in.hres * - vf->priv->out.hres), vf->priv->out.stride * - vf->priv->in.hres, vf->priv->in.stride * - vf->priv->out.hres); - memcpy_pic(dmpi->planes[0] + vf->priv->out.off_right + - (i * vf->priv->out.stride), mpi->planes[0] + - vf->priv->in.off_right, 3 * vf->priv->width, - vf->priv->height / (vf->priv->in.hres * - vf->priv->out.hres), vf->priv->out.stride * - vf->priv->in.hres, vf->priv->in.stride * - vf->priv->out.hres); - } + memcpy_pic(dmpi->planes[0] + vf->priv->out.off_left, + mpi->planes[0] + vf->priv->in.off_left, + 3 * vf->priv->width, + vf->priv->height, + vf->priv->out.stride, + vf->priv->in.stride); + memcpy_pic(dmpi->planes[0] + vf->priv->out.off_right, + mpi->planes[0] + vf->priv->in.off_right, + 3 * vf->priv->width, + vf->priv->height, + vf->priv->out.stride, + vf->priv->in.stride); break; case MONO_L: case MONO_R: - for (int i = 0; i < vf->priv->in.hres; i++) { - memcpy_pic(dmpi->planes[0] + (i * vf->priv->out.stride), - mpi->planes[0] + vf->priv->in.off_left, 3 * - vf->priv->width, vf->priv->height / - vf->priv->in.hres, vf->priv->out.stride * - vf->priv->in.hres, vf->priv->in.stride); - } + memcpy_pic(dmpi->planes[0], + mpi->planes[0] + vf->priv->in.off_left, + 3 * vf->priv->width, + vf->priv->height, + vf->priv->out.stride, + vf->priv->in.stride); break; case ANAGLYPH_RC_GRAY: case ANAGLYPH_RC_HALF: @@ -313,9 +297,9 @@ static int put_image(struct vf_instance *vf, mp_image_t *mpi, double pts) for (y = 0; y < vf->priv->out.height; y++) { o = vf->priv->out.stride * y; - il = vf->priv->in.off_left + (y / vf->priv->in.hres) * + il = vf->priv->in.off_left + y * vf->priv->in.stride; - ir = vf->priv->in.off_right + (y / vf->priv->in.hres) * + ir = vf->priv->in.off_right + y * vf->priv->in.stride; for (x = 0; x < out_width; x++) { dest[o ] = ana_convert( -- cgit v1.2.3