[MPlayer-dev-eng] [PATCH] stereo3d noscale precept

Endre Kollár taxy443 at gmail.com
Sat Oct 23 22:16:01 CEST 2010


2010/10/19 Reimar Döffinger <Reimar.Doeffinger at gmx.de>:
> On Tue, Oct 19, 2010 at 01:12:32PM +0200, Endre Kollár wrote:
>> > I am sorry that above patch included my changes. I interpreted too
>> > late this message(I do not understand why). But it is not difficult.
>> > Starting in function find_best_out, easy to trace changes.
>> >
>>
>> i send as help the patch with only MY changes and mixed with cleanup things.
>
> I have some doubts this change makes any sense.
> It seems likely that it makes the inner loop so much slower that doing
> a separate colour-space conversion is actually faster.
> _______________________________________________
> MPlayer-dev-eng mailing list
> MPlayer-dev-eng at mplayerhq.hu
> https://lists.mplayerhq.hu/mailman/listinfo/mplayer-dev-eng
>

If we consider ourselves to the separate scale conversion. This should
be enforced to the ABOVE_BELOW_2_ case of parameter.  We can leave the
horizontal scaling for the next filter/out driver.
-------------- next part --------------
Index: libmpcodecs/vf_stereo3d.c
===================================================================
--- libmpcodecs/vf_stereo3d.c	(revision 32527)
+++ libmpcodecs/vf_stereo3d.c	(working copy)
@@ -65,7 +65,6 @@
     unsigned int off_left;
     unsigned int off_right;
     unsigned int stride;
-    unsigned int hres;
 } component;
 
 //==global variables==//
@@ -139,7 +138,6 @@
     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 @@
         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 @@
     //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 @@
         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 @@
         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 @@
 
             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(


More information about the MPlayer-dev-eng mailing list