deinterlace: Update disted Orc files
authorDavid Schleef <ds@schleef.org>
Sat, 4 Sep 2010 19:46:31 +0000 (12:46 -0700)
committerDavid Schleef <ds@schleef.org>
Sat, 4 Sep 2010 19:46:31 +0000 (12:46 -0700)
gst/deinterlace/tvtime-dist.c
gst/deinterlace/tvtime-dist.h

index ce767bd..1129d9a 100644 (file)
@@ -73,6 +73,9 @@ void deinterlace_line_linear (guint8 * d1, const guint8 * s1, const guint8 * s2,
     int n);
 void deinterlace_line_linear_blend (guint8 * d1, const guint8 * s1,
     const guint8 * s2, const guint8 * s3, int n);
+void deinterlace_line_greedy (orc_uint8 * d1, const orc_uint8 * s1,
+    const orc_uint8 * s2, const orc_uint8 * s3, const orc_uint8 * s4, int p1,
+    int n);
 
 
 /* begin Orc C target preamble */
@@ -670,3 +673,361 @@ deinterlace_line_linear_blend (guint8 * d1, const guint8 * s1,
   func (ex);
 }
 #endif
+
+
+/* deinterlace_line_greedy */
+#ifdef DISABLE_ORC
+void
+deinterlace_line_greedy (orc_uint8 * d1, const orc_uint8 * s1,
+    const orc_uint8 * s2, const orc_uint8 * s3, const orc_uint8 * s4, int p1,
+    int n)
+{
+  int i;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var40;
+  orc_int8 var41;
+  orc_int8 var42;
+  orc_int8 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_int8 var48;
+  orc_int8 var49;
+  orc_int8 var50;
+  orc_int8 var51;
+  orc_int8 var52;
+  orc_int8 var53;
+  orc_int8 var54;
+  orc_int8 var55;
+  orc_int8 var56;
+  orc_int8 var57;
+  orc_int8 var58;
+  orc_int8 var59;
+  orc_int8 var60;
+  orc_int8 var61;
+  orc_int8 var62;
+  orc_int8 var63;
+  orc_int8 var64;
+  orc_int8 var65;
+  orc_int8 var66;
+  orc_int8 var67;
+  orc_int8 var68;
+  orc_int8 var69;
+  orc_int8 var70;
+  orc_int8 var71;
+  orc_int8 var72;
+  orc_int8 var73;
+  orc_int8 var74;
+
+  ptr0 = (orc_int8 *) d1;
+  ptr4 = (orc_int8 *) s1;
+  ptr5 = (orc_int8 *) s2;
+  ptr6 = (orc_int8 *) s3;
+  ptr7 = (orc_int8 *) s4;
+
+  /* 13: loadpb */
+  var46 = 0x00000080;           /* 128 or 6.32404e-322f */
+  /* 15: loadpb */
+  var47 = 0x00000080;           /* 128 or 6.32404e-322f */
+  /* 29: loadpb */
+  var54 = p1;
+  /* 31: loadpb */
+  var55 = p1;
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var40 = ptr5[i];
+    /* 1: loadb */
+    var41 = ptr6[i];
+    /* 2: avgub */
+    var57 = ((orc_uint8) var40 + (orc_uint8) var41 + 1) >> 1;
+    /* 3: loadb */
+    var42 = ptr4[i];
+    /* 4: maxub */
+    var58 = ORC_MAX ((orc_uint8) var42, (orc_uint8) var57);
+    /* 5: loadb */
+    var43 = ptr4[i];
+    /* 6: minub */
+    var59 = ORC_MIN ((orc_uint8) var43, (orc_uint8) var57);
+    /* 7: subb */
+    var60 = var58 - var59;
+    /* 8: loadb */
+    var44 = ptr7[i];
+    /* 9: maxub */
+    var61 = ORC_MAX ((orc_uint8) var44, (orc_uint8) var57);
+    /* 10: loadb */
+    var45 = ptr7[i];
+    /* 11: minub */
+    var62 = ORC_MIN ((orc_uint8) var45, (orc_uint8) var57);
+    /* 12: subb */
+    var63 = var61 - var62;
+    /* 14: xorb */
+    var64 = var60 ^ var46;
+    /* 16: xorb */
+    var65 = var63 ^ var47;
+    /* 17: cmpgtsb */
+    var66 = (var64 > var65) ? (~0) : 0;
+    /* 18: loadb */
+    var48 = ptr4[i];
+    /* 19: andb */
+    var67 = var48 & var66;
+    /* 20: loadb */
+    var49 = ptr7[i];
+    /* 21: andnb */
+    var68 = (~var49) & var66;
+    /* 22: orb */
+    var69 = var67 | var68;
+    /* 23: loadb */
+    var50 = ptr5[i];
+    /* 24: loadb */
+    var51 = ptr6[i];
+    /* 25: maxub */
+    var70 = ORC_MAX ((orc_uint8) var50, (orc_uint8) var51);
+    /* 26: loadb */
+    var52 = ptr5[i];
+    /* 27: loadb */
+    var53 = ptr6[i];
+    /* 28: minub */
+    var71 = ORC_MIN ((orc_uint8) var52, (orc_uint8) var53);
+    /* 30: addusb */
+    var72 = ORC_CLAMP_UB ((orc_uint8) var70 + (orc_uint8) var54);
+    /* 32: subusb */
+    var73 = ORC_CLAMP_UB ((orc_uint8) var71 - (orc_uint8) var55);
+    /* 33: minub */
+    var74 = ORC_MIN ((orc_uint8) var69, (orc_uint8) var72);
+    /* 34: maxub */
+    var56 = ORC_MAX ((orc_uint8) var74, (orc_uint8) var73);
+    /* 35: storeb */
+    ptr0[i] = var56;
+  }
+
+}
+
+#else
+static void
+_backup_deinterlace_line_greedy (OrcExecutor * ORC_RESTRICT ex)
+{
+  int i;
+  int n = ex->n;
+  orc_int8 *ORC_RESTRICT ptr0;
+  const orc_int8 *ORC_RESTRICT ptr4;
+  const orc_int8 *ORC_RESTRICT ptr5;
+  const orc_int8 *ORC_RESTRICT ptr6;
+  const orc_int8 *ORC_RESTRICT ptr7;
+  orc_int8 var40;
+  orc_int8 var41;
+  orc_int8 var42;
+  orc_int8 var43;
+  orc_int8 var44;
+  orc_int8 var45;
+  orc_int8 var46;
+  orc_int8 var47;
+  orc_int8 var48;
+  orc_int8 var49;
+  orc_int8 var50;
+  orc_int8 var51;
+  orc_int8 var52;
+  orc_int8 var53;
+  orc_int8 var54;
+  orc_int8 var55;
+  orc_int8 var56;
+  orc_int8 var57;
+  orc_int8 var58;
+  orc_int8 var59;
+  orc_int8 var60;
+  orc_int8 var61;
+  orc_int8 var62;
+  orc_int8 var63;
+  orc_int8 var64;
+  orc_int8 var65;
+  orc_int8 var66;
+  orc_int8 var67;
+  orc_int8 var68;
+  orc_int8 var69;
+  orc_int8 var70;
+  orc_int8 var71;
+  orc_int8 var72;
+  orc_int8 var73;
+  orc_int8 var74;
+
+  ptr0 = (orc_int8 *) ex->arrays[0];
+  ptr4 = (orc_int8 *) ex->arrays[4];
+  ptr5 = (orc_int8 *) ex->arrays[5];
+  ptr6 = (orc_int8 *) ex->arrays[6];
+  ptr7 = (orc_int8 *) ex->arrays[7];
+
+  /* 13: loadpb */
+  var46 = 0x00000080;           /* 128 or 6.32404e-322f */
+  /* 15: loadpb */
+  var47 = 0x00000080;           /* 128 or 6.32404e-322f */
+  /* 29: loadpb */
+  var54 = ex->params[24];
+  /* 31: loadpb */
+  var55 = ex->params[24];
+
+  for (i = 0; i < n; i++) {
+    /* 0: loadb */
+    var40 = ptr5[i];
+    /* 1: loadb */
+    var41 = ptr6[i];
+    /* 2: avgub */
+    var57 = ((orc_uint8) var40 + (orc_uint8) var41 + 1) >> 1;
+    /* 3: loadb */
+    var42 = ptr4[i];
+    /* 4: maxub */
+    var58 = ORC_MAX ((orc_uint8) var42, (orc_uint8) var57);
+    /* 5: loadb */
+    var43 = ptr4[i];
+    /* 6: minub */
+    var59 = ORC_MIN ((orc_uint8) var43, (orc_uint8) var57);
+    /* 7: subb */
+    var60 = var58 - var59;
+    /* 8: loadb */
+    var44 = ptr7[i];
+    /* 9: maxub */
+    var61 = ORC_MAX ((orc_uint8) var44, (orc_uint8) var57);
+    /* 10: loadb */
+    var45 = ptr7[i];
+    /* 11: minub */
+    var62 = ORC_MIN ((orc_uint8) var45, (orc_uint8) var57);
+    /* 12: subb */
+    var63 = var61 - var62;
+    /* 14: xorb */
+    var64 = var60 ^ var46;
+    /* 16: xorb */
+    var65 = var63 ^ var47;
+    /* 17: cmpgtsb */
+    var66 = (var64 > var65) ? (~0) : 0;
+    /* 18: loadb */
+    var48 = ptr4[i];
+    /* 19: andb */
+    var67 = var48 & var66;
+    /* 20: loadb */
+    var49 = ptr7[i];
+    /* 21: andnb */
+    var68 = (~var49) & var66;
+    /* 22: orb */
+    var69 = var67 | var68;
+    /* 23: loadb */
+    var50 = ptr5[i];
+    /* 24: loadb */
+    var51 = ptr6[i];
+    /* 25: maxub */
+    var70 = ORC_MAX ((orc_uint8) var50, (orc_uint8) var51);
+    /* 26: loadb */
+    var52 = ptr5[i];
+    /* 27: loadb */
+    var53 = ptr6[i];
+    /* 28: minub */
+    var71 = ORC_MIN ((orc_uint8) var52, (orc_uint8) var53);
+    /* 30: addusb */
+    var72 = ORC_CLAMP_UB ((orc_uint8) var70 + (orc_uint8) var54);
+    /* 32: subusb */
+    var73 = ORC_CLAMP_UB ((orc_uint8) var71 - (orc_uint8) var55);
+    /* 33: minub */
+    var74 = ORC_MIN ((orc_uint8) var69, (orc_uint8) var72);
+    /* 34: maxub */
+    var56 = ORC_MAX ((orc_uint8) var74, (orc_uint8) var73);
+    /* 35: storeb */
+    ptr0[i] = var56;
+  }
+
+}
+
+void
+deinterlace_line_greedy (orc_uint8 * d1, const orc_uint8 * s1,
+    const orc_uint8 * s2, const orc_uint8 * s3, const orc_uint8 * s4, int p1,
+    int n)
+{
+  OrcExecutor _ex, *ex = &_ex;
+  static int p_inited = 0;
+  static OrcProgram *p = 0;
+  void (*func) (OrcExecutor *);
+
+  if (!p_inited) {
+    orc_once_mutex_lock ();
+    if (!p_inited) {
+      OrcCompileResult result;
+
+      p = orc_program_new ();
+      orc_program_set_name (p, "deinterlace_line_greedy");
+      orc_program_set_backup_function (p, _backup_deinterlace_line_greedy);
+      orc_program_add_destination (p, 1, "d1");
+      orc_program_add_source (p, 1, "s1");
+      orc_program_add_source (p, 1, "s2");
+      orc_program_add_source (p, 1, "s3");
+      orc_program_add_source (p, 1, "s4");
+      orc_program_add_constant (p, 4, 0x00000080, "c1");
+      orc_program_add_parameter (p, 1, "p1");
+      orc_program_add_temporary (p, 1, "t1");
+      orc_program_add_temporary (p, 1, "t2");
+      orc_program_add_temporary (p, 1, "t3");
+      orc_program_add_temporary (p, 1, "t4");
+      orc_program_add_temporary (p, 1, "t5");
+      orc_program_add_temporary (p, 1, "t6");
+      orc_program_add_temporary (p, 1, "t7");
+      orc_program_add_temporary (p, 1, "t8");
+
+      orc_program_append_2 (p, "avgub", 0, ORC_VAR_T1, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "maxub", 0, ORC_VAR_T4, ORC_VAR_S1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "minub", 0, ORC_VAR_T5, ORC_VAR_S1, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subb", 0, ORC_VAR_T2, ORC_VAR_T4, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "maxub", 0, ORC_VAR_T4, ORC_VAR_S4, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "minub", 0, ORC_VAR_T5, ORC_VAR_S4, ORC_VAR_T1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subb", 0, ORC_VAR_T3, ORC_VAR_T4, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorb", 0, ORC_VAR_T2, ORC_VAR_T2, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "xorb", 0, ORC_VAR_T3, ORC_VAR_T3, ORC_VAR_C1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "cmpgtsb", 0, ORC_VAR_T5, ORC_VAR_T2, ORC_VAR_T3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andb", 0, ORC_VAR_T4, ORC_VAR_S1, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "andnb", 0, ORC_VAR_T5, ORC_VAR_S4, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "orb", 0, ORC_VAR_T6, ORC_VAR_T4, ORC_VAR_T5,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "maxub", 0, ORC_VAR_T8, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "minub", 0, ORC_VAR_T7, ORC_VAR_S2, ORC_VAR_S3,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "addusb", 0, ORC_VAR_T8, ORC_VAR_T8, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "subusb", 0, ORC_VAR_T7, ORC_VAR_T7, ORC_VAR_P1,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "minub", 0, ORC_VAR_T6, ORC_VAR_T6, ORC_VAR_T8,
+          ORC_VAR_D1);
+      orc_program_append_2 (p, "maxub", 0, ORC_VAR_D1, ORC_VAR_T6, ORC_VAR_T7,
+          ORC_VAR_D1);
+
+      result = orc_program_compile (p);
+    }
+    p_inited = TRUE;
+    orc_once_mutex_unlock ();
+  }
+  ex->program = p;
+
+  ex->n = n;
+  ex->arrays[ORC_VAR_D1] = d1;
+  ex->arrays[ORC_VAR_S1] = (void *) s1;
+  ex->arrays[ORC_VAR_S2] = (void *) s2;
+  ex->arrays[ORC_VAR_S3] = (void *) s3;
+  ex->arrays[ORC_VAR_S4] = (void *) s4;
+  ex->params[ORC_VAR_P1] = p1;
+
+  func = p->code_exec;
+  func (ex);
+}
+#endif
index 268188d..10ac5f9 100644 (file)
@@ -56,6 +56,7 @@ typedef union { orc_int64 i; double f; orc_int32 x2[2]; orc_int16 x4[4]; } orc_u
 void deinterlace_line_vfir (guint8 * d1, const guint8 * s1, const guint8 * s2, const guint8 * s3, const guint8 * s4, const guint8 * s5, int n);
 void deinterlace_line_linear (guint8 * d1, const guint8 * s1, const guint8 * s2, int n);
 void deinterlace_line_linear_blend (guint8 * d1, const guint8 * s1, const guint8 * s2, const guint8 * s3, int n);
+void deinterlace_line_greedy (orc_uint8 * d1, const orc_uint8 * s1, const orc_uint8 * s2, const orc_uint8 * s3, const orc_uint8 * s4, int p1, int n);
 
 #ifdef __cplusplus
 }