deinterlace: Update disted Orc files

This commit is contained in:
David Schleef 2010-09-04 12:46:31 -07:00
parent 178c57be4f
commit 6584c75afe
2 changed files with 362 additions and 0 deletions

View 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

View 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
}