vips_operation_math_get_type:
   13|      1|{
   14|      1|	static gsize gtype_id = 0;
   15|       |
   16|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
   17|      1|		static const GEnumValue values[] = {
   18|      1|			{ VIPS_OPERATION_MATH_SIN, "VIPS_OPERATION_MATH_SIN", "sin" },
   19|      1|			{ VIPS_OPERATION_MATH_COS, "VIPS_OPERATION_MATH_COS", "cos" },
   20|      1|			{ VIPS_OPERATION_MATH_TAN, "VIPS_OPERATION_MATH_TAN", "tan" },
   21|      1|			{ VIPS_OPERATION_MATH_ASIN, "VIPS_OPERATION_MATH_ASIN", "asin" },
   22|      1|			{ VIPS_OPERATION_MATH_ACOS, "VIPS_OPERATION_MATH_ACOS", "acos" },
   23|      1|			{ VIPS_OPERATION_MATH_ATAN, "VIPS_OPERATION_MATH_ATAN", "atan" },
   24|      1|			{ VIPS_OPERATION_MATH_LOG, "VIPS_OPERATION_MATH_LOG", "log" },
   25|      1|			{ VIPS_OPERATION_MATH_LOG10, "VIPS_OPERATION_MATH_LOG10", "log10" },
   26|      1|			{ VIPS_OPERATION_MATH_EXP, "VIPS_OPERATION_MATH_EXP", "exp" },
   27|      1|			{ VIPS_OPERATION_MATH_EXP10, "VIPS_OPERATION_MATH_EXP10", "exp10" },
   28|      1|			{ VIPS_OPERATION_MATH_SINH, "VIPS_OPERATION_MATH_SINH", "sinh" },
   29|      1|			{ VIPS_OPERATION_MATH_COSH, "VIPS_OPERATION_MATH_COSH", "cosh" },
   30|      1|			{ VIPS_OPERATION_MATH_TANH, "VIPS_OPERATION_MATH_TANH", "tanh" },
   31|      1|			{ VIPS_OPERATION_MATH_ASINH, "VIPS_OPERATION_MATH_ASINH", "asinh" },
   32|      1|			{ VIPS_OPERATION_MATH_ACOSH, "VIPS_OPERATION_MATH_ACOSH", "acosh" },
   33|      1|			{ VIPS_OPERATION_MATH_ATANH, "VIPS_OPERATION_MATH_ATANH", "atanh" },
   34|      1|			{ VIPS_OPERATION_MATH_LAST, "VIPS_OPERATION_MATH_LAST", "last" },
   35|      1|			{ 0, NULL, NULL }
   36|      1|		};
   37|       |
   38|      1|		GType new_type =
   39|      1|			g_enum_register_static(g_intern_static_string("VipsOperationMath"), values);
   40|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
   41|      1|	}
   42|       |
   43|      1|	return (GType) gtype_id;
   44|      1|}
vips_operation_math2_get_type:
   47|      2|{
   48|      2|	static gsize gtype_id = 0;
   49|       |
   50|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
   51|      1|		static const GEnumValue values[] = {
   52|      1|			{ VIPS_OPERATION_MATH2_POW, "VIPS_OPERATION_MATH2_POW", "pow" },
   53|      1|			{ VIPS_OPERATION_MATH2_WOP, "VIPS_OPERATION_MATH2_WOP", "wop" },
   54|      1|			{ VIPS_OPERATION_MATH2_ATAN2, "VIPS_OPERATION_MATH2_ATAN2", "atan2" },
   55|      1|			{ VIPS_OPERATION_MATH2_LAST, "VIPS_OPERATION_MATH2_LAST", "last" },
   56|      1|			{ 0, NULL, NULL }
   57|      1|		};
   58|       |
   59|      1|		GType new_type =
   60|      1|			g_enum_register_static(g_intern_static_string("VipsOperationMath2"), values);
   61|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
   62|      1|	}
   63|       |
   64|      2|	return (GType) gtype_id;
   65|      2|}
vips_operation_round_get_type:
   68|      1|{
   69|      1|	static gsize gtype_id = 0;
   70|       |
   71|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
   72|      1|		static const GEnumValue values[] = {
   73|      1|			{ VIPS_OPERATION_ROUND_RINT, "VIPS_OPERATION_ROUND_RINT", "rint" },
   74|      1|			{ VIPS_OPERATION_ROUND_CEIL, "VIPS_OPERATION_ROUND_CEIL", "ceil" },
   75|      1|			{ VIPS_OPERATION_ROUND_FLOOR, "VIPS_OPERATION_ROUND_FLOOR", "floor" },
   76|      1|			{ VIPS_OPERATION_ROUND_LAST, "VIPS_OPERATION_ROUND_LAST", "last" },
   77|      1|			{ 0, NULL, NULL }
   78|      1|		};
   79|       |
   80|      1|		GType new_type =
   81|      1|			g_enum_register_static(g_intern_static_string("VipsOperationRound"), values);
   82|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
   83|      1|	}
   84|       |
   85|      1|	return (GType) gtype_id;
   86|      1|}
vips_operation_relational_get_type:
   89|      2|{
   90|      2|	static gsize gtype_id = 0;
   91|       |
   92|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
   93|      1|		static const GEnumValue values[] = {
   94|      1|			{ VIPS_OPERATION_RELATIONAL_EQUAL, "VIPS_OPERATION_RELATIONAL_EQUAL", "equal" },
   95|      1|			{ VIPS_OPERATION_RELATIONAL_NOTEQ, "VIPS_OPERATION_RELATIONAL_NOTEQ", "noteq" },
   96|      1|			{ VIPS_OPERATION_RELATIONAL_LESS, "VIPS_OPERATION_RELATIONAL_LESS", "less" },
   97|      1|			{ VIPS_OPERATION_RELATIONAL_LESSEQ, "VIPS_OPERATION_RELATIONAL_LESSEQ", "lesseq" },
   98|      1|			{ VIPS_OPERATION_RELATIONAL_MORE, "VIPS_OPERATION_RELATIONAL_MORE", "more" },
   99|      1|			{ VIPS_OPERATION_RELATIONAL_MOREEQ, "VIPS_OPERATION_RELATIONAL_MOREEQ", "moreeq" },
  100|      1|			{ VIPS_OPERATION_RELATIONAL_LAST, "VIPS_OPERATION_RELATIONAL_LAST", "last" },
  101|      1|			{ 0, NULL, NULL }
  102|      1|		};
  103|       |
  104|      1|		GType new_type =
  105|      1|			g_enum_register_static(g_intern_static_string("VipsOperationRelational"), values);
  106|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  107|      1|	}
  108|       |
  109|      2|	return (GType) gtype_id;
  110|      2|}
vips_operation_boolean_get_type:
  113|      3|{
  114|      3|	static gsize gtype_id = 0;
  115|       |
  116|      3|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      3|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      3|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 2]
  |  |  ------------------
  |  |  249|      3|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      3|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      3|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      3|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      6|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      3|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      3|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      6|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      6|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      6|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      6|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      6|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 2]
  |  |  ------------------
  |  |  252|      3|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      3|  }))
  ------------------
  117|      1|		static const GEnumValue values[] = {
  118|      1|			{ VIPS_OPERATION_BOOLEAN_AND, "VIPS_OPERATION_BOOLEAN_AND", "and" },
  119|      1|			{ VIPS_OPERATION_BOOLEAN_OR, "VIPS_OPERATION_BOOLEAN_OR", "or" },
  120|      1|			{ VIPS_OPERATION_BOOLEAN_EOR, "VIPS_OPERATION_BOOLEAN_EOR", "eor" },
  121|      1|			{ VIPS_OPERATION_BOOLEAN_LSHIFT, "VIPS_OPERATION_BOOLEAN_LSHIFT", "lshift" },
  122|      1|			{ VIPS_OPERATION_BOOLEAN_RSHIFT, "VIPS_OPERATION_BOOLEAN_RSHIFT", "rshift" },
  123|      1|			{ VIPS_OPERATION_BOOLEAN_LAST, "VIPS_OPERATION_BOOLEAN_LAST", "last" },
  124|      1|			{ 0, NULL, NULL }
  125|      1|		};
  126|       |
  127|      1|		GType new_type =
  128|      1|			g_enum_register_static(g_intern_static_string("VipsOperationBoolean"), values);
  129|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  130|      1|	}
  131|       |
  132|      3|	return (GType) gtype_id;
  133|      3|}
vips_operation_complex_get_type:
  136|      1|{
  137|      1|	static gsize gtype_id = 0;
  138|       |
  139|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  140|      1|		static const GEnumValue values[] = {
  141|      1|			{ VIPS_OPERATION_COMPLEX_POLAR, "VIPS_OPERATION_COMPLEX_POLAR", "polar" },
  142|      1|			{ VIPS_OPERATION_COMPLEX_RECT, "VIPS_OPERATION_COMPLEX_RECT", "rect" },
  143|      1|			{ VIPS_OPERATION_COMPLEX_CONJ, "VIPS_OPERATION_COMPLEX_CONJ", "conj" },
  144|      1|			{ VIPS_OPERATION_COMPLEX_LAST, "VIPS_OPERATION_COMPLEX_LAST", "last" },
  145|      1|			{ 0, NULL, NULL }
  146|      1|		};
  147|       |
  148|      1|		GType new_type =
  149|      1|			g_enum_register_static(g_intern_static_string("VipsOperationComplex"), values);
  150|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  151|      1|	}
  152|       |
  153|      1|	return (GType) gtype_id;
  154|      1|}
vips_operation_complex2_get_type:
  157|      1|{
  158|      1|	static gsize gtype_id = 0;
  159|       |
  160|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  161|      1|		static const GEnumValue values[] = {
  162|      1|			{ VIPS_OPERATION_COMPLEX2_CROSS_PHASE, "VIPS_OPERATION_COMPLEX2_CROSS_PHASE", "cross-phase" },
  163|      1|			{ VIPS_OPERATION_COMPLEX2_LAST, "VIPS_OPERATION_COMPLEX2_LAST", "last" },
  164|      1|			{ 0, NULL, NULL }
  165|      1|		};
  166|       |
  167|      1|		GType new_type =
  168|      1|			g_enum_register_static(g_intern_static_string("VipsOperationComplex2"), values);
  169|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  170|      1|	}
  171|       |
  172|      1|	return (GType) gtype_id;
  173|      1|}
vips_operation_complexget_get_type:
  176|      1|{
  177|      1|	static gsize gtype_id = 0;
  178|       |
  179|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  180|      1|		static const GEnumValue values[] = {
  181|      1|			{ VIPS_OPERATION_COMPLEXGET_REAL, "VIPS_OPERATION_COMPLEXGET_REAL", "real" },
  182|      1|			{ VIPS_OPERATION_COMPLEXGET_IMAG, "VIPS_OPERATION_COMPLEXGET_IMAG", "imag" },
  183|      1|			{ VIPS_OPERATION_COMPLEXGET_LAST, "VIPS_OPERATION_COMPLEXGET_LAST", "last" },
  184|      1|			{ 0, NULL, NULL }
  185|      1|		};
  186|       |
  187|      1|		GType new_type =
  188|      1|			g_enum_register_static(g_intern_static_string("VipsOperationComplexget"), values);
  189|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  190|      1|	}
  191|       |
  192|      1|	return (GType) gtype_id;
  193|      1|}
vips_precision_get_type:
  197|      7|{
  198|      7|	static gsize gtype_id = 0;
  199|       |
  200|      7|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      7|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      7|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 6]
  |  |  ------------------
  |  |  249|      7|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      7|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      7|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      7|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|     14|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      7|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|     14|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      7|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|     14|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|     14|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|     14|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|     14|    gapg_temp_newval;                                                        \
  |  |  |  |  131|     14|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 6]
  |  |  ------------------
  |  |  252|      7|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      7|  }))
  ------------------
  201|      1|		static const GEnumValue values[] = {
  202|      1|			{ VIPS_PRECISION_INTEGER, "VIPS_PRECISION_INTEGER", "integer" },
  203|      1|			{ VIPS_PRECISION_FLOAT, "VIPS_PRECISION_FLOAT", "float" },
  204|      1|			{ VIPS_PRECISION_APPROXIMATE, "VIPS_PRECISION_APPROXIMATE", "approximate" },
  205|      1|			{ VIPS_PRECISION_LAST, "VIPS_PRECISION_LAST", "last" },
  206|      1|			{ 0, NULL, NULL }
  207|      1|		};
  208|       |
  209|      1|		GType new_type =
  210|      1|			g_enum_register_static(g_intern_static_string("VipsPrecision"), values);
  211|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  212|      1|	}
  213|       |
  214|      7|	return (GType) gtype_id;
  215|      7|}
vips_intent_get_type:
  219|      2|{
  220|      2|	static gsize gtype_id = 0;
  221|       |
  222|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  223|      1|		static const GEnumValue values[] = {
  224|      1|			{ VIPS_INTENT_PERCEPTUAL, "VIPS_INTENT_PERCEPTUAL", "perceptual" },
  225|      1|			{ VIPS_INTENT_RELATIVE, "VIPS_INTENT_RELATIVE", "relative" },
  226|      1|			{ VIPS_INTENT_SATURATION, "VIPS_INTENT_SATURATION", "saturation" },
  227|      1|			{ VIPS_INTENT_ABSOLUTE, "VIPS_INTENT_ABSOLUTE", "absolute" },
  228|      1|			{ VIPS_INTENT_LAST, "VIPS_INTENT_LAST", "last" },
  229|      1|			{ 0, NULL, NULL }
  230|      1|		};
  231|       |
  232|      1|		GType new_type =
  233|      1|			g_enum_register_static(g_intern_static_string("VipsIntent"), values);
  234|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  235|      1|	}
  236|       |
  237|      2|	return (GType) gtype_id;
  238|      2|}
vips_pcs_get_type:
  241|      1|{
  242|      1|	static gsize gtype_id = 0;
  243|       |
  244|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  245|      1|		static const GEnumValue values[] = {
  246|      1|			{ VIPS_PCS_LAB, "VIPS_PCS_LAB", "lab" },
  247|      1|			{ VIPS_PCS_XYZ, "VIPS_PCS_XYZ", "xyz" },
  248|      1|			{ VIPS_PCS_LAST, "VIPS_PCS_LAST", "last" },
  249|      1|			{ 0, NULL, NULL }
  250|      1|		};
  251|       |
  252|      1|		GType new_type =
  253|      1|			g_enum_register_static(g_intern_static_string("VipsPCS"), values);
  254|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  255|      1|	}
  256|       |
  257|      1|	return (GType) gtype_id;
  258|      1|}
vips_extend_get_type:
  262|      3|{
  263|      3|	static gsize gtype_id = 0;
  264|       |
  265|      3|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      3|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      3|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 2]
  |  |  ------------------
  |  |  249|      3|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      3|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      3|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      3|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      6|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      3|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      3|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      6|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      6|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      6|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      6|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      6|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 2]
  |  |  ------------------
  |  |  252|      3|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      3|  }))
  ------------------
  266|      1|		static const GEnumValue values[] = {
  267|      1|			{ VIPS_EXTEND_BLACK, "VIPS_EXTEND_BLACK", "black" },
  268|      1|			{ VIPS_EXTEND_COPY, "VIPS_EXTEND_COPY", "copy" },
  269|      1|			{ VIPS_EXTEND_REPEAT, "VIPS_EXTEND_REPEAT", "repeat" },
  270|      1|			{ VIPS_EXTEND_MIRROR, "VIPS_EXTEND_MIRROR", "mirror" },
  271|      1|			{ VIPS_EXTEND_WHITE, "VIPS_EXTEND_WHITE", "white" },
  272|      1|			{ VIPS_EXTEND_BACKGROUND, "VIPS_EXTEND_BACKGROUND", "background" },
  273|      1|			{ VIPS_EXTEND_LAST, "VIPS_EXTEND_LAST", "last" },
  274|      1|			{ 0, NULL, NULL }
  275|      1|		};
  276|       |
  277|      1|		GType new_type =
  278|      1|			g_enum_register_static(g_intern_static_string("VipsExtend"), values);
  279|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  280|      1|	}
  281|       |
  282|      3|	return (GType) gtype_id;
  283|      3|}
vips_compass_direction_get_type:
  286|      1|{
  287|      1|	static gsize gtype_id = 0;
  288|       |
  289|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  290|      1|		static const GEnumValue values[] = {
  291|      1|			{ VIPS_COMPASS_DIRECTION_CENTRE, "VIPS_COMPASS_DIRECTION_CENTRE", "centre" },
  292|      1|			{ VIPS_COMPASS_DIRECTION_NORTH, "VIPS_COMPASS_DIRECTION_NORTH", "north" },
  293|      1|			{ VIPS_COMPASS_DIRECTION_EAST, "VIPS_COMPASS_DIRECTION_EAST", "east" },
  294|      1|			{ VIPS_COMPASS_DIRECTION_SOUTH, "VIPS_COMPASS_DIRECTION_SOUTH", "south" },
  295|      1|			{ VIPS_COMPASS_DIRECTION_WEST, "VIPS_COMPASS_DIRECTION_WEST", "west" },
  296|      1|			{ VIPS_COMPASS_DIRECTION_NORTH_EAST, "VIPS_COMPASS_DIRECTION_NORTH_EAST", "north-east" },
  297|      1|			{ VIPS_COMPASS_DIRECTION_SOUTH_EAST, "VIPS_COMPASS_DIRECTION_SOUTH_EAST", "south-east" },
  298|      1|			{ VIPS_COMPASS_DIRECTION_SOUTH_WEST, "VIPS_COMPASS_DIRECTION_SOUTH_WEST", "south-west" },
  299|      1|			{ VIPS_COMPASS_DIRECTION_NORTH_WEST, "VIPS_COMPASS_DIRECTION_NORTH_WEST", "north-west" },
  300|      1|			{ VIPS_COMPASS_DIRECTION_LAST, "VIPS_COMPASS_DIRECTION_LAST", "last" },
  301|      1|			{ 0, NULL, NULL }
  302|      1|		};
  303|       |
  304|      1|		GType new_type =
  305|      1|			g_enum_register_static(g_intern_static_string("VipsCompassDirection"), values);
  306|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  307|      1|	}
  308|       |
  309|      1|	return (GType) gtype_id;
  310|      1|}
vips_direction_get_type:
  313|      6|{
  314|      6|	static gsize gtype_id = 0;
  315|       |
  316|      6|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      6|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      6|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 5]
  |  |  ------------------
  |  |  249|      6|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      6|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      6|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      6|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|     12|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|     12|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      6|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|     12|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|     12|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|     12|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|     12|    gapg_temp_newval;                                                        \
  |  |  |  |  131|     12|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 5]
  |  |  ------------------
  |  |  252|      6|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      6|  }))
  ------------------
  317|      1|		static const GEnumValue values[] = {
  318|      1|			{ VIPS_DIRECTION_HORIZONTAL, "VIPS_DIRECTION_HORIZONTAL", "horizontal" },
  319|      1|			{ VIPS_DIRECTION_VERTICAL, "VIPS_DIRECTION_VERTICAL", "vertical" },
  320|      1|			{ VIPS_DIRECTION_LAST, "VIPS_DIRECTION_LAST", "last" },
  321|      1|			{ 0, NULL, NULL }
  322|      1|		};
  323|       |
  324|      1|		GType new_type =
  325|      1|			g_enum_register_static(g_intern_static_string("VipsDirection"), values);
  326|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  327|      1|	}
  328|       |
  329|      6|	return (GType) gtype_id;
  330|      6|}
vips_align_get_type:
  333|      2|{
  334|      2|	static gsize gtype_id = 0;
  335|       |
  336|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  337|      1|		static const GEnumValue values[] = {
  338|      1|			{ VIPS_ALIGN_LOW, "VIPS_ALIGN_LOW", "low" },
  339|      1|			{ VIPS_ALIGN_CENTRE, "VIPS_ALIGN_CENTRE", "centre" },
  340|      1|			{ VIPS_ALIGN_HIGH, "VIPS_ALIGN_HIGH", "high" },
  341|      1|			{ VIPS_ALIGN_LAST, "VIPS_ALIGN_LAST", "last" },
  342|      1|			{ 0, NULL, NULL }
  343|      1|		};
  344|       |
  345|      1|		GType new_type =
  346|      1|			g_enum_register_static(g_intern_static_string("VipsAlign"), values);
  347|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  348|      1|	}
  349|       |
  350|      2|	return (GType) gtype_id;
  351|      2|}
vips_angle_get_type:
  354|      2|{
  355|      2|	static gsize gtype_id = 0;
  356|       |
  357|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  358|      1|		static const GEnumValue values[] = {
  359|      1|			{ VIPS_ANGLE_D0, "VIPS_ANGLE_D0", "d0" },
  360|      1|			{ VIPS_ANGLE_D90, "VIPS_ANGLE_D90", "d90" },
  361|      1|			{ VIPS_ANGLE_D180, "VIPS_ANGLE_D180", "d180" },
  362|      1|			{ VIPS_ANGLE_D270, "VIPS_ANGLE_D270", "d270" },
  363|      1|			{ VIPS_ANGLE_LAST, "VIPS_ANGLE_LAST", "last" },
  364|      1|			{ 0, NULL, NULL }
  365|      1|		};
  366|       |
  367|      1|		GType new_type =
  368|      1|			g_enum_register_static(g_intern_static_string("VipsAngle"), values);
  369|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  370|      1|	}
  371|       |
  372|      2|	return (GType) gtype_id;
  373|      2|}
vips_angle45_get_type:
  376|      2|{
  377|      2|	static gsize gtype_id = 0;
  378|       |
  379|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  380|      1|		static const GEnumValue values[] = {
  381|      1|			{ VIPS_ANGLE45_D0, "VIPS_ANGLE45_D0", "d0" },
  382|      1|			{ VIPS_ANGLE45_D45, "VIPS_ANGLE45_D45", "d45" },
  383|      1|			{ VIPS_ANGLE45_D90, "VIPS_ANGLE45_D90", "d90" },
  384|      1|			{ VIPS_ANGLE45_D135, "VIPS_ANGLE45_D135", "d135" },
  385|      1|			{ VIPS_ANGLE45_D180, "VIPS_ANGLE45_D180", "d180" },
  386|      1|			{ VIPS_ANGLE45_D225, "VIPS_ANGLE45_D225", "d225" },
  387|      1|			{ VIPS_ANGLE45_D270, "VIPS_ANGLE45_D270", "d270" },
  388|      1|			{ VIPS_ANGLE45_D315, "VIPS_ANGLE45_D315", "d315" },
  389|      1|			{ VIPS_ANGLE45_LAST, "VIPS_ANGLE45_LAST", "last" },
  390|      1|			{ 0, NULL, NULL }
  391|      1|		};
  392|       |
  393|      1|		GType new_type =
  394|      1|			g_enum_register_static(g_intern_static_string("VipsAngle45"), values);
  395|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  396|      1|	}
  397|       |
  398|      2|	return (GType) gtype_id;
  399|      2|}
vips_interesting_get_type:
  402|      2|{
  403|      2|	static gsize gtype_id = 0;
  404|       |
  405|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  406|      1|		static const GEnumValue values[] = {
  407|      1|			{ VIPS_INTERESTING_NONE, "VIPS_INTERESTING_NONE", "none" },
  408|      1|			{ VIPS_INTERESTING_CENTRE, "VIPS_INTERESTING_CENTRE", "centre" },
  409|      1|			{ VIPS_INTERESTING_ENTROPY, "VIPS_INTERESTING_ENTROPY", "entropy" },
  410|      1|			{ VIPS_INTERESTING_ATTENTION, "VIPS_INTERESTING_ATTENTION", "attention" },
  411|      1|			{ VIPS_INTERESTING_LOW, "VIPS_INTERESTING_LOW", "low" },
  412|      1|			{ VIPS_INTERESTING_HIGH, "VIPS_INTERESTING_HIGH", "high" },
  413|      1|			{ VIPS_INTERESTING_ALL, "VIPS_INTERESTING_ALL", "all" },
  414|      1|			{ VIPS_INTERESTING_LAST, "VIPS_INTERESTING_LAST", "last" },
  415|      1|			{ 0, NULL, NULL }
  416|      1|		};
  417|       |
  418|      1|		GType new_type =
  419|      1|			g_enum_register_static(g_intern_static_string("VipsInteresting"), values);
  420|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  421|      1|	}
  422|       |
  423|      2|	return (GType) gtype_id;
  424|      2|}
vips_blend_mode_get_type:
  427|      1|{
  428|      1|	static gsize gtype_id = 0;
  429|       |
  430|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  431|      1|		static const GEnumValue values[] = {
  432|      1|			{ VIPS_BLEND_MODE_CLEAR, "VIPS_BLEND_MODE_CLEAR", "clear" },
  433|      1|			{ VIPS_BLEND_MODE_SOURCE, "VIPS_BLEND_MODE_SOURCE", "source" },
  434|      1|			{ VIPS_BLEND_MODE_OVER, "VIPS_BLEND_MODE_OVER", "over" },
  435|      1|			{ VIPS_BLEND_MODE_IN, "VIPS_BLEND_MODE_IN", "in" },
  436|      1|			{ VIPS_BLEND_MODE_OUT, "VIPS_BLEND_MODE_OUT", "out" },
  437|      1|			{ VIPS_BLEND_MODE_ATOP, "VIPS_BLEND_MODE_ATOP", "atop" },
  438|      1|			{ VIPS_BLEND_MODE_DEST, "VIPS_BLEND_MODE_DEST", "dest" },
  439|      1|			{ VIPS_BLEND_MODE_DEST_OVER, "VIPS_BLEND_MODE_DEST_OVER", "dest-over" },
  440|      1|			{ VIPS_BLEND_MODE_DEST_IN, "VIPS_BLEND_MODE_DEST_IN", "dest-in" },
  441|      1|			{ VIPS_BLEND_MODE_DEST_OUT, "VIPS_BLEND_MODE_DEST_OUT", "dest-out" },
  442|      1|			{ VIPS_BLEND_MODE_DEST_ATOP, "VIPS_BLEND_MODE_DEST_ATOP", "dest-atop" },
  443|      1|			{ VIPS_BLEND_MODE_XOR, "VIPS_BLEND_MODE_XOR", "xor" },
  444|      1|			{ VIPS_BLEND_MODE_ADD, "VIPS_BLEND_MODE_ADD", "add" },
  445|      1|			{ VIPS_BLEND_MODE_SATURATE, "VIPS_BLEND_MODE_SATURATE", "saturate" },
  446|      1|			{ VIPS_BLEND_MODE_MULTIPLY, "VIPS_BLEND_MODE_MULTIPLY", "multiply" },
  447|      1|			{ VIPS_BLEND_MODE_SCREEN, "VIPS_BLEND_MODE_SCREEN", "screen" },
  448|      1|			{ VIPS_BLEND_MODE_OVERLAY, "VIPS_BLEND_MODE_OVERLAY", "overlay" },
  449|      1|			{ VIPS_BLEND_MODE_DARKEN, "VIPS_BLEND_MODE_DARKEN", "darken" },
  450|      1|			{ VIPS_BLEND_MODE_LIGHTEN, "VIPS_BLEND_MODE_LIGHTEN", "lighten" },
  451|      1|			{ VIPS_BLEND_MODE_COLOUR_DODGE, "VIPS_BLEND_MODE_COLOUR_DODGE", "colour-dodge" },
  452|      1|			{ VIPS_BLEND_MODE_COLOUR_BURN, "VIPS_BLEND_MODE_COLOUR_BURN", "colour-burn" },
  453|      1|			{ VIPS_BLEND_MODE_HARD_LIGHT, "VIPS_BLEND_MODE_HARD_LIGHT", "hard-light" },
  454|      1|			{ VIPS_BLEND_MODE_SOFT_LIGHT, "VIPS_BLEND_MODE_SOFT_LIGHT", "soft-light" },
  455|      1|			{ VIPS_BLEND_MODE_DIFFERENCE, "VIPS_BLEND_MODE_DIFFERENCE", "difference" },
  456|      1|			{ VIPS_BLEND_MODE_EXCLUSION, "VIPS_BLEND_MODE_EXCLUSION", "exclusion" },
  457|      1|			{ VIPS_BLEND_MODE_LAST, "VIPS_BLEND_MODE_LAST", "last" },
  458|      1|			{ 0, NULL, NULL }
  459|      1|		};
  460|       |
  461|      1|		GType new_type =
  462|      1|			g_enum_register_static(g_intern_static_string("VipsBlendMode"), values);
  463|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  464|      1|	}
  465|       |
  466|      1|	return (GType) gtype_id;
  467|      1|}
vips_combine_get_type:
  471|      2|{
  472|      2|	static gsize gtype_id = 0;
  473|       |
  474|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  475|      1|		static const GEnumValue values[] = {
  476|      1|			{ VIPS_COMBINE_MAX, "VIPS_COMBINE_MAX", "max" },
  477|      1|			{ VIPS_COMBINE_SUM, "VIPS_COMBINE_SUM", "sum" },
  478|      1|			{ VIPS_COMBINE_MIN, "VIPS_COMBINE_MIN", "min" },
  479|      1|			{ VIPS_COMBINE_LAST, "VIPS_COMBINE_LAST", "last" },
  480|      1|			{ 0, NULL, NULL }
  481|      1|		};
  482|       |
  483|      1|		GType new_type =
  484|      1|			g_enum_register_static(g_intern_static_string("VipsCombine"), values);
  485|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  486|      1|	}
  487|       |
  488|      2|	return (GType) gtype_id;
  489|      2|}
vips_sdf_shape_get_type:
  515|      1|{
  516|      1|	static gsize gtype_id = 0;
  517|       |
  518|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  519|      1|		static const GEnumValue values[] = {
  520|      1|			{ VIPS_SDF_SHAPE_CIRCLE, "VIPS_SDF_SHAPE_CIRCLE", "circle" },
  521|      1|			{ VIPS_SDF_SHAPE_BOX, "VIPS_SDF_SHAPE_BOX", "box" },
  522|      1|			{ VIPS_SDF_SHAPE_ROUNDED_BOX, "VIPS_SDF_SHAPE_ROUNDED_BOX", "rounded-box" },
  523|      1|			{ VIPS_SDF_SHAPE_LINE, "VIPS_SDF_SHAPE_LINE", "line" },
  524|      1|			{ VIPS_SDF_SHAPE_LAST, "VIPS_SDF_SHAPE_LAST", "last" },
  525|      1|			{ 0, NULL, NULL }
  526|      1|		};
  527|       |
  528|      1|		GType new_type =
  529|      1|			g_enum_register_static(g_intern_static_string("VipsSdfShape"), values);
  530|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  531|      1|	}
  532|       |
  533|      1|	return (GType) gtype_id;
  534|      1|}
vips_combine_mode_get_type:
  538|      1|{
  539|      1|	static gsize gtype_id = 0;
  540|       |
  541|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  542|      1|		static const GEnumValue values[] = {
  543|      1|			{ VIPS_COMBINE_MODE_SET, "VIPS_COMBINE_MODE_SET", "set" },
  544|      1|			{ VIPS_COMBINE_MODE_ADD, "VIPS_COMBINE_MODE_ADD", "add" },
  545|      1|			{ VIPS_COMBINE_MODE_LAST, "VIPS_COMBINE_MODE_LAST", "last" },
  546|      1|			{ 0, NULL, NULL }
  547|      1|		};
  548|       |
  549|      1|		GType new_type =
  550|      1|			g_enum_register_static(g_intern_static_string("VipsCombineMode"), values);
  551|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  552|      1|	}
  553|       |
  554|      1|	return (GType) gtype_id;
  555|      1|}
vips_foreign_flags_get_type:
  559|      1|{
  560|      1|	static gsize gtype_id = 0;
  561|       |
  562|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  563|      1|		static const GFlagsValue values[] = {
  564|      1|			{ VIPS_FOREIGN_NONE, "VIPS_FOREIGN_NONE", "none" },
  565|      1|			{ VIPS_FOREIGN_PARTIAL, "VIPS_FOREIGN_PARTIAL", "partial" },
  566|      1|			{ VIPS_FOREIGN_BIGENDIAN, "VIPS_FOREIGN_BIGENDIAN", "bigendian" },
  567|      1|			{ VIPS_FOREIGN_SEQUENTIAL, "VIPS_FOREIGN_SEQUENTIAL", "sequential" },
  568|      1|			{ VIPS_FOREIGN_ALL, "VIPS_FOREIGN_ALL", "all" },
  569|      1|			{ 0, NULL, NULL }
  570|      1|		};
  571|       |
  572|      1|		GType new_type =
  573|      1|			g_flags_register_static(g_intern_static_string("VipsForeignFlags"), values);
  574|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  575|      1|	}
  576|       |
  577|      1|	return (GType) gtype_id;
  578|      1|}
vips_fail_on_get_type:
  581|      2|{
  582|      2|	static gsize gtype_id = 0;
  583|       |
  584|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  585|      1|		static const GEnumValue values[] = {
  586|      1|			{ VIPS_FAIL_ON_NONE, "VIPS_FAIL_ON_NONE", "none" },
  587|      1|			{ VIPS_FAIL_ON_TRUNCATED, "VIPS_FAIL_ON_TRUNCATED", "truncated" },
  588|      1|			{ VIPS_FAIL_ON_ERROR, "VIPS_FAIL_ON_ERROR", "error" },
  589|      1|			{ VIPS_FAIL_ON_WARNING, "VIPS_FAIL_ON_WARNING", "warning" },
  590|      1|			{ VIPS_FAIL_ON_LAST, "VIPS_FAIL_ON_LAST", "last" },
  591|      1|			{ 0, NULL, NULL }
  592|      1|		};
  593|       |
  594|      1|		GType new_type =
  595|      1|			g_enum_register_static(g_intern_static_string("VipsFailOn"), values);
  596|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  597|      1|	}
  598|       |
  599|      2|	return (GType) gtype_id;
  600|      2|}
vips_foreign_keep_get_type:
  627|      1|{
  628|      1|	static gsize gtype_id = 0;
  629|       |
  630|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  631|      1|		static const GFlagsValue values[] = {
  632|      1|			{ VIPS_FOREIGN_KEEP_NONE, "VIPS_FOREIGN_KEEP_NONE", "none" },
  633|      1|			{ VIPS_FOREIGN_KEEP_EXIF, "VIPS_FOREIGN_KEEP_EXIF", "exif" },
  634|      1|			{ VIPS_FOREIGN_KEEP_XMP, "VIPS_FOREIGN_KEEP_XMP", "xmp" },
  635|      1|			{ VIPS_FOREIGN_KEEP_IPTC, "VIPS_FOREIGN_KEEP_IPTC", "iptc" },
  636|      1|			{ VIPS_FOREIGN_KEEP_ICC, "VIPS_FOREIGN_KEEP_ICC", "icc" },
  637|      1|			{ VIPS_FOREIGN_KEEP_OTHER, "VIPS_FOREIGN_KEEP_OTHER", "other" },
  638|      1|			{ VIPS_FOREIGN_KEEP_ALL, "VIPS_FOREIGN_KEEP_ALL", "all" },
  639|      1|			{ 0, NULL, NULL }
  640|      1|		};
  641|       |
  642|      1|		GType new_type =
  643|      1|			g_flags_register_static(g_intern_static_string("VipsForeignKeep"), values);
  644|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  645|      1|	}
  646|       |
  647|      1|	return (GType) gtype_id;
  648|      1|}
vips_foreign_subsample_get_type:
  651|      2|{
  652|      2|	static gsize gtype_id = 0;
  653|       |
  654|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  655|      1|		static const GEnumValue values[] = {
  656|      1|			{ VIPS_FOREIGN_SUBSAMPLE_AUTO, "VIPS_FOREIGN_SUBSAMPLE_AUTO", "auto" },
  657|      1|			{ VIPS_FOREIGN_SUBSAMPLE_ON, "VIPS_FOREIGN_SUBSAMPLE_ON", "on" },
  658|      1|			{ VIPS_FOREIGN_SUBSAMPLE_OFF, "VIPS_FOREIGN_SUBSAMPLE_OFF", "off" },
  659|      1|			{ VIPS_FOREIGN_SUBSAMPLE_LAST, "VIPS_FOREIGN_SUBSAMPLE_LAST", "last" },
  660|      1|			{ 0, NULL, NULL }
  661|      1|		};
  662|       |
  663|      1|		GType new_type =
  664|      1|			g_enum_register_static(g_intern_static_string("VipsForeignSubsample"), values);
  665|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  666|      1|	}
  667|       |
  668|      2|	return (GType) gtype_id;
  669|      2|}
vips_foreign_webp_preset_get_type:
  672|      1|{
  673|      1|	static gsize gtype_id = 0;
  674|       |
  675|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  676|      1|		static const GEnumValue values[] = {
  677|      1|			{ VIPS_FOREIGN_WEBP_PRESET_DEFAULT, "VIPS_FOREIGN_WEBP_PRESET_DEFAULT", "default" },
  678|      1|			{ VIPS_FOREIGN_WEBP_PRESET_PICTURE, "VIPS_FOREIGN_WEBP_PRESET_PICTURE", "picture" },
  679|      1|			{ VIPS_FOREIGN_WEBP_PRESET_PHOTO, "VIPS_FOREIGN_WEBP_PRESET_PHOTO", "photo" },
  680|      1|			{ VIPS_FOREIGN_WEBP_PRESET_DRAWING, "VIPS_FOREIGN_WEBP_PRESET_DRAWING", "drawing" },
  681|      1|			{ VIPS_FOREIGN_WEBP_PRESET_ICON, "VIPS_FOREIGN_WEBP_PRESET_ICON", "icon" },
  682|      1|			{ VIPS_FOREIGN_WEBP_PRESET_TEXT, "VIPS_FOREIGN_WEBP_PRESET_TEXT", "text" },
  683|      1|			{ VIPS_FOREIGN_WEBP_PRESET_LAST, "VIPS_FOREIGN_WEBP_PRESET_LAST", "last" },
  684|      1|			{ 0, NULL, NULL }
  685|      1|		};
  686|       |
  687|      1|		GType new_type =
  688|      1|			g_enum_register_static(g_intern_static_string("VipsForeignWebpPreset"), values);
  689|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  690|      1|	}
  691|       |
  692|      1|	return (GType) gtype_id;
  693|      1|}
vips_foreign_tiff_compression_get_type:
  696|      1|{
  697|      1|	static gsize gtype_id = 0;
  698|       |
  699|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  700|      1|		static const GEnumValue values[] = {
  701|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_NONE, "VIPS_FOREIGN_TIFF_COMPRESSION_NONE", "none" },
  702|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_JPEG, "VIPS_FOREIGN_TIFF_COMPRESSION_JPEG", "jpeg" },
  703|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_DEFLATE, "VIPS_FOREIGN_TIFF_COMPRESSION_DEFLATE", "deflate" },
  704|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_PACKBITS, "VIPS_FOREIGN_TIFF_COMPRESSION_PACKBITS", "packbits" },
  705|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_CCITTFAX4, "VIPS_FOREIGN_TIFF_COMPRESSION_CCITTFAX4", "ccittfax4" },
  706|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_LZW, "VIPS_FOREIGN_TIFF_COMPRESSION_LZW", "lzw" },
  707|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_WEBP, "VIPS_FOREIGN_TIFF_COMPRESSION_WEBP", "webp" },
  708|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_ZSTD, "VIPS_FOREIGN_TIFF_COMPRESSION_ZSTD", "zstd" },
  709|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_JP2K, "VIPS_FOREIGN_TIFF_COMPRESSION_JP2K", "jp2k" },
  710|      1|			{ VIPS_FOREIGN_TIFF_COMPRESSION_LAST, "VIPS_FOREIGN_TIFF_COMPRESSION_LAST", "last" },
  711|      1|			{ 0, NULL, NULL }
  712|      1|		};
  713|       |
  714|      1|		GType new_type =
  715|      1|			g_enum_register_static(g_intern_static_string("VipsForeignTiffCompression"), values);
  716|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  717|      1|	}
  718|       |
  719|      1|	return (GType) gtype_id;
  720|      1|}
vips_foreign_tiff_predictor_get_type:
  723|      1|{
  724|      1|	static gsize gtype_id = 0;
  725|       |
  726|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  727|      1|		static const GEnumValue values[] = {
  728|      1|			{ VIPS_FOREIGN_TIFF_PREDICTOR_NONE, "VIPS_FOREIGN_TIFF_PREDICTOR_NONE", "none" },
  729|      1|			{ VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL, "VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL", "horizontal" },
  730|      1|			{ VIPS_FOREIGN_TIFF_PREDICTOR_FLOAT, "VIPS_FOREIGN_TIFF_PREDICTOR_FLOAT", "float" },
  731|      1|			{ VIPS_FOREIGN_TIFF_PREDICTOR_LAST, "VIPS_FOREIGN_TIFF_PREDICTOR_LAST", "last" },
  732|      1|			{ 0, NULL, NULL }
  733|      1|		};
  734|       |
  735|      1|		GType new_type =
  736|      1|			g_enum_register_static(g_intern_static_string("VipsForeignTiffPredictor"), values);
  737|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  738|      1|	}
  739|       |
  740|      1|	return (GType) gtype_id;
  741|      1|}
vips_foreign_tiff_resunit_get_type:
  744|      1|{
  745|      1|	static gsize gtype_id = 0;
  746|       |
  747|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  748|      1|		static const GEnumValue values[] = {
  749|      1|			{ VIPS_FOREIGN_TIFF_RESUNIT_CM, "VIPS_FOREIGN_TIFF_RESUNIT_CM", "cm" },
  750|      1|			{ VIPS_FOREIGN_TIFF_RESUNIT_INCH, "VIPS_FOREIGN_TIFF_RESUNIT_INCH", "inch" },
  751|      1|			{ VIPS_FOREIGN_TIFF_RESUNIT_LAST, "VIPS_FOREIGN_TIFF_RESUNIT_LAST", "last" },
  752|      1|			{ 0, NULL, NULL }
  753|      1|		};
  754|       |
  755|      1|		GType new_type =
  756|      1|			g_enum_register_static(g_intern_static_string("VipsForeignTiffResunit"), values);
  757|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  758|      1|	}
  759|       |
  760|      1|	return (GType) gtype_id;
  761|      1|}
vips_foreign_png_filter_get_type:
  764|      1|{
  765|      1|	static gsize gtype_id = 0;
  766|       |
  767|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  768|      1|		static const GFlagsValue values[] = {
  769|      1|			{ VIPS_FOREIGN_PNG_FILTER_NONE, "VIPS_FOREIGN_PNG_FILTER_NONE", "none" },
  770|      1|			{ VIPS_FOREIGN_PNG_FILTER_SUB, "VIPS_FOREIGN_PNG_FILTER_SUB", "sub" },
  771|      1|			{ VIPS_FOREIGN_PNG_FILTER_UP, "VIPS_FOREIGN_PNG_FILTER_UP", "up" },
  772|      1|			{ VIPS_FOREIGN_PNG_FILTER_AVG, "VIPS_FOREIGN_PNG_FILTER_AVG", "avg" },
  773|      1|			{ VIPS_FOREIGN_PNG_FILTER_PAETH, "VIPS_FOREIGN_PNG_FILTER_PAETH", "paeth" },
  774|      1|			{ VIPS_FOREIGN_PNG_FILTER_ALL, "VIPS_FOREIGN_PNG_FILTER_ALL", "all" },
  775|      1|			{ 0, NULL, NULL }
  776|      1|		};
  777|       |
  778|      1|		GType new_type =
  779|      1|			g_flags_register_static(g_intern_static_string("VipsForeignPngFilter"), values);
  780|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  781|      1|	}
  782|       |
  783|      1|	return (GType) gtype_id;
  784|      1|}
vips_foreign_ppm_format_get_type:
  787|      1|{
  788|      1|	static gsize gtype_id = 0;
  789|       |
  790|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  791|      1|		static const GEnumValue values[] = {
  792|      1|			{ VIPS_FOREIGN_PPM_FORMAT_PBM, "VIPS_FOREIGN_PPM_FORMAT_PBM", "pbm" },
  793|      1|			{ VIPS_FOREIGN_PPM_FORMAT_PGM, "VIPS_FOREIGN_PPM_FORMAT_PGM", "pgm" },
  794|      1|			{ VIPS_FOREIGN_PPM_FORMAT_PPM, "VIPS_FOREIGN_PPM_FORMAT_PPM", "ppm" },
  795|      1|			{ VIPS_FOREIGN_PPM_FORMAT_PFM, "VIPS_FOREIGN_PPM_FORMAT_PFM", "pfm" },
  796|      1|			{ VIPS_FOREIGN_PPM_FORMAT_PNM, "VIPS_FOREIGN_PPM_FORMAT_PNM", "pnm" },
  797|      1|			{ VIPS_FOREIGN_PPM_FORMAT_LAST, "VIPS_FOREIGN_PPM_FORMAT_LAST", "last" },
  798|      1|			{ 0, NULL, NULL }
  799|      1|		};
  800|       |
  801|      1|		GType new_type =
  802|      1|			g_enum_register_static(g_intern_static_string("VipsForeignPpmFormat"), values);
  803|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  804|      1|	}
  805|       |
  806|      1|	return (GType) gtype_id;
  807|      1|}
vips_foreign_dz_depth_get_type:
  833|      1|{
  834|      1|	static gsize gtype_id = 0;
  835|       |
  836|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  837|      1|		static const GEnumValue values[] = {
  838|      1|			{ VIPS_FOREIGN_DZ_DEPTH_ONEPIXEL, "VIPS_FOREIGN_DZ_DEPTH_ONEPIXEL", "onepixel" },
  839|      1|			{ VIPS_FOREIGN_DZ_DEPTH_ONETILE, "VIPS_FOREIGN_DZ_DEPTH_ONETILE", "onetile" },
  840|      1|			{ VIPS_FOREIGN_DZ_DEPTH_ONE, "VIPS_FOREIGN_DZ_DEPTH_ONE", "one" },
  841|      1|			{ VIPS_FOREIGN_DZ_DEPTH_LAST, "VIPS_FOREIGN_DZ_DEPTH_LAST", "last" },
  842|      1|			{ 0, NULL, NULL }
  843|      1|		};
  844|       |
  845|      1|		GType new_type =
  846|      1|			g_enum_register_static(g_intern_static_string("VipsForeignDzDepth"), values);
  847|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  848|      1|	}
  849|       |
  850|      1|	return (GType) gtype_id;
  851|      1|}
vips_foreign_heif_compression_get_type:
  875|  14.8k|{
  876|  14.8k|	static gsize gtype_id = 0;
  877|       |
  878|  14.8k|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|  14.8k|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|  14.8k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 14.8k]
  |  |  ------------------
  |  |  249|  14.8k|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|  14.8k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|  14.8k|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|  14.8k|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|  29.6k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  14.8k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|  29.6k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|  14.8k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|  29.6k|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|  29.6k|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|  29.6k|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|  29.6k|    gapg_temp_newval;                                                        \
  |  |  |  |  131|  29.6k|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 14.8k]
  |  |  ------------------
  |  |  252|  14.8k|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|  14.8k|  }))
  ------------------
  879|      1|		static const GEnumValue values[] = {
  880|      1|			{ VIPS_FOREIGN_HEIF_COMPRESSION_HEVC, "VIPS_FOREIGN_HEIF_COMPRESSION_HEVC", "hevc" },
  881|      1|			{ VIPS_FOREIGN_HEIF_COMPRESSION_AVC, "VIPS_FOREIGN_HEIF_COMPRESSION_AVC", "avc" },
  882|      1|			{ VIPS_FOREIGN_HEIF_COMPRESSION_JPEG, "VIPS_FOREIGN_HEIF_COMPRESSION_JPEG", "jpeg" },
  883|      1|			{ VIPS_FOREIGN_HEIF_COMPRESSION_AV1, "VIPS_FOREIGN_HEIF_COMPRESSION_AV1", "av1" },
  884|      1|			{ VIPS_FOREIGN_HEIF_COMPRESSION_LAST, "VIPS_FOREIGN_HEIF_COMPRESSION_LAST", "last" },
  885|      1|			{ 0, NULL, NULL }
  886|      1|		};
  887|       |
  888|      1|		GType new_type =
  889|      1|			g_enum_register_static(g_intern_static_string("VipsForeignHeifCompression"), values);
  890|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  891|      1|	}
  892|       |
  893|  14.8k|	return (GType) gtype_id;
  894|  14.8k|}
vips_foreign_heif_encoder_get_type:
  897|      1|{
  898|      1|	static gsize gtype_id = 0;
  899|       |
  900|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  901|      1|		static const GEnumValue values[] = {
  902|      1|			{ VIPS_FOREIGN_HEIF_ENCODER_AUTO, "VIPS_FOREIGN_HEIF_ENCODER_AUTO", "auto" },
  903|      1|			{ VIPS_FOREIGN_HEIF_ENCODER_AOM, "VIPS_FOREIGN_HEIF_ENCODER_AOM", "aom" },
  904|      1|			{ VIPS_FOREIGN_HEIF_ENCODER_RAV1E, "VIPS_FOREIGN_HEIF_ENCODER_RAV1E", "rav1e" },
  905|      1|			{ VIPS_FOREIGN_HEIF_ENCODER_SVT, "VIPS_FOREIGN_HEIF_ENCODER_SVT", "svt" },
  906|      1|			{ VIPS_FOREIGN_HEIF_ENCODER_X265, "VIPS_FOREIGN_HEIF_ENCODER_X265", "x265" },
  907|      1|			{ VIPS_FOREIGN_HEIF_ENCODER_LAST, "VIPS_FOREIGN_HEIF_ENCODER_LAST", "last" },
  908|      1|			{ 0, NULL, NULL }
  909|      1|		};
  910|       |
  911|      1|		GType new_type =
  912|      1|			g_enum_register_static(g_intern_static_string("VipsForeignHeifEncoder"), values);
  913|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  914|      1|	}
  915|       |
  916|      1|	return (GType) gtype_id;
  917|      1|}
vips_demand_style_get_type:
  921|      1|{
  922|      1|	static gsize gtype_id = 0;
  923|       |
  924|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
  925|      1|		static const GEnumValue values[] = {
  926|      1|			{ VIPS_DEMAND_STYLE_ERROR, "VIPS_DEMAND_STYLE_ERROR", "error" },
  927|      1|			{ VIPS_DEMAND_STYLE_SMALLTILE, "VIPS_DEMAND_STYLE_SMALLTILE", "smalltile" },
  928|      1|			{ VIPS_DEMAND_STYLE_FATSTRIP, "VIPS_DEMAND_STYLE_FATSTRIP", "fatstrip" },
  929|      1|			{ VIPS_DEMAND_STYLE_THINSTRIP, "VIPS_DEMAND_STYLE_THINSTRIP", "thinstrip" },
  930|      1|			{ VIPS_DEMAND_STYLE_ANY, "VIPS_DEMAND_STYLE_ANY", "any" },
  931|      1|			{ 0, NULL, NULL }
  932|      1|		};
  933|       |
  934|      1|		GType new_type =
  935|      1|			g_enum_register_static(g_intern_static_string("VipsDemandStyle"), values);
  936|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
  937|      1|	}
  938|       |
  939|      1|	return (GType) gtype_id;
  940|      1|}
vips_interpretation_get_type:
  969|      5|{
  970|      5|	static gsize gtype_id = 0;
  971|       |
  972|      5|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      5|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      5|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 4]
  |  |  ------------------
  |  |  249|      5|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      5|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      5|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      5|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|     10|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      5|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|     10|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      5|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|     10|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|     10|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|     10|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|     10|    gapg_temp_newval;                                                        \
  |  |  |  |  131|     10|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 4]
  |  |  ------------------
  |  |  252|      5|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      5|  }))
  ------------------
  973|      1|		static const GEnumValue values[] = {
  974|      1|			{ VIPS_INTERPRETATION_ERROR, "VIPS_INTERPRETATION_ERROR", "error" },
  975|      1|			{ VIPS_INTERPRETATION_MULTIBAND, "VIPS_INTERPRETATION_MULTIBAND", "multiband" },
  976|      1|			{ VIPS_INTERPRETATION_B_W, "VIPS_INTERPRETATION_B_W", "b-w" },
  977|      1|			{ VIPS_INTERPRETATION_HISTOGRAM, "VIPS_INTERPRETATION_HISTOGRAM", "histogram" },
  978|      1|			{ VIPS_INTERPRETATION_XYZ, "VIPS_INTERPRETATION_XYZ", "xyz" },
  979|      1|			{ VIPS_INTERPRETATION_LAB, "VIPS_INTERPRETATION_LAB", "lab" },
  980|      1|			{ VIPS_INTERPRETATION_CMYK, "VIPS_INTERPRETATION_CMYK", "cmyk" },
  981|      1|			{ VIPS_INTERPRETATION_LABQ, "VIPS_INTERPRETATION_LABQ", "labq" },
  982|      1|			{ VIPS_INTERPRETATION_RGB, "VIPS_INTERPRETATION_RGB", "rgb" },
  983|      1|			{ VIPS_INTERPRETATION_CMC, "VIPS_INTERPRETATION_CMC", "cmc" },
  984|      1|			{ VIPS_INTERPRETATION_LCH, "VIPS_INTERPRETATION_LCH", "lch" },
  985|      1|			{ VIPS_INTERPRETATION_LABS, "VIPS_INTERPRETATION_LABS", "labs" },
  986|      1|			{ VIPS_INTERPRETATION_sRGB, "VIPS_INTERPRETATION_sRGB", "srgb" },
  987|      1|			{ VIPS_INTERPRETATION_YXY, "VIPS_INTERPRETATION_YXY", "yxy" },
  988|      1|			{ VIPS_INTERPRETATION_FOURIER, "VIPS_INTERPRETATION_FOURIER", "fourier" },
  989|      1|			{ VIPS_INTERPRETATION_RGB16, "VIPS_INTERPRETATION_RGB16", "rgb16" },
  990|      1|			{ VIPS_INTERPRETATION_GREY16, "VIPS_INTERPRETATION_GREY16", "grey16" },
  991|      1|			{ VIPS_INTERPRETATION_MATRIX, "VIPS_INTERPRETATION_MATRIX", "matrix" },
  992|      1|			{ VIPS_INTERPRETATION_scRGB, "VIPS_INTERPRETATION_scRGB", "scrgb" },
  993|      1|			{ VIPS_INTERPRETATION_HSV, "VIPS_INTERPRETATION_HSV", "hsv" },
  994|      1|			{ VIPS_INTERPRETATION_LAST, "VIPS_INTERPRETATION_LAST", "last" },
  995|      1|			{ 0, NULL, NULL }
  996|      1|		};
  997|       |
  998|      1|		GType new_type =
  999|      1|			g_enum_register_static(g_intern_static_string("VipsInterpretation"), values);
 1000|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1001|      1|	}
 1002|       |
 1003|      5|	return (GType) gtype_id;
 1004|      5|}
vips_band_format_get_type:
 1007|      4|{
 1008|      4|	static gsize gtype_id = 0;
 1009|       |
 1010|      4|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      4|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      4|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 3]
  |  |  ------------------
  |  |  249|      4|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      4|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      4|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      4|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      8|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      4|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      8|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      4|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      8|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      8|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      8|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      8|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      8|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 3]
  |  |  ------------------
  |  |  252|      4|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      4|  }))
  ------------------
 1011|      1|		static const GEnumValue values[] = {
 1012|      1|			{ VIPS_FORMAT_NOTSET, "VIPS_FORMAT_NOTSET", "notset" },
 1013|      1|			{ VIPS_FORMAT_UCHAR, "VIPS_FORMAT_UCHAR", "uchar" },
 1014|      1|			{ VIPS_FORMAT_CHAR, "VIPS_FORMAT_CHAR", "char" },
 1015|      1|			{ VIPS_FORMAT_USHORT, "VIPS_FORMAT_USHORT", "ushort" },
 1016|      1|			{ VIPS_FORMAT_SHORT, "VIPS_FORMAT_SHORT", "short" },
 1017|      1|			{ VIPS_FORMAT_UINT, "VIPS_FORMAT_UINT", "uint" },
 1018|      1|			{ VIPS_FORMAT_INT, "VIPS_FORMAT_INT", "int" },
 1019|      1|			{ VIPS_FORMAT_FLOAT, "VIPS_FORMAT_FLOAT", "float" },
 1020|      1|			{ VIPS_FORMAT_COMPLEX, "VIPS_FORMAT_COMPLEX", "complex" },
 1021|      1|			{ VIPS_FORMAT_DOUBLE, "VIPS_FORMAT_DOUBLE", "double" },
 1022|      1|			{ VIPS_FORMAT_DPCOMPLEX, "VIPS_FORMAT_DPCOMPLEX", "dpcomplex" },
 1023|      1|			{ VIPS_FORMAT_LAST, "VIPS_FORMAT_LAST", "last" },
 1024|      1|			{ 0, NULL, NULL }
 1025|      1|		};
 1026|       |
 1027|      1|		GType new_type =
 1028|      1|			g_enum_register_static(g_intern_static_string("VipsBandFormat"), values);
 1029|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1030|      1|	}
 1031|       |
 1032|      4|	return (GType) gtype_id;
 1033|      4|}
vips_coding_get_type:
 1036|      2|{
 1037|      2|	static gsize gtype_id = 0;
 1038|       |
 1039|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 1]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 1]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
 1040|      1|		static const GEnumValue values[] = {
 1041|      1|			{ VIPS_CODING_ERROR, "VIPS_CODING_ERROR", "error" },
 1042|      1|			{ VIPS_CODING_NONE, "VIPS_CODING_NONE", "none" },
 1043|      1|			{ VIPS_CODING_LABQ, "VIPS_CODING_LABQ", "labq" },
 1044|      1|			{ VIPS_CODING_RAD, "VIPS_CODING_RAD", "rad" },
 1045|      1|			{ VIPS_CODING_LAST, "VIPS_CODING_LAST", "last" },
 1046|      1|			{ 0, NULL, NULL }
 1047|      1|		};
 1048|       |
 1049|      1|		GType new_type =
 1050|      1|			g_enum_register_static(g_intern_static_string("VipsCoding"), values);
 1051|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1052|      1|	}
 1053|       |
 1054|      2|	return (GType) gtype_id;
 1055|      2|}
vips_access_get_type:
 1058|      3|{
 1059|      3|	static gsize gtype_id = 0;
 1060|       |
 1061|      3|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      3|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      3|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 2]
  |  |  ------------------
  |  |  249|      3|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      3|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      3|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      3|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      6|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      3|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      6|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      3|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      6|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      6|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      6|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      6|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      6|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 2]
  |  |  ------------------
  |  |  252|      3|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      3|  }))
  ------------------
 1062|      1|		static const GEnumValue values[] = {
 1063|      1|			{ VIPS_ACCESS_RANDOM, "VIPS_ACCESS_RANDOM", "random" },
 1064|      1|			{ VIPS_ACCESS_SEQUENTIAL, "VIPS_ACCESS_SEQUENTIAL", "sequential" },
 1065|      1|			{ VIPS_ACCESS_SEQUENTIAL_UNBUFFERED, "VIPS_ACCESS_SEQUENTIAL_UNBUFFERED", "sequential-unbuffered" },
 1066|      1|			{ VIPS_ACCESS_LAST, "VIPS_ACCESS_LAST", "last" },
 1067|      1|			{ 0, NULL, NULL }
 1068|      1|		};
 1069|       |
 1070|      1|		GType new_type =
 1071|      1|			g_enum_register_static(g_intern_static_string("VipsAccess"), values);
 1072|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1073|      1|	}
 1074|       |
 1075|      3|	return (GType) gtype_id;
 1076|      3|}
vips_operation_morphology_get_type:
 1080|      1|{
 1081|      1|	static gsize gtype_id = 0;
 1082|       |
 1083|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
 1084|      1|		static const GEnumValue values[] = {
 1085|      1|			{ VIPS_OPERATION_MORPHOLOGY_ERODE, "VIPS_OPERATION_MORPHOLOGY_ERODE", "erode" },
 1086|      1|			{ VIPS_OPERATION_MORPHOLOGY_DILATE, "VIPS_OPERATION_MORPHOLOGY_DILATE", "dilate" },
 1087|      1|			{ VIPS_OPERATION_MORPHOLOGY_LAST, "VIPS_OPERATION_MORPHOLOGY_LAST", "last" },
 1088|      1|			{ 0, NULL, NULL }
 1089|      1|		};
 1090|       |
 1091|      1|		GType new_type =
 1092|      1|			g_enum_register_static(g_intern_static_string("VipsOperationMorphology"), values);
 1093|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1094|      1|	}
 1095|       |
 1096|      1|	return (GType) gtype_id;
 1097|      1|}
vips_region_shrink_get_type:
 1155|      1|{
 1156|      1|	static gsize gtype_id = 0;
 1157|       |
 1158|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
 1159|      1|		static const GEnumValue values[] = {
 1160|      1|			{ VIPS_REGION_SHRINK_MEAN, "VIPS_REGION_SHRINK_MEAN", "mean" },
 1161|      1|			{ VIPS_REGION_SHRINK_MEDIAN, "VIPS_REGION_SHRINK_MEDIAN", "median" },
 1162|      1|			{ VIPS_REGION_SHRINK_MODE, "VIPS_REGION_SHRINK_MODE", "mode" },
 1163|      1|			{ VIPS_REGION_SHRINK_MAX, "VIPS_REGION_SHRINK_MAX", "max" },
 1164|      1|			{ VIPS_REGION_SHRINK_MIN, "VIPS_REGION_SHRINK_MIN", "min" },
 1165|      1|			{ VIPS_REGION_SHRINK_NEAREST, "VIPS_REGION_SHRINK_NEAREST", "nearest" },
 1166|      1|			{ VIPS_REGION_SHRINK_LAST, "VIPS_REGION_SHRINK_LAST", "last" },
 1167|      1|			{ 0, NULL, NULL }
 1168|      1|		};
 1169|       |
 1170|      1|		GType new_type =
 1171|      1|			g_enum_register_static(g_intern_static_string("VipsRegionShrink"), values);
 1172|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1173|      1|	}
 1174|       |
 1175|      1|	return (GType) gtype_id;
 1176|      1|}
vips_kernel_get_type:
 1180|      4|{
 1181|      4|	static gsize gtype_id = 0;
 1182|       |
 1183|      4|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      4|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      4|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 3]
  |  |  ------------------
  |  |  249|      4|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      4|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      4|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      4|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      8|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      4|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      8|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      4|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      8|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      8|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      8|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      8|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      8|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 3]
  |  |  ------------------
  |  |  252|      4|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      4|  }))
  ------------------
 1184|      1|		static const GEnumValue values[] = {
 1185|      1|			{ VIPS_KERNEL_NEAREST, "VIPS_KERNEL_NEAREST", "nearest" },
 1186|      1|			{ VIPS_KERNEL_LINEAR, "VIPS_KERNEL_LINEAR", "linear" },
 1187|      1|			{ VIPS_KERNEL_CUBIC, "VIPS_KERNEL_CUBIC", "cubic" },
 1188|      1|			{ VIPS_KERNEL_MITCHELL, "VIPS_KERNEL_MITCHELL", "mitchell" },
 1189|      1|			{ VIPS_KERNEL_LANCZOS2, "VIPS_KERNEL_LANCZOS2", "lanczos2" },
 1190|      1|			{ VIPS_KERNEL_LANCZOS3, "VIPS_KERNEL_LANCZOS3", "lanczos3" },
 1191|      1|			{ VIPS_KERNEL_MKS2013, "VIPS_KERNEL_MKS2013", "mks2013" },
 1192|      1|			{ VIPS_KERNEL_MKS2021, "VIPS_KERNEL_MKS2021", "mks2021" },
 1193|      1|			{ VIPS_KERNEL_LAST, "VIPS_KERNEL_LAST", "last" },
 1194|      1|			{ 0, NULL, NULL }
 1195|      1|		};
 1196|       |
 1197|      1|		GType new_type =
 1198|      1|			g_enum_register_static(g_intern_static_string("VipsKernel"), values);
 1199|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1200|      1|	}
 1201|       |
 1202|      4|	return (GType) gtype_id;
 1203|      4|}
vips_size_get_type:
 1206|      1|{
 1207|      1|	static gsize gtype_id = 0;
 1208|       |
 1209|      1|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 1, False: 0]
  |  |  ------------------
  |  |  249|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      1|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      1|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      2|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      2|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      2|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      2|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      2|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      2|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      2|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  252|      1|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 1, False: 0]
  |  |  ------------------
  |  |  253|      1|  }))
  ------------------
 1210|      1|		static const GEnumValue values[] = {
 1211|      1|			{ VIPS_SIZE_BOTH, "VIPS_SIZE_BOTH", "both" },
 1212|      1|			{ VIPS_SIZE_UP, "VIPS_SIZE_UP", "up" },
 1213|      1|			{ VIPS_SIZE_DOWN, "VIPS_SIZE_DOWN", "down" },
 1214|      1|			{ VIPS_SIZE_FORCE, "VIPS_SIZE_FORCE", "force" },
 1215|      1|			{ VIPS_SIZE_LAST, "VIPS_SIZE_LAST", "last" },
 1216|      1|			{ 0, NULL, NULL }
 1217|      1|		};
 1218|       |
 1219|      1|		GType new_type =
 1220|      1|			g_enum_register_static(g_intern_static_string("VipsSize"), values);
 1221|      1|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      1|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      1|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      1|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      1|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      1|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      1|  }))
  ------------------
 1222|      1|	}
 1223|       |
 1224|      1|	return (GType) gtype_id;
 1225|      1|}

vips_INT__VOID:
   60|  1.07M|{
   61|  1.07M|  typedef gint (*GMarshalFunc_INT__VOID) (gpointer data1,
   62|  1.07M|                                          gpointer data2);
   63|  1.07M|  GCClosure *cc = (GCClosure *) closure;
   64|  1.07M|  gpointer data1, data2;
   65|  1.07M|  GMarshalFunc_INT__VOID callback;
   66|  1.07M|  gint v_return;
   67|       |
   68|  1.07M|  g_return_if_fail (return_value != NULL);
  ------------------
  |  |  572|  1.07M|#define g_return_if_fail(expr) G_STMT_START{ (void)0; }G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.07M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_return_if_fail(expr) G_STMT_START{ (void)0; }G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.07M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   69|  1.07M|  g_return_if_fail (n_param_values == 1);
  ------------------
  |  |  572|  1.07M|#define g_return_if_fail(expr) G_STMT_START{ (void)0; }G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.07M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_return_if_fail(expr) G_STMT_START{ (void)0; }G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.07M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   70|       |
   71|  1.07M|  if (G_CCLOSURE_SWAP_DATA (closure))
  ------------------
  |  |   63|  1.07M|#define	G_CCLOSURE_SWAP_DATA(cclosure)	 (((GClosure*) (cclosure))->derivative_flag)
  |  |  ------------------
  |  |  |  Branch (63:41): [True: 0, False: 1.07M]
  |  |  ------------------
  ------------------
   72|      0|    {
   73|      0|      data1 = closure->data;
   74|      0|      data2 = g_value_peek_pointer (param_values + 0);
   75|      0|    }
   76|  1.07M|  else
   77|  1.07M|    {
   78|  1.07M|      data1 = g_value_peek_pointer (param_values + 0);
   79|  1.07M|      data2 = closure->data;
   80|  1.07M|    }
   81|  1.07M|  callback = (GMarshalFunc_INT__VOID) (marshal_data ? marshal_data : cc->callback);
  ------------------
  |  Branch (81:40): [True: 1.07M, False: 0]
  ------------------
   82|       |
   83|  1.07M|  v_return = callback (data1,
   84|  1.07M|                       data2);
   85|       |
   86|  1.07M|  g_value_set_int (return_value, v_return);
   87|  1.07M|}

LLVMFuzzerInitialize:
   13|      2|{
   14|      2|	if (VIPS_INIT(*argv[0]))
  ------------------
  |  |  153|      2|	(vips_version(3) - vips_version(5) != \
  |  |  ------------------
  |  |  |  Branch (153:2): [True: 0, False: 2]
  |  |  |  Branch (153:3): [True: 0, False: 2]
  |  |  ------------------
  |  |  154|      2|				VIPS_LIBRARY_CURRENT - VIPS_LIBRARY_AGE \
  |  |  ------------------
  |  |  |  |   15|      2|#define VIPS_LIBRARY_CURRENT (61)
  |  |  ------------------
  |  |               				VIPS_LIBRARY_CURRENT - VIPS_LIBRARY_AGE \
  |  |  ------------------
  |  |  |  |   17|      2|#define VIPS_LIBRARY_AGE (19)
  |  |  ------------------
  |  |  155|      2|			? ( \
  |  |  156|      0|				  g_warning("ABI mismatch"), \
  |  |  ------------------
  |  |  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  296|      0|#define G_LOG_DOMAIN    ((gchar*) 0)
  |  |  |  |  ------------------
  |  |  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  |  |  340|      0|                               __VA_ARGS__)
  |  |  ------------------
  |  |  157|      0|				  g_warning("library has ABI version %d", \
  |  |  ------------------
  |  |  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  296|      0|#define G_LOG_DOMAIN    ((gchar*) 0)
  |  |  |  |  ------------------
  |  |  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  |  |  340|      0|                               __VA_ARGS__)
  |  |  ------------------
  |  |  158|      0|					  vips_version(3) - vips_version(5)), \
  |  |  159|      0|				  g_warning("application needs ABI version %d", \
  |  |  ------------------
  |  |  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  296|      0|#define G_LOG_DOMAIN    ((gchar*) 0)
  |  |  |  |  ------------------
  |  |  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  |  |  340|      0|                               __VA_ARGS__)
  |  |  ------------------
  |  |  160|      0|					  VIPS_LIBRARY_CURRENT - VIPS_LIBRARY_AGE), \
  |  |  161|      0|				  vips_error("vips_init", "ABI mismatch"), \
  |  |  162|      0|				  -1) \
  |  |  163|      2|			: vips_init(ARGV0))
  ------------------
   15|      0|		return -1;
   16|       |
   17|      2|	vips_concurrency_set(1);
   18|       |
   19|       |#ifdef DEBUG
   20|       |	printf("available suffixes:\n");
   21|       |	GSList *suffixes = nullptr;
   22|       |	char **array = vips_foreign_get_suffixes();
   23|       |	for (int i = 0; array[i] != nullptr; i++) {
   24|       |		if (!g_slist_find_custom(suffixes, array[i],
   25|       |			(GCompareFunc) g_strcmp0)) {
   26|       |			printf("%s\n", array[i]);
   27|       |			suffixes = g_slist_append(suffixes, g_strdup(array[i]));
   28|       |		}
   29|       |
   30|       |		g_free(array[i]);
   31|       |	}
   32|       |	g_free(array);
   33|       |	g_slist_free_full(suffixes, g_free);
   34|       |#endif
   35|       |
   36|      2|	return 0;
   37|      2|}
LLVMFuzzerTestOneInput:
   41|  36.4k|{
   42|  36.4k|	VipsImage *image;
   43|  36.4k|	void *buf;
   44|  36.4k|	size_t len;
   45|       |
   46|  36.4k|	if (!(image = vips_image_new_from_buffer(data, size, "", nullptr)))
  ------------------
  |  Branch (46:6): [True: 13.5k, False: 22.8k]
  ------------------
   47|  13.5k|		return 0;
   48|       |
   49|  22.8k|	if (image->Xsize > 100 ||
  ------------------
  |  Branch (49:6): [True: 752, False: 22.0k]
  ------------------
   50|  22.8k|		image->Ysize > 100 ||
  ------------------
  |  Branch (50:3): [True: 425, False: 21.6k]
  ------------------
   51|  22.8k|		image->Bands > 4) {
  ------------------
  |  Branch (51:3): [True: 30, False: 21.6k]
  ------------------
   52|  1.20k|		g_object_unref(image);
   53|  1.20k|		return 0;
   54|  1.20k|	}
   55|       |
   56|  21.6k|	if (vips_image_write_to_buffer(image, SAVE_SUFFIX, &buf, &len, nullptr)) {
  ------------------
  |  Branch (56:6): [True: 13.2k, False: 8.38k]
  ------------------
   57|  13.2k|		g_object_unref(image);
   58|  13.2k|		return 0;
   59|  13.2k|	}
   60|       |
   61|  8.38k|	g_free(buf);
   62|  8.38k|	g_object_unref(image);
   63|       |
   64|  8.38k|	return 0;
   65|  21.6k|}

abs.c:vips_abs_class_init:
  195|      1|{
  196|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  197|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  198|       |
  199|      1|	object_class->nickname = "abs";
  200|      1|	object_class->description = _("absolute value of an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  201|      1|	object_class->build = vips_abs_build;
  202|       |
  203|      1|	aclass->process_line = vips_abs_buffer;
  204|       |
  205|      1|	vips_arithmetic_set_format_table(aclass, vips_abs_format_table);
  206|      1|}

add.c:vips_add_class_init:
  173|      1|{
  174|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  175|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  176|       |
  177|      1|	object_class->nickname = "add";
  178|      1|	object_class->description = _("add two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  179|       |
  180|      1|	aclass->process_line = add_buffer;
  181|       |
  182|      1|	vips_arithmetic_set_format_table(aclass, vips_add_format_table);
  183|      1|}

vips__formatalike_vec:
  320|  2.67k|{
  321|  2.67k|	int i;
  322|  2.67k|	VipsBandFormat format;
  323|       |
  324|  2.67k|	g_assert(n >= 1);
  ------------------
  |  |  166|  2.67k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  2.67k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.67k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  325|       |
  326|  2.67k|	format = in[0]->BandFmt;
  327|  4.17k|	for (i = 1; i < n; i++)
  ------------------
  |  Branch (327:14): [True: 1.50k, False: 2.67k]
  ------------------
  328|  1.50k|		format = vips_format_common(format, in[i]->BandFmt);
  329|       |
  330|  6.84k|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (330:14): [True: 4.17k, False: 2.67k]
  ------------------
  331|  4.17k|		if (in[i]->BandFmt == format) {
  ------------------
  |  Branch (331:7): [True: 4.17k, False: 0]
  ------------------
  332|       |			/* Already in the right format ... just copy the image
  333|       |			 * pointer and add a ref.
  334|       |			 */
  335|  4.17k|			out[i] = in[i];
  336|  4.17k|			g_object_ref(in[i]);
  337|  4.17k|		}
  338|      0|		else {
  339|      0|			if (vips_cast(in[i], &out[i], format, NULL))
  ------------------
  |  Branch (339:8): [True: 0, False: 0]
  ------------------
  340|      0|				return -1;
  341|      0|		}
  342|       |
  343|  2.67k|	return 0;
  344|  2.67k|}
vips__sizealike_vec:
  348|  2.67k|{
  349|  2.67k|	int i;
  350|  2.67k|	int width_max;
  351|  2.67k|	int height_max;
  352|       |
  353|  2.67k|	g_assert(n >= 1);
  ------------------
  |  |  166|  2.67k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  2.67k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.67k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  354|       |
  355|  2.67k|	width_max = in[0]->Xsize;
  356|  2.67k|	height_max = in[0]->Ysize;
  357|  4.17k|	for (i = 1; i < n; i++) {
  ------------------
  |  Branch (357:14): [True: 1.50k, False: 2.67k]
  ------------------
  358|  1.50k|		width_max = VIPS_MAX(width_max, in[i]->Xsize);
  ------------------
  |  |   54|  1.50k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 1.50k]
  |  |  ------------------
  ------------------
  359|  1.50k|		height_max = VIPS_MAX(height_max, in[i]->Ysize);
  ------------------
  |  |   54|  1.50k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 1.50k]
  |  |  ------------------
  ------------------
  360|  1.50k|	}
  361|       |
  362|  6.84k|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (362:14): [True: 4.17k, False: 2.67k]
  ------------------
  363|  4.17k|		if (in[i]->Xsize == width_max &&
  ------------------
  |  Branch (363:7): [True: 4.17k, False: 0]
  ------------------
  364|  4.17k|			in[i]->Ysize == height_max) {
  ------------------
  |  Branch (364:4): [True: 4.17k, False: 0]
  ------------------
  365|       |			/* Already the right size ... just copy the image
  366|       |			 * pointer and add a ref.
  367|       |			 */
  368|  4.17k|			out[i] = in[i];
  369|  4.17k|			g_object_ref(in[i]);
  370|  4.17k|		}
  371|      0|		else {
  372|      0|			if (vips_embed(in[i], &out[i],
  ------------------
  |  Branch (372:8): [True: 0, False: 0]
  ------------------
  373|      0|					0, 0, width_max, height_max, NULL))
  374|      0|				return -1;
  375|      0|		}
  376|       |
  377|  2.67k|	return 0;
  378|  2.67k|}
vips__bandalike_vec:
  420|      2|{
  421|      2|	int i;
  422|      2|	int max_bands;
  423|      2|	VipsInterpretation interpretation;
  424|       |
  425|      2|	g_assert(n >= 1);
  ------------------
  |  |  166|      2|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  426|       |
  427|       |	/* We try to set the interpretation of the output images from the
  428|       |	 * interpretation of the n-band input. For example, if we are matching
  429|       |	 * a set of BW images to an RGB image, we want the BW images to be
  430|       |	 * tagged as RGB.
  431|       |	 */
  432|      2|	max_bands = base_bands;
  433|      2|	interpretation = VIPS_INTERPRETATION_ERROR;
  434|      4|	for (i = 0; i < n; i++) {
  ------------------
  |  Branch (434:14): [True: 2, False: 2]
  ------------------
  435|       |		/* >= so we can pick up interpretation if base_bands is equal
  436|       |		 * to the number of bands of the largest image.
  437|       |		 */
  438|      2|		if (in[i]->Bands >= max_bands) {
  ------------------
  |  Branch (438:7): [True: 2, False: 0]
  ------------------
  439|      2|			max_bands = in[i]->Bands;
  440|      2|			interpretation = in[i]->Type;
  441|      2|		}
  442|      2|	}
  443|       |
  444|      4|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (444:14): [True: 2, False: 2]
  ------------------
  445|      2|		if (in[i]->Bands == max_bands) {
  ------------------
  |  Branch (445:7): [True: 2, False: 0]
  ------------------
  446|       |			/* Already the right number of bands ... just copy the
  447|       |			 * image pointer and add a ref.
  448|       |			 */
  449|      2|			out[i] = in[i];
  450|      2|			g_object_ref(in[i]);
  451|      2|		}
  452|      0|		else {
  453|      0|			if (vips__bandup(domain, in[i], &out[i], max_bands))
  ------------------
  |  Branch (453:8): [True: 0, False: 0]
  ------------------
  454|      0|				return -1;
  455|       |
  456|      0|			if (interpretation != VIPS_INTERPRETATION_ERROR)
  ------------------
  |  Branch (456:8): [True: 0, False: 0]
  ------------------
  457|      0|				out[i]->Type = interpretation;
  458|      0|		}
  459|       |
  460|      2|	return 0;
  461|      2|}
vips_arithmetic_set_format_table:
  747|     26|{
  748|     26|	g_assert(!class->format_table);
  ------------------
  |  |  166|     26|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|     26|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     26|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|       |
  750|     26|	class->format_table = format_table;
  751|     26|}
vips_arithmetic_operation_init:
  758|      2|{
  759|      2|	extern GType vips_add_get_type(void);
  760|      2|	extern GType vips_clamp_get_type(void);
  761|      2|	extern GType vips_minpair_get_type(void);
  762|      2|	extern GType vips_maxpair_get_type(void);
  763|      2|	extern GType vips_sum_get_type(void);
  764|      2|	extern GType vips_subtract_get_type(void);
  765|      2|	extern GType vips_multiply_get_type(void);
  766|      2|	extern GType vips_divide_get_type(void);
  767|      2|	extern GType vips_invert_get_type(void);
  768|      2|	extern GType vips_avg_get_type(void);
  769|      2|	extern GType vips_min_get_type(void);
  770|      2|	extern GType vips_max_get_type(void);
  771|      2|	extern GType vips_deviate_get_type(void);
  772|      2|	extern GType vips_linear_get_type(void);
  773|      2|	extern GType vips_math_get_type(void);
  774|      2|	extern GType vips_abs_get_type(void);
  775|      2|	extern GType vips_sign_get_type(void);
  776|      2|	extern GType vips_stats_get_type(void);
  777|      2|	extern GType vips_hist_find_get_type(void);
  778|      2|	extern GType vips_hist_find_ndim_get_type(void);
  779|      2|	extern GType vips_hist_find_indexed_get_type(void);
  780|      2|	extern GType vips_hough_line_get_type(void);
  781|      2|	extern GType vips_hough_circle_get_type(void);
  782|      2|	extern GType vips_project_get_type(void);
  783|      2|	extern GType vips_profile_get_type(void);
  784|      2|	extern GType vips_measure_get_type(void);
  785|      2|	extern GType vips_getpoint_get_type(void);
  786|      2|	extern GType vips_round_get_type(void);
  787|      2|	extern GType vips_relational_get_type(void);
  788|      2|	extern GType vips_relational_const_get_type(void);
  789|      2|	extern GType vips_remainder_get_type(void);
  790|      2|	extern GType vips_remainder_const_get_type(void);
  791|      2|	extern GType vips_boolean_get_type(void);
  792|      2|	extern GType vips_boolean_const_get_type(void);
  793|      2|	extern GType vips_math2_get_type(void);
  794|      2|	extern GType vips_math2_const_get_type(void);
  795|      2|	extern GType vips_complex_get_type(void);
  796|      2|	extern GType vips_complex2_get_type(void);
  797|      2|	extern GType vips_complexget_get_type(void);
  798|      2|	extern GType vips_complexform_get_type(void);
  799|      2|	extern GType vips_find_trim_get_type(void);
  800|       |
  801|      2|	vips_add_get_type();
  802|      2|	vips_clamp_get_type();
  803|      2|	vips_minpair_get_type();
  804|      2|	vips_maxpair_get_type();
  805|      2|	vips_sum_get_type();
  806|      2|	vips_subtract_get_type();
  807|      2|	vips_multiply_get_type();
  808|      2|	vips_divide_get_type();
  809|      2|	vips_invert_get_type();
  810|      2|	vips_avg_get_type();
  811|      2|	vips_min_get_type();
  812|      2|	vips_max_get_type();
  813|      2|	vips_deviate_get_type();
  814|      2|	vips_linear_get_type();
  815|      2|	vips_math_get_type();
  816|      2|	vips_abs_get_type();
  817|      2|	vips_sign_get_type();
  818|      2|	vips_stats_get_type();
  819|      2|	vips_hist_find_get_type();
  820|      2|	vips_hist_find_ndim_get_type();
  821|      2|	vips_hist_find_indexed_get_type();
  822|      2|	vips_hough_line_get_type();
  823|      2|	vips_hough_circle_get_type();
  824|      2|	vips_project_get_type();
  825|      2|	vips_profile_get_type();
  826|      2|	vips_measure_get_type();
  827|      2|	vips_getpoint_get_type();
  828|      2|	vips_round_get_type();
  829|      2|	vips_relational_get_type();
  830|      2|	vips_relational_const_get_type();
  831|      2|	vips_remainder_get_type();
  832|      2|	vips_remainder_const_get_type();
  833|      2|	vips_boolean_get_type();
  834|      2|	vips_boolean_const_get_type();
  835|      2|	vips_math2_get_type();
  836|      2|	vips_math2_const_get_type();
  837|      2|	vips_complex_get_type();
  838|      2|	vips_complex2_get_type();
  839|      2|	vips_complexget_get_type();
  840|      2|	vips_complexform_get_type();
  841|      2|	vips_find_trim_get_type();
  842|      2|}
arithmetic.c:vips_arithmetic_class_init:
  716|      1|{
  717|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  718|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  719|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  720|       |
  721|      1|	gobject_class->set_property = vips_object_set_property;
  722|      1|	gobject_class->get_property = vips_object_get_property;
  723|       |
  724|      1|	vobject_class->nickname = "arithmetic";
  725|      1|	vobject_class->description = _("arithmetic operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  726|      1|	vobject_class->build = vips_arithmetic_build;
  727|       |
  728|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  729|       |
  730|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  731|      1|		_("Output"),
  732|      1|		_("Output image"),
  733|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  734|      1|		G_STRUCT_OFFSET(VipsArithmetic, out));
  735|      1|}
arithmetic.c:vips_arithmetic_build:
  644|      2|{
  645|      2|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|      2|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|      2|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|      2|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  646|      2|	VipsArithmetic *arithmetic = VIPS_ARITHMETIC(object);
  ------------------
  |  |   42|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|      2|		VIPS_TYPE_ARITHMETIC, VipsArithmetic))
  ------------------
  647|      2|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_GET_CLASS(arithmetic);
  ------------------
  |  |   52|      2|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|      2|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|      2|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|      2|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  648|       |
  649|      2|	VipsImage **decode;
  650|      2|	VipsImage **format;
  651|      2|	VipsImage **band;
  652|      2|	VipsImage **size;
  653|      2|	int i;
  654|       |
  655|       |#ifdef DEBUG
  656|       |	printf("vips_arithmetic_build: ");
  657|       |	vips_object_print_name(object);
  658|       |	printf("\n");
  659|       |#endif /*DEBUG*/
  660|       |
  661|      2|	if (VIPS_OBJECT_CLASS(vips_arithmetic_parent_class)->build(object))
  ------------------
  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (661:6): [True: 0, False: 2]
  ------------------
  662|      0|		return -1;
  663|       |
  664|      2|	g_object_set(arithmetic, "out", vips_image_new(), NULL);
  665|       |
  666|      2|	decode = (VipsImage **)
  667|      2|		vips_object_local_array(object, arithmetic->n);
  668|      2|	format = (VipsImage **)
  669|      2|		vips_object_local_array(object, arithmetic->n);
  670|      2|	band = (VipsImage **)
  671|      2|		vips_object_local_array(object, arithmetic->n);
  672|      2|	size = (VipsImage **)
  673|      2|		vips_object_local_array(object, arithmetic->n);
  674|       |
  675|       |	/* Decode RAD/LABQ etc.
  676|       |	 */
  677|      4|	for (i = 0; i < arithmetic->n; i++)
  ------------------
  |  Branch (677:14): [True: 2, False: 2]
  ------------------
  678|      2|		if (vips_image_decode(arithmetic->in[i], &decode[i]))
  ------------------
  |  Branch (678:7): [True: 0, False: 2]
  ------------------
  679|      0|			return -1;
  680|       |
  681|       |	/* Cast our input images up to a common format, bands and size.
  682|       |	 */
  683|      2|	if (vips__formatalike_vec(decode, format, arithmetic->n) ||
  ------------------
  |  Branch (683:6): [True: 0, False: 2]
  ------------------
  684|      2|		vips__bandalike_vec(class->nickname,
  ------------------
  |  Branch (684:3): [True: 0, False: 2]
  ------------------
  685|      2|			format, band, arithmetic->n, arithmetic->base_bands) ||
  686|      2|		vips__sizealike_vec(band, size, arithmetic->n))
  ------------------
  |  Branch (686:3): [True: 0, False: 2]
  ------------------
  687|      0|		return -1;
  688|       |
  689|       |	/* Keep a copy of the processed images here for subclasses.
  690|       |	 */
  691|      2|	arithmetic->ready = size;
  692|       |
  693|      2|	if (vips_image_pipeline_array(arithmetic->out,
  ------------------
  |  Branch (693:6): [True: 0, False: 2]
  ------------------
  694|      2|			VIPS_DEMAND_STYLE_THINSTRIP, arithmetic->ready))
  695|      0|		return -1;
  696|       |
  697|      2|	arithmetic->out->Bands = arithmetic->ready[0]->Bands;
  698|      2|	if (arithmetic->format != VIPS_FORMAT_NOTSET)
  ------------------
  |  Branch (698:6): [True: 0, False: 2]
  ------------------
  699|      0|		arithmetic->out->BandFmt = arithmetic->format;
  700|      2|	else
  701|      2|		arithmetic->out->BandFmt =
  702|      2|			aclass->format_table[arithmetic->ready[0]->BandFmt];
  703|       |
  704|      2|	if (vips_image_generate(arithmetic->out,
  ------------------
  |  Branch (704:6): [True: 0, False: 2]
  ------------------
  705|      2|			vips_arithmetic_start,
  706|      2|			vips_arithmetic_gen,
  707|      2|			vips_arithmetic_stop,
  708|      2|			arithmetic->ready, arithmetic))
  709|      0|		return -1;
  710|       |
  711|      2|	return 0;
  712|      2|}
arithmetic.c:vips_arithmetic_start:
  557|      2|{
  558|      2|	VipsImage **in = (VipsImage **) a;
  559|      2|	VipsArithmetic *arithmetic = (VipsArithmetic *) b;
  560|       |
  561|      2|	VipsArithmeticSequence *seq;
  562|      2|	int i, n;
  563|       |
  564|      2|	if (!(seq = VIPS_NEW(NULL, VipsArithmeticSequence)))
  ------------------
  |  |   70|      2|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|      2|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (564:6): [True: 0, False: 2]
  ------------------
  565|      0|		return NULL;
  566|       |
  567|      2|	seq->arithmetic = arithmetic;
  568|      2|	seq->ir = NULL;
  569|      2|	seq->p = NULL;
  570|       |
  571|       |	/* How many images?
  572|       |	 */
  573|      4|	for (n = 0; in[n]; n++)
  ------------------
  |  Branch (573:14): [True: 2, False: 2]
  ------------------
  574|      2|		;
  575|       |
  576|       |	/* Allocate space for region array.
  577|       |	 */
  578|      2|	if (!(seq->ir = VIPS_ARRAY(NULL, n + 1, VipsRegion *))) {
  ------------------
  |  |   72|      2|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|      2|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (578:6): [True: 0, False: 2]
  ------------------
  579|      0|		vips_arithmetic_stop(seq, NULL, NULL);
  580|      0|		return NULL;
  581|      0|	}
  582|       |
  583|       |	/* Create a set of regions.
  584|       |	 */
  585|      4|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (585:14): [True: 2, False: 2]
  ------------------
  586|      2|		if (!(seq->ir[i] = vips_region_new(in[i]))) {
  ------------------
  |  Branch (586:7): [True: 0, False: 2]
  ------------------
  587|      0|			vips_arithmetic_stop(seq, NULL, NULL);
  588|      0|			return NULL;
  589|      0|		}
  590|      2|	seq->ir[n] = NULL;
  591|       |
  592|       |	/* Input pointers.
  593|       |	 */
  594|      2|	if (!(seq->p = VIPS_ARRAY(NULL, n + 1, VipsPel *))) {
  ------------------
  |  |   72|      2|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|      2|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (594:6): [True: 0, False: 2]
  ------------------
  595|      0|		vips_arithmetic_stop(seq, NULL, NULL);
  596|      0|		return NULL;
  597|      0|	}
  598|       |
  599|      2|	return seq;
  600|      2|}
arithmetic.c:vips_arithmetic_gen:
  605|      2|{
  606|      2|	VipsArithmeticSequence *seq = (VipsArithmeticSequence *) vseq;
  607|      2|	VipsRegion **ir = seq->ir;
  608|      2|	VipsArithmetic *arithmetic = VIPS_ARITHMETIC(b);
  ------------------
  |  |   42|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|      2|		VIPS_TYPE_ARITHMETIC, VipsArithmetic))
  ------------------
  609|      2|	VipsArithmeticClass *class = VIPS_ARITHMETIC_GET_CLASS(arithmetic);
  ------------------
  |  |   52|      2|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|      2|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|      2|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|      2|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  610|      2|	VipsRect *r = &out_region->valid;
  611|       |
  612|      2|	VipsPel *q;
  613|      2|	int i, y;
  614|       |
  615|       |	/* Prepare all input regions and make buffer pointers.
  616|       |	 */
  617|      2|	if (vips_reorder_prepare_many(out_region->im, ir, r))
  ------------------
  |  Branch (617:6): [True: 0, False: 2]
  ------------------
  618|      0|		return -1;
  619|      4|	for (i = 0; ir[i]; i++)
  ------------------
  |  Branch (619:14): [True: 2, False: 2]
  ------------------
  620|      2|		seq->p[i] = (VipsPel *)
  621|      2|			VIPS_REGION_ADDR(ir[i], r->left, r->top);
  ------------------
  |  |  227|      4|	((R)->data + \
  |  |  228|      4|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|      2|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|      4|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|      2|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|      2|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|      2|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  622|      2|	seq->p[i] = NULL;
  623|      2|	q = (VipsPel *) VIPS_REGION_ADDR(out_region, r->left, r->top);
  ------------------
  |  |  227|      2|	((R)->data + \
  |  |  228|      2|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|      2|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|      2|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|      2|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|      2|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|      2|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  624|       |
  625|      2|	VIPS_GATE_START("vips_arithmetic_gen: work");
  ------------------
  |  |   41|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      2|	{ \
  |  |   43|      2|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 2]
  |  |  ------------------
  |  |   44|      2|			vips__thread_gate_start(NAME); \
  |  |   45|      2|	} \
  |  |   46|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  626|       |
  627|      4|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (627:14): [True: 2, False: 2]
  ------------------
  628|      2|		class->process_line(arithmetic, q, seq->p, r->width);
  629|       |
  630|      4|		for (i = 0; ir[i]; i++)
  ------------------
  |  Branch (630:15): [True: 2, False: 2]
  ------------------
  631|      2|			seq->p[i] += VIPS_REGION_LSKIP(ir[i]);
  ------------------
  |  |  195|      2|	((size_t) ((R)->bpl))
  ------------------
  632|      2|		q += VIPS_REGION_LSKIP(out_region);
  ------------------
  |  |  195|      2|	((size_t) ((R)->bpl))
  ------------------
  633|      2|	}
  634|       |
  635|      2|	VIPS_GATE_STOP("vips_arithmetic_gen: work");
  ------------------
  |  |   49|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|      2|	{ \
  |  |   51|      2|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 2]
  |  |  ------------------
  |  |   52|      2|			vips__thread_gate_stop(NAME); \
  |  |   53|      2|	} \
  |  |   54|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  636|       |
  637|      2|	VIPS_COUNT_PIXELS(out_region, VIPS_OBJECT_CLASS(class)->nickname);
  ------------------
  |  |  189|      2|#define VIPS_COUNT_PIXELS(R, N) vips__region_count_pixels(R, N)
  ------------------
  638|       |
  639|      2|	return 0;
  640|      2|}
arithmetic.c:vips_arithmetic_stop:
  537|      2|{
  538|      2|	VipsArithmeticSequence *seq = (VipsArithmeticSequence *) vseq;
  539|       |
  540|      2|	if (seq->ir) {
  ------------------
  |  Branch (540:6): [True: 2, False: 0]
  ------------------
  541|      2|		int i;
  542|       |
  543|      4|		for (i = 0; seq->ir[i]; i++)
  ------------------
  |  Branch (543:15): [True: 2, False: 2]
  ------------------
  544|      2|			VIPS_UNREF(seq->ir[i]);
  ------------------
  |  |   57|      2|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      2|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      2|	{ \
  |  |  |  |   43|      2|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      2|			(void) F((S)); \
  |  |  |  |   45|      2|			(S) = 0; \
  |  |  |  |   46|      2|		} \
  |  |  |  |   47|      2|	} \
  |  |  |  |   48|      2|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  545|      2|		VIPS_FREE(seq->ir);
  ------------------
  |  |   50|      2|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|      2|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      2|	{ \
  |  |  |  |   43|      2|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      2|			(void) F((S)); \
  |  |  |  |   45|      2|			(S) = 0; \
  |  |  |  |   46|      2|		} \
  |  |  |  |   47|      2|	} \
  |  |  |  |   48|      2|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  546|      2|	}
  547|       |
  548|      2|	VIPS_FREE(seq->p);
  ------------------
  |  |   50|      2|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|      2|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      2|	{ \
  |  |  |  |   43|      2|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      2|			(void) F((S)); \
  |  |  |  |   45|      2|			(S) = 0; \
  |  |  |  |   46|      2|		} \
  |  |  |  |   47|      2|	} \
  |  |  |  |   48|      2|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|       |
  550|      2|	VIPS_FREE(seq);
  ------------------
  |  |   50|      2|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|      2|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      2|	{ \
  |  |  |  |   43|      2|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      2|			(void) F((S)); \
  |  |  |  |   45|      2|			(S) = 0; \
  |  |  |  |   46|      2|		} \
  |  |  |  |   47|      2|	} \
  |  |  |  |   48|      2|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  551|       |
  552|      2|	return 0;
  553|      2|}
arithmetic.c:vips_arithmetic_init:
  739|      2|{
  740|      2|	arithmetic->base_bands = 1;
  741|      2|	arithmetic->format = VIPS_FORMAT_NOTSET;
  742|      2|}
arithmetic.c:vips_format_common:
  297|  1.50k|{
  298|  1.50k|	if (vips_band_format_iscomplex(a) ||
  ------------------
  |  Branch (298:6): [True: 0, False: 1.50k]
  ------------------
  299|  1.50k|		vips_band_format_iscomplex(b)) {
  ------------------
  |  Branch (299:3): [True: 0, False: 1.50k]
  ------------------
  300|      0|		if (a == VIPS_FORMAT_DPCOMPLEX ||
  ------------------
  |  Branch (300:7): [True: 0, False: 0]
  ------------------
  301|      0|			b == VIPS_FORMAT_DPCOMPLEX)
  ------------------
  |  Branch (301:4): [True: 0, False: 0]
  ------------------
  302|      0|			return VIPS_FORMAT_DPCOMPLEX;
  303|      0|		else
  304|      0|			return VIPS_FORMAT_COMPLEX;
  305|      0|	}
  306|  1.50k|	else if (vips_band_format_isfloat(a) ||
  ------------------
  |  Branch (306:11): [True: 480, False: 1.02k]
  ------------------
  307|  1.50k|		vips_band_format_isfloat(b)) {
  ------------------
  |  Branch (307:3): [True: 0, False: 1.02k]
  ------------------
  308|    480|		if (a == VIPS_FORMAT_DOUBLE ||
  ------------------
  |  Branch (308:7): [True: 0, False: 480]
  ------------------
  309|    480|			b == VIPS_FORMAT_DOUBLE)
  ------------------
  |  Branch (309:4): [True: 0, False: 480]
  ------------------
  310|      0|			return VIPS_FORMAT_DOUBLE;
  311|    480|		else
  312|    480|			return VIPS_FORMAT_FLOAT;
  313|    480|	}
  314|  1.02k|	else
  315|  1.02k|		return format_largest[a][b];
  316|  1.50k|}

avg.c:vips_avg_class_init:
  218|      1|{
  219|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  220|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  221|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  222|       |
  223|      1|	gobject_class->set_property = vips_object_set_property;
  224|      1|	gobject_class->get_property = vips_object_get_property;
  225|       |
  226|      1|	object_class->nickname = "avg";
  227|      1|	object_class->description = _("find image average");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  228|      1|	object_class->build = vips_avg_build;
  229|       |
  230|      1|	sclass->start = vips_avg_start;
  231|      1|	sclass->scan = vips_avg_scan;
  232|      1|	sclass->stop = vips_avg_stop;
  233|       |
  234|      1|	VIPS_ARG_DOUBLE(class, "out", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  235|      1|		_("Output"),
  236|      1|		_("Output value"),
  237|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  238|      1|		G_STRUCT_OFFSET(VipsAvg, out),
  239|      1|		-INFINITY, INFINITY, 0.0);
  240|      1|}

binary.c:vips_binary_class_init:
   81|      1|{
   82|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   83|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   84|       |
   85|      1|	gobject_class->set_property = vips_object_set_property;
   86|      1|	gobject_class->get_property = vips_object_get_property;
   87|       |
   88|      1|	vobject_class->nickname = "binary";
   89|      1|	vobject_class->description = _("binary operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   90|      1|	vobject_class->build = vips_binary_build;
   91|       |
   92|       |	/* Create properties.
   93|       |	 */
   94|       |
   95|      1|	VIPS_ARG_IMAGE(class, "left", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
   96|      1|		_("Left"),
   97|      1|		_("Left-hand image argument"),
   98|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   99|      1|		G_STRUCT_OFFSET(VipsBinary, left));
  100|       |
  101|      1|	VIPS_ARG_IMAGE(class, "right", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  102|      1|		_("Right"),
  103|      1|		_("Right-hand image argument"),
  104|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  105|      1|		G_STRUCT_OFFSET(VipsBinary, right));
  106|      1|}

boolean.c:vips_boolean_class_init:
  260|      1|{
  261|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  262|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  263|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  264|       |
  265|      1|	gobject_class->set_property = vips_object_set_property;
  266|      1|	gobject_class->get_property = vips_object_get_property;
  267|       |
  268|      1|	object_class->nickname = "boolean";
  269|      1|	object_class->description = _("boolean operation on two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  270|      1|	object_class->build = vips_boolean_build;
  271|       |
  272|      1|	aclass->process_line = vips_boolean_buffer;
  273|       |
  274|      1|	vips_arithmetic_set_format_table(aclass, vips_boolean_format_table);
  275|       |
  276|      1|	VIPS_ARG_ENUM(class, "boolean", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  277|      1|		_("Operation"),
  278|      1|		_("Boolean to perform"),
  279|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  280|      1|		G_STRUCT_OFFSET(VipsBoolean, operation),
  281|      1|		VIPS_TYPE_OPERATION_BOOLEAN,
  282|      1|		VIPS_OPERATION_BOOLEAN_AND);
  283|      1|}
boolean.c:vips_boolean_const_class_init:
  559|      1|{
  560|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  561|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  562|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  563|       |
  564|      1|	gobject_class->set_property = vips_object_set_property;
  565|      1|	gobject_class->get_property = vips_object_get_property;
  566|       |
  567|      1|	object_class->nickname = "boolean_const";
  568|      1|	object_class->description =
  569|      1|		_("boolean operations against a constant");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  570|      1|	object_class->build = vips_boolean_const_build;
  571|       |
  572|      1|	aclass->process_line = vips_boolean_const_buffer;
  573|       |
  574|      1|	vips_arithmetic_set_format_table(aclass, vips_boolean_format_table);
  575|       |
  576|      1|	VIPS_ARG_ENUM(class, "boolean", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  577|      1|		_("Operation"),
  578|      1|		_("Boolean to perform"),
  579|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  580|      1|		G_STRUCT_OFFSET(VipsBooleanConst, operation),
  581|      1|		VIPS_TYPE_OPERATION_BOOLEAN,
  582|      1|		VIPS_OPERATION_BOOLEAN_AND);
  583|      1|}

clamp.c:vips_clamp_class_init:
  146|      1|{
  147|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  148|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  149|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  150|       |
  151|      1|	gobject_class->set_property = vips_object_set_property;
  152|      1|	gobject_class->get_property = vips_object_get_property;
  153|       |
  154|      1|	object_class->nickname = "clamp";
  155|      1|	object_class->description = _("clamp values of an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  156|       |
  157|      1|	aclass->process_line = vips_clamp_buffer;
  158|       |
  159|      1|	vips_arithmetic_set_format_table(aclass, vips_clamp_format_table);
  160|       |
  161|      1|	VIPS_ARG_DOUBLE(class, "min", 10,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  162|      1|		_("Min"),
  163|      1|		_("Minimum value"),
  164|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  165|      1|		G_STRUCT_OFFSET(VipsClamp, min),
  166|      1|		-INFINITY, INFINITY, 0.0);
  167|       |
  168|      1|	VIPS_ARG_DOUBLE(class, "max", 11,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  169|      1|		_("Max"),
  170|      1|		_("Maximum value"),
  171|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  172|      1|		G_STRUCT_OFFSET(VipsClamp, max),
  173|      1|		-INFINITY, INFINITY, 1.0);
  174|      1|}

complex.c:vips_complex_class_init:
  241|      1|{
  242|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  244|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  245|       |
  246|      1|	gobject_class->set_property = vips_object_set_property;
  247|      1|	gobject_class->get_property = vips_object_get_property;
  248|       |
  249|      1|	object_class->nickname = "complex";
  250|      1|	object_class->description =
  251|      1|		_("perform a complex operation on an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  252|       |
  253|      1|	aclass->process_line = vips_complex_buffer;
  254|       |
  255|      1|	vips_arithmetic_set_format_table(aclass, vips_complex_format_table);
  256|       |
  257|      1|	VIPS_ARG_ENUM(class, "cmplx", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  258|      1|		_("Operation"),
  259|      1|		_("Complex to perform"),
  260|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  261|      1|		G_STRUCT_OFFSET(VipsComplex, cmplx),
  262|      1|		VIPS_TYPE_OPERATION_COMPLEX, VIPS_OPERATION_COMPLEX_POLAR);
  263|      1|}
complex.c:vips_complex2_class_init:
  521|      1|{
  522|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  523|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  524|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  525|       |
  526|      1|	gobject_class->set_property = vips_object_set_property;
  527|      1|	gobject_class->get_property = vips_object_get_property;
  528|       |
  529|      1|	object_class->nickname = "complex2";
  530|      1|	object_class->description =
  531|      1|		_("complex binary operations on two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  532|       |
  533|      1|	aclass->process_line = vips_complex2_buffer;
  534|       |
  535|      1|	vips_arithmetic_set_format_table(aclass, vips_complex2_format_table);
  536|       |
  537|      1|	VIPS_ARG_ENUM(class, "cmplx", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  538|      1|		_("Operation"),
  539|      1|		_("Binary complex operation to perform"),
  540|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  541|      1|		G_STRUCT_OFFSET(VipsComplex2, cmplx),
  542|      1|		VIPS_TYPE_OPERATION_COMPLEX2,
  543|      1|		VIPS_OPERATION_COMPLEX2_CROSS_PHASE);
  544|      1|}
complex.c:vips_complexget_class_init:
  753|      1|{
  754|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  755|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  756|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  757|       |
  758|      1|	gobject_class->set_property = vips_object_set_property;
  759|      1|	gobject_class->get_property = vips_object_get_property;
  760|       |
  761|      1|	object_class->nickname = "complexget";
  762|      1|	object_class->description = _("get a component from a complex image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  763|      1|	object_class->build = vips_complexget_build;
  764|       |
  765|      1|	aclass->process_line = vips_complexget_buffer;
  766|       |
  767|      1|	vips_arithmetic_set_format_table(aclass,
  768|      1|		vips_complexget_format_table);
  769|       |
  770|      1|	VIPS_ARG_ENUM(class, "get", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  771|      1|		_("Operation"),
  772|      1|		_("Complex to perform"),
  773|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  774|      1|		G_STRUCT_OFFSET(VipsComplexget, get),
  775|      1|		VIPS_TYPE_OPERATION_COMPLEXGET,
  776|      1|		VIPS_OPERATION_COMPLEXGET_REAL);
  777|      1|}
complex.c:vips_complexform_class_init:
  972|      1|{
  973|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  974|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  975|       |
  976|      1|	object_class->nickname = "complexform";
  977|      1|	object_class->description =
  978|      1|		_("form a complex image from two real images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  979|      1|	object_class->build = vips_complexform_build;
  980|       |
  981|      1|	aclass->process_line = vips_complexform_buffer;
  982|       |
  983|      1|	vips_arithmetic_set_format_table(aclass,
  984|      1|		vips_complexform_format_table);
  985|      1|}

deviate.c:vips_deviate_class_init:
  220|      1|{
  221|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  222|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  223|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  224|       |
  225|      1|	gobject_class->set_property = vips_object_set_property;
  226|      1|	gobject_class->get_property = vips_object_get_property;
  227|       |
  228|      1|	object_class->nickname = "deviate";
  229|      1|	object_class->description = _("find image standard deviation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  230|      1|	object_class->build = vips_deviate_build;
  231|       |
  232|      1|	sclass->start = vips_deviate_start;
  233|      1|	sclass->scan = vips_deviate_scan;
  234|      1|	sclass->stop = vips_deviate_stop;
  235|       |
  236|      1|	VIPS_ARG_DOUBLE(class, "out", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  237|      1|		_("Output"),
  238|      1|		_("Output value"),
  239|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  240|      1|		G_STRUCT_OFFSET(VipsDeviate, out),
  241|      1|		-INFINITY, INFINITY, 0.0);
  242|      1|}

divide.c:vips_divide_class_init:
  205|      1|{
  206|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  207|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  208|       |
  209|      1|	object_class->nickname = "divide";
  210|      1|	object_class->description = _("divide two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  211|       |
  212|      1|	aclass->process_line = vips_divide_buffer;
  213|       |
  214|      1|	vips_arithmetic_set_format_table(aclass, vips_divide_format_table);
  215|      1|}

find_trim.c:vips_find_trim_class_init:
  175|      1|{
  176|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  177|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  178|       |
  179|      1|	gobject_class->set_property = vips_object_set_property;
  180|      1|	gobject_class->get_property = vips_object_get_property;
  181|       |
  182|      1|	object_class->nickname = "find_trim";
  183|      1|	object_class->description = _("search an image for non-edge areas");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  184|      1|	object_class->build = vips_find_trim_build;
  185|       |
  186|       |	// operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  187|       |
  188|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  189|      1|		_("Input"),
  190|      1|		_("Image to find_trim"),
  191|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  192|      1|		G_STRUCT_OFFSET(VipsFindTrim, in));
  193|       |
  194|      1|	VIPS_ARG_DOUBLE(class, "threshold", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  195|      1|		_("Threshold"),
  196|      1|		_("Object threshold"),
  197|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  198|      1|		G_STRUCT_OFFSET(VipsFindTrim, threshold),
  199|      1|		0, INFINITY, 10.0);
  200|       |
  201|      1|	VIPS_ARG_BOXED(class, "background", 3,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  202|      1|		_("Background"),
  203|      1|		_("Color for background pixels"),
  204|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  205|      1|		G_STRUCT_OFFSET(VipsFindTrim, background),
  206|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  207|       |
  208|      1|	VIPS_ARG_BOOL(class, "line_art", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  209|      1|		_("Line art mode"),
  210|      1|		_("Enable line art mode"),
  211|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  212|      1|		G_STRUCT_OFFSET(VipsFindTrim, line_art),
  213|      1|		FALSE);
  214|       |
  215|      1|	VIPS_ARG_INT(class, "left", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  216|      1|		_("Left"),
  217|      1|		_("Left edge of image"),
  218|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  219|      1|		G_STRUCT_OFFSET(VipsFindTrim, left),
  220|      1|		0, VIPS_MAX_COORD, 1);
  221|       |
  222|      1|	VIPS_ARG_INT(class, "top", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  223|      1|		_("Top"),
  224|      1|		_("Top edge of extract area"),
  225|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  226|      1|		G_STRUCT_OFFSET(VipsFindTrim, top),
  227|      1|		0, VIPS_MAX_COORD, 0);
  228|       |
  229|      1|	VIPS_ARG_INT(class, "width", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  230|      1|		_("Width"),
  231|      1|		_("Width of extract area"),
  232|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  233|      1|		G_STRUCT_OFFSET(VipsFindTrim, width),
  234|      1|		0, VIPS_MAX_COORD, 1);
  235|       |
  236|      1|	VIPS_ARG_INT(class, "height", 13,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  237|      1|		_("Height"),
  238|      1|		_("Height of extract area"),
  239|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  240|      1|		G_STRUCT_OFFSET(VipsFindTrim, height),
  241|      1|		0, VIPS_MAX_COORD, 1);
  242|      1|}

getpoint.c:vips_getpoint_class_init:
  141|      1|{
  142|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  143|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  144|       |
  145|      1|	gobject_class->set_property = vips_object_set_property;
  146|      1|	gobject_class->get_property = vips_object_get_property;
  147|       |
  148|      1|	object_class->nickname = "getpoint";
  149|      1|	object_class->description = _("read a point from an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  150|      1|	object_class->build = vips_getpoint_build;
  151|       |
  152|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  153|      1|		_("Input"),
  154|      1|		_("Input image"),
  155|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  156|      1|		G_STRUCT_OFFSET(VipsGetpoint, in));
  157|       |
  158|      1|	VIPS_ARG_BOXED(class, "out_array", 2,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  159|      1|		_("Output array"),
  160|      1|		_("Array of output values"),
  161|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  162|      1|		G_STRUCT_OFFSET(VipsGetpoint, out_array),
  163|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  164|       |
  165|      1|	VIPS_ARG_INT(class, "x", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  166|      1|		_("x"),
  167|      1|		_("Point to read"),
  168|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  169|      1|		G_STRUCT_OFFSET(VipsGetpoint, x),
  170|      1|		0, VIPS_MAX_COORD, 0);
  171|       |
  172|      1|	VIPS_ARG_INT(class, "y", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  173|      1|		_("y"),
  174|      1|		_("Point to read"),
  175|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  176|      1|		G_STRUCT_OFFSET(VipsGetpoint, y),
  177|      1|		0, VIPS_MAX_COORD, 0);
  178|       |
  179|      1|	VIPS_ARG_BOOL(class, "unpack_complex", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  180|      1|		_("unpack_complex"),
  181|      1|		_("Complex pixels should be unpacked"),
  182|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  183|      1|		G_STRUCT_OFFSET(VipsGetpoint, unpack_complex),
  184|      1|		FALSE);
  185|      1|}

hist_find.c:vips_hist_find_class_init:
  413|      1|{
  414|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  415|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  416|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  417|       |
  418|      1|	gobject_class->set_property = vips_object_set_property;
  419|      1|	gobject_class->get_property = vips_object_get_property;
  420|       |
  421|      1|	object_class->nickname = "hist_find";
  422|      1|	object_class->description = _("find image histogram");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  423|      1|	object_class->build = vips_hist_find_build;
  424|       |
  425|      1|	sclass->start = vips_hist_find_start;
  426|      1|	sclass->scan = vips_hist_find_scan;
  427|      1|	sclass->stop = vips_hist_find_stop;
  428|      1|	sclass->format_table = vips_hist_find_format_table;
  429|       |
  430|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  431|      1|		_("Output"),
  432|      1|		_("Output histogram"),
  433|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  434|      1|		G_STRUCT_OFFSET(VipsHistFind, out));
  435|       |
  436|      1|	VIPS_ARG_INT(class, "band", 110,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  437|      1|		_("Band"),
  438|      1|		_("Find histogram of band"),
  439|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  440|      1|		G_STRUCT_OFFSET(VipsHistFind, band),
  441|      1|		-1, 100000, -1);
  442|      1|}

hist_find_indexed.c:vips_hist_find_indexed_class_init:
  452|      1|{
  453|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  454|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  455|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  456|       |
  457|      1|	gobject_class->set_property = vips_object_set_property;
  458|      1|	gobject_class->get_property = vips_object_get_property;
  459|       |
  460|      1|	object_class->nickname = "hist_find_indexed";
  461|      1|	object_class->description = _("find indexed image histogram");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  462|      1|	object_class->build = vips_hist_find_indexed_build;
  463|       |
  464|      1|	sclass->start = vips_hist_find_indexed_start;
  465|      1|	sclass->scan = vips_hist_find_indexed_scan;
  466|      1|	sclass->stop = vips_hist_find_indexed_stop;
  467|       |
  468|      1|	VIPS_ARG_IMAGE(class, "index", 90,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  469|      1|		_("Index"),
  470|      1|		_("Index image"),
  471|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  472|      1|		G_STRUCT_OFFSET(VipsHistFindIndexed, index));
  473|       |
  474|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  475|      1|		_("Output"),
  476|      1|		_("Output histogram"),
  477|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  478|      1|		G_STRUCT_OFFSET(VipsHistFindIndexed, out));
  479|       |
  480|      1|	VIPS_ARG_ENUM(class, "combine", 104,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  481|      1|		_("Combine"),
  482|      1|		_("Combine bins like this"),
  483|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  484|      1|		G_STRUCT_OFFSET(VipsHistFindIndexed, combine),
  485|      1|		VIPS_TYPE_COMBINE, VIPS_COMBINE_SUM);
  486|      1|}

hist_find_ndim.c:vips_hist_find_ndim_class_init:
  295|      1|{
  296|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  297|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  298|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  299|       |
  300|      1|	gobject_class->set_property = vips_object_set_property;
  301|      1|	gobject_class->get_property = vips_object_get_property;
  302|       |
  303|      1|	object_class->nickname = "hist_find_ndim";
  304|      1|	object_class->description = _("find n-dimensional image histogram");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  305|      1|	object_class->build = vips_hist_find_ndim_build;
  306|       |
  307|      1|	sclass->start = vips_hist_find_ndim_start;
  308|      1|	sclass->scan = vips_hist_find_ndim_scan;
  309|      1|	sclass->stop = vips_hist_find_ndim_stop;
  310|      1|	sclass->format_table = vips_hist_find_ndim_format_table;
  311|       |
  312|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  313|      1|		_("Output"),
  314|      1|		_("Output histogram"),
  315|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  316|      1|		G_STRUCT_OFFSET(VipsHistFindNDim, out));
  317|       |
  318|      1|	VIPS_ARG_INT(class, "bins", 110,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  319|      1|		_("Bins"),
  320|      1|		_("Number of bins in each dimension"),
  321|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  322|      1|		G_STRUCT_OFFSET(VipsHistFindNDim, bins),
  323|      1|		1, 65536, 10);
  324|      1|}

hough.c:vips_hough_class_init:
  161|      1|{
  162|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  163|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  164|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  165|       |
  166|      1|	gobject_class->set_property = vips_object_set_property;
  167|      1|	gobject_class->get_property = vips_object_get_property;
  168|       |
  169|      1|	object_class->nickname = "hough";
  170|      1|	object_class->description = _("find hough transform");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  171|      1|	object_class->build = vips_hough_build;
  172|       |
  173|      1|	sclass->start = vips_hough_start;
  174|      1|	sclass->scan = vips_hough_scan;
  175|      1|	sclass->stop = vips_hough_stop;
  176|      1|	sclass->format_table = vips_hough_format_table;
  177|       |
  178|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  179|      1|		_("Output"),
  180|      1|		_("Output image"),
  181|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  182|      1|		G_STRUCT_OFFSET(VipsHough, out));
  183|      1|}

hough_circle.c:vips_hough_circle_class_init:
  217|      1|{
  218|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  219|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  220|      1|	VipsHoughClass *hclass = (VipsHoughClass *) class;
  221|       |
  222|      1|	gobject_class->set_property = vips_object_set_property;
  223|      1|	gobject_class->get_property = vips_object_get_property;
  224|       |
  225|      1|	object_class->nickname = "hough_circle";
  226|      1|	object_class->description = _("find hough circle transform");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  227|      1|	object_class->build = vips_hough_circle_build;
  228|       |
  229|      1|	hclass->init_accumulator = vips_hough_circle_init_accumulator;
  230|      1|	hclass->vote = vips_hough_circle_vote;
  231|       |
  232|      1|	VIPS_ARG_INT(class, "scale", 119,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  233|      1|		_("Scale"),
  234|      1|		_("Scale down dimensions by this factor"),
  235|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  236|      1|		G_STRUCT_OFFSET(VipsHoughCircle, scale),
  237|      1|		1, 100000, 1);
  238|       |
  239|      1|	VIPS_ARG_INT(class, "min_radius", 120,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  240|      1|		_("Min radius"),
  241|      1|		_("Smallest radius to search for"),
  242|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  243|      1|		G_STRUCT_OFFSET(VipsHoughCircle, min_radius),
  244|      1|		1, 100000, 10);
  245|       |
  246|      1|	VIPS_ARG_INT(class, "max_radius", 121,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  247|      1|		_("Max radius"),
  248|      1|		_("Largest radius to search for"),
  249|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  250|      1|		G_STRUCT_OFFSET(VipsHoughCircle, max_radius),
  251|      1|		1, 100000, 20);
  252|      1|}

hough_line.c:vips_hough_line_class_init:
  131|      1|{
  132|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  133|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  134|      1|	VipsHoughClass *hclass = (VipsHoughClass *) class;
  135|       |
  136|      1|	gobject_class->set_property = vips_object_set_property;
  137|      1|	gobject_class->get_property = vips_object_get_property;
  138|       |
  139|      1|	object_class->nickname = "hough_line";
  140|      1|	object_class->description = _("find hough line transform");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  141|      1|	object_class->build = vips_hough_line_build;
  142|       |
  143|      1|	hclass->init_accumulator = vips_hough_line_init_accumulator;
  144|      1|	hclass->vote = vips_hough_line_vote;
  145|       |
  146|      1|	VIPS_ARG_INT(class, "width", 110,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  147|      1|		_("Width"),
  148|      1|		_("Horizontal size of parameter space"),
  149|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  150|      1|		G_STRUCT_OFFSET(VipsHoughLine, width),
  151|      1|		1, 100000, 256);
  152|       |
  153|      1|	VIPS_ARG_INT(class, "height", 111,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  154|      1|		_("Height"),
  155|      1|		_("Vertical size of parameter space"),
  156|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  157|      1|		G_STRUCT_OFFSET(VipsHoughLine, height),
  158|      1|		1, 100000, 256);
  159|      1|}

invert.c:vips_invert_class_init:
  173|      1|{
  174|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  175|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  176|       |
  177|      1|	object_class->nickname = "invert";
  178|      1|	object_class->description = _("invert an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  179|       |
  180|      1|	aclass->process_line = vips_invert_buffer;
  181|       |
  182|      1|	vips_arithmetic_set_format_table(aclass, vips_invert_format_table);
  183|      1|}

vips_linear:
  531|      2|{
  532|      2|	va_list ap;
  533|      2|	int result;
  534|       |
  535|      2|	va_start(ap, n);
  536|      2|	result = vips_linearv(in, out, a, b, n, ap);
  537|      2|	va_end(ap);
  538|       |
  539|      2|	return result;
  540|      2|}
linear.c:vips_linear_class_init:
  437|      1|{
  438|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  439|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  440|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  441|       |
  442|      1|	gobject_class->set_property = vips_object_set_property;
  443|      1|	gobject_class->get_property = vips_object_get_property;
  444|       |
  445|      1|	object_class->nickname = "linear";
  446|      1|	object_class->description = _("calculate (a * in + b)");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  447|      1|	object_class->build = vips_linear_build;
  448|       |
  449|      1|	aclass->process_line = vips_linear_buffer;
  450|       |
  451|      1|	vips_arithmetic_set_format_table(aclass, vips_linear_format_table);
  452|       |
  453|      1|	VIPS_ARG_BOXED(class, "a", 110,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  454|      1|		_("a"),
  455|      1|		_("Multiply by this"),
  456|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  457|      1|		G_STRUCT_OFFSET(VipsLinear, a),
  458|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  459|       |
  460|      1|	VIPS_ARG_BOXED(class, "b", 111,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  461|      1|		_("b"),
  462|      1|		_("Add this"),
  463|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  464|      1|		G_STRUCT_OFFSET(VipsLinear, b),
  465|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  466|       |
  467|      1|	VIPS_ARG_BOOL(class, "uchar", 112,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  468|      1|		_("uchar"),
  469|      1|		_("Output should be uchar"),
  470|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  471|      1|		G_STRUCT_OFFSET(VipsLinear, uchar),
  472|      1|		FALSE);
  473|      1|}
linear.c:vips_linear_build:
  120|      2|{
  121|      2|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|      2|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|      2|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|      2|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  122|      2|	VipsArithmetic *arithmetic = VIPS_ARITHMETIC(object);
  ------------------
  |  |   42|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|      2|		VIPS_TYPE_ARITHMETIC, VipsArithmetic))
  ------------------
  123|      2|	VipsUnary *unary = (VipsUnary *) object;
  124|      2|	VipsLinear *linear = (VipsLinear *) object;
  125|       |
  126|      2|	int i;
  127|       |
  128|       |	/* If we have a three-element vector, we need to bandup the image to
  129|       |	 * match.
  130|       |	 */
  131|      2|	linear->n = 1;
  132|      2|	if (linear->a)
  ------------------
  |  Branch (132:6): [True: 2, False: 0]
  ------------------
  133|      2|		linear->n = VIPS_MAX(linear->n, linear->a->n);
  ------------------
  |  |   54|      2|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  134|      2|	if (linear->b)
  ------------------
  |  Branch (134:6): [True: 2, False: 0]
  ------------------
  135|      2|		linear->n = VIPS_MAX(linear->n, linear->b->n);
  ------------------
  |  |   54|      2|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  136|      2|	if (unary->in) {
  ------------------
  |  Branch (136:6): [True: 2, False: 0]
  ------------------
  137|      2|		int bands;
  138|       |
  139|      2|		vips_image_decode_predict(unary->in, &bands, NULL);
  140|      2|		linear->n = VIPS_MAX(linear->n, bands);
  ------------------
  |  |   54|      2|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  141|      2|	}
  142|      2|	arithmetic->base_bands = linear->n;
  143|       |
  144|      2|	if (unary->in &&
  ------------------
  |  Branch (144:6): [True: 2, False: 0]
  ------------------
  145|      2|		linear->a &&
  ------------------
  |  Branch (145:3): [True: 2, False: 0]
  ------------------
  146|      2|		linear->b) {
  ------------------
  |  Branch (146:3): [True: 2, False: 0]
  ------------------
  147|      2|		if (vips_check_vector(class->nickname,
  ------------------
  |  Branch (147:7): [True: 0, False: 2]
  ------------------
  148|      2|				linear->a->n, unary->in) ||
  149|      2|			vips_check_vector(class->nickname,
  ------------------
  |  Branch (149:4): [True: 0, False: 2]
  ------------------
  150|      2|				linear->b->n, unary->in))
  151|      0|			return -1;
  152|      2|	}
  153|       |
  154|       |	/* If all elements of the constants are equal, we can shrink them down
  155|       |	 * to a single element.
  156|       |	 */
  157|      2|	if (linear->a) {
  ------------------
  |  Branch (157:6): [True: 2, False: 0]
  ------------------
  158|      2|		double *ary = (double *) linear->a->data;
  159|      2|		gboolean all_equal;
  160|       |
  161|      2|		all_equal = TRUE;
  ------------------
  |  |  798|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  162|      2|		for (i = 1; i < linear->a->n; i++)
  ------------------
  |  Branch (162:15): [True: 0, False: 2]
  ------------------
  163|      0|			if (ary[i] != ary[0]) {
  ------------------
  |  Branch (163:8): [True: 0, False: 0]
  ------------------
  164|      0|				all_equal = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  165|      0|				break;
  166|      0|			}
  167|       |
  168|      2|		if (all_equal)
  ------------------
  |  Branch (168:7): [True: 2, False: 0]
  ------------------
  169|      2|			linear->a->n = 1;
  170|      2|	}
  171|      2|	if (linear->b) {
  ------------------
  |  Branch (171:6): [True: 2, False: 0]
  ------------------
  172|      2|		double *ary = (double *) linear->b->data;
  173|      2|		gboolean all_equal;
  174|       |
  175|      2|		all_equal = TRUE;
  ------------------
  |  |  798|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  176|      2|		for (i = 1; i < linear->b->n; i++)
  ------------------
  |  Branch (176:15): [True: 0, False: 2]
  ------------------
  177|      0|			if (ary[i] != ary[0]) {
  ------------------
  |  Branch (177:8): [True: 0, False: 0]
  ------------------
  178|      0|				all_equal = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  179|      0|				break;
  180|      0|			}
  181|       |
  182|      2|		if (all_equal)
  ------------------
  |  Branch (182:7): [True: 2, False: 0]
  ------------------
  183|      2|			linear->b->n = 1;
  184|      2|	}
  185|       |
  186|       |	/* Make up-banded versions of our constants.
  187|       |	 */
  188|      2|	linear->a_ready = VIPS_ARRAY(linear, linear->n, double);
  ------------------
  |  |   72|      2|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|      2|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|      2|	linear->b_ready = VIPS_ARRAY(linear, linear->n, double);
  ------------------
  |  |   72|      2|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|      2|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|       |
  191|     10|	for (i = 0; i < linear->n; i++) {
  ------------------
  |  Branch (191:14): [True: 8, False: 2]
  ------------------
  192|      8|		if (linear->a) {
  ------------------
  |  Branch (192:7): [True: 8, False: 0]
  ------------------
  193|      8|			double *ary = (double *) linear->a->data;
  194|      8|			int j = VIPS_MIN(i, linear->a->n - 1);
  ------------------
  |  |   55|      8|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 8]
  |  |  ------------------
  ------------------
  195|       |
  196|      8|			linear->a_ready[i] = ary[j];
  197|      8|		}
  198|       |
  199|      8|		if (linear->b) {
  ------------------
  |  Branch (199:7): [True: 8, False: 0]
  ------------------
  200|      8|			double *ary = (double *) linear->b->data;
  201|      8|			int j = VIPS_MIN(i, linear->b->n - 1);
  ------------------
  |  |   55|      8|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 8]
  |  |  ------------------
  ------------------
  202|       |
  203|      8|			linear->b_ready[i] = ary[j];
  204|      8|		}
  205|      8|	}
  206|       |
  207|      2|	if (linear->uchar)
  ------------------
  |  Branch (207:6): [True: 0, False: 2]
  ------------------
  208|      0|		arithmetic->format = VIPS_FORMAT_UCHAR;
  209|       |
  210|      2|	if (VIPS_OBJECT_CLASS(vips_linear_parent_class)->build(object))
  ------------------
  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (210:6): [True: 0, False: 2]
  ------------------
  211|      0|		return -1;
  212|       |
  213|      2|	return 0;
  214|      2|}
linear.c:vips_linear_buffer:
  332|      2|{
  333|      2|	VipsImage *im = arithmetic->ready[0];
  334|      2|	VipsLinear *linear = (VipsLinear *) arithmetic;
  335|      2|	double *restrict a = linear->a_ready;
  336|      2|	double *restrict b = linear->b_ready;
  337|      2|	int nb = im->Bands;
  338|       |
  339|      2|	int i, x, k;
  340|       |
  341|      2|	if (linear->uchar)
  ------------------
  |  Branch (341:6): [True: 0, False: 2]
  ------------------
  342|      0|		switch (vips_image_get_format(im)) {
  343|      0|		case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (343:3): [True: 0, False: 0]
  ------------------
  344|      0|			LOOPuc(unsigned char);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  345|      0|			break;
  346|      0|		case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (346:3): [True: 0, False: 0]
  ------------------
  347|      0|			LOOPuc(signed char);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  348|      0|			break;
  349|      0|		case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (349:3): [True: 0, False: 0]
  ------------------
  350|      0|			LOOPuc(unsigned short);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  351|      0|			break;
  352|      0|		case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (352:3): [True: 0, False: 0]
  ------------------
  353|      0|			LOOPuc(signed short);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  354|      0|			break;
  355|      0|		case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (355:3): [True: 0, False: 0]
  ------------------
  356|      0|			LOOPuc(unsigned int);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  357|      0|			break;
  358|      0|		case VIPS_FORMAT_INT:
  ------------------
  |  Branch (358:3): [True: 0, False: 0]
  ------------------
  359|      0|			LOOPuc(signed int);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  360|      0|			break;
  361|      0|		case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (361:3): [True: 0, False: 0]
  ------------------
  362|      0|			LOOPuc(float);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  363|      0|			break;
  364|      0|		case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (364:3): [True: 0, False: 0]
  ------------------
  365|      0|			LOOPuc(double);
  ------------------
  |  |  302|      0|	{ \
  |  |  303|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (303:7): [True: 0, False: 0]
  |  |  |  Branch (303:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  304|      0|			LOOP1uc(IN); \
  |  |  ------------------
  |  |  |  |  272|      0|	{ \
  |  |  |  |  273|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  274|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  275|      0|		float a1 = a[0]; \
  |  |  |  |  276|      0|		float b1 = b[0]; \
  |  |  |  |  277|      0|		int sz = width * nb; \
  |  |  |  |  278|      0|\
  |  |  |  |  279|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (279:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  280|      0|			float t = a1 * p[x] + b1; \
  |  |  |  |  281|      0|\
  |  |  |  |  282|      0|			q[x] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  283|      0|		} \
  |  |  |  |  284|      0|	}
  |  |  ------------------
  |  |  305|      0|		} \
  |  |  306|      0|		else { \
  |  |  307|      0|			LOOPNuc(IN); \
  |  |  ------------------
  |  |  |  |  289|      0|	{ \
  |  |  |  |  290|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  291|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  |  |  292|      0|\
  |  |  |  |  293|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (293:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  294|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (294:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  295|      0|				double t = a[k] * p[i] + b[k]; \
  |  |  |  |  296|      0|\
  |  |  |  |  297|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  298|      0|			} \
  |  |  |  |  299|      0|	}
  |  |  ------------------
  |  |  308|      0|		} \
  |  |  309|      0|	}
  ------------------
  366|      0|			break;
  367|      0|		case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (367:3): [True: 0, False: 0]
  ------------------
  368|      0|			LOOPCMPLXNuc(float);
  ------------------
  |  |  314|      0|	{ \
  |  |  315|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  316|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  317|      0|\
  |  |  318|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  ------------------
  |  |  |  Branch (318:22): [True: 0, False: 0]
  |  |  ------------------
  |  |  319|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  ------------------
  |  |  |  Branch (319:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  320|      0|				double t = a[k] * p[0] + b[k]; \
  |  |  321|      0|\
  |  |  322|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  ------------------
  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  323|      0|				p += 2; \
  |  |  324|      0|			} \
  |  |  325|      0|	}
  ------------------
  369|      0|			break;
  370|      0|		case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (370:3): [True: 0, False: 0]
  ------------------
  371|      0|			LOOPCMPLXNuc(double);
  ------------------
  |  |  314|      0|	{ \
  |  |  315|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  316|      0|		VipsPel *restrict q = (VipsPel *) out; \
  |  |  317|      0|\
  |  |  318|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  ------------------
  |  |  |  Branch (318:22): [True: 0, False: 0]
  |  |  ------------------
  |  |  319|      0|			for (k = 0; k < nb; k++, i++) { \
  |  |  ------------------
  |  |  |  Branch (319:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  320|      0|				double t = a[k] * p[0] + b[k]; \
  |  |  321|      0|\
  |  |  322|      0|				q[i] = VIPS_FCLIP(0, t, 255); \
  |  |  ------------------
  |  |  |  |   58|      0|#define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V)))
  |  |  |  |  ------------------
  |  |  |  |  |  |   77|      0|#define VIPS_FMAX(A, B) __builtin_fmax(A, B)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  323|      0|				p += 2; \
  |  |  324|      0|			} \
  |  |  325|      0|	}
  ------------------
  372|      0|			break;
  373|       |
  374|      0|		default:
  ------------------
  |  Branch (374:3): [True: 0, False: 0]
  ------------------
  375|      0|			g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  376|      0|		}
  377|      2|	else
  378|      2|		switch (vips_image_get_format(im)) {
  379|      2|		case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (379:3): [True: 2, False: 0]
  ------------------
  380|      2|			LOOP(unsigned char, float);
  ------------------
  |  |  243|      2|	{ \
  |  |  244|      2|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 2, False: 0]
  |  |  |  Branch (244:28): [True: 2, False: 0]
  |  |  ------------------
  |  |  245|      2|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      2|	{ \
  |  |  |  |  220|      2|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      2|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      2|		OUT a1 = a[0]; \
  |  |  |  |  223|      2|		OUT b1 = b[0]; \
  |  |  |  |  224|      2|		int sz = width * nb; \
  |  |  |  |  225|      2|\
  |  |  |  |  226|     10|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 8, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  227|      8|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      2|	}
  |  |  ------------------
  |  |  246|      2|		} \
  |  |  247|      2|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      2|	}
  ------------------
  381|      2|			break;
  382|      0|		case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (382:3): [True: 0, False: 2]
  ------------------
  383|      0|			LOOP(signed char, float);
  ------------------
  |  |  243|      0|	{ \
  |  |  244|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  |  Branch (244:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      0|	{ \
  |  |  |  |  220|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      0|		OUT a1 = a[0]; \
  |  |  |  |  223|      0|		OUT b1 = b[0]; \
  |  |  |  |  224|      0|		int sz = width * nb; \
  |  |  |  |  225|      0|\
  |  |  |  |  226|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  227|      0|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      0|	}
  |  |  ------------------
  |  |  246|      0|		} \
  |  |  247|      0|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      0|	}
  ------------------
  384|      0|			break;
  385|      0|		case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (385:3): [True: 0, False: 2]
  ------------------
  386|      0|			LOOP(unsigned short, float);
  ------------------
  |  |  243|      0|	{ \
  |  |  244|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  |  Branch (244:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      0|	{ \
  |  |  |  |  220|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      0|		OUT a1 = a[0]; \
  |  |  |  |  223|      0|		OUT b1 = b[0]; \
  |  |  |  |  224|      0|		int sz = width * nb; \
  |  |  |  |  225|      0|\
  |  |  |  |  226|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  227|      0|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      0|	}
  |  |  ------------------
  |  |  246|      0|		} \
  |  |  247|      0|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      0|	}
  ------------------
  387|      0|			break;
  388|      0|		case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (388:3): [True: 0, False: 2]
  ------------------
  389|      0|			LOOP(signed short, float);
  ------------------
  |  |  243|      0|	{ \
  |  |  244|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  |  Branch (244:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      0|	{ \
  |  |  |  |  220|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      0|		OUT a1 = a[0]; \
  |  |  |  |  223|      0|		OUT b1 = b[0]; \
  |  |  |  |  224|      0|		int sz = width * nb; \
  |  |  |  |  225|      0|\
  |  |  |  |  226|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  227|      0|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      0|	}
  |  |  ------------------
  |  |  246|      0|		} \
  |  |  247|      0|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      0|	}
  ------------------
  390|      0|			break;
  391|      0|		case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (391:3): [True: 0, False: 2]
  ------------------
  392|      0|			LOOP(unsigned int, float);
  ------------------
  |  |  243|      0|	{ \
  |  |  244|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  |  Branch (244:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      0|	{ \
  |  |  |  |  220|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      0|		OUT a1 = a[0]; \
  |  |  |  |  223|      0|		OUT b1 = b[0]; \
  |  |  |  |  224|      0|		int sz = width * nb; \
  |  |  |  |  225|      0|\
  |  |  |  |  226|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  227|      0|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      0|	}
  |  |  ------------------
  |  |  246|      0|		} \
  |  |  247|      0|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      0|	}
  ------------------
  393|      0|			break;
  394|      0|		case VIPS_FORMAT_INT:
  ------------------
  |  Branch (394:3): [True: 0, False: 2]
  ------------------
  395|      0|			LOOP(signed int, float);
  ------------------
  |  |  243|      0|	{ \
  |  |  244|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  |  Branch (244:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      0|	{ \
  |  |  |  |  220|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      0|		OUT a1 = a[0]; \
  |  |  |  |  223|      0|		OUT b1 = b[0]; \
  |  |  |  |  224|      0|		int sz = width * nb; \
  |  |  |  |  225|      0|\
  |  |  |  |  226|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  227|      0|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      0|	}
  |  |  ------------------
  |  |  246|      0|		} \
  |  |  247|      0|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      0|	}
  ------------------
  396|      0|			break;
  397|      0|		case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (397:3): [True: 0, False: 2]
  ------------------
  398|      0|			LOOP(float, float);
  ------------------
  |  |  243|      0|	{ \
  |  |  244|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  |  Branch (244:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      0|	{ \
  |  |  |  |  220|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      0|		OUT a1 = a[0]; \
  |  |  |  |  223|      0|		OUT b1 = b[0]; \
  |  |  |  |  224|      0|		int sz = width * nb; \
  |  |  |  |  225|      0|\
  |  |  |  |  226|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  227|      0|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      0|	}
  |  |  ------------------
  |  |  246|      0|		} \
  |  |  247|      0|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      0|	}
  ------------------
  399|      0|			break;
  400|      0|		case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (400:3): [True: 0, False: 2]
  ------------------
  401|      0|			LOOP(double, double);
  ------------------
  |  |  243|      0|	{ \
  |  |  244|      0|		if (linear->a->n == 1 && linear->b->n == 1) { \
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  |  Branch (244:28): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			LOOP1(IN, OUT); \
  |  |  ------------------
  |  |  |  |  219|      0|	{ \
  |  |  |  |  220|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  221|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  222|      0|		OUT a1 = a[0]; \
  |  |  |  |  223|      0|		OUT b1 = b[0]; \
  |  |  |  |  224|      0|		int sz = width * nb; \
  |  |  |  |  225|      0|\
  |  |  |  |  226|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (226:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  227|      0|			q[x] = a1 * (OUT) p[x] + b1; \
  |  |  |  |  228|      0|	}
  |  |  ------------------
  |  |  246|      0|		} \
  |  |  247|      0|		else { \
  |  |  248|      0|			LOOPN(IN, OUT); \
  |  |  ------------------
  |  |  |  |  233|      0|	{ \
  |  |  |  |  234|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  |  |  235|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  236|      0|\
  |  |  |  |  237|      0|		for (i = 0, x = 0; x < width; x++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:22): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  238|      0|			for (k = 0; k < nb; k++, i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  239|      0|				q[i] = a[k] * (OUT) p[i] + b[k]; \
  |  |  |  |  240|      0|	}
  |  |  ------------------
  |  |  249|      0|		} \
  |  |  250|      0|	}
  ------------------
  402|      0|			break;
  403|      0|		case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (403:3): [True: 0, False: 2]
  ------------------
  404|      0|			LOOPCMPLXN(float, float);
  ------------------
  |  |  255|      0|	{ \
  |  |  256|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  257|      0|		OUT *restrict q = (OUT *) out; \
  |  |  258|      0|\
  |  |  259|      0|		for (x = 0; x < width; x++) \
  |  |  ------------------
  |  |  |  Branch (259:15): [True: 0, False: 0]
  |  |  ------------------
  |  |  260|      0|			for (k = 0; k < nb; k++) { \
  |  |  ------------------
  |  |  |  Branch (260:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  261|      0|				q[0] = a[k] * p[0] + b[k]; \
  |  |  262|      0|				q[1] = p[1]; \
  |  |  263|      0|				q += 2; \
  |  |  264|      0|				p += 2; \
  |  |  265|      0|			} \
  |  |  266|      0|	}
  ------------------
  405|      0|			break;
  406|      0|		case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (406:3): [True: 0, False: 2]
  ------------------
  407|      0|			LOOPCMPLXN(double, double);
  ------------------
  |  |  255|      0|	{ \
  |  |  256|      0|		IN *restrict p = (IN *) in[0]; \
  |  |  257|      0|		OUT *restrict q = (OUT *) out; \
  |  |  258|      0|\
  |  |  259|      0|		for (x = 0; x < width; x++) \
  |  |  ------------------
  |  |  |  Branch (259:15): [True: 0, False: 0]
  |  |  ------------------
  |  |  260|      0|			for (k = 0; k < nb; k++) { \
  |  |  ------------------
  |  |  |  Branch (260:16): [True: 0, False: 0]
  |  |  ------------------
  |  |  261|      0|				q[0] = a[k] * p[0] + b[k]; \
  |  |  262|      0|				q[1] = p[1]; \
  |  |  263|      0|				q += 2; \
  |  |  264|      0|				p += 2; \
  |  |  265|      0|			} \
  |  |  266|      0|	}
  ------------------
  408|      0|			break;
  409|       |
  410|      0|		default:
  ------------------
  |  Branch (410:3): [True: 0, False: 2]
  ------------------
  411|      0|			g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      2|		}
  413|      2|}
linear.c:vips_linear_init:
  477|      2|{
  478|      2|}
linear.c:vips_linearv:
  483|      2|{
  484|      2|	VipsArea *area_a;
  485|      2|	VipsArea *area_b;
  486|      2|	int result;
  487|       |
  488|      2|	area_a = VIPS_AREA(vips_array_double_new(a, n));
  ------------------
  |  |  137|      2|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  489|      2|	area_b = VIPS_AREA(vips_array_double_new(b, n));
  ------------------
  |  |  137|      2|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  490|       |
  491|      2|	result = vips_call_split("linear", ap, in, out, area_a, area_b);
  492|       |
  493|      2|	vips_area_unref(area_a);
  494|      2|	vips_area_unref(area_b);
  495|       |
  496|      2|	return result;
  497|      2|}

math.c:vips_math_class_init:
  244|      1|{
  245|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  246|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  247|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  248|       |
  249|      1|	gobject_class->set_property = vips_object_set_property;
  250|      1|	gobject_class->get_property = vips_object_get_property;
  251|       |
  252|      1|	object_class->nickname = "math";
  253|      1|	object_class->description = _("apply a math operation to an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  254|      1|	object_class->build = vips_math_build;
  255|       |
  256|      1|	aclass->process_line = vips_math_buffer;
  257|       |
  258|      1|	vips_arithmetic_set_format_table(aclass, vips_math_format_table);
  259|       |
  260|      1|	VIPS_ARG_ENUM(class, "math", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  261|      1|		_("Operation"),
  262|      1|		_("Math to perform"),
  263|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  264|      1|		G_STRUCT_OFFSET(VipsMath, math),
  265|      1|		VIPS_TYPE_OPERATION_MATH, VIPS_OPERATION_MATH_SIN);
  266|      1|}

math2.c:vips_math2_class_init:
  224|      1|{
  225|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  226|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  227|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  228|       |
  229|      1|	gobject_class->set_property = vips_object_set_property;
  230|      1|	gobject_class->get_property = vips_object_get_property;
  231|       |
  232|      1|	object_class->nickname = "math2";
  233|      1|	object_class->description = _("binary math operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  234|      1|	object_class->build = vips_math2_build;
  235|       |
  236|      1|	aclass->process_line = vips_math2_buffer;
  237|       |
  238|      1|	vips_arithmetic_set_format_table(aclass, vips_math2_format_table);
  239|       |
  240|      1|	VIPS_ARG_ENUM(class, "math2", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  241|      1|		_("Operation"),
  242|      1|		_("Math to perform"),
  243|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  244|      1|		G_STRUCT_OFFSET(VipsMath2, math2),
  245|      1|		VIPS_TYPE_OPERATION_MATH2, VIPS_OPERATION_MATH2_POW);
  246|      1|}
math2.c:vips_math2_const_class_init:
  453|      1|{
  454|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  455|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  456|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  457|       |
  458|      1|	gobject_class->set_property = vips_object_set_property;
  459|      1|	gobject_class->get_property = vips_object_get_property;
  460|       |
  461|      1|	object_class->nickname = "math2_const";
  462|      1|	object_class->description =
  463|      1|		_("binary math operations with a constant");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  464|      1|	object_class->build = vips_math2_const_build;
  465|       |
  466|      1|	aclass->process_line = vips_math2_const_buffer;
  467|       |
  468|      1|	vips_arithmetic_set_format_table(aclass, vips_math2_format_table);
  469|       |
  470|      1|	VIPS_ARG_ENUM(class, "math2", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  471|      1|		_("Operation"),
  472|      1|		_("Math to perform"),
  473|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  474|      1|		G_STRUCT_OFFSET(VipsMath2Const, math2),
  475|      1|		VIPS_TYPE_OPERATION_MATH2, VIPS_OPERATION_MATH2_POW);
  476|      1|}

max.c:vips_max_class_init:
  435|      1|{
  436|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  437|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  438|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  439|       |
  440|      1|	gobject_class->set_property = vips_object_set_property;
  441|      1|	gobject_class->get_property = vips_object_get_property;
  442|       |
  443|      1|	object_class->nickname = "max";
  444|      1|	object_class->description = _("find image maximum");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  445|      1|	object_class->build = vips_max_build;
  446|       |
  447|      1|	sclass->start = vips_max_start;
  448|      1|	sclass->scan = vips_max_scan;
  449|      1|	sclass->stop = vips_max_stop;
  450|       |
  451|      1|	VIPS_ARG_DOUBLE(class, "out", 1,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  452|      1|		_("Output"),
  453|      1|		_("Output value"),
  454|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  455|      1|		G_STRUCT_OFFSET(VipsMax, out),
  456|      1|		-INFINITY, INFINITY, 0.0);
  457|       |
  458|      1|	VIPS_ARG_INT(class, "x", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  459|      1|		_("x"),
  460|      1|		_("Horizontal position of maximum"),
  461|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  462|      1|		G_STRUCT_OFFSET(VipsMax, x),
  463|      1|		0, VIPS_MAX_COORD, 0);
  464|       |
  465|      1|	VIPS_ARG_INT(class, "y", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  466|      1|		_("y"),
  467|      1|		_("Vertical position of maximum"),
  468|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  469|      1|		G_STRUCT_OFFSET(VipsMax, y),
  470|      1|		0, VIPS_MAX_COORD, 0);
  471|       |
  472|      1|	VIPS_ARG_INT(class, "size", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  473|      1|		_("Size"),
  474|      1|		_("Number of maximum values to find"),
  475|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  476|      1|		G_STRUCT_OFFSET(VipsMax, size),
  477|      1|		1, 1000000, 1);
  478|       |
  479|      1|	VIPS_ARG_BOXED(class, "out_array", 6,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  480|      1|		_("Output array"),
  481|      1|		_("Array of output values"),
  482|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  483|      1|		G_STRUCT_OFFSET(VipsMax, out_array),
  484|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  485|       |
  486|      1|	VIPS_ARG_BOXED(class, "x_array", 7,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  487|      1|		_("x array"),
  488|      1|		_("Array of horizontal positions"),
  489|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  490|      1|		G_STRUCT_OFFSET(VipsMax, x_array),
  491|      1|		VIPS_TYPE_ARRAY_INT);
  492|       |
  493|      1|	VIPS_ARG_BOXED(class, "y_array", 8,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  494|      1|		_("y array"),
  495|      1|		_("Array of vertical positions"),
  496|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  497|      1|		G_STRUCT_OFFSET(VipsMax, y_array),
  498|      1|		VIPS_TYPE_ARRAY_INT);
  499|      1|}

maxpair.c:vips_maxpair_class_init:
  146|      1|{
  147|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  148|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  149|       |
  150|      1|	object_class->nickname = "maxpair";
  151|      1|	object_class->description = _("maximum of a pair of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  152|       |
  153|      1|	aclass->process_line = maxpair_buffer;
  154|       |
  155|      1|	vips_arithmetic_set_format_table(aclass, vips_maxpair_format_table);
  156|      1|}

measure.c:vips_measure_class_init:
  182|      1|{
  183|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  184|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  185|       |
  186|      1|	gobject_class->set_property = vips_object_set_property;
  187|      1|	gobject_class->get_property = vips_object_get_property;
  188|       |
  189|      1|	object_class->nickname = "measure";
  190|      1|	object_class->description =
  191|      1|		_("measure a set of patches on a color chart");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  192|      1|	object_class->build = vips_measure_build;
  193|       |
  194|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  195|      1|		_("Input"),
  196|      1|		_("Image to measure"),
  197|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  198|      1|		G_STRUCT_OFFSET(VipsMeasure, in));
  199|       |
  200|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  201|      1|		_("Output"),
  202|      1|		_("Output array of statistics"),
  203|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  204|      1|		G_STRUCT_OFFSET(VipsMeasure, out));
  205|       |
  206|      1|	VIPS_ARG_INT(class, "h", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  207|      1|		_("Across"),
  208|      1|		_("Number of patches across chart"),
  209|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  210|      1|		G_STRUCT_OFFSET(VipsMeasure, h),
  211|      1|		1, VIPS_MAX_COORD, 1);
  212|       |
  213|      1|	VIPS_ARG_INT(class, "v", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  214|      1|		_("Down"),
  215|      1|		_("Number of patches down chart"),
  216|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  217|      1|		G_STRUCT_OFFSET(VipsMeasure, v),
  218|      1|		1, VIPS_MAX_COORD, 1);
  219|       |
  220|      1|	VIPS_ARG_INT(class, "left", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  221|      1|		_("Left"),
  222|      1|		_("Left edge of extract area"),
  223|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  224|      1|		G_STRUCT_OFFSET(VipsMeasure, left),
  225|      1|		0, VIPS_MAX_COORD, 0);
  226|       |
  227|      1|	VIPS_ARG_INT(class, "top", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  228|      1|		_("Top"),
  229|      1|		_("Top edge of extract area"),
  230|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  231|      1|		G_STRUCT_OFFSET(VipsMeasure, top),
  232|      1|		0, VIPS_MAX_COORD, 0);
  233|       |
  234|      1|	VIPS_ARG_INT(class, "width", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  235|      1|		_("Width"),
  236|      1|		_("Width of extract area"),
  237|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  238|      1|		G_STRUCT_OFFSET(VipsMeasure, width),
  239|      1|		1, VIPS_MAX_COORD, 1);
  240|       |
  241|      1|	VIPS_ARG_INT(class, "height", 13,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  242|      1|		_("Height"),
  243|      1|		_("Height of extract area"),
  244|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  245|      1|		G_STRUCT_OFFSET(VipsMeasure, height),
  246|      1|		1, VIPS_MAX_COORD, 1);
  247|      1|}

min.c:vips_min_class_init:
  435|      1|{
  436|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  437|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  438|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  439|       |
  440|      1|	gobject_class->set_property = vips_object_set_property;
  441|      1|	gobject_class->get_property = vips_object_get_property;
  442|       |
  443|      1|	object_class->nickname = "min";
  444|      1|	object_class->description = _("find image minimum");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  445|      1|	object_class->build = vips_min_build;
  446|       |
  447|      1|	sclass->start = vips_min_start;
  448|      1|	sclass->scan = vips_min_scan;
  449|      1|	sclass->stop = vips_min_stop;
  450|       |
  451|      1|	VIPS_ARG_DOUBLE(class, "out", 1,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  452|      1|		_("Output"),
  453|      1|		_("Output value"),
  454|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  455|      1|		G_STRUCT_OFFSET(VipsMin, min),
  456|      1|		-INFINITY, INFINITY, 0.0);
  457|       |
  458|      1|	VIPS_ARG_INT(class, "x", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  459|      1|		_("x"),
  460|      1|		_("Horizontal position of minimum"),
  461|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  462|      1|		G_STRUCT_OFFSET(VipsMin, x),
  463|      1|		0, VIPS_MAX_COORD, 0);
  464|       |
  465|      1|	VIPS_ARG_INT(class, "y", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  466|      1|		_("y"),
  467|      1|		_("Vertical position of minimum"),
  468|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  469|      1|		G_STRUCT_OFFSET(VipsMin, y),
  470|      1|		0, VIPS_MAX_COORD, 0);
  471|       |
  472|      1|	VIPS_ARG_INT(class, "size", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  473|      1|		_("Size"),
  474|      1|		_("Number of minimum values to find"),
  475|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  476|      1|		G_STRUCT_OFFSET(VipsMin, size),
  477|      1|		1, 1000000, 1);
  478|       |
  479|      1|	VIPS_ARG_BOXED(class, "out_array", 6,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  480|      1|		_("Output array"),
  481|      1|		_("Array of output values"),
  482|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  483|      1|		G_STRUCT_OFFSET(VipsMin, min_array),
  484|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  485|       |
  486|      1|	VIPS_ARG_BOXED(class, "x_array", 7,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  487|      1|		_("x array"),
  488|      1|		_("Array of horizontal positions"),
  489|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  490|      1|		G_STRUCT_OFFSET(VipsMin, x_array),
  491|      1|		VIPS_TYPE_ARRAY_INT);
  492|       |
  493|      1|	VIPS_ARG_BOXED(class, "y_array", 8,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  494|      1|		_("y array"),
  495|      1|		_("Array of vertical positions"),
  496|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  497|      1|		G_STRUCT_OFFSET(VipsMin, y_array),
  498|      1|		VIPS_TYPE_ARRAY_INT);
  499|      1|}

minpair.c:vips_minpair_class_init:
  146|      1|{
  147|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  148|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  149|       |
  150|      1|	object_class->nickname = "minpair";
  151|      1|	object_class->description = _("minimum of a pair of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  152|       |
  153|      1|	aclass->process_line = minpair_buffer;
  154|       |
  155|      1|	vips_arithmetic_set_format_table(aclass, vips_minpair_format_table);
  156|      1|}

multiply.c:vips_multiply_class_init:
  190|      1|{
  191|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  192|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  193|       |
  194|      1|	object_class->nickname = "multiply";
  195|      1|	object_class->description = _("multiply two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  196|       |
  197|      1|	aclass->process_line = vips_multiply_buffer;
  198|       |
  199|      1|	vips_arithmetic_set_format_table(aclass, vips_multiply_format_table);
  200|      1|}

nary.c:vips_nary_class_init:
   72|      1|{
   73|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   74|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|       |
   76|      1|	gobject_class->set_property = vips_object_set_property;
   77|      1|	gobject_class->get_property = vips_object_get_property;
   78|       |
   79|      1|	vobject_class->nickname = "nary";
   80|      1|	vobject_class->description = _("nary operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   81|      1|	vobject_class->build = vips_nary_build;
   82|       |
   83|       |	/* Create properties.
   84|       |	 */
   85|       |
   86|      1|	VIPS_ARG_BOXED(class, "in", 0,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
   87|      1|		_("Input"),
   88|      1|		_("Array of input images"),
   89|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   90|      1|		G_STRUCT_OFFSET(VipsNary, in),
   91|      1|		VIPS_TYPE_ARRAY_IMAGE);
   92|      1|}

profile.c:vips_profile_class_init:
  284|      1|{
  285|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  286|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  287|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  288|       |
  289|      1|	gobject_class->set_property = vips_object_set_property;
  290|      1|	gobject_class->get_property = vips_object_get_property;
  291|       |
  292|      1|	object_class->nickname = "profile";
  293|      1|	object_class->description = _("find image profiles");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  294|      1|	object_class->build = vips_profile_build;
  295|       |
  296|      1|	sclass->start = vips_profile_start;
  297|      1|	sclass->scan = vips_profile_scan;
  298|      1|	sclass->stop = vips_profile_stop;
  299|       |
  300|      1|	VIPS_ARG_IMAGE(class, "columns", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  301|      1|		_("Columns"),
  302|      1|		_("First non-zero pixel in column"),
  303|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  304|      1|		G_STRUCT_OFFSET(VipsProfile, columns));
  305|       |
  306|      1|	VIPS_ARG_IMAGE(class, "rows", 101,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  307|      1|		_("Rows"),
  308|      1|		_("First non-zero pixel in row"),
  309|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  310|      1|		G_STRUCT_OFFSET(VipsProfile, rows));
  311|      1|}

project.c:vips_project_class_init:
  315|      1|{
  316|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  317|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  318|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  319|       |
  320|      1|	gobject_class->set_property = vips_object_set_property;
  321|      1|	gobject_class->get_property = vips_object_get_property;
  322|       |
  323|      1|	object_class->nickname = "project";
  324|      1|	object_class->description = _("find image projections");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  325|      1|	object_class->build = vips_project_build;
  326|       |
  327|      1|	sclass->start = vips_project_start;
  328|      1|	sclass->scan = vips_project_scan;
  329|      1|	sclass->stop = vips_project_stop;
  330|       |
  331|      1|	VIPS_ARG_IMAGE(class, "columns", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  332|      1|		_("Columns"),
  333|      1|		_("Sums of columns"),
  334|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  335|      1|		G_STRUCT_OFFSET(VipsProject, columns));
  336|       |
  337|      1|	VIPS_ARG_IMAGE(class, "rows", 101,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  338|      1|		_("Rows"),
  339|      1|		_("Sums of rows"),
  340|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  341|      1|		G_STRUCT_OFFSET(VipsProject, rows));
  342|      1|}

relational.c:vips_relational_class_init:
  229|      1|{
  230|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  232|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  233|       |
  234|      1|	gobject_class->set_property = vips_object_set_property;
  235|      1|	gobject_class->get_property = vips_object_get_property;
  236|       |
  237|      1|	object_class->nickname = "relational";
  238|      1|	object_class->description = _("relational operation on two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  239|       |
  240|      1|	aclass->process_line = vips_relational_buffer;
  241|       |
  242|      1|	vips_arithmetic_set_format_table(aclass,
  243|      1|		vips_relational_format_table);
  244|       |
  245|      1|	VIPS_ARG_ENUM(class, "relational", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  246|      1|		_("Operation"),
  247|      1|		_("Relational to perform"),
  248|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  249|      1|		G_STRUCT_OFFSET(VipsRelational, relational),
  250|      1|		VIPS_TYPE_OPERATION_RELATIONAL,
  251|      1|		VIPS_OPERATION_RELATIONAL_EQUAL);
  252|      1|}
relational.c:vips_relational_const_class_init:
  593|      1|{
  594|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  595|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  596|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  597|       |
  598|      1|	gobject_class->set_property = vips_object_set_property;
  599|      1|	gobject_class->get_property = vips_object_get_property;
  600|       |
  601|      1|	object_class->nickname = "relational_const";
  602|      1|	object_class->description =
  603|      1|		_("relational operations against a constant");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  604|       |
  605|      1|	aclass->process_line = vips_relational_const_buffer;
  606|       |
  607|      1|	vips_arithmetic_set_format_table(aclass,
  608|      1|		vips_relational_format_table);
  609|       |
  610|      1|	VIPS_ARG_ENUM(class, "relational", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  611|      1|		_("Operation"),
  612|      1|		_("Relational to perform"),
  613|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  614|      1|		G_STRUCT_OFFSET(VipsRelationalConst, relational),
  615|      1|		VIPS_TYPE_OPERATION_RELATIONAL,
  616|      1|		VIPS_OPERATION_RELATIONAL_EQUAL);
  617|      1|}

remainder.c:vips_remainder_class_init:
  182|      1|{
  183|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  184|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  185|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  186|       |
  187|      1|	gobject_class->set_property = vips_object_set_property;
  188|      1|	gobject_class->get_property = vips_object_get_property;
  189|       |
  190|      1|	object_class->nickname = "remainder";
  191|      1|	object_class->description =
  192|      1|		_("remainder after integer division of two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  193|      1|	object_class->build = vips_remainder_build;
  194|       |
  195|      1|	aclass->process_line = vips_remainder_buffer;
  196|       |
  197|      1|	vips_arithmetic_set_format_table(aclass,
  198|      1|		vips_remainder_format_table);
  199|      1|}
remainder.c:vips_remainder_const_class_init:
  343|      1|{
  344|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  345|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  346|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  347|       |
  348|      1|	gobject_class->set_property = vips_object_set_property;
  349|      1|	gobject_class->get_property = vips_object_get_property;
  350|       |
  351|      1|	object_class->nickname = "remainder_const";
  352|      1|	object_class->description =
  353|      1|		_("remainder after integer division of an image and a constant");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  354|      1|	object_class->build = vips_remainder_const_build;
  355|       |
  356|      1|	aclass->process_line = vips_remainder_const_buffer;
  357|       |
  358|      1|	vips_arithmetic_set_format_table(aclass, vips_remainder_format_table);
  359|      1|}

round.c:vips_round_class_init:
  164|      1|{
  165|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  167|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  168|       |
  169|      1|	gobject_class->set_property = vips_object_set_property;
  170|      1|	gobject_class->get_property = vips_object_get_property;
  171|       |
  172|      1|	object_class->nickname = "round";
  173|      1|	object_class->description = _("perform a round function on an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  174|      1|	object_class->build = vips_round_build;
  175|       |
  176|      1|	aclass->process_line = vips_round_buffer;
  177|       |
  178|      1|	vips_arithmetic_set_format_table(aclass, vips_round_format_table);
  179|       |
  180|      1|	VIPS_ARG_ENUM(class, "round", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  181|      1|		_("Round operation"),
  182|      1|		_("Rounding operation to perform"),
  183|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  184|      1|		G_STRUCT_OFFSET(VipsRound, round),
  185|      1|		VIPS_TYPE_OPERATION_ROUND, VIPS_OPERATION_ROUND_RINT);
  186|      1|}

sign.c:vips_sign_class_init:
  169|      1|{
  170|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  171|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  172|       |
  173|      1|	object_class->nickname = "sign";
  174|      1|	object_class->description = _("unit vector of pixel");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  175|       |
  176|      1|	aclass->process_line = vips_sign_buffer;
  177|       |
  178|      1|	vips_arithmetic_set_format_table(aclass, vips_sign_format_table);
  179|      1|}

statistic.c:vips_statistic_class_init:
  152|      1|{
  153|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  154|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  156|       |
  157|      1|	gobject_class->set_property = vips_object_set_property;
  158|      1|	gobject_class->get_property = vips_object_get_property;
  159|       |
  160|      1|	vobject_class->nickname = "statistic";
  161|      1|	vobject_class->description = _("VIPS statistic operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  162|      1|	vobject_class->build = vips_statistic_build;
  163|       |
  164|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  165|       |
  166|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  167|      1|		_("Input"),
  168|      1|		_("Input image"),
  169|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  170|      1|		G_STRUCT_OFFSET(VipsStatistic, in));
  171|      1|}

stats.c:vips_stats_class_init:
  425|      1|{
  426|      1|	GObjectClass *gobject_class = (GObjectClass *) class;
  427|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  428|      1|	VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_STATISTIC, VipsStatisticClass))
  ------------------
  429|       |
  430|      1|	gobject_class->set_property = vips_object_set_property;
  431|      1|	gobject_class->get_property = vips_object_get_property;
  432|       |
  433|      1|	object_class->nickname = "stats";
  434|      1|	object_class->description = _("find many image stats");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  435|      1|	object_class->build = vips_stats_build;
  436|       |
  437|      1|	sclass->start = vips_stats_start;
  438|      1|	sclass->scan = vips_stats_scan;
  439|      1|	sclass->stop = vips_stats_stop;
  440|       |
  441|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  442|      1|		_("Output"),
  443|      1|		_("Output array of statistics"),
  444|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  445|      1|		G_STRUCT_OFFSET(VipsStats, out));
  446|      1|}

subtract.c:vips_subtract_class_init:
  169|      1|{
  170|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  171|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  172|       |
  173|      1|	object_class->nickname = "subtract";
  174|      1|	object_class->description = _("subtract two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  175|       |
  176|      1|	aclass->process_line = vips_subtract_buffer;
  177|       |
  178|      1|	vips_arithmetic_set_format_table(aclass, vips_subtract_format_table);
  179|      1|}

sum.c:vips_sum_class_init:
  144|      1|{
  145|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  146|      1|	VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_ARITHMETIC, VipsArithmeticClass))
  ------------------
  147|       |
  148|      1|	object_class->nickname = "sum";
  149|      1|	object_class->description = _("sum an array of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  150|       |
  151|      1|	aclass->process_line = sum_buffer;
  152|       |
  153|      1|	vips_arithmetic_set_format_table(aclass, vips_sum_format_table);
  154|      1|}

unary.c:vips_unary_class_init:
   73|      1|{
   74|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   76|       |
   77|      1|	gobject_class->set_property = vips_object_set_property;
   78|      1|	gobject_class->get_property = vips_object_get_property;
   79|       |
   80|      1|	vobject_class->nickname = "unary";
   81|      1|	vobject_class->description = _("unary operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   82|      1|	vobject_class->build = vips_unary_build;
   83|       |
   84|       |	/* Create properties.
   85|       |	 */
   86|       |
   87|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
   88|      1|		_("Input"),
   89|      1|		_("Input image"),
   90|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   91|      1|		G_STRUCT_OFFSET(VipsUnary, in));
   92|      1|}
unary.c:vips_unary_build:
   55|      2|{
   56|      2|	VipsArithmetic *arithmetic = VIPS_ARITHMETIC(object);
  ------------------
  |  |   42|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|      2|		VIPS_TYPE_ARITHMETIC, VipsArithmetic))
  ------------------
   57|      2|	VipsUnary *unary = VIPS_UNARY(object);
  ------------------
  |  |   42|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_UNARY, VipsUnary))
  |  |  ------------------
  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   58|       |
   59|      2|	arithmetic->n = 1;
   60|      2|	arithmetic->in = (VipsImage **) vips_object_local_array(object, 1);
   61|      2|	arithmetic->in[0] = unary->in;
   62|      2|	if (arithmetic->in[0])
  ------------------
  |  Branch (62:6): [True: 2, False: 0]
  ------------------
   63|      2|		g_object_ref(arithmetic->in[0]);
   64|       |
   65|      2|	if (VIPS_OBJECT_CLASS(vips_unary_parent_class)->build(object))
  ------------------
  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (65:6): [True: 0, False: 2]
  ------------------
   66|      0|		return -1;
   67|       |
   68|      2|	return 0;
   69|      2|}
unary.c:vips_unary_init:
   96|      2|{
   97|       |	/* Init our instance fields.
   98|       |	 */
   99|      2|}

unaryconst.c:vips_unary_const_class_init:
  130|      1|{
  131|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  133|       |
  134|      1|	gobject_class->set_property = vips_object_set_property;
  135|      1|	gobject_class->get_property = vips_object_get_property;
  136|       |
  137|      1|	object_class->nickname = "unary_const";
  138|      1|	object_class->description = _("unary operations with a constant");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  139|      1|	object_class->build = vips_unary_const_build;
  140|       |
  141|      1|	VIPS_ARG_BOXED(class, "c", 201,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  142|      1|		_("c"),
  143|      1|		_("Array of constants"),
  144|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  145|      1|		G_STRUCT_OFFSET(VipsUnaryConst, c),
  146|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  147|      1|}

CMYK2XYZ.c:vips_CMYK2XYZ_class_init:
  105|      1|{
  106|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  108|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  109|       |
  110|      1|	gobject_class->set_property = vips_object_set_property;
  111|      1|	gobject_class->get_property = vips_object_get_property;
  112|       |
  113|      1|	object_class->nickname = "CMYK2XYZ";
  114|      1|	object_class->description = _("transform CMYK to XYZ");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  115|       |
  116|      1|	object_class->build = vips_CMYK2XYZ_build;
  117|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  118|       |
  119|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  120|      1|		_("Input"),
  121|      1|		_("Input image"),
  122|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  123|      1|		G_STRUCT_OFFSET(VipsCMYK2XYZ, in));
  124|       |
  125|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  126|      1|		_("Output"),
  127|      1|		_("Output image"),
  128|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  129|      1|		G_STRUCT_OFFSET(VipsCMYK2XYZ, out));
  130|      1|}

HSV2sRGB.c:vips_HSV2sRGB_class_init:
  107|      1|{
  108|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  109|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  110|       |
  111|      1|	object_class->nickname = "HSV2sRGB";
  112|      1|	object_class->description = _("transform HSV to sRGB");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  113|       |
  114|      1|	colour_class->process_line = vips_HSV2sRGB_line;
  115|      1|}

LCh2Lab.c:vips_LCh2Lab_class_init:
  106|      1|{
  107|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  108|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  109|       |
  110|      1|	object_class->nickname = "LCh2Lab";
  111|      1|	object_class->description = _("transform LCh to Lab");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  112|       |
  113|      1|	colour_class->process_line = vips_LCh2Lab_line;
  114|      1|}

LCh2UCS.c:vips_LCh2CMC_class_init:
  201|      1|{
  202|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  203|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  204|       |
  205|      1|	object_class->nickname = "LCh2CMC";
  206|      1|	object_class->description = _("transform LCh to CMC");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  207|       |
  208|      1|	colour_class->process_line = vips_LCh2CMC_line;
  209|      1|}

Lab2LCh.c:vips_Lab2LCh_class_init:
  127|      1|{
  128|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  129|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  130|       |
  131|      1|	object_class->nickname = "Lab2LCh";
  132|      1|	object_class->description = _("transform Lab to LCh");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  133|       |
  134|      1|	colour_class->process_line = vips_Lab2LCh_line;
  135|      1|}

Lab2LabQ.c:vips_Lab2LabQ_class_init:
  132|      1|{
  133|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  134|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  135|       |
  136|      1|	object_class->nickname = "Lab2LabQ";
  137|      1|	object_class->description = _("transform float Lab to LabQ coding");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  138|       |
  139|      1|	colour_class->process_line = vips_Lab2LabQ_line;
  140|      1|}

Lab2LabS.c:vips_Lab2LabS_class_init:
   77|      1|{
   78|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
   79|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
   80|       |
   81|      1|	object_class->nickname = "Lab2LabS";
   82|      1|	object_class->description = _("transform float Lab to signed short");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   83|       |
   84|      1|	colour_class->process_line = vips_Lab2LabS_line;
   85|      1|}

vips_Lab2XYZ:
  219|     94|{
  220|     94|	va_list ap;
  221|     94|	int result;
  222|       |
  223|     94|	va_start(ap, out);
  224|     94|	result = vips_call_split("Lab2XYZ", ap, in, out);
  225|     94|	va_end(ap);
  226|       |
  227|     94|	return result;
  228|     94|}
vips_col_Lab2XYZ:
  245|   262k|{
  246|   262k|	VipsLab2XYZ Lab2XYZ;
  247|       |
  248|   262k|	Lab2XYZ.X0 = VIPS_D65_X0;
  ------------------
  |  |   58|   262k|#define VIPS_D65_X0 (95.0470)
  ------------------
  249|   262k|	Lab2XYZ.Y0 = VIPS_D65_Y0;
  ------------------
  |  |   59|   262k|#define VIPS_D65_Y0 (100.0)
  ------------------
  250|   262k|	Lab2XYZ.Z0 = VIPS_D65_Z0;
  ------------------
  |  |   60|   262k|#define VIPS_D65_Z0 (108.8827)
  ------------------
  251|   262k|	vips_col_Lab2XYZ_helper(&Lab2XYZ, L, a, b, X, Y, Z);
  252|   262k|}
Lab2XYZ.c:vips_Lab2XYZ_class_init:
  168|      1|{
  169|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  171|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  172|       |
  173|      1|	gobject_class->set_property = vips_object_set_property;
  174|      1|	gobject_class->get_property = vips_object_get_property;
  175|       |
  176|      1|	object_class->nickname = "Lab2XYZ";
  177|      1|	object_class->description = _("transform CIELAB to XYZ");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  178|      1|	object_class->build = vips_Lab2XYZ_build;
  179|       |
  180|      1|	colour_class->process_line = vips_Lab2XYZ_line;
  181|       |
  182|      1|	VIPS_ARG_BOXED(class, "temp", 110,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  183|      1|		_("Temperature"),
  184|      1|		_("Color temperature"),
  185|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  186|      1|		G_STRUCT_OFFSET(VipsLab2XYZ, temp),
  187|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  188|      1|}
Lab2XYZ.c:vips_Lab2XYZ_build:
  147|     94|{
  148|     94|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|     94|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|     94|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|     94|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|     94|	VipsLab2XYZ *Lab2XYZ = (VipsLab2XYZ *) object;
  150|       |
  151|     94|	if (Lab2XYZ->temp) {
  ------------------
  |  Branch (151:6): [True: 0, False: 94]
  ------------------
  152|      0|		if (vips_check_vector_length(class->nickname,
  ------------------
  |  Branch (152:7): [True: 0, False: 0]
  ------------------
  153|      0|				Lab2XYZ->temp->n, 3))
  154|      0|			return -1;
  155|      0|		Lab2XYZ->X0 = ((double *) Lab2XYZ->temp->data)[0];
  156|      0|		Lab2XYZ->Y0 = ((double *) Lab2XYZ->temp->data)[1];
  157|      0|		Lab2XYZ->Z0 = ((double *) Lab2XYZ->temp->data)[2];
  158|      0|	}
  159|       |
  160|     94|	if (VIPS_OBJECT_CLASS(vips_Lab2XYZ_parent_class)->build(object))
  ------------------
  |  |  435|     94|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|     94|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|     94|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (160:6): [True: 0, False: 94]
  ------------------
  161|      0|		return -1;
  162|       |
  163|     94|	return 0;
  164|     94|}
Lab2XYZ.c:vips_Lab2XYZ_line:
  115|  1.99k|{
  116|  1.99k|	VipsLab2XYZ *Lab2XYZ = (VipsLab2XYZ *) colour;
  117|  1.99k|	float *restrict p = (float *) in[0];
  118|  1.99k|	float *restrict q = (float *) out;
  119|       |
  120|  1.99k|	int x;
  121|       |
  122|  1.99k|	VIPS_DEBUG_MSG("vips_Lab2XYZ_line: X0 = %g, Y0 = %g, Z0 = %g\n",
  ------------------
  |  |   47|  1.99k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.99k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  1.99k|	{ \
  |  |   49|  1.99k|		; \
  |  |   50|  1.99k|	} \
  |  |   51|  1.99k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.99k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  123|  1.99k|		Lab2XYZ->X0, Lab2XYZ->Y0, Lab2XYZ->Z0);
  124|       |
  125|  25.3k|	for (x = 0; x < width; x++) {
  ------------------
  |  Branch (125:14): [True: 23.3k, False: 1.99k]
  ------------------
  126|  23.3k|		float L, a, b;
  127|  23.3k|		float X, Y, Z;
  128|       |
  129|  23.3k|		L = p[0];
  130|  23.3k|		a = p[1];
  131|  23.3k|		b = p[2];
  132|  23.3k|		p += 3;
  133|       |
  134|  23.3k|		vips_col_Lab2XYZ_helper(Lab2XYZ, L, a, b, &X, &Y, &Z);
  135|       |
  136|       |		/* Write.
  137|       |		 */
  138|  23.3k|		q[0] = X;
  139|  23.3k|		q[1] = Y;
  140|  23.3k|		q[2] = Z;
  141|  23.3k|		q += 3;
  142|  23.3k|	}
  143|  1.99k|}
Lab2XYZ.c:vips_Lab2XYZ_init:
  192|     94|{
  193|     94|	VipsColour *colour = VIPS_COLOUR(Lab2XYZ);
  ------------------
  |  |   42|     94|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     94|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     94|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|     94|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
  194|       |
  195|     94|	Lab2XYZ->X0 = VIPS_D65_X0;
  ------------------
  |  |   58|     94|#define VIPS_D65_X0 (95.0470)
  ------------------
  196|     94|	Lab2XYZ->Y0 = VIPS_D65_Y0;
  ------------------
  |  |   59|     94|#define VIPS_D65_Y0 (100.0)
  ------------------
  197|     94|	Lab2XYZ->Z0 = VIPS_D65_Z0;
  ------------------
  |  |   60|     94|#define VIPS_D65_Z0 (108.8827)
  ------------------
  198|       |
  199|     94|	colour->interpretation = VIPS_INTERPRETATION_XYZ;
  200|     94|}
Lab2XYZ.c:vips_col_Lab2XYZ_helper:
   86|   285k|{
   87|   285k|	double cby, tmp;
   88|       |
   89|   285k|	if (L < 8.0) {
  ------------------
  |  Branch (89:6): [True: 45.8k, False: 239k]
  ------------------
   90|  45.8k|		*Y = (L * Lab2XYZ->Y0) / 903.3;
   91|  45.8k|		cby = 7.787 * (*Y / Lab2XYZ->Y0) + 16.0 / 116.0;
   92|  45.8k|	}
   93|   239k|	else {
   94|   239k|		cby = (L + 16.0) / 116.0;
   95|   239k|		*Y = Lab2XYZ->Y0 * cby * cby * cby;
   96|   239k|	}
   97|       |
   98|   285k|	tmp = a / 500.0 + cby;
   99|   285k|	if (tmp < 0.2069)
  ------------------
  |  Branch (99:6): [True: 54.4k, False: 231k]
  ------------------
  100|  54.4k|		*X = Lab2XYZ->X0 * (tmp - 0.13793) / 7.787;
  101|   231k|	else
  102|   231k|		*X = Lab2XYZ->X0 * tmp * tmp * tmp;
  103|       |
  104|   285k|	tmp = cby - b / 200.0;
  105|   285k|	if (tmp < 0.2069)
  ------------------
  |  Branch (105:6): [True: 80.6k, False: 204k]
  ------------------
  106|  80.6k|		*Z = Lab2XYZ->Z0 * (tmp - 0.13793) / 7.787;
  107|   204k|	else
  108|   204k|		*Z = Lab2XYZ->Z0 * tmp * tmp * tmp;
  109|   285k|}

vips_LabQ2Lab:
  158|      8|{
  159|      8|	va_list ap;
  160|      8|	int result;
  161|       |
  162|      8|	va_start(ap, out);
  163|      8|	result = vips_call_split("LabQ2Lab", ap, in, out);
  164|      8|	va_end(ap);
  165|       |
  166|      8|	return result;
  167|      8|}
LabQ2Lab.c:vips_LabQ2Lab_class_init:
  120|      1|{
  121|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  122|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  123|       |
  124|      1|	object_class->nickname = "LabQ2Lab";
  125|      1|	object_class->description = _("unpack a LabQ image to float Lab");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  126|       |
  127|      1|	colour_class->process_line = vips_LabQ2Lab_line;
  128|      1|}
LabQ2Lab.c:vips_LabQ2Lab_init:
  132|      8|{
  133|      8|	VipsColour *colour = VIPS_COLOUR(LabQ2Lab);
  ------------------
  |  |   42|      8|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      8|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      8|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|      8|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
  134|      8|	VipsColourCode *code = VIPS_COLOUR_CODE(LabQ2Lab);
  ------------------
  |  |  135|      8|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      8|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      8|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  136|      8|		VIPS_TYPE_COLOUR_CODE, VipsColourCode))
  ------------------
  135|       |
  136|      8|	colour->coding = VIPS_CODING_NONE;
  137|      8|	colour->interpretation = VIPS_INTERPRETATION_LAB;
  138|      8|	colour->format = VIPS_FORMAT_FLOAT;
  139|      8|	colour->bands = 3;
  140|       |
  141|      8|	code->input_coding = VIPS_CODING_LABQ;
  142|      8|}
LabQ2Lab.c:vips_LabQ2Lab_line:
   76|    312|{
   77|    312|	signed char *restrict p = (signed char *) in[0];
   78|    312|	float *restrict q = (float *) out;
   79|       |
   80|    312|	int l;
   81|    312|	int lsbs; /* for lsbs byte */
   82|    312|	int i;	  /* counter      */
   83|       |
   84|       |	/* Read input with a signed pointer to get signed ab easily.
   85|       |	 */
   86|  15.0k|	for (i = 0; i < width; i++) {
  ------------------
  |  Branch (86:14): [True: 14.7k, False: 312]
  ------------------
   87|       |		/* Get extra bits.
   88|       |		 */
   89|  14.7k|		lsbs = ((unsigned char *) p)[3];
   90|       |
   91|       |		/* Build L.
   92|       |		 */
   93|  14.7k|		l = ((unsigned char *) p)[0];
   94|  14.7k|		l = (l << 2) | (lsbs >> 6);
   95|  14.7k|		q[0] = (float) l * (100.0 / 1023.0);
   96|       |
   97|       |		/* Build a.
   98|       |		 */
   99|  14.7k|		l = VIPS_LSHIFT_INT(p[1], 3) | ((lsbs >> 3) & 0x7);
  ------------------
  |  |   87|  14.7k|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  ------------------
  100|  14.7k|		q[1] = (float) l * 0.125;
  101|       |
  102|       |		/* And b.
  103|       |		 */
  104|  14.7k|		l = VIPS_LSHIFT_INT(p[2], 3) | (lsbs & 0x7);
  ------------------
  |  |   87|  14.7k|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  ------------------
  105|  14.7k|		q[2] = (float) l * 0.125;
  106|       |
  107|  14.7k|		p += 4;
  108|  14.7k|		q += 3;
  109|  14.7k|	}
  110|    312|}

LabQ2LabS.c:vips_LabQ2LabS_class_init:
   99|      1|{
  100|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  101|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  102|       |
  103|      1|	object_class->nickname = "LabQ2LabS";
  104|      1|	object_class->description = _("unpack a LabQ image to short Lab");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  105|       |
  106|      1|	colour_class->process_line = vips_LabQ2LabS_line;
  107|      1|}

vips_col_make_tables_RGB_8:
  171|   262k|{
  172|   262k|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|   262k|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
  173|       |
  174|   262k|	VIPS_ONCE(&once, calcul_tables_8, NULL);
  ------------------
  |  |   93|   262k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   262k|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|   262k|	{ \
  |  |   95|   262k|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|   262k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|   262k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   262k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|   262k|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|   262k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 1, False: 262k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|   262k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|   262k|   else                                         \
  |  |  |  |  |  |  931|   262k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|   262k|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|   262k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 1, False: 262k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|   262k|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      1|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  242|      1|   (once)->retval : \
  |  |  |  |  243|      1|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|   262k|	} \
  |  |   98|   262k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   262k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|   262k|}
vips_col_make_tables_RGB_16:
  195|  3.43M|{
  196|  3.43M|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|  3.43M|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
  197|       |
  198|  3.43M|	VIPS_ONCE(&once, calcul_tables_16, NULL);
  ------------------
  |  |   93|  3.43M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  3.43M|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|  3.43M|	{ \
  |  |   95|  3.43M|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|  3.43M|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|  3.43M| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  3.43M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|  3.43M|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|  3.43M|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 1, False: 3.43M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|  3.43M|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|  3.43M|   else                                         \
  |  |  |  |  |  |  931|  3.43M|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|  3.43M|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|  3.43M|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 1, False: 3.43M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|  3.43M|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      1|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  242|      1|   (once)->retval : \
  |  |  |  |  243|      1|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|  3.43M|	} \
  |  |   98|  3.43M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  3.43M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  199|  3.43M|}
vips_col_XYZ2scRGB:
  262|  3.67M|{
  263|  3.67M|	X /= SCALE;
  ------------------
  |  |  212|  3.67M|#define SCALE (VIPS_D65_Y0)
  |  |  ------------------
  |  |  |  |   59|  3.67M|#define VIPS_D65_Y0 (100.0)
  |  |  ------------------
  ------------------
  264|  3.67M|	Y /= SCALE;
  ------------------
  |  |  212|  3.67M|#define SCALE (VIPS_D65_Y0)
  |  |  ------------------
  |  |  |  |   59|  3.67M|#define VIPS_D65_Y0 (100.0)
  |  |  ------------------
  ------------------
  265|  3.67M|	Z /= SCALE;
  ------------------
  |  |  212|  3.67M|#define SCALE (VIPS_D65_Y0)
  |  |  ------------------
  |  |  |  |   59|  3.67M|#define VIPS_D65_Y0 (100.0)
  |  |  ------------------
  ------------------
  266|       |
  267|       |	/* Use 6 decimal places of precision for the inverse matrix.
  268|       |	 */
  269|  3.67M|	*R = 3.240625 * X +
  270|  3.67M|		-1.537208 * Y +
  271|  3.67M|		-0.498629 * Z;
  272|  3.67M|	*G = -0.968931 * X +
  273|  3.67M|		1.875756 * Y +
  274|  3.67M|		0.041518 * Z;
  275|  3.67M|	*B = 0.055710 * X +
  276|  3.67M|		-0.204021 * Y +
  277|  3.67M|		1.056996 * Z;
  278|       |
  279|  3.67M|	return 0;
  280|  3.67M|}
vips_col_scRGB2sRGB_8:
  363|   262k|{
  364|   262k|	vips_col_make_tables_RGB_8();
  365|       |
  366|   262k|	return vips_col_scRGB2sRGB(256, vips_Y2v_8, R, G, B, r, g, b, og);
  367|   262k|}
vips_col_scRGB2sRGB_16:
  372|  3.43M|{
  373|  3.43M|	vips_col_make_tables_RGB_16();
  374|       |
  375|  3.43M|	return vips_col_scRGB2sRGB(65536, vips_Y2v_16, R, G, B, r, g, b, og);
  376|  3.43M|}
vips_LabQ2sRGB:
  582|     37|{
  583|     37|	va_list ap;
  584|     37|	int result;
  585|       |
  586|     37|	va_start(ap, out);
  587|     37|	result = vips_call_split("LabQ2sRGB", ap, in, out);
  588|     37|	va_end(ap);
  589|       |
  590|     37|	return result;
  591|     37|}
LabQ2sRGB.c:vips_LabQ2sRGB_class_init:
  544|      1|{
  545|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  546|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  547|       |
  548|      1|	object_class->nickname = "LabQ2sRGB";
  549|      1|	object_class->description = _("convert a LabQ image to sRGB");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  550|       |
  551|      1|	colour_class->process_line = vips_LabQ2sRGB_line;
  552|      1|}
LabQ2sRGB.c:vips_LabQ2sRGB_line:
  491|    927|{
  492|    927|	unsigned char *p = (unsigned char *) in[0];
  493|       |
  494|    927|	int i, t;
  495|       |
  496|       |	/* Current error.
  497|       |	 */
  498|    927|	int le = 0;
  499|    927|	int ae = 0;
  500|    927|	int be = 0;
  501|       |
  502|    927|	vips_col_make_tables_LabQ2sRGB();
  503|       |
  504|  17.0k|	for (i = 0; i < width; i++) {
  ------------------
  |  Branch (504:14): [True: 16.1k, False: 927]
  ------------------
  505|       |		/* Get colour, add in error from previous pixel.
  506|       |		 */
  507|  16.1k|		int L = p[0] + le;
  508|  16.1k|		int A = (signed char) p[1] + ae;
  509|  16.1k|		int B = (signed char) p[2] + be;
  510|       |
  511|  16.1k|		p += 4;
  512|       |
  513|       |		/* Look out for overflow.
  514|       |		 */
  515|  16.1k|		L = VIPS_MIN(255, L);
  ------------------
  |  |   55|  16.1k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 376, False: 15.7k]
  |  |  ------------------
  ------------------
  516|  16.1k|		A = VIPS_MIN(127, A);
  ------------------
  |  |   55|  16.1k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 655, False: 15.5k]
  |  |  ------------------
  ------------------
  517|  16.1k|		B = VIPS_MIN(127, B);
  ------------------
  |  |   55|  16.1k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 631, False: 15.5k]
  |  |  ------------------
  ------------------
  518|       |
  519|       |		/* Find new quant error. This will always be +ve.
  520|       |		 */
  521|  16.1k|		le = L & 3;
  522|  16.1k|		ae = A & 3;
  523|  16.1k|		be = B & 3;
  524|       |
  525|       |		/* Scale to 0-63.
  526|       |		 */
  527|  16.1k|		L = (L >> 2) & 63;
  528|  16.1k|		A = (A >> 2) & 63;
  529|  16.1k|		B = (B >> 2) & 63;
  530|       |
  531|       |		/* Convert to RGB.
  532|       |		 */
  533|  16.1k|		t = INDEX(L, A, B);
  ------------------
  |  |   96|  16.1k|#define INDEX(L, A, B) (L + (A << 6) + (B << 12))
  ------------------
  534|  16.1k|		q[0] = vips_red[t];
  535|  16.1k|		q[1] = vips_green[t];
  536|  16.1k|		q[2] = vips_blue[t];
  537|       |
  538|  16.1k|		q += 3;
  539|  16.1k|	}
  540|    927|}
LabQ2sRGB.c:vips_col_make_tables_LabQ2sRGB:
  481|    927|{
  482|    927|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|    927|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
  483|       |
  484|    927|	VIPS_ONCE(&once, build_tables, NULL);
  ------------------
  |  |   93|    927|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    927|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|    927|	{ \
  |  |   95|    927|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|    927|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|    927| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|    927|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|    927|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|    927|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 1, False: 926]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|    927|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|    927|   else                                         \
  |  |  |  |  |  |  931|    927|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|    927|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|    927|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 1, False: 926]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|    927|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      1|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  242|      1|   (once)->retval : \
  |  |  |  |  243|      1|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|    927|	} \
  |  |   98|    927|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    927|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  485|    927|}
LabQ2sRGB.c:build_tables:
  448|      1|{
  449|      1|	int l, a, b;
  450|      1|	int t;
  451|       |
  452|     65|	for (l = 0; l < 64; l++) {
  ------------------
  |  Branch (452:14): [True: 64, False: 1]
  ------------------
  453|  4.16k|		for (a = 0; a < 64; a++) {
  ------------------
  |  Branch (453:15): [True: 4.09k, False: 64]
  ------------------
  454|   266k|			for (b = 0; b < 64; b++) {
  ------------------
  |  Branch (454:16): [True: 262k, False: 4.09k]
  ------------------
  455|       |				/* Scale to lab space.
  456|       |				 */
  457|   262k|				float L = (l << 2) * (100.0 / 256.0);
  458|   262k|				float A = (signed char) (a << 2);
  459|   262k|				float B = (signed char) (b << 2);
  460|   262k|				float X, Y, Z;
  461|   262k|				float Rf, Gf, Bf;
  462|   262k|				int rb, gb, bb;
  463|       |
  464|   262k|				vips_col_Lab2XYZ(L, A, B, &X, &Y, &Z);
  465|   262k|				vips_col_XYZ2scRGB(X, Y, Z, &Rf, &Gf, &Bf);
  466|   262k|				vips_col_scRGB2sRGB_8(Rf, Gf, Bf, &rb, &gb, &bb, NULL);
  467|       |
  468|   262k|				t = INDEX(l, a, b);
  ------------------
  |  |   96|   262k|#define INDEX(L, A, B) (L + (A << 6) + (B << 12))
  ------------------
  469|   262k|				vips_red[t] = rb;
  470|   262k|				vips_green[t] = gb;
  471|   262k|				vips_blue[t] = bb;
  472|   262k|			}
  473|  4.09k|		}
  474|     64|	}
  475|       |
  476|      1|	return NULL;
  477|      1|}
LabQ2sRGB.c:vips_LabQ2sRGB_init:
  556|     37|{
  557|     37|	VipsColour *colour = VIPS_COLOUR(LabQ2sRGB);
  ------------------
  |  |   42|     37|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     37|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     37|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|     37|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
  558|     37|	VipsColourCode *code = VIPS_COLOUR_CODE(LabQ2sRGB);
  ------------------
  |  |  135|     37|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     37|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     37|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  136|     37|		VIPS_TYPE_COLOUR_CODE, VipsColourCode))
  ------------------
  559|       |
  560|     37|	colour->coding = VIPS_CODING_NONE;
  561|     37|	colour->interpretation = VIPS_INTERPRETATION_sRGB;
  562|     37|	colour->format = VIPS_FORMAT_UCHAR;
  563|     37|	colour->bands = 3;
  564|       |
  565|     37|	code->input_coding = VIPS_CODING_LABQ;
  566|     37|}
LabQ2sRGB.c:calcul_tables_8:
  163|      1|{
  164|      1|	calcul_tables(256, vips_Y2v_8, vips_v2Y_8);
  165|       |
  166|      1|	return NULL;
  167|      1|}
LabQ2sRGB.c:calcul_tables:
  131|      2|{
  132|      2|	int i;
  133|       |
  134|  65.7k|	for (i = 0; i < range; i++) {
  ------------------
  |  Branch (134:14): [True: 65.7k, False: 2]
  ------------------
  135|  65.7k|		float f = (float) i / (range - 1);
  136|  65.7k|		float v;
  137|       |
  138|  65.7k|		if (f <= 0.0031308)
  ------------------
  |  Branch (138:7): [True: 207, False: 65.5k]
  ------------------
  139|    207|			v = 12.92 * f;
  140|  65.5k|		else
  141|  65.5k|			v = (1.0 + 0.055) * pow(f, 1.0 / 2.4) - 0.055;
  142|       |
  143|  65.7k|		Y2v[i] = VIPS_RINT((range - 1) * v);
  ------------------
  |  |   74|  65.7k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  144|  65.7k|	}
  145|       |
  146|       |	/* Copy the final element. This is used in the piecewise linear
  147|       |	 * interpolator below.
  148|       |	 */
  149|      2|	Y2v[range] = Y2v[range - 1];
  150|       |
  151|  65.7k|	for (i = 0; i < range; i++) {
  ------------------
  |  Branch (151:14): [True: 65.7k, False: 2]
  ------------------
  152|  65.7k|		float f = (float) i / (range - 1);
  153|       |
  154|  65.7k|		if (f <= 0.04045)
  ------------------
  |  Branch (154:7): [True: 2.66k, False: 63.1k]
  ------------------
  155|  2.66k|			v2Y[i] = f / 12.92;
  156|  63.1k|		else
  157|  63.1k|			v2Y[i] = pow((f + 0.055) / (1 + 0.055), 2.4);
  158|  65.7k|	}
  159|      2|}
LabQ2sRGB.c:calcul_tables_16:
  187|      1|{
  188|      1|	calcul_tables(65536, vips_Y2v_16, vips_v2Y_16);
  189|       |
  190|      1|	return NULL;
  191|      1|}
LabQ2sRGB.c:vips_col_scRGB2sRGB:
  292|  3.69M|{
  293|  3.69M|	int maxval = range - 1;
  294|       |
  295|  3.69M|	int og;
  296|  3.69M|	float Yf;
  297|  3.69M|	int Yi;
  298|  3.69M|	float v;
  299|       |
  300|       |	/* RGB can be NaN. Throw those values out, they will break
  301|       |	 * our clipping.
  302|       |	 *
  303|       |	 * Don't use isnormal(), it is false for 0.0 and for subnormal
  304|       |	 * numbers.
  305|       |	 */
  306|  3.69M|	if (VIPS_ISNAN(R) || VIPS_ISNAN(G) || VIPS_ISNAN(B)) {
  ------------------
  |  |   71|  7.38M|#define VIPS_ISNAN(V) __builtin_isnan(V)
  |  |  ------------------
  |  |  |  Branch (71:23): [True: 407, False: 3.69M]
  |  |  ------------------
  ------------------
              	if (VIPS_ISNAN(R) || VIPS_ISNAN(G) || VIPS_ISNAN(B)) {
  ------------------
  |  |   71|  7.38M|#define VIPS_ISNAN(V) __builtin_isnan(V)
  |  |  ------------------
  |  |  |  Branch (71:23): [True: 322, False: 3.69M]
  |  |  ------------------
  ------------------
              	if (VIPS_ISNAN(R) || VIPS_ISNAN(G) || VIPS_ISNAN(B)) {
  ------------------
  |  |   71|  3.69M|#define VIPS_ISNAN(V) __builtin_isnan(V)
  |  |  ------------------
  |  |  |  Branch (71:23): [True: 220, False: 3.69M]
  |  |  ------------------
  ------------------
  307|    949|		*r = 0;
  308|    949|		*g = 0;
  309|    949|		*b = 0;
  310|       |
  311|    949|		return -1;
  312|    949|	}
  313|       |
  314|       |	/* Clip range, set the out-of-gamut flag.
  315|       |	 */
  316|  3.69M|#define CLIP(L, V, H) \
  317|  3.69M|	{ \
  318|  3.69M|		if ((V) < (L)) { \
  319|  3.69M|			(V) = (L); \
  320|  3.69M|			og = 1; \
  321|  3.69M|		} \
  322|  3.69M|		else if ((V) > (H)) { \
  323|  3.69M|			(V) = (H); \
  324|  3.69M|			og = 1; \
  325|  3.69M|		} \
  326|  3.69M|	}
  327|       |
  328|       |	/* Look up with a float index: interpolate between the nearest two
  329|       |	 * points.
  330|       |	 *
  331|       |	 * The +1 on the index is safe, see above.
  332|       |	 */
  333|       |
  334|  3.69M|	og = 0;
  335|       |
  336|  3.69M|	Yf = R * maxval;
  337|  3.69M|	CLIP(0, Yf, maxval);
  ------------------
  |  |  317|  3.69M|	{ \
  |  |  318|  3.69M|		if ((V) < (L)) { \
  |  |  ------------------
  |  |  |  Branch (318:7): [True: 299k, False: 3.39M]
  |  |  ------------------
  |  |  319|   299k|			(V) = (L); \
  |  |  320|   299k|			og = 1; \
  |  |  321|   299k|		} \
  |  |  322|  3.69M|		else if ((V) > (H)) { \
  |  |  ------------------
  |  |  |  Branch (322:12): [True: 104k, False: 3.28M]
  |  |  ------------------
  |  |  323|   104k|			(V) = (H); \
  |  |  324|   104k|			og = 1; \
  |  |  325|   104k|		} \
  |  |  326|  3.69M|	}
  ------------------
  338|  3.69M|	Yi = (int) Yf;
  339|  3.69M|	v = lut[Yi] + (lut[Yi + 1] - lut[Yi]) * (Yf - Yi);
  340|  3.69M|	*r = VIPS_RINT(v);
  ------------------
  |  |   74|  3.69M|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  341|       |
  342|  3.69M|	Yf = G * maxval;
  343|  3.69M|	CLIP(0, Yf, maxval);
  ------------------
  |  |  317|  3.69M|	{ \
  |  |  318|  3.69M|		if ((V) < (L)) { \
  |  |  ------------------
  |  |  |  Branch (318:7): [True: 70.6k, False: 3.62M]
  |  |  ------------------
  |  |  319|  70.6k|			(V) = (L); \
  |  |  320|  70.6k|			og = 1; \
  |  |  321|  70.6k|		} \
  |  |  322|  3.69M|		else if ((V) > (H)) { \
  |  |  ------------------
  |  |  |  Branch (322:12): [True: 109k, False: 3.51M]
  |  |  ------------------
  |  |  323|   109k|			(V) = (H); \
  |  |  324|   109k|			og = 1; \
  |  |  325|   109k|		} \
  |  |  326|  3.69M|	}
  ------------------
  344|  3.69M|	Yi = (int) Yf;
  345|  3.69M|	v = lut[Yi] + (lut[Yi + 1] - lut[Yi]) * (Yf - Yi);
  346|  3.69M|	*g = VIPS_RINT(v);
  ------------------
  |  |   74|  3.69M|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  347|       |
  348|  3.69M|	Yf = B * maxval;
  349|  3.69M|	CLIP(0, Yf, maxval);
  ------------------
  |  |  317|  3.69M|	{ \
  |  |  318|  3.69M|		if ((V) < (L)) { \
  |  |  ------------------
  |  |  |  Branch (318:7): [True: 121k, False: 3.57M]
  |  |  ------------------
  |  |  319|   121k|			(V) = (L); \
  |  |  320|   121k|			og = 1; \
  |  |  321|   121k|		} \
  |  |  322|  3.69M|		else if ((V) > (H)) { \
  |  |  ------------------
  |  |  |  Branch (322:12): [True: 150k, False: 3.42M]
  |  |  ------------------
  |  |  323|   150k|			(V) = (H); \
  |  |  324|   150k|			og = 1; \
  |  |  325|   150k|		} \
  |  |  326|  3.69M|	}
  ------------------
  350|  3.69M|	Yi = (int) Yf;
  351|  3.69M|	v = lut[Yi] + (lut[Yi + 1] - lut[Yi]) * (Yf - Yi);
  352|  3.69M|	*b = VIPS_RINT(v);
  ------------------
  |  |   74|  3.69M|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  353|       |
  354|  3.69M|	if (og_ret)
  ------------------
  |  Branch (354:6): [True: 0, False: 3.69M]
  ------------------
  355|      0|		*og_ret = og;
  356|       |
  357|  3.69M|	return 0;
  358|  3.69M|}

vips_LabS2Lab:
  112|     66|{
  113|     66|	va_list ap;
  114|     66|	int result;
  115|       |
  116|     66|	va_start(ap, out);
  117|     66|	result = vips_call_split("LabS2Lab", ap, in, out);
  118|     66|	va_end(ap);
  119|       |
  120|     66|	return result;
  121|     66|}
LabS2Lab.c:vips_LabS2Lab_class_init:
   73|      1|{
   74|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
   75|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
   76|       |
   77|      1|	object_class->nickname = "LabS2Lab";
   78|      1|	object_class->description = _("transform signed short Lab to float");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   79|       |
   80|      1|	colour_class->process_line = vips_LabS2Lab_line;
   81|      1|}
LabS2Lab.c:vips_LabS2Lab_line:
   56|  1.24k|{
   57|  1.24k|	signed short *p = (signed short *) in[0];
   58|  1.24k|	float *q = (float *) out;
   59|  1.24k|	int i;
   60|       |
   61|  21.1k|	for (i = 0; i < width; i++) {
  ------------------
  |  Branch (61:14): [True: 19.9k, False: 1.24k]
  ------------------
   62|  19.9k|		q[0] = p[0] / (32767.0 / 100.0);
   63|  19.9k|		q[1] = p[1] / (32768.0 / 128.0);
   64|  19.9k|		q[2] = p[2] / (32768.0 / 128.0);
   65|       |
   66|  19.9k|		p += 3;
   67|  19.9k|		q += 3;
   68|  19.9k|	}
   69|  1.24k|}
LabS2Lab.c:vips_LabS2Lab_init:
   85|     66|{
   86|     66|	VipsColour *colour = VIPS_COLOUR(LabS2Lab);
  ------------------
  |  |   42|     66|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     66|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     66|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|     66|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
   87|     66|	VipsColourCode *code = VIPS_COLOUR_CODE(LabS2Lab);
  ------------------
  |  |  135|     66|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     66|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     66|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  136|     66|		VIPS_TYPE_COLOUR_CODE, VipsColourCode))
  ------------------
   88|       |
   89|     66|	colour->interpretation = VIPS_INTERPRETATION_LAB;
   90|     66|	colour->format = VIPS_FORMAT_FLOAT;
   91|     66|	colour->input_bands = 3;
   92|     66|	colour->bands = 3;
   93|       |
   94|     66|	code->input_coding = VIPS_CODING_NONE;
   95|     66|	code->input_format = VIPS_FORMAT_SHORT;
   96|     66|}

LabS2LabQ.c:vips_LabS2LabQ_class_init:
  122|      1|{
  123|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  124|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  125|       |
  126|      1|	object_class->nickname = "LabS2LabQ";
  127|      1|	object_class->description = _("transform short Lab to LabQ coding");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  128|       |
  129|      1|	colour_class->process_line = vips_LabS2LabQ_line;
  130|      1|}

UCS2LCh.c:vips_CMC2LCh_class_init:
  268|      1|{
  269|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  270|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  271|       |
  272|      1|	object_class->nickname = "CMC2LCh";
  273|      1|	object_class->description = _("transform LCh to CMC");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  274|       |
  275|      1|	colour_class->process_line = vips_CMC2LCh_line;
  276|      1|}

XYZ2CMYK.c:vips_XYZ2CMYK_class_init:
  104|      1|{
  105|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  106|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  107|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  108|       |
  109|      1|	gobject_class->set_property = vips_object_set_property;
  110|      1|	gobject_class->get_property = vips_object_get_property;
  111|       |
  112|      1|	object_class->nickname = "XYZ2CMYK";
  113|      1|	object_class->description = _("transform XYZ to CMYK");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  114|       |
  115|      1|	object_class->build = vips_XYZ2CMYK_build;
  116|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  117|       |
  118|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  119|      1|		_("Input"),
  120|      1|		_("Input image"),
  121|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  122|      1|		G_STRUCT_OFFSET(VipsXYZ2CMYK, in));
  123|       |
  124|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  125|      1|		_("Output"),
  126|      1|		_("Output image"),
  127|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  128|      1|		G_STRUCT_OFFSET(VipsXYZ2CMYK, out));
  129|      1|}

XYZ2Lab.c:vips_XYZ2Lab_class_init:
  221|      1|{
  222|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  224|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  225|       |
  226|      1|	gobject_class->set_property = vips_object_set_property;
  227|      1|	gobject_class->get_property = vips_object_get_property;
  228|       |
  229|      1|	object_class->nickname = "XYZ2Lab";
  230|      1|	object_class->description = _("transform XYZ to Lab");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  231|      1|	object_class->build = vips_XYZ2Lab_build;
  232|       |
  233|      1|	colour_class->process_line = vips_XYZ2Lab_line;
  234|       |
  235|      1|	VIPS_ARG_BOXED(class, "temp", 110,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  236|      1|		_("Temperature"),
  237|      1|		_("Colour temperature"),
  238|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  239|      1|		G_STRUCT_OFFSET(VipsXYZ2Lab, temp),
  240|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  241|      1|}

XYZ2Yxy.c:vips_XYZ2Yxy_class_init:
   93|      1|{
   94|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
   95|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
   96|       |
   97|      1|	object_class->nickname = "XYZ2Yxy";
   98|      1|	object_class->description = _("transform XYZ to Yxy");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   99|       |
  100|      1|	colour_class->process_line = vips_XYZ2Yxy_line;
  101|      1|}

vips_XYZ2scRGB:
  229|  1.15k|{
  230|  1.15k|	va_list ap;
  231|  1.15k|	int result;
  232|       |
  233|  1.15k|	va_start(ap, out);
  234|  1.15k|	result = vips_call_split("XYZ2scRGB", ap, in, out);
  235|  1.15k|	va_end(ap);
  236|       |
  237|  1.15k|	return result;
  238|  1.15k|}
XYZ2scRGB.c:vips_XYZ2scRGB_class_init:
  185|      1|{
  186|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  188|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  189|       |
  190|      1|	gobject_class->set_property = vips_object_set_property;
  191|      1|	gobject_class->get_property = vips_object_get_property;
  192|       |
  193|      1|	object_class->nickname = "XYZ2scRGB";
  194|      1|	object_class->description = _("transform XYZ to scRGB");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  195|      1|	object_class->build = vips_XYZ2scRGB_build;
  196|       |
  197|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  198|       |
  199|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  200|      1|		_("Input"),
  201|      1|		_("Input image"),
  202|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  203|      1|		G_STRUCT_OFFSET(VipsXYZ2scRGB, in));
  204|       |
  205|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  206|      1|		_("Output"),
  207|      1|		_("Output image"),
  208|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  209|      1|		G_STRUCT_OFFSET(VipsXYZ2scRGB, out));
  210|      1|}
XYZ2scRGB.c:vips_XYZ2scRGB_build:
  142|  1.15k|{
  143|  1.15k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  1.15k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  1.15k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  1.15k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  144|  1.15k|	VipsXYZ2scRGB *XYZ2scRGB = (VipsXYZ2scRGB *) object;
  145|       |
  146|  1.15k|	VipsImage **t = (VipsImage **) vips_object_local_array(object, 2);
  147|       |
  148|  1.15k|	VipsImage *in;
  149|  1.15k|	VipsImage *out;
  150|       |
  151|  1.15k|	if (VIPS_OBJECT_CLASS(vips_XYZ2scRGB_parent_class)->build(object))
  ------------------
  |  |  435|  1.15k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.15k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.15k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (151:6): [True: 0, False: 1.15k]
  ------------------
  152|      0|		return -1;
  153|       |
  154|  1.15k|	in = XYZ2scRGB->in;
  155|  1.15k|	if (vips_check_bands_atleast(class->nickname, in, 3))
  ------------------
  |  Branch (155:6): [True: 0, False: 1.15k]
  ------------------
  156|      0|		return -1;
  157|       |
  158|  1.15k|	if (vips_cast_float(in, &t[0], NULL))
  ------------------
  |  Branch (158:6): [True: 0, False: 1.15k]
  ------------------
  159|      0|		return -1;
  160|  1.15k|	in = t[0];
  161|       |
  162|  1.15k|	out = vips_image_new();
  163|  1.15k|	if (vips_image_pipelinev(out,
  ------------------
  |  Branch (163:6): [True: 0, False: 1.15k]
  ------------------
  164|  1.15k|			VIPS_DEMAND_STYLE_THINSTRIP, in, NULL)) {
  165|      0|		g_object_unref(out);
  166|      0|		return -1;
  167|      0|	}
  168|  1.15k|	out->Type = VIPS_INTERPRETATION_scRGB;
  169|  1.15k|	out->BandFmt = VIPS_FORMAT_FLOAT;
  170|       |
  171|  1.15k|	if (vips_image_generate(out,
  ------------------
  |  Branch (171:6): [True: 0, False: 1.15k]
  ------------------
  172|  1.15k|			vips_start_one, vips_XYZ2scRGB_gen, vips_stop_one,
  173|  1.15k|			in, XYZ2scRGB)) {
  174|      0|		g_object_unref(out);
  175|      0|		return -1;
  176|      0|	}
  177|       |
  178|  1.15k|	g_object_set(object, "out", out, NULL);
  179|       |
  180|  1.15k|	return 0;
  181|  1.15k|}
XYZ2scRGB.c:vips_XYZ2scRGB_gen:
  114|  4.08k|{
  115|  4.08k|	VipsRegion *ir = (VipsRegion *) seq;
  116|  4.08k|	VipsRect *r = &out_region->valid;
  117|  4.08k|	VipsImage *in = ir->im;
  118|       |
  119|  4.08k|	int y;
  120|       |
  121|  4.08k|	if (vips_region_prepare(ir, r))
  ------------------
  |  Branch (121:6): [True: 305, False: 3.77k]
  ------------------
  122|    305|		return -1;
  123|       |
  124|  4.08k|	VIPS_GATE_START("vips_XYZ2scRGB: work");
  ------------------
  |  |   41|  3.77k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  3.77k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  3.77k|	{ \
  |  |   43|  3.77k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 3.77k]
  |  |  ------------------
  |  |   44|  3.77k|			vips__thread_gate_start(NAME); \
  |  |   45|  3.77k|	} \
  |  |   46|  4.08k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  4.08k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  125|       |
  126|  54.6k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (126:14): [True: 50.9k, False: 3.77k]
  ------------------
  127|  50.9k|		float *p = (float *)
  128|  50.9k|			VIPS_REGION_ADDR(ir, r->left, r->top + y);
  ------------------
  |  |  227|  50.9k|	((R)->data + \
  |  |  228|  50.9k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  50.9k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  50.9k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  50.9k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  50.9k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  50.9k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  129|  50.9k|		float *q = (float *)
  130|  50.9k|			VIPS_REGION_ADDR(out_region, r->left, r->top + y);
  ------------------
  |  |  227|  50.9k|	((R)->data + \
  |  |  228|  50.9k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  50.9k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  50.9k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  50.9k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  50.9k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  50.9k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  131|       |
  132|  50.9k|		vips_XYZ2scRGB_line(q, p, in->Bands - 3, r->width);
  133|  50.9k|	}
  134|       |
  135|  3.77k|	VIPS_GATE_STOP("vips_XYZ2scRGB: work");
  ------------------
  |  |   49|  3.77k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  3.77k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  3.77k|	{ \
  |  |   51|  3.77k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 3.77k]
  |  |  ------------------
  |  |   52|  3.77k|			vips__thread_gate_stop(NAME); \
  |  |   53|  3.77k|	} \
  |  |   54|  3.77k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  3.77k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  136|       |
  137|  3.77k|	return 0;
  138|  4.08k|}
XYZ2scRGB.c:vips_XYZ2scRGB_line:
   84|  50.9k|{
   85|  50.9k|	int i, j;
   86|       |
   87|  3.46M|	for (i = 0; i < width; i++) {
  ------------------
  |  Branch (87:14): [True: 3.41M, False: 50.9k]
  ------------------
   88|  3.41M|		const float X = p[0];
   89|  3.41M|		const float Y = p[1];
   90|  3.41M|		const float Z = p[2];
   91|       |
   92|  3.41M|		float R, G, B;
   93|       |
   94|  3.41M|		p += 3;
   95|       |
   96|  3.41M|		vips_col_XYZ2scRGB(X, Y, Z, &R, &G, &B);
   97|       |
   98|  3.41M|		q[0] = R;
   99|  3.41M|		q[1] = G;
  100|  3.41M|		q[2] = B;
  101|       |
  102|  3.41M|		q += 3;
  103|       |
  104|  3.44M|		for (j = 0; j < extra_bands; j++)
  ------------------
  |  Branch (104:15): [True: 32.3k, False: 3.41M]
  ------------------
  105|  3.41M|			q[j] = VIPS_CLIP(0, p[j] / 255.0, 1.0);
  ------------------
  |  |   57|  32.3k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|  64.7k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 828, False: 31.5k]
  |  |  |  |  |  Branch (54:32): [True: 1.29k, False: 31.0k]
  |  |  |  |  |  Branch (54:44): [True: 1.29k, False: 30.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  106|  3.41M|		p += extra_bands;
  107|  3.41M|		q += extra_bands;
  108|  3.41M|	}
  109|  50.9k|}
XYZ2scRGB.c:vips_XYZ2scRGB_init:
  214|  1.15k|{
  215|  1.15k|}

Yxy2XYZ.c:vips_Yxy2XYZ_class_init:
   98|      1|{
   99|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  100|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  101|       |
  102|      1|	object_class->nickname = "Yxy2XYZ";
  103|      1|	object_class->description = _("transform Yxy to XYZ");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  104|       |
  105|      1|	colour_class->process_line = vips_Yxy2XYZ_line;
  106|      1|}

vips_colour_operation_init:
  712|      2|{
  713|      2|	extern GType vips_colourspace_get_type(void);
  714|      2|	extern GType vips_Lab2XYZ_get_type(void);
  715|      2|	extern GType vips_XYZ2Lab_get_type(void);
  716|      2|	extern GType vips_Lab2LCh_get_type(void);
  717|      2|	extern GType vips_LCh2Lab_get_type(void);
  718|      2|	extern GType vips_LCh2CMC_get_type(void);
  719|      2|	extern GType vips_CMC2LCh_get_type(void);
  720|      2|	extern GType vips_Yxy2XYZ_get_type(void);
  721|      2|	extern GType vips_XYZ2Yxy_get_type(void);
  722|      2|	extern GType vips_LabQ2Lab_get_type(void);
  723|      2|	extern GType vips_Lab2LabQ_get_type(void);
  724|      2|	extern GType vips_LabQ2LabS_get_type(void);
  725|      2|	extern GType vips_LabS2LabQ_get_type(void);
  726|      2|	extern GType vips_LabS2Lab_get_type(void);
  727|      2|	extern GType vips_Lab2LabS_get_type(void);
  728|      2|	extern GType vips_rad2float_get_type(void);
  729|      2|	extern GType vips_float2rad_get_type(void);
  730|      2|	extern GType vips_LabQ2sRGB_get_type(void);
  731|      2|	extern GType vips_XYZ2sRGB_get_type(void);
  732|      2|	extern GType vips_sRGB2scRGB_get_type(void);
  733|      2|	extern GType vips_sRGB2HSV_get_type(void);
  734|      2|	extern GType vips_HSV2sRGB_get_type(void);
  735|      2|	extern GType vips_scRGB2XYZ_get_type(void);
  736|      2|	extern GType vips_scRGB2BW_get_type(void);
  737|      2|	extern GType vips_XYZ2scRGB_get_type(void);
  738|      2|	extern GType vips_scRGB2sRGB_get_type(void);
  739|      2|	extern GType vips_CMYK2XYZ_get_type(void);
  740|      2|	extern GType vips_XYZ2CMYK_get_type(void);
  741|      2|	extern GType vips_profile_load_get_type(void);
  742|      2|#ifdef HAVE_LCMS2
  743|      2|	extern GType vips_icc_import_get_type(void);
  744|      2|	extern GType vips_icc_export_get_type(void);
  745|      2|	extern GType vips_icc_transform_get_type(void);
  746|      2|#endif
  747|      2|	extern GType vips_dE76_get_type(void);
  748|      2|	extern GType vips_dE00_get_type(void);
  749|      2|	extern GType vips_dECMC_get_type(void);
  750|       |
  751|      2|	vips_colourspace_get_type();
  752|      2|	vips_Lab2XYZ_get_type();
  753|      2|	vips_XYZ2Lab_get_type();
  754|      2|	vips_Lab2LCh_get_type();
  755|      2|	vips_LCh2Lab_get_type();
  756|      2|	vips_LCh2CMC_get_type();
  757|      2|	vips_CMC2LCh_get_type();
  758|      2|	vips_XYZ2Yxy_get_type();
  759|      2|	vips_Yxy2XYZ_get_type();
  760|      2|	vips_LabQ2Lab_get_type();
  761|      2|	vips_Lab2LabQ_get_type();
  762|      2|	vips_LabQ2LabS_get_type();
  763|      2|	vips_LabS2LabQ_get_type();
  764|      2|	vips_LabS2Lab_get_type();
  765|      2|	vips_Lab2LabS_get_type();
  766|      2|	vips_rad2float_get_type();
  767|      2|	vips_float2rad_get_type();
  768|      2|	vips_LabQ2sRGB_get_type();
  769|      2|	vips_sRGB2scRGB_get_type();
  770|      2|	vips_scRGB2XYZ_get_type();
  771|      2|	vips_scRGB2BW_get_type();
  772|      2|	vips_sRGB2HSV_get_type();
  773|      2|	vips_HSV2sRGB_get_type();
  774|      2|	vips_XYZ2scRGB_get_type();
  775|      2|	vips_scRGB2sRGB_get_type();
  776|      2|	vips_CMYK2XYZ_get_type();
  777|      2|	vips_XYZ2CMYK_get_type();
  778|      2|	vips_profile_load_get_type();
  779|      2|#ifdef HAVE_LCMS2
  780|      2|	vips_icc_import_get_type();
  781|      2|	vips_icc_export_get_type();
  782|      2|	vips_icc_transform_get_type();
  783|      2|#endif
  784|      2|	vips_dE76_get_type();
  785|      2|	vips_dE00_get_type();
  786|      2|	vips_dECMC_get_type();
  787|      2|}
colour.c:vips_colour_class_init:
  400|      1|{
  401|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  402|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  403|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  404|       |
  405|      1|	gobject_class->set_property = vips_object_set_property;
  406|      1|	gobject_class->get_property = vips_object_get_property;
  407|       |
  408|      1|	vobject_class->nickname = "colour";
  409|      1|	vobject_class->description = _("color operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  410|      1|	vobject_class->build = vips_colour_build;
  411|       |
  412|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  413|       |
  414|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  415|      1|		_("Output"),
  416|      1|		_("Output image"),
  417|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  418|      1|		G_STRUCT_OFFSET(VipsColour, out));
  419|      1|}
colour.c:vips_colour_build:
  267|  1.36k|{
  268|  1.36k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  1.36k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  1.36k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  1.36k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|  1.36k|	VipsColour *colour = VIPS_COLOUR(object);
  ------------------
  |  |   42|  1.36k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  1.36k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.36k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|  1.36k|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
  270|       |
  271|  1.36k|	VipsImage **in;
  272|  1.36k|	VipsImage **extra_bands;
  273|  1.36k|	VipsImage *out;
  274|       |
  275|  1.36k|	int i;
  276|       |
  277|       |#ifdef DEBUG
  278|       |	printf("vips_colour_build: ");
  279|       |	vips_object_print_name(object);
  280|       |	printf("\n");
  281|       |#endif /*DEBUG*/
  282|       |
  283|  1.36k|	if (VIPS_OBJECT_CLASS(vips_colour_parent_class)->build(object))
  ------------------
  |  |  435|  1.36k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.36k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.36k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (283:6): [True: 0, False: 1.36k]
  ------------------
  284|      0|		return -1;
  285|       |
  286|  1.36k|	if (colour->n > MAX_INPUT_IMAGES) {
  ------------------
  |  |  223|  1.36k|#define MAX_INPUT_IMAGES (64)
  ------------------
  |  Branch (286:6): [True: 0, False: 1.36k]
  ------------------
  287|      0|		vips_error(class->nickname,
  288|      0|			"%s", _("too many input images"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  289|      0|		return -1;
  290|      0|	}
  291|  2.72k|	for (i = 0; i < colour->n; i++)
  ------------------
  |  Branch (291:14): [True: 1.36k, False: 1.36k]
  ------------------
  292|  1.36k|		if (vips_image_pio_input(colour->in[i]))
  ------------------
  |  Branch (292:7): [True: 0, False: 1.36k]
  ------------------
  293|      0|			return -1;
  294|       |
  295|       |	/* colour->in[] must be NULL-terminated, we can use it as an arg to
  296|       |	 * vips_start_many().
  297|       |	 */
  298|  1.36k|	g_assert(!colour->in[colour->n]);
  ------------------
  |  |  166|  1.36k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.36k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.36k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  299|       |
  300|  1.36k|	in = colour->in;
  301|  1.36k|	extra_bands = (VipsImage **)
  302|  1.36k|		vips_object_local_array(object, colour->n);
  303|       |
  304|       |	/* If there are more than @input_bands bands, we detach and reattach
  305|       |	 * after processing.
  306|       |	 */
  307|  1.36k|	if (colour->input_bands > 0) {
  ------------------
  |  Branch (307:6): [True: 1.06k, False: 291]
  ------------------
  308|  1.06k|		VipsImage **new_in = (VipsImage **)
  309|  1.06k|			vips_object_local_array(object, colour->n);
  310|       |
  311|  2.13k|		for (i = 0; i < colour->n; i++) {
  ------------------
  |  Branch (311:15): [True: 1.06k, False: 1.06k]
  ------------------
  312|  1.06k|			if (vips_check_bands_atleast(class->nickname,
  ------------------
  |  Branch (312:8): [True: 0, False: 1.06k]
  ------------------
  313|  1.06k|					in[i], colour->input_bands))
  314|      0|				return -1;
  315|       |
  316|  1.06k|			if (in[i]->Bands > colour->input_bands) {
  ------------------
  |  Branch (316:8): [True: 123, False: 946]
  ------------------
  317|    123|				if (vips_extract_band(in[i], &new_in[i], 0,
  ------------------
  |  Branch (317:9): [True: 0, False: 123]
  ------------------
  318|    123|						"n", colour->input_bands,
  319|    123|						NULL))
  320|      0|					return -1;
  321|    123|			}
  322|    946|			else {
  323|    946|				new_in[i] = in[i];
  324|    946|				g_object_ref(new_in[i]);
  325|    946|			}
  326|       |
  327|  1.06k|			if (in[i]->Bands > colour->input_bands)
  ------------------
  |  Branch (327:8): [True: 123, False: 946]
  ------------------
  328|    123|				if (vips_extract_band(in[i], &extra_bands[i],
  ------------------
  |  Branch (328:9): [True: 0, False: 123]
  ------------------
  329|    123|						colour->input_bands,
  330|    123|						"n", in[i]->Bands - colour->input_bands,
  331|    123|						NULL))
  332|      0|					return -1;
  333|  1.06k|		}
  334|       |
  335|  1.06k|		in = new_in;
  336|  1.06k|	}
  337|       |
  338|  1.36k|	out = vips_image_new();
  339|  1.36k|	if (vips_image_pipeline_array(out,
  ------------------
  |  Branch (339:6): [True: 0, False: 1.36k]
  ------------------
  340|  1.36k|			VIPS_DEMAND_STYLE_THINSTRIP, in)) {
  341|      0|		g_object_unref(out);
  342|      0|		return -1;
  343|      0|	}
  344|  1.36k|	out->Coding = colour->coding;
  345|  1.36k|	out->Type = colour->interpretation;
  346|  1.36k|	out->BandFmt = colour->format;
  347|  1.36k|	out->Bands = colour->bands;
  348|       |
  349|  1.36k|	if (colour->profile_filename &&
  ------------------
  |  Branch (349:6): [True: 0, False: 1.36k]
  ------------------
  350|  1.36k|		vips__profile_set(out, colour->profile_filename))
  ------------------
  |  Branch (350:3): [True: 0, False: 0]
  ------------------
  351|      0|		return -1;
  352|       |
  353|  1.36k|	if (vips_image_generate(out,
  ------------------
  |  Branch (353:6): [True: 0, False: 1.36k]
  ------------------
  354|  1.36k|			vips_start_many, vips_colour_gen, vips_stop_many,
  355|  1.36k|			in, colour)) {
  356|      0|		g_object_unref(out);
  357|      0|		return -1;
  358|      0|	}
  359|       |
  360|       |	/* Reattach higher bands, if necessary. If we have more than one input
  361|       |	 * image, just use the first extra bands.
  362|       |	 */
  363|  2.59k|	for (i = 0; i < colour->n; i++)
  ------------------
  |  Branch (363:14): [True: 1.36k, False: 1.23k]
  ------------------
  364|  1.36k|		if (extra_bands[i]) {
  ------------------
  |  Branch (364:7): [True: 123, False: 1.23k]
  ------------------
  365|    123|			VipsImage *t1, *t2;
  366|       |
  367|       |			/* We can't just reattach the extra bands: they might
  368|       |			 * be float (for example) and we might be trying to
  369|       |			 * make a short image. Cast extra to match the body of
  370|       |			 * the image.
  371|       |			 */
  372|       |
  373|    123|			if (vips_cast(extra_bands[i], &t1, out->BandFmt,
  ------------------
  |  Branch (373:8): [True: 0, False: 123]
  ------------------
  374|    123|					"shift", TRUE,
  ------------------
  |  |  798|    123|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    123|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  375|    123|					NULL)) {
  376|      0|				g_object_unref(out);
  377|      0|				return -1;
  378|      0|			}
  379|       |
  380|    123|			if (vips_bandjoin2(out, t1, &t2,
  ------------------
  |  Branch (380:8): [True: 0, False: 123]
  ------------------
  381|    123|					NULL)) {
  382|      0|				g_object_unref(t1);
  383|      0|				g_object_unref(out);
  384|      0|				return -1;
  385|      0|			}
  386|    123|			g_object_unref(out);
  387|    123|			g_object_unref(t1);
  388|    123|			out = t2;
  389|       |
  390|    123|			break;
  391|    123|		}
  392|       |
  393|  1.36k|	g_object_set(colour, "out", out, NULL);
  394|       |
  395|  1.36k|	return 0;
  396|  1.36k|}
colour.c:vips_colour_gen:
  228|  3.84k|{
  229|  3.84k|	VipsRegion **ir = (VipsRegion **) seq;
  230|  3.84k|	VipsColour *colour = VIPS_COLOUR(b);
  ------------------
  |  |   42|  3.84k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  3.84k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  3.84k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|  3.84k|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
  231|  3.84k|	VipsColourClass *class = VIPS_COLOUR_GET_CLASS(colour);
  ------------------
  |  |   52|  3.84k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  3.84k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  3.84k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|  3.84k|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  232|  3.84k|	VipsRect *r = &out_region->valid;
  233|       |
  234|  3.84k|	int i, y;
  235|  3.84k|	VipsPel *p[MAX_INPUT_IMAGES], *q;
  236|       |
  237|       |	/*
  238|       |	printf("vips_colour_gen: %s, "
  239|       |		   "left = %d, top = %d, width = %d, height = %d\n",
  240|       |		VIPS_OBJECT_CLASS(class)->nickname,
  241|       |		r->left, r->top, r->width, r->height);
  242|       |	*/
  243|       |
  244|  3.84k|	if (vips_reorder_prepare_many(out_region->im, ir, r))
  ------------------
  |  Branch (244:6): [True: 502, False: 3.34k]
  ------------------
  245|    502|		return -1;
  246|       |
  247|  3.84k|	VIPS_GATE_START("vips_colour_gen: work");
  ------------------
  |  |   41|  3.34k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  3.34k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  3.34k|	{ \
  |  |   43|  3.34k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 3.34k]
  |  |  ------------------
  |  |   44|  3.34k|			vips__thread_gate_start(NAME); \
  |  |   45|  3.34k|	} \
  |  |   46|  3.84k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  3.84k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  248|       |
  249|  46.5k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (249:14): [True: 43.1k, False: 3.34k]
  ------------------
  250|  86.3k|		for (i = 0; ir[i]; i++)
  ------------------
  |  Branch (250:15): [True: 43.1k, False: 43.1k]
  ------------------
  251|  43.1k|			p[i] = VIPS_REGION_ADDR(ir[i], r->left, r->top + y);
  ------------------
  |  |  227|  43.1k|	((R)->data + \
  |  |  228|  43.1k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  43.1k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  43.1k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  43.1k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  43.1k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  43.1k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|  43.1k|		p[i] = NULL;
  253|  43.1k|		q = VIPS_REGION_ADDR(out_region, r->left, r->top + y);
  ------------------
  |  |  227|  43.1k|	((R)->data + \
  |  |  228|  43.1k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  43.1k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  43.1k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  43.1k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  43.1k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  43.1k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|       |
  255|  43.1k|		class->process_line(colour, q, p, r->width);
  256|  43.1k|	}
  257|       |
  258|  3.34k|	VIPS_GATE_STOP("vips_colour_gen: work");
  ------------------
  |  |   49|  3.34k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  3.34k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  3.34k|	{ \
  |  |   51|  3.34k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 3.34k]
  |  |  ------------------
  |  |   52|  3.34k|			vips__thread_gate_stop(NAME); \
  |  |   53|  3.34k|	} \
  |  |   54|  3.34k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  3.34k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|       |
  260|  3.34k|	VIPS_COUNT_PIXELS(out_region, VIPS_OBJECT_GET_CLASS(colour)->nickname);
  ------------------
  |  |  189|  3.34k|#define VIPS_COUNT_PIXELS(R, N) vips__region_count_pixels(R, N)
  ------------------
  261|       |
  262|  3.34k|	return 0;
  263|  3.84k|}
colour.c:vips_colour_init:
  423|  1.36k|{
  424|  1.36k|	colour->coding = VIPS_CODING_NONE;
  425|  1.36k|	colour->interpretation = VIPS_INTERPRETATION_sRGB;
  426|  1.36k|	colour->format = VIPS_FORMAT_UCHAR;
  427|  1.36k|	colour->bands = 3;
  428|  1.36k|	colour->input_bands = -1;
  429|  1.36k|}
colour.c:vips_colour_transform_class_init:
  468|      1|{
  469|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  471|       |
  472|      1|	gobject_class->set_property = vips_object_set_property;
  473|      1|	gobject_class->get_property = vips_object_get_property;
  474|       |
  475|      1|	vobject_class->nickname = "space";
  476|      1|	vobject_class->description = _("color space transformations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  477|      1|	vobject_class->build = vips_colour_transform_build;
  478|       |
  479|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  480|      1|		_("Input"),
  481|      1|		_("Input image"),
  482|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  483|      1|		G_STRUCT_OFFSET(VipsColourTransform, in));
  484|      1|}
colour.c:vips_colour_transform_build:
  436|     94|{
  437|     94|	VipsColour *colour = VIPS_COLOUR(object);
  ------------------
  |  |   42|     94|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     94|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     94|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|     94|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
  438|     94|	VipsColourTransform *transform = VIPS_COLOUR_TRANSFORM(object);
  ------------------
  |  |  103|     94|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     94|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     94|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  104|     94|		VIPS_TYPE_COLOUR_TRANSFORM, VipsColourTransform))
  ------------------
  439|     94|	VipsImage **t = (VipsImage **) vips_object_local_array(object, 1);
  440|       |
  441|       |	/* We only process float.
  442|       |	 */
  443|     94|	if (transform->in &&
  ------------------
  |  Branch (443:6): [True: 94, False: 0]
  ------------------
  444|     94|		transform->in->BandFmt != VIPS_FORMAT_FLOAT) {
  ------------------
  |  Branch (444:3): [True: 24, False: 70]
  ------------------
  445|     24|		if (vips_cast_float(transform->in, &t[0], NULL))
  ------------------
  |  Branch (445:7): [True: 0, False: 24]
  ------------------
  446|      0|			return -1;
  447|     24|	}
  448|     70|	else {
  449|     70|		t[0] = transform->in;
  450|     70|		g_object_ref(t[0]);
  451|     70|	}
  452|       |
  453|       |	/* We always do 3 bands -> 3 bands.
  454|       |	 */
  455|     94|	colour->input_bands = 3;
  456|       |
  457|     94|	colour->n = 1;
  458|     94|	colour->in = t;
  459|       |
  460|     94|	if (VIPS_OBJECT_CLASS(vips_colour_transform_parent_class)->build(object))
  ------------------
  |  |  435|     94|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|     94|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|     94|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (460:6): [True: 0, False: 94]
  ------------------
  461|      0|		return -1;
  462|       |
  463|     94|	return 0;
  464|     94|}
colour.c:vips_colour_transform_init:
  488|     94|{
  489|     94|	VipsColour *colour = (VipsColour *) space;
  490|       |
  491|       |	/* What we write. interpretation should be overwritten in subclass
  492|       |	 * builds.
  493|       |	 */
  494|     94|	colour->coding = VIPS_CODING_NONE;
  495|     94|	colour->interpretation = VIPS_INTERPRETATION_LAB;
  496|     94|	colour->format = VIPS_FORMAT_FLOAT;
  497|     94|	colour->bands = 3;
  498|     94|}
colour.c:vips_colour_code_class_init:
  561|      1|{
  562|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  563|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  564|       |
  565|      1|	gobject_class->set_property = vips_object_set_property;
  566|      1|	gobject_class->get_property = vips_object_get_property;
  567|       |
  568|      1|	vobject_class->nickname = "code";
  569|      1|	vobject_class->description = _("change color coding");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  570|      1|	vobject_class->build = vips_colour_code_build;
  571|       |
  572|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  573|      1|		_("Input"),
  574|      1|		_("Input image"),
  575|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  576|      1|		G_STRUCT_OFFSET(VipsColourCode, in));
  577|      1|}
colour.c:vips_colour_code_build:
  504|  1.26k|{
  505|  1.26k|	VipsColour *colour = VIPS_COLOUR(object);
  ------------------
  |  |   42|  1.26k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  1.26k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.26k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|  1.26k|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
  506|  1.26k|	VipsColourCode *code = VIPS_COLOUR_CODE(object);
  ------------------
  |  |  135|  1.26k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  1.26k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.26k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  136|  1.26k|		VIPS_TYPE_COLOUR_CODE, VipsColourCode))
  ------------------
  507|  1.26k|	VipsColourCodeClass *class = VIPS_COLOUR_CODE_GET_CLASS(object);
  ------------------
  |  |  145|  1.26k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  1.26k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  1.26k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  146|  1.26k|		VIPS_TYPE_COLOUR_CODE, VipsColourCodeClass))
  ------------------
  508|  1.26k|	VipsImage **t = (VipsImage **) vips_object_local_array(object, 6);
  509|       |
  510|  1.26k|	VipsImage *in;
  511|       |
  512|  1.26k|	in = code->in;
  513|       |
  514|       |	/* If this is a LABQ and the coder wants uncoded, unpack.
  515|       |	 */
  516|  1.26k|	if (in &&
  ------------------
  |  Branch (516:6): [True: 1.26k, False: 0]
  ------------------
  517|  1.26k|		in->Coding == VIPS_CODING_LABQ &&
  ------------------
  |  Branch (517:3): [True: 45, False: 1.22k]
  ------------------
  518|  1.26k|		code->input_coding == VIPS_CODING_NONE) {
  ------------------
  |  Branch (518:3): [True: 0, False: 45]
  ------------------
  519|      0|		if (vips_LabQ2Lab(in, &t[0], NULL))
  ------------------
  |  Branch (519:7): [True: 0, False: 0]
  ------------------
  520|      0|			return -1;
  521|      0|		in = t[0];
  522|      0|	}
  523|       |
  524|  1.26k|	if (in &&
  ------------------
  |  Branch (524:6): [True: 1.26k, False: 0]
  ------------------
  525|  1.26k|		vips_check_coding(VIPS_OBJECT_CLASS(class)->nickname,
  ------------------
  |  |  435|  1.26k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.26k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.26k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (525:3): [True: 0, False: 1.26k]
  ------------------
  526|  1.26k|			in, code->input_coding))
  527|      0|		return -1;
  528|       |
  529|  1.26k|	if (in &&
  ------------------
  |  Branch (529:6): [True: 1.26k, False: 0]
  ------------------
  530|  1.26k|		code->input_coding == VIPS_CODING_NONE &&
  ------------------
  |  Branch (530:3): [True: 975, False: 291]
  ------------------
  531|  1.26k|		code->input_format != VIPS_FORMAT_NOTSET &&
  ------------------
  |  Branch (531:3): [True: 975, False: 0]
  ------------------
  532|  1.26k|		in->BandFmt != code->input_format) {
  ------------------
  |  Branch (532:3): [True: 166, False: 809]
  ------------------
  533|    166|		if (vips_cast(in, &t[3], code->input_format, NULL))
  ------------------
  |  Branch (533:7): [True: 0, False: 166]
  ------------------
  534|      0|			return -1;
  535|    166|		in = t[3];
  536|    166|	}
  537|       |
  538|  1.26k|	if (in &&
  ------------------
  |  Branch (538:6): [True: 1.26k, False: 0]
  ------------------
  539|  1.26k|		code->input_coding == VIPS_CODING_NONE &&
  ------------------
  |  Branch (539:3): [True: 975, False: 291]
  ------------------
  540|  1.26k|		code->input_interpretation != VIPS_INTERPRETATION_ERROR &&
  ------------------
  |  Branch (540:3): [True: 0, False: 975]
  ------------------
  541|  1.26k|		in->Type != code->input_interpretation) {
  ------------------
  |  Branch (541:3): [True: 0, False: 0]
  ------------------
  542|      0|		if (vips_colourspace(in, &t[4],
  ------------------
  |  Branch (542:7): [True: 0, False: 0]
  ------------------
  543|      0|				code->input_interpretation, NULL))
  544|      0|			return -1;
  545|      0|		in = t[4];
  546|      0|	}
  547|       |
  548|  1.26k|	colour->n = 1;
  549|  1.26k|	colour->in = VIPS_ARRAY(object, 2, VipsImage *);
  ------------------
  |  |   72|  1.26k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  1.26k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  1.26k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  1.26k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  1.26k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  550|  1.26k|	colour->in[0] = in;
  551|  1.26k|	colour->in[1] = NULL;
  552|       |
  553|  1.26k|	if (VIPS_OBJECT_CLASS(vips_colour_code_parent_class)->build(object))
  ------------------
  |  |  435|  1.26k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.26k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.26k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (553:6): [True: 0, False: 1.26k]
  ------------------
  554|      0|		return -1;
  555|       |
  556|  1.26k|	return 0;
  557|  1.26k|}
colour.c:vips_colour_code_init:
  581|  1.26k|{
  582|  1.26k|	code->input_coding = VIPS_CODING_NONE;
  583|  1.26k|	code->input_interpretation = VIPS_INTERPRETATION_ERROR;
  584|  1.26k|	code->input_format = VIPS_FORMAT_NOTSET;
  585|  1.26k|}
colour.c:vips_colour_difference_class_init:
  672|      1|{
  673|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  674|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  675|       |
  676|      1|	gobject_class->set_property = vips_object_set_property;
  677|      1|	gobject_class->get_property = vips_object_get_property;
  678|       |
  679|      1|	vobject_class->nickname = "difference";
  680|      1|	vobject_class->description = _("calculate color difference");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  681|      1|	vobject_class->build = vips_colour_difference_build;
  682|       |
  683|      1|	VIPS_ARG_IMAGE(class, "left", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  684|      1|		_("Left"),
  685|      1|		_("Left-hand input image"),
  686|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  687|      1|		G_STRUCT_OFFSET(VipsColourDifference, left));
  688|       |
  689|      1|	VIPS_ARG_IMAGE(class, "right", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  690|      1|		_("Right"),
  691|      1|		_("Right-hand input image"),
  692|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  693|      1|		G_STRUCT_OFFSET(VipsColourDifference, right));
  694|      1|}

vips__colourspace_process_n:
  118|    460|{
  119|    460|	if (in->Bands > n) {
  ------------------
  |  Branch (119:6): [True: 460, False: 0]
  ------------------
  120|    460|		VipsImage *scope = vips_image_new();
  121|    460|		VipsImage **t = (VipsImage **)
  122|    460|			vips_object_local_array(VIPS_OBJECT(scope), 4);
  ------------------
  |  |  433|    460|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|    460|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    460|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  123|       |
  124|    460|		if (vips_extract_band(in, &t[0], 0,
  ------------------
  |  Branch (124:7): [True: 0, False: 460]
  ------------------
  125|    460|				"n", n,
  126|    460|				NULL) ||
  127|    460|			vips_extract_band(in, &t[1], n,
  ------------------
  |  Branch (127:4): [True: 0, False: 460]
  ------------------
  128|    460|				"n", in->Bands - n,
  129|    460|				NULL) ||
  130|    460|			fn(t[0], &t[2], NULL) ||
  ------------------
  |  Branch (130:4): [True: 0, False: 460]
  ------------------
  131|    460|			vips_cast(t[1], &t[3], t[2]->BandFmt,
  ------------------
  |  Branch (131:4): [True: 0, False: 460]
  ------------------
  132|    460|				NULL) ||
  133|    460|			vips_bandjoin2(t[2], t[3], out, NULL)) {
  ------------------
  |  Branch (133:4): [True: 0, False: 460]
  ------------------
  134|      0|			g_object_unref(scope);
  135|      0|			return -1;
  136|      0|		}
  137|       |
  138|    460|		g_object_unref(scope);
  139|    460|	}
  140|      0|	else if (in->Bands == n) {
  ------------------
  |  Branch (140:11): [True: 0, False: 0]
  ------------------
  141|      0|		if (fn(in, out, NULL))
  ------------------
  |  Branch (141:7): [True: 0, False: 0]
  ------------------
  142|      0|			return -1;
  143|      0|	}
  144|      0|	else {
  145|      0|		vips_error(domain, "%s", _("too few bands for operation"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  146|      0|		return -1;
  147|      0|	}
  148|       |
  149|    460|	return 0;
  150|    460|}
vips_colourspace_issupported:
  433|  2.26k|{
  434|  2.26k|	VipsInterpretation interpretation;
  435|  2.26k|	int i;
  436|       |
  437|       |	/* Treat RGB as sRGB. If you want some other treatment,
  438|       |	 * you'll need to use the icc funcs.
  439|       |	 */
  440|  2.26k|	interpretation = vips_image_guess_interpretation(image);
  441|  2.26k|	if (interpretation == VIPS_INTERPRETATION_RGB)
  ------------------
  |  Branch (441:6): [True: 0, False: 2.26k]
  ------------------
  442|      0|		interpretation = VIPS_INTERPRETATION_sRGB;
  443|       |
  444|   140k|	for (i = 0; i < VIPS_NUMBER(vips_colour_routes); i++)
  ------------------
  |  |   60|   140k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (444:14): [True: 139k, False: 33]
  ------------------
  445|   139k|		if (vips_colour_routes[i].from == interpretation)
  ------------------
  |  Branch (445:7): [True: 2.22k, False: 137k]
  ------------------
  446|  2.22k|			return TRUE;
  ------------------
  |  |  798|  2.22k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  2.22k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  447|       |
  448|     33|	return FALSE;
  ------------------
  |  |  794|     33|#define	FALSE	(0)
  ------------------
  449|  2.26k|}
vips_colourspace:
  616|  2.22k|{
  617|  2.22k|	va_list ap;
  618|  2.22k|	int result;
  619|       |
  620|  2.22k|	va_start(ap, space);
  621|  2.22k|	result = vips_call_split("colourspace", ap, in, out, space);
  622|  2.22k|	va_end(ap);
  623|       |
  624|  2.22k|	return result;
  625|  2.22k|}
colourspace.c:vips_scRGB2RGB16:
   73|  1.45k|{
   74|  1.45k|	return vips_scRGB2sRGB(in, out, "depth", 16, NULL);
   75|  1.45k|}
colourspace.c:vips_sRGB2RGB16:
  101|    351|{
  102|    351|	if (vips_cast(in, out, VIPS_FORMAT_USHORT,
  ------------------
  |  Branch (102:6): [True: 0, False: 351]
  ------------------
  103|    351|			"shift", TRUE,
  ------------------
  |  |  798|    351|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    351|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  104|    351|			NULL))
  105|      0|		return -1;
  106|    351|	(*out)->Type = VIPS_INTERPRETATION_RGB16;
  107|       |
  108|    351|	return 0;
  109|    351|}
colourspace.c:vips_GREY162RGB16:
  179|    177|{
  180|    177|	if (vips__colourspace_process_n("GREY162RGB16",
  ------------------
  |  Branch (180:6): [True: 0, False: 177]
  ------------------
  181|    177|			in, out, 1, vips_BW2sRGB_op))
  182|      0|		return -1;
  183|    177|	(*out)->Type = VIPS_INTERPRETATION_RGB16;
  184|       |
  185|    177|	return 0;
  186|    177|}
colourspace.c:vips_BW2sRGB_op:
  154|    460|{
  155|    460|	VipsImage *t[3];
  156|       |
  157|    460|	t[0] = in;
  158|    460|	t[1] = in;
  159|    460|	t[2] = in;
  160|    460|	if (vips_bandjoin(t, out, 3, NULL))
  ------------------
  |  Branch (160:6): [True: 0, False: 460]
  ------------------
  161|      0|		return -1;
  162|       |
  163|    460|	return 0;
  164|    460|}
colourspace.c:vips_BW2sRGB:
  168|    283|{
  169|    283|	if (vips__colourspace_process_n("BW2sRGB",
  ------------------
  |  Branch (169:6): [True: 0, False: 283]
  ------------------
  170|    283|			in, out, 1, vips_BW2sRGB_op))
  171|      0|		return -1;
  172|    283|	(*out)->Type = VIPS_INTERPRETATION_sRGB;
  173|       |
  174|    283|	return 0;
  175|    283|}
colourspace.c:vips_colourspace_class_init:
  542|      1|{
  543|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  544|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  545|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  546|       |
  547|      1|	gobject_class->set_property = vips_object_set_property;
  548|      1|	gobject_class->get_property = vips_object_get_property;
  549|       |
  550|      1|	vobject_class->nickname = "colourspace";
  551|      1|	vobject_class->description = _("convert to a new colorspace");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  552|      1|	vobject_class->build = vips_colourspace_build;
  553|       |
  554|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  555|       |
  556|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  557|      1|		_("Input"),
  558|      1|		_("Input image"),
  559|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  560|      1|		G_STRUCT_OFFSET(VipsColourspace, in));
  561|       |
  562|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  563|      1|		_("Output"),
  564|      1|		_("Output image"),
  565|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  566|      1|		G_STRUCT_OFFSET(VipsColourspace, out));
  567|       |
  568|      1|	VIPS_ARG_ENUM(class, "space", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  569|      1|		_("Space"),
  570|      1|		_("Destination color space"),
  571|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  572|      1|		G_STRUCT_OFFSET(VipsColourspace, space),
  573|      1|		VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_sRGB);
  574|       |
  575|      1|	VIPS_ARG_ENUM(class, "source_space", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  576|      1|		_("Source space"),
  577|      1|		_("Source color space"),
  578|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  579|      1|		G_STRUCT_OFFSET(VipsColourspace, source_space),
  580|      1|		VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_sRGB);
  581|      1|}
colourspace.c:vips_colourspace_build:
  466|  2.22k|{
  467|  2.22k|	VipsColourspace *colourspace = (VipsColourspace *) object;
  468|       |
  469|  2.22k|	int i, j;
  470|  2.22k|	VipsImage *x;
  471|  2.22k|	VipsImage **t = (VipsImage **)
  472|  2.22k|		vips_object_local_array(object, 1);
  473|  2.22k|	VipsImage **pipe = (VipsImage **)
  474|  2.22k|		vips_object_local_array(object, MAX_STEPS);
  ------------------
  |  |  191|  2.22k|#define MAX_STEPS (10)
  ------------------
  475|       |
  476|  2.22k|	VipsInterpretation interpretation;
  477|       |
  478|       |	/* Verify that all input args have been set.
  479|       |	 */
  480|  2.22k|	if (VIPS_OBJECT_CLASS(vips_colourspace_parent_class)->build(object))
  ------------------
  |  |  435|  2.22k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  2.22k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  2.22k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (480:6): [True: 0, False: 2.22k]
  ------------------
  481|      0|		return -1;
  482|       |
  483|  2.22k|	x = colourspace->in;
  484|       |
  485|       |	/* Unpack radiance-coded images. We can't use interpretation for this,
  486|       |	 * since rad images can be scRGB or XYZ.
  487|       |	 */
  488|  2.22k|	if (x->Coding == VIPS_CODING_RAD) {
  ------------------
  |  Branch (488:6): [True: 0, False: 2.22k]
  ------------------
  489|      0|		if (vips_rad2float(x, &t[0], NULL))
  ------------------
  |  Branch (489:7): [True: 0, False: 0]
  ------------------
  490|      0|			return -1;
  491|      0|		x = t[0];
  492|      0|	}
  493|       |
  494|  2.22k|	if (vips_object_argument_isset(object, "source_space"))
  ------------------
  |  Branch (494:6): [True: 0, False: 2.22k]
  ------------------
  495|      0|		interpretation = colourspace->source_space;
  496|  2.22k|	else
  497|  2.22k|		interpretation = vips_image_guess_interpretation(x);
  498|       |
  499|       |	/* Treat RGB as sRGB. If you want some other treatment,
  500|       |	 * you'll need to use the icc funcs.
  501|       |	 */
  502|  2.22k|	if (interpretation == VIPS_INTERPRETATION_RGB)
  ------------------
  |  Branch (502:6): [True: 0, False: 2.22k]
  ------------------
  503|      0|		interpretation = VIPS_INTERPRETATION_sRGB;
  504|       |
  505|       |	/* No conversion necessary.
  506|       |	 */
  507|  2.22k|	if (interpretation == colourspace->space) {
  ------------------
  |  Branch (507:6): [True: 116, False: 2.11k]
  ------------------
  508|    116|		g_object_set(colourspace, "out", vips_image_new(), NULL);
  509|       |
  510|    116|		return vips_image_write(colourspace->in, colourspace->out);
  511|    116|	}
  512|       |
  513|   141k|	for (i = 0; i < VIPS_NUMBER(vips_colour_routes); i++)
  ------------------
  |  |   60|   141k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (513:14): [True: 141k, False: 0]
  ------------------
  514|   141k|		if (vips_colour_routes[i].from == interpretation &&
  ------------------
  |  Branch (514:7): [True: 23.0k, False: 118k]
  ------------------
  515|   141k|			vips_colour_routes[i].to == colourspace->space)
  ------------------
  |  Branch (515:4): [True: 2.11k, False: 20.9k]
  ------------------
  516|  2.11k|			break;
  517|  2.11k|	if (i == VIPS_NUMBER(vips_colour_routes)) {
  ------------------
  |  |   60|  2.11k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (517:6): [True: 0, False: 2.11k]
  ------------------
  518|      0|		vips_error("vips_colourspace",
  519|      0|			_("no known route from '%s' to '%s'"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  520|      0|			vips_enum_nick(VIPS_TYPE_INTERPRETATION,
  ------------------
  |  |  142|      0|#define VIPS_TYPE_INTERPRETATION (vips_interpretation_get_type())
  ------------------
  521|      0|				interpretation),
  522|      0|			vips_enum_nick(VIPS_TYPE_INTERPRETATION,
  ------------------
  |  |  142|      0|#define VIPS_TYPE_INTERPRETATION (vips_interpretation_get_type())
  ------------------
  523|      0|				colourspace->space));
  524|      0|		return -1;
  525|      0|	}
  526|       |
  527|  5.68k|	for (j = 0; vips_colour_routes[i].route[j]; j++) {
  ------------------
  |  Branch (527:14): [True: 3.57k, False: 2.11k]
  ------------------
  528|  3.57k|		if (vips_colour_routes[i].route[j](x, &pipe[j], NULL))
  ------------------
  |  Branch (528:7): [True: 0, False: 3.57k]
  ------------------
  529|      0|			return -1;
  530|  3.57k|		x = pipe[j];
  531|  3.57k|	}
  532|       |
  533|  2.11k|	g_object_set(colourspace, "out", vips_image_new(), NULL);
  534|  2.11k|	if (vips_image_write(x, colourspace->out))
  ------------------
  |  Branch (534:6): [True: 0, False: 2.11k]
  ------------------
  535|      0|		return -1;
  536|       |
  537|  2.11k|	return 0;
  538|  2.11k|}
colourspace.c:vips_colourspace_init:
  585|  2.22k|{
  586|  2.22k|	colourspace->source_space = VIPS_INTERPRETATION_sRGB;
  587|  2.22k|}

dE00.c:vips_dE00_class_init:
  231|      1|{
  232|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  233|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  234|       |
  235|      1|	object_class->nickname = "dE00";
  236|      1|	object_class->description = _("calculate dE00");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  237|       |
  238|      1|	colour_class->process_line = vips_dE00_line;
  239|      1|}

dE76.c:vips_dE76_class_init:
  108|      1|{
  109|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  110|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  111|       |
  112|      1|	object_class->nickname = "dE76";
  113|      1|	object_class->description = _("calculate dE76");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  114|       |
  115|      1|	colour_class->process_line = vips__pythagoras_line;
  116|      1|}

dECMC.c:vips_dECMC_class_init:
   56|      1|{
   57|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
   58|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
   59|       |
   60|      1|	object_class->nickname = "dECMC";
   61|      1|	object_class->description = _("calculate dECMC");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   62|       |
   63|      1|	colour_class->process_line = vips__pythagoras_line;
   64|      1|}

float2rad.c:vips_float2rad_class_init:
  200|      1|{
  201|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  202|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  203|       |
  204|      1|	object_class->nickname = "float2rad";
  205|      1|	object_class->description =
  206|      1|		_("transform float RGB to Radiance coding");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  207|       |
  208|      1|	colour_class->process_line = vips_float2rad_line;
  209|      1|}

vips_icc_is_compatible_profile:
 1353|    107|{
 1354|    107|	cmsHPROFILE profile;
 1355|    107|	VipsIccInfo *info;
 1356|       |
 1357|    107|	if (!(profile = cmsOpenProfileFromMem(data, data_length)))
  ------------------
  |  Branch (1357:6): [True: 76, False: 31]
  ------------------
 1358|       |		/* Corrupt profile.
 1359|       |		 */
 1360|     76|		return FALSE;
  ------------------
  |  |  794|     76|#define	FALSE	(0)
  ------------------
 1361|       |
 1362|       |#ifdef DEBUG
 1363|       |	vips_icc_print_profile("from memory", profile);
 1364|       |#endif /*DEBUG*/
 1365|       |
 1366|     31|	if (!(info = vips_icc_info(cmsGetColorSpace(profile)))) {
  ------------------
  |  Branch (1366:6): [True: 7, False: 24]
  ------------------
 1367|       |		/* Unsupported profile.
 1368|       |		 */
 1369|      7|		VIPS_FREEF(cmsCloseProfile, profile);
  ------------------
  |  |   41|      7|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      7|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      7|	{ \
  |  |   43|      7|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 7, False: 0]
  |  |  ------------------
  |  |   44|      7|			(void) F((S)); \
  |  |   45|      7|			(S) = 0; \
  |  |   46|      7|		} \
  |  |   47|      7|	} \
  |  |   48|      7|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      7|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1370|      7|		return FALSE;
  ------------------
  |  |  794|      7|#define	FALSE	(0)
  ------------------
 1371|      7|	}
 1372|       |
 1373|     24|	if (!vips_image_is_profile_compatible(image, info->bands)) {
  ------------------
  |  Branch (1373:6): [True: 5, False: 19]
  ------------------
 1374|       |		/* Bands mismatch.
 1375|       |		 */
 1376|      5|		VIPS_FREEF(cmsCloseProfile, profile);
  ------------------
  |  |   41|      5|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      5|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      5|	{ \
  |  |   43|      5|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 5, False: 0]
  |  |  ------------------
  |  |   44|      5|			(void) F((S)); \
  |  |   45|      5|			(S) = 0; \
  |  |   46|      5|		} \
  |  |   47|      5|	} \
  |  |   48|      5|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      5|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1377|      5|		return FALSE;
  ------------------
  |  |  794|      5|#define	FALSE	(0)
  ------------------
 1378|      5|	}
 1379|       |
 1380|     24|	VIPS_FREEF(cmsCloseProfile, profile);
  ------------------
  |  |   41|     19|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|     19|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|     19|	{ \
  |  |   43|     19|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 19, False: 0]
  |  |  ------------------
  |  |   44|     19|			(void) F((S)); \
  |  |   45|     19|			(S) = 0; \
  |  |   46|     19|		} \
  |  |   47|     19|	} \
  |  |   48|     24|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     24|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1381|       |
 1382|     19|	return TRUE;
  ------------------
  |  |  798|     19|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|     19|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1383|     24|}
vips_icc_import:
 1451|    909|{
 1452|    909|	va_list ap;
 1453|    909|	int result;
 1454|       |
 1455|    909|	va_start(ap, out);
 1456|    909|	result = vips_call_split("icc_import", ap, in, out);
 1457|    909|	va_end(ap);
 1458|       |
 1459|    909|	return result;
 1460|    909|}
icc_transform.c:vips_icc_class_init:
  749|      1|{
  750|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  751|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  752|       |
  753|      1|	gobject_class->dispose = vips_icc_dispose;
  754|      1|	gobject_class->set_property = vips_object_set_property;
  755|      1|	gobject_class->get_property = vips_object_get_property;
  756|       |
  757|      1|	object_class->nickname = "icc";
  758|      1|	object_class->description = _("transform using ICC profiles");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  759|      1|	object_class->build = vips_icc_build;
  760|       |
  761|      1|	VIPS_ARG_ENUM(class, "intent", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  762|      1|		_("Intent"),
  763|      1|		_("Rendering intent"),
  764|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  765|      1|		G_STRUCT_OFFSET(VipsIcc, intent),
  766|      1|		VIPS_TYPE_INTENT, VIPS_INTENT_RELATIVE);
  767|       |
  768|      1|	VIPS_ARG_ENUM(class, "pcs", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  769|      1|		_("PCS"),
  770|      1|		_("Set Profile Connection Space"),
  771|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  772|      1|		G_STRUCT_OFFSET(VipsIcc, pcs),
  773|      1|		VIPS_TYPE_PCS, VIPS_PCS_LAB);
  774|       |
  775|      1|	VIPS_ARG_BOOL(class, "black_point_compensation", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  776|      1|		_("Black point compensation"),
  777|      1|		_("Enable black point compensation"),
  778|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  779|      1|		G_STRUCT_OFFSET(VipsIcc, black_point_compensation),
  780|      1|		FALSE);
  781|       |
  782|      1|	cmsSetLogErrorHandler(icc_error);
  783|      1|}
icc_transform.c:vips_icc_dispose:
  187|    909|{
  188|    909|	VipsIcc *icc = (VipsIcc *) gobject;
  189|       |
  190|    909|	VIPS_FREEF(cmsDeleteTransform, icc->trans);
  ------------------
  |  |   41|    909|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    909|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|    909|	{ \
  |  |   43|    909|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 909, False: 0]
  |  |  ------------------
  |  |   44|    909|			(void) F((S)); \
  |  |   45|    909|			(S) = 0; \
  |  |   46|    909|		} \
  |  |   47|    909|	} \
  |  |   48|    909|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    909|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|    909|	VIPS_FREEF(cmsCloseProfile, icc->in_profile);
  ------------------
  |  |   41|    909|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    909|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|    909|	{ \
  |  |   43|    909|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 909, False: 0]
  |  |  ------------------
  |  |   44|    909|			(void) F((S)); \
  |  |   45|    909|			(S) = 0; \
  |  |   46|    909|		} \
  |  |   47|    909|	} \
  |  |   48|    909|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    909|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|    909|	VIPS_FREEF(cmsCloseProfile, icc->out_profile);
  ------------------
  |  |   41|    909|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    909|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|    909|	{ \
  |  |   43|    909|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 909, False: 0]
  |  |  ------------------
  |  |   44|    909|			(void) F((S)); \
  |  |   45|    909|			(S) = 0; \
  |  |   46|    909|		} \
  |  |   47|    909|	} \
  |  |   48|    909|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    909|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  193|       |
  194|    909|	if (icc->in_blob) {
  ------------------
  |  Branch (194:6): [True: 909, False: 0]
  ------------------
  195|    909|		vips_area_unref((VipsArea *) icc->in_blob);
  196|    909|		icc->in_blob = NULL;
  197|    909|	}
  198|       |
  199|    909|	if (icc->out_blob) {
  ------------------
  |  Branch (199:6): [True: 0, False: 909]
  ------------------
  200|      0|		vips_area_unref((VipsArea *) icc->out_blob);
  201|      0|		icc->out_blob = NULL;
  202|      0|	}
  203|       |
  204|    909|	G_OBJECT_CLASS(vips_icc_parent_class)->dispose(gobject);
  ------------------
  |  |   58|    909|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|    909|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    909|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|    909|}
icc_transform.c:vips_icc_build:
  258|    909|{
  259|    909|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|    909|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|    909|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    909|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  260|    909|	VipsColour *colour = (VipsColour *) object;
  261|    909|	VipsColourCode *code = (VipsColourCode *) object;
  262|    909|	VipsIcc *icc = (VipsIcc *) object;
  263|       |
  264|    909|	cmsUInt32Number flags;
  265|       |
  266|    909|	if (icc->depth != 8 &&
  ------------------
  |  Branch (266:6): [True: 0, False: 909]
  ------------------
  267|    909|		icc->depth != 16) {
  ------------------
  |  Branch (267:3): [True: 0, False: 0]
  ------------------
  268|      0|		vips_error(class->nickname,
  269|      0|			"%s", _("depth must be 8 or 16"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  270|      0|		return -1;
  271|      0|	}
  272|       |
  273|    909|	if (icc->in_profile &&
  ------------------
  |  Branch (273:6): [True: 909, False: 0]
  ------------------
  274|    909|		code->in) {
  ------------------
  |  Branch (274:3): [True: 909, False: 0]
  ------------------
  275|    909|		int signature;
  276|    909|		VipsIccInfo *info;
  277|       |
  278|    909|		signature = cmsGetColorSpace(icc->in_profile);
  279|    909|		if (!(info = vips_icc_info(signature))) {
  ------------------
  |  Branch (279:7): [True: 0, False: 909]
  ------------------
  280|      0|			vips_error(class->nickname,
  281|      0|				_("unimplemented input color space 0x%x"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  282|      0|				signature);
  283|      0|			return -1;
  284|      0|		}
  285|       |
  286|    909|		colour->input_bands = info->bands;
  287|       |
  288|    909|		switch (signature) {
  289|      0|		case cmsSigGrayData:
  ------------------
  |  Branch (289:3): [True: 0, False: 909]
  ------------------
  290|      0|			code->input_format = code->in->BandFmt == VIPS_FORMAT_USHORT
  ------------------
  |  Branch (290:25): [True: 0, False: 0]
  ------------------
  291|      0|				? VIPS_FORMAT_USHORT
  292|      0|				: VIPS_FORMAT_UCHAR;
  293|      0|			icc->in_icc_format = code->in->BandFmt == VIPS_FORMAT_USHORT
  ------------------
  |  Branch (293:25): [True: 0, False: 0]
  ------------------
  294|      0|				? info->lcms_type16
  295|      0|				: info->lcms_type8;
  296|      0|			break;
  297|       |
  298|      0|		case cmsSigRgbData:
  ------------------
  |  Branch (298:3): [True: 0, False: 909]
  ------------------
  299|      0|			code->input_format = code->in->BandFmt == VIPS_FORMAT_USHORT
  ------------------
  |  Branch (299:25): [True: 0, False: 0]
  ------------------
  300|      0|				? VIPS_FORMAT_USHORT
  301|      0|				: VIPS_FORMAT_UCHAR;
  302|      0|			icc->in_icc_format = code->in->BandFmt == VIPS_FORMAT_USHORT
  ------------------
  |  Branch (302:25): [True: 0, False: 0]
  ------------------
  303|      0|				? info->lcms_type16
  304|      0|				: info->lcms_type8;
  305|      0|			break;
  306|       |
  307|      0|		case cmsSigLabData:
  ------------------
  |  Branch (307:3): [True: 0, False: 909]
  ------------------
  308|      0|			code->input_format = VIPS_FORMAT_FLOAT;
  309|      0|			code->input_interpretation =
  310|      0|				VIPS_INTERPRETATION_LAB;
  311|      0|			icc->in_icc_format = info->lcms_type8;
  312|      0|			break;
  313|       |
  314|      0|		case cmsSigXYZData:
  ------------------
  |  Branch (314:3): [True: 0, False: 909]
  ------------------
  315|      0|			code->input_format = VIPS_FORMAT_FLOAT;
  316|      0|			code->input_interpretation =
  317|      0|				VIPS_INTERPRETATION_XYZ;
  318|      0|			icc->in_icc_format = info->lcms_type8;
  319|      0|			break;
  320|       |
  321|    909|		case cmsSigCmykData:
  ------------------
  |  Branch (321:3): [True: 909, False: 0]
  ------------------
  322|    909|		case cmsSig5colorData:
  ------------------
  |  Branch (322:3): [True: 0, False: 909]
  ------------------
  323|    909|		case cmsSig6colorData:
  ------------------
  |  Branch (323:3): [True: 0, False: 909]
  ------------------
  324|    909|		case cmsSig7colorData:
  ------------------
  |  Branch (324:3): [True: 0, False: 909]
  ------------------
  325|    909|		case cmsSig8colorData:
  ------------------
  |  Branch (325:3): [True: 0, False: 909]
  ------------------
  326|    909|		case cmsSig9colorData:
  ------------------
  |  Branch (326:3): [True: 0, False: 909]
  ------------------
  327|    909|		case cmsSig10colorData:
  ------------------
  |  Branch (327:3): [True: 0, False: 909]
  ------------------
  328|    909|		case cmsSig11colorData:
  ------------------
  |  Branch (328:3): [True: 0, False: 909]
  ------------------
  329|    909|		case cmsSig12colorData:
  ------------------
  |  Branch (329:3): [True: 0, False: 909]
  ------------------
  330|       |			/* Treat as forms of CMYK.
  331|       |			 */
  332|    909|			info = vips_icc_info(
  333|    909|				cmsGetColorSpace(icc->in_profile));
  334|       |
  335|    909|			code->input_format = code->in->BandFmt == VIPS_FORMAT_USHORT
  ------------------
  |  Branch (335:25): [True: 28, False: 881]
  ------------------
  336|    909|				? VIPS_FORMAT_USHORT
  337|    909|				: VIPS_FORMAT_UCHAR;
  338|    909|			icc->in_icc_format =
  339|    909|				code->in->BandFmt == VIPS_FORMAT_USHORT
  ------------------
  |  Branch (339:5): [True: 28, False: 881]
  ------------------
  340|    909|				? info->lcms_type16
  341|    909|				: info->lcms_type8;
  342|    909|			break;
  343|       |
  344|      0|		default:
  ------------------
  |  Branch (344:3): [True: 0, False: 909]
  ------------------
  345|      0|			g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  346|      0|			return -1;
  347|    909|		}
  348|    909|	}
  349|       |
  350|    909|	if (icc->out_profile) {
  ------------------
  |  Branch (350:6): [True: 909, False: 0]
  ------------------
  351|    909|		int signature;
  352|    909|		VipsIccInfo *info;
  353|       |
  354|    909|		signature = cmsGetColorSpace(icc->out_profile);
  355|    909|		if (!(info = vips_icc_info(signature))) {
  ------------------
  |  Branch (355:7): [True: 0, False: 909]
  ------------------
  356|      0|			vips_error(class->nickname,
  357|      0|				_("unimplemented output color space 0x%x"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  358|      0|				signature);
  359|      0|			return -1;
  360|      0|		}
  361|       |
  362|    909|		colour->bands = info->bands;
  363|       |
  364|    909|		switch (signature) {
  365|      0|		case cmsSigGrayData:
  ------------------
  |  Branch (365:3): [True: 0, False: 909]
  ------------------
  366|      0|			colour->interpretation = icc->depth == 8
  ------------------
  |  Branch (366:29): [True: 0, False: 0]
  ------------------
  367|      0|				? VIPS_INTERPRETATION_B_W
  368|      0|				: VIPS_INTERPRETATION_GREY16;
  369|      0|			colour->format = icc->depth == 8
  ------------------
  |  Branch (369:21): [True: 0, False: 0]
  ------------------
  370|      0|				? VIPS_FORMAT_UCHAR
  371|      0|				: VIPS_FORMAT_USHORT;
  372|      0|			icc->out_icc_format = icc->depth == 16
  ------------------
  |  Branch (372:26): [True: 0, False: 0]
  ------------------
  373|      0|				? info->lcms_type16
  374|      0|				: info->lcms_type8;
  375|      0|			break;
  376|       |
  377|      0|		case cmsSigRgbData:
  ------------------
  |  Branch (377:3): [True: 0, False: 909]
  ------------------
  378|      0|			colour->interpretation = icc->depth == 8
  ------------------
  |  Branch (378:29): [True: 0, False: 0]
  ------------------
  379|      0|				? VIPS_INTERPRETATION_sRGB
  380|      0|				: VIPS_INTERPRETATION_RGB16;
  381|      0|			colour->format = icc->depth == 8
  ------------------
  |  Branch (381:21): [True: 0, False: 0]
  ------------------
  382|      0|				? VIPS_FORMAT_UCHAR
  383|      0|				: VIPS_FORMAT_USHORT;
  384|      0|			icc->out_icc_format = icc->depth == 16
  ------------------
  |  Branch (384:26): [True: 0, False: 0]
  ------------------
  385|      0|				? info->lcms_type16
  386|      0|				: info->lcms_type8;
  387|      0|			break;
  388|       |
  389|      0|		case cmsSigLabData:
  ------------------
  |  Branch (389:3): [True: 0, False: 909]
  ------------------
  390|      0|			colour->interpretation = VIPS_INTERPRETATION_LAB;
  391|      0|			colour->format = VIPS_FORMAT_FLOAT;
  392|      0|			icc->out_icc_format = info->lcms_type16;
  393|      0|			break;
  394|       |
  395|    909|		case cmsSigXYZData:
  ------------------
  |  Branch (395:3): [True: 909, False: 0]
  ------------------
  396|    909|			colour->interpretation = VIPS_INTERPRETATION_XYZ;
  397|    909|			colour->format = VIPS_FORMAT_FLOAT;
  398|    909|			icc->out_icc_format = info->lcms_type16;
  399|    909|			break;
  400|       |
  401|      0|		case cmsSigCmykData:
  ------------------
  |  Branch (401:3): [True: 0, False: 909]
  ------------------
  402|      0|		case cmsSig5colorData:
  ------------------
  |  Branch (402:3): [True: 0, False: 909]
  ------------------
  403|      0|		case cmsSig6colorData:
  ------------------
  |  Branch (403:3): [True: 0, False: 909]
  ------------------
  404|      0|		case cmsSig7colorData:
  ------------------
  |  Branch (404:3): [True: 0, False: 909]
  ------------------
  405|      0|		case cmsSig8colorData:
  ------------------
  |  Branch (405:3): [True: 0, False: 909]
  ------------------
  406|      0|		case cmsSig9colorData:
  ------------------
  |  Branch (406:3): [True: 0, False: 909]
  ------------------
  407|      0|		case cmsSig10colorData:
  ------------------
  |  Branch (407:3): [True: 0, False: 909]
  ------------------
  408|      0|		case cmsSig11colorData:
  ------------------
  |  Branch (408:3): [True: 0, False: 909]
  ------------------
  409|      0|		case cmsSig12colorData:
  ------------------
  |  Branch (409:3): [True: 0, False: 909]
  ------------------
  410|       |			/* Treat as forms of CMYK.
  411|       |			 */
  412|      0|			colour->interpretation = VIPS_INTERPRETATION_CMYK;
  413|      0|			colour->format = icc->depth == 8
  ------------------
  |  Branch (413:21): [True: 0, False: 0]
  ------------------
  414|      0|				? VIPS_FORMAT_UCHAR
  415|      0|				: VIPS_FORMAT_USHORT;
  416|      0|			icc->out_icc_format = icc->depth == 16
  ------------------
  |  Branch (416:26): [True: 0, False: 0]
  ------------------
  417|      0|				? info->lcms_type16
  418|      0|				: info->lcms_type8;
  419|      0|			break;
  420|       |
  421|      0|		default:
  ------------------
  |  Branch (421:3): [True: 0, False: 909]
  ------------------
  422|      0|			g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  423|      0|			return -1;
  424|    909|		}
  425|    909|	}
  426|       |
  427|       |	/* At least one must be a device profile.
  428|       |	 */
  429|    909|	if (icc->in_profile &&
  ------------------
  |  Branch (429:6): [True: 909, False: 0]
  ------------------
  430|    909|		icc->out_profile &&
  ------------------
  |  Branch (430:3): [True: 909, False: 0]
  ------------------
  431|    909|		is_pcs(icc->in_profile) &&
  ------------------
  |  Branch (431:3): [True: 0, False: 909]
  ------------------
  432|    909|		is_pcs(icc->out_profile)) {
  ------------------
  |  Branch (432:3): [True: 0, False: 0]
  ------------------
  433|      0|		vips_error(class->nickname,
  434|      0|			"%s", _("no device profile"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  435|      0|		return -1;
  436|      0|	}
  437|       |
  438|       |	/* Use cmsFLAGS_NOCACHE to disable the 1-pixel cache and make
  439|       |	 * calling cmsDoTransform() from multiple threads safe.
  440|       |	 */
  441|    909|	flags = cmsFLAGS_NOCACHE;
  ------------------
  |  | 1722|    909|#define cmsFLAGS_NOCACHE                  0x0040    // Inhibit 1-pixel cache
  ------------------
  442|       |
  443|    909|	if (icc->black_point_compensation)
  ------------------
  |  Branch (443:6): [True: 0, False: 909]
  ------------------
  444|      0|		flags |= cmsFLAGS_BLACKPOINTCOMPENSATION;
  ------------------
  |  | 1731|      0|#define cmsFLAGS_BLACKPOINTCOMPENSATION   0x2000
  ------------------
  445|       |
  446|    909|	if (!(icc->trans = cmsCreateTransform(
  ------------------
  |  Branch (446:6): [True: 0, False: 909]
  ------------------
  447|    909|			  icc->in_profile, icc->in_icc_format,
  448|    909|			  icc->out_profile, icc->out_icc_format,
  449|    909|			  icc->intent, flags)))
  450|      0|		return -1;
  451|       |
  452|    909|	if (VIPS_OBJECT_CLASS(vips_icc_parent_class)->build(object))
  ------------------
  |  |  435|    909|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|    909|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    909|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (452:6): [True: 0, False: 909]
  ------------------
  453|      0|		return -1;
  454|       |
  455|    909|	return 0;
  456|    909|}
icc_transform.c:is_pcs:
  211|    909|{
  212|    909|	return cmsGetColorSpace(profile) == cmsSigLabData ||
  ------------------
  |  Branch (212:9): [True: 0, False: 909]
  ------------------
  213|    909|		cmsGetColorSpace(profile) == cmsSigXYZData;
  ------------------
  |  Branch (213:3): [True: 0, False: 909]
  ------------------
  214|    909|}
icc_transform.c:icc_error:
  181|     78|{
  182|     78|	vips_error("VipsIcc", "%s", text);
  183|     78|}
icc_transform.c:vips_icc_init:
  787|    909|{
  788|    909|	icc->intent = VIPS_INTENT_RELATIVE;
  789|    909|	icc->pcs = VIPS_PCS_LAB;
  790|    909|	icc->depth = 8;
  791|    909|}
icc_transform.c:vips_icc_import_class_init:
  943|      1|{
  944|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  945|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  946|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  947|       |
  948|      1|	gobject_class->set_property = vips_object_set_property;
  949|      1|	gobject_class->get_property = vips_object_get_property;
  950|       |
  951|      1|	object_class->nickname = "icc_import";
  952|      1|	object_class->description = _("import from device with ICC profile");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  953|      1|	object_class->build = vips_icc_import_build;
  954|       |
  955|      1|	colour_class->process_line = vips_icc_import_line;
  956|       |
  957|      1|	VIPS_ARG_BOOL(class, "embedded", 110,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  958|      1|		_("Embedded"),
  959|      1|		_("Use embedded input profile, if available"),
  960|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  961|      1|		G_STRUCT_OFFSET(VipsIccImport, embedded),
  962|      1|		FALSE);
  963|       |
  964|      1|	VIPS_ARG_STRING(class, "input_profile", 120,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  965|      1|		_("Input profile"),
  966|      1|		_("Filename to load input profile from"),
  967|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  968|      1|		G_STRUCT_OFFSET(VipsIccImport, input_profile_filename),
  969|      1|		NULL);
  970|      1|}
icc_transform.c:vips_icc_import_build:
  807|    909|{
  808|    909|	VipsColour *colour = (VipsColour *) object;
  809|    909|	VipsIcc *icc = (VipsIcc *) object;
  810|    909|	VipsIccImport *import = (VipsIccImport *) object;
  811|       |
  812|    909|	if (vips_icc_set_import(icc,
  ------------------
  |  Branch (812:6): [True: 0, False: 909]
  ------------------
  813|    909|			import->embedded, import->input_profile_filename))
  814|      0|		return -1;
  815|       |
  816|    909|	if (icc->pcs == VIPS_PCS_LAB) {
  ------------------
  |  Branch (816:6): [True: 0, False: 909]
  ------------------
  817|      0|		cmsCIExyY white;
  818|      0|		cmsWhitePointFromTemp(&white, 6504);
  819|       |
  820|      0|		icc->out_profile = cmsCreateLab4Profile(&white);
  821|      0|	}
  822|    909|	else
  823|    909|		icc->out_profile = cmsCreateXYZProfile();
  824|       |
  825|    909|	if (VIPS_OBJECT_CLASS(vips_icc_import_parent_class)->build(object))
  ------------------
  |  |  435|    909|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|    909|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    909|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (825:6): [True: 0, False: 909]
  ------------------
  826|      0|		return -1;
  827|       |
  828|       |	/* If we used the fallback profile, we need to attach it to the PCS
  829|       |	 * image, since the PCS image needs a route back to device space.
  830|       |	 *
  831|       |	 * In the same way, we don't remove the embedded input profile on
  832|       |	 * import.
  833|       |	 */
  834|    909|	if (icc->non_standard_input_profile &&
  ------------------
  |  Branch (834:6): [True: 909, False: 0]
  ------------------
  835|    909|		icc->in_blob) {
  ------------------
  |  Branch (835:3): [True: 909, False: 0]
  ------------------
  836|    909|		const void *data;
  837|    909|		size_t size;
  838|       |
  839|    909|		data = vips_blob_get(icc->in_blob, &size);
  840|    909|		vips_image_set_blob(colour->out, VIPS_META_ICC_NAME,
  ------------------
  |  |   78|    909|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  841|    909|			NULL, data, size);
  842|    909|	}
  843|       |
  844|    909|	return 0;
  845|    909|}
icc_transform.c:vips_icc_set_import:
  688|    909|{
  689|    909|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(icc);
  ------------------
  |  |  441|    909|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|    909|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    909|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  690|    909|	VipsColourCode *code = (VipsColourCode *) icc;
  691|       |
  692|    909|	icc->non_standard_input_profile = FALSE;
  ------------------
  |  |  794|    909|#define	FALSE	(0)
  ------------------
  693|       |
  694|       |	/* Try embedded profile.
  695|       |	 */
  696|    909|	if (code->in &&
  ------------------
  |  Branch (696:6): [True: 909, False: 0]
  ------------------
  697|    909|		(embedded || !input_profile_filename)) {
  ------------------
  |  Branch (697:4): [True: 909, False: 0]
  |  Branch (697:16): [True: 0, False: 0]
  ------------------
  698|    909|		icc->in_blob = vips_icc_get_profile_image(code->in);
  699|    909|		icc->in_profile = vips_icc_verify_blob(icc, &icc->in_blob);
  700|    909|	}
  701|       |
  702|       |	/* Try profile from filename.
  703|       |	 */
  704|    909|	if (code->in &&
  ------------------
  |  Branch (704:6): [True: 909, False: 0]
  ------------------
  705|    909|		!icc->in_blob &&
  ------------------
  |  Branch (705:3): [True: 909, False: 0]
  ------------------
  706|    909|		input_profile_filename) {
  ------------------
  |  Branch (706:3): [True: 909, False: 0]
  ------------------
  707|    909|		if (!vips_profile_load(input_profile_filename, &icc->in_blob, NULL) &&
  ------------------
  |  Branch (707:7): [True: 909, False: 0]
  ------------------
  708|    909|			(icc->in_profile = vips_icc_verify_blob(icc, &icc->in_blob)))
  ------------------
  |  Branch (708:4): [True: 909, False: 0]
  ------------------
  709|    909|			icc->non_standard_input_profile = TRUE;
  ------------------
  |  |  798|    909|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    909|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  710|    909|	}
  711|       |
  712|       |	/* Try a built-in profile.
  713|       |	 */
  714|    909|	if (code->in &&
  ------------------
  |  Branch (714:6): [True: 909, False: 0]
  ------------------
  715|    909|		!icc->in_profile) {
  ------------------
  |  Branch (715:3): [True: 0, False: 909]
  ------------------
  716|      0|		const char *name;
  717|       |
  718|      0|		switch (code->in->Type) {
  719|      0|		case VIPS_INTERPRETATION_B_W:
  ------------------
  |  Branch (719:3): [True: 0, False: 0]
  ------------------
  720|      0|		case VIPS_INTERPRETATION_GREY16:
  ------------------
  |  Branch (720:3): [True: 0, False: 0]
  ------------------
  721|      0|			name = "sgrey";
  722|      0|			break;
  723|       |
  724|      0|		case VIPS_INTERPRETATION_CMYK:
  ------------------
  |  Branch (724:3): [True: 0, False: 0]
  ------------------
  725|      0|			name = "cmyk";
  726|      0|			break;
  727|       |
  728|      0|		default:
  ------------------
  |  Branch (728:3): [True: 0, False: 0]
  ------------------
  729|      0|			name = "srgb";
  730|      0|			break;
  731|      0|		}
  732|       |
  733|      0|		if (!vips_profile_load(name, &icc->in_blob, NULL) &&
  ------------------
  |  Branch (733:7): [True: 0, False: 0]
  ------------------
  734|      0|			(icc->in_profile = vips_icc_verify_blob(icc, &icc->in_blob)))
  ------------------
  |  Branch (734:4): [True: 0, False: 0]
  ------------------
  735|      0|			icc->non_standard_input_profile = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  736|      0|	}
  737|       |
  738|    909|	if (!icc->in_profile) {
  ------------------
  |  Branch (738:6): [True: 0, False: 909]
  ------------------
  739|      0|		vips_error(class->nickname, "%s",
  740|      0|			_("unable to load or find any compatible input profile"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  741|      0|		return -1;
  742|      0|	}
  743|       |
  744|    909|	return 0;
  745|    909|}
icc_transform.c:vips_icc_get_profile_image:
  462|    909|{
  463|    909|	const void *data;
  464|    909|	size_t size;
  465|       |
  466|    909|	if (!vips_image_get_typeof(image, VIPS_META_ICC_NAME))
  ------------------
  |  |   78|    909|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  |  Branch (466:6): [True: 904, False: 5]
  ------------------
  467|    904|		return NULL;
  468|      5|	if (vips_image_get_blob(image, VIPS_META_ICC_NAME, &data, &size))
  ------------------
  |  |   78|      5|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  |  Branch (468:6): [True: 0, False: 5]
  ------------------
  469|      0|		return NULL;
  470|       |
  471|      5|	return vips_blob_new(NULL, data, size);
  472|      5|}
icc_transform.c:vips_icc_verify_blob:
  654|  1.81k|{
  655|  1.81k|	if (*blob) {
  ------------------
  |  Branch (655:6): [True: 914, False: 904]
  ------------------
  656|    914|		VipsColourCode *code = (VipsColourCode *) icc;
  657|    914|		cmsHPROFILE profile = vips_icc_load_profile_blob(*blob,
  658|    914|			code->in, icc->intent, LCMS_USED_AS_INPUT);
  ------------------
  |  | 1555|    914|#define LCMS_USED_AS_INPUT      0
  ------------------
  659|       |
  660|    914|		if (!profile) {
  ------------------
  |  Branch (660:7): [True: 5, False: 909]
  ------------------
  661|      5|			vips_area_unref((VipsArea *) *blob);
  662|      5|			*blob = NULL;
  663|      5|		}
  664|       |
  665|    914|		return profile;
  666|    914|	}
  667|       |
  668|    904|	return NULL;
  669|  1.81k|}
icc_transform.c:vips_icc_load_profile_blob:
  601|    914|{
  602|    914|	const void *data;
  603|    914|	size_t size;
  604|    914|	cmsHPROFILE profile;
  605|    914|	VipsIccInfo *info;
  606|       |
  607|       |#ifdef DEBUG
  608|       |	printf("loading %s profile, intent %s, from blob %p\n",
  609|       |		direction == LCMS_USED_AS_INPUT ? _("input") : _("output"),
  610|       |		vips_enum_nick(VIPS_TYPE_INTENT, intent),
  611|       |		blob);
  612|       |#endif /*DEBUG*/
  613|       |
  614|    914|	data = vips_blob_get(blob, &size);
  615|    914|	if (!(profile = cmsOpenProfileFromMem(data, size))) {
  ------------------
  |  Branch (615:6): [True: 2, False: 912]
  ------------------
  616|      2|		g_warning("%s", _("corrupt profile"));
  ------------------
  |  |  338|      2|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      2|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      2|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      2|                               __VA_ARGS__)
  ------------------
  617|      2|		return NULL;
  618|      2|	}
  619|       |
  620|       |#ifdef DEBUG
  621|       |	vips_icc_print_profile("loaded from blob to make", profile);
  622|       |#endif /*DEBUG*/
  623|       |
  624|    912|	if (!(info = vips_icc_info(cmsGetColorSpace(profile)))) {
  ------------------
  |  Branch (624:6): [True: 1, False: 911]
  ------------------
  625|      1|		VIPS_FREEF(cmsCloseProfile, profile);
  ------------------
  |  |   41|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      1|	{ \
  |  |   43|      1|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 1, False: 0]
  |  |  ------------------
  |  |   44|      1|			(void) F((S)); \
  |  |   45|      1|			(S) = 0; \
  |  |   46|      1|		} \
  |  |   47|      1|	} \
  |  |   48|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  626|      1|		g_warning("%s", _("unsupported profile"));
  ------------------
  |  |  338|      1|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      1|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      1|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      1|                               __VA_ARGS__)
  ------------------
  627|      1|		return NULL;
  628|      1|	}
  629|       |
  630|    911|	if (image &&
  ------------------
  |  Branch (630:6): [True: 911, False: 0]
  ------------------
  631|    911|		!vips_image_is_profile_compatible(image, info->bands)) {
  ------------------
  |  Branch (631:3): [True: 2, False: 909]
  ------------------
  632|      2|		VIPS_FREEF(cmsCloseProfile, profile);
  ------------------
  |  |   41|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      2|	{ \
  |  |   43|      2|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 2, False: 0]
  |  |  ------------------
  |  |   44|      2|			(void) F((S)); \
  |  |   45|      2|			(S) = 0; \
  |  |   46|      2|		} \
  |  |   47|      2|	} \
  |  |   48|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  633|      2|		g_warning("%s", _("profile incompatible with image"));
  ------------------
  |  |  338|      2|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      2|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      2|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      2|                               __VA_ARGS__)
  ------------------
  634|      2|		return NULL;
  635|      2|	}
  636|       |
  637|    909|	if (!cmsIsIntentSupported(profile, intent, direction)) {
  ------------------
  |  Branch (637:6): [True: 0, False: 909]
  ------------------
  638|      0|		VIPS_FREEF(cmsCloseProfile, profile);
  ------------------
  |  |   41|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      0|	{ \
  |  |   43|      0|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|      0|	} \
  |  |   48|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  639|      0|		g_warning(_("profile does not support %s %s intent"),
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (340:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  640|      0|			vips_enum_nick(VIPS_TYPE_INTENT, intent),
  641|      0|			direction == LCMS_USED_AS_INPUT ? _("input") : _("output"));
  642|      0|		return NULL;
  643|      0|	}
  644|       |
  645|    909|	return profile;
  646|    909|}
icc_transform.c:vips_icc_import_line:
  909|  38.3k|{
  910|  38.3k|	VipsIcc *icc = (VipsIcc *) colour;
  911|       |
  912|  38.3k|	VipsPel *p;
  913|  38.3k|	float *q;
  914|  38.3k|	int i;
  915|       |
  916|       |	/* Buffer of encoded 16-bit pixels we transform.
  917|       |	 */
  918|  38.3k|	guint16 encoded[3 * PIXEL_BUFFER_SIZE];
  919|       |
  920|  38.3k|	p = (VipsPel *) in[0];
  921|  38.3k|	q = (float *) out;
  922|  76.7k|	for (i = 0; i < width; i += PIXEL_BUFFER_SIZE) {
  ------------------
  |  |  101|  38.3k|#define PIXEL_BUFFER_SIZE (10000)
  ------------------
  |  Branch (922:14): [True: 38.3k, False: 38.3k]
  ------------------
  923|  38.3k|		const int chunk = VIPS_MIN(width - i, PIXEL_BUFFER_SIZE);
  ------------------
  |  |   55|  38.3k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 38.3k, False: 0]
  |  |  ------------------
  ------------------
  924|       |
  925|  38.3k|		cmsDoTransform(icc->trans, p, encoded, chunk);
  926|       |
  927|  38.3k|		if (icc->pcs == VIPS_PCS_LAB)
  ------------------
  |  Branch (927:7): [True: 0, False: 38.3k]
  ------------------
  928|      0|			decode_lab(encoded, q, chunk);
  929|  38.3k|		else
  930|  38.3k|			decode_xyz(encoded, q, chunk);
  931|       |
  932|       |		// use input_bands, since in[0] may have had alpha removed,
  933|       |		// and can have 1, 3 or 4 bands
  934|  38.3k|		p += PIXEL_BUFFER_SIZE *
  ------------------
  |  |  101|  38.3k|#define PIXEL_BUFFER_SIZE (10000)
  ------------------
  935|  38.3k|			colour->input_bands *
  936|  38.3k|			VIPS_IMAGE_SIZEOF_ELEMENT(colour->in[0]);
  ------------------
  |  |  382|  38.3k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  ------------------
  937|  38.3k|		q += PIXEL_BUFFER_SIZE * 3;
  ------------------
  |  |  101|  38.3k|#define PIXEL_BUFFER_SIZE (10000)
  ------------------
  938|  38.3k|	}
  939|  38.3k|}
icc_transform.c:decode_xyz:
  871|  38.3k|{
  872|  38.3k|	int i;
  873|       |
  874|  3.23M|	for (i = 0; i < n; i++) {
  ------------------
  |  Branch (874:14): [True: 3.19M, False: 38.3k]
  ------------------
  875|       |		/* cmsXYZEncoded2Float inlined.
  876|       |		 */
  877|  3.19M|		float X = fixed[0] / 32768.0;
  878|  3.19M|		float Y = fixed[1] / 32768.0;
  879|  3.19M|		float Z = fixed[2] / 32768.0;
  880|       |
  881|  3.19M|		X *= SCALE;
  ------------------
  |  |  867|  3.19M|#define SCALE (VIPS_D65_Y0)
  |  |  ------------------
  |  |  |  |   59|  3.19M|#define VIPS_D65_Y0 (100.0)
  |  |  ------------------
  ------------------
  882|  3.19M|		Y *= SCALE;
  ------------------
  |  |  867|  3.19M|#define SCALE (VIPS_D65_Y0)
  |  |  ------------------
  |  |  |  |   59|  3.19M|#define VIPS_D65_Y0 (100.0)
  |  |  ------------------
  ------------------
  883|  3.19M|		Z *= SCALE;
  ------------------
  |  |  867|  3.19M|#define SCALE (VIPS_D65_Y0)
  |  |  ------------------
  |  |  |  |   59|  3.19M|#define VIPS_D65_Y0 (100.0)
  |  |  ------------------
  ------------------
  884|       |
  885|       |		/* Transform XYZ D50 to D65, chromatic adaption is done with the
  886|       |		 * Bradford transformation.
  887|       |		 * See: https://fujiwaratko.sakura.ne.jp/infosci/colorspace/bradford_e.html
  888|       |		 */
  889|  3.19M|		xyz[0] = 0.955513 * X +
  890|  3.19M|			-0.023073 * Y +
  891|  3.19M|			0.063309 * Z;
  892|  3.19M|		xyz[1] = -0.028325 * X +
  893|  3.19M|			1.009942 * Y +
  894|  3.19M|			0.021055 * Z;
  895|  3.19M|		xyz[2] = 0.012329 * X +
  896|  3.19M|			-0.020536 * Y +
  897|  3.19M|			1.330714 * Z;
  898|       |
  899|  3.19M|		xyz += 3;
  900|  3.19M|		fixed += 3;
  901|  3.19M|	}
  902|  38.3k|}
icc_transform.c:vips_icc_import_init:
  974|    909|{
  975|    909|}
icc_transform.c:vips_icc_export_class_init:
 1115|      1|{
 1116|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1117|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1118|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
 1119|       |
 1120|      1|	gobject_class->set_property = vips_object_set_property;
 1121|      1|	gobject_class->get_property = vips_object_get_property;
 1122|       |
 1123|      1|	object_class->nickname = "icc_export";
 1124|      1|	object_class->description = _("output to device with ICC profile");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1125|      1|	object_class->build = vips_icc_export_build;
 1126|       |
 1127|      1|	colour_class->process_line = vips_icc_export_line;
 1128|       |
 1129|      1|	VIPS_ARG_STRING(class, "output_profile", 110,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1130|      1|		_("Output profile"),
 1131|      1|		_("Filename to load output profile from"),
 1132|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1133|      1|		G_STRUCT_OFFSET(VipsIccExport, output_profile_filename),
 1134|      1|		NULL);
 1135|       |
 1136|      1|	VIPS_ARG_INT(class, "depth", 130,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1137|      1|		_("Depth"),
 1138|      1|		_("Output device space depth in bits"),
 1139|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1140|      1|		G_STRUCT_OFFSET(VipsIcc, depth),
 1141|      1|		8, 16, 8);
 1142|      1|}
icc_transform.c:vips_icc_transform_class_init:
 1218|      1|{
 1219|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1220|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1221|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
 1222|       |
 1223|      1|	gobject_class->set_property = vips_object_set_property;
 1224|      1|	gobject_class->get_property = vips_object_get_property;
 1225|       |
 1226|      1|	object_class->nickname = "icc_transform";
 1227|      1|	object_class->description =
 1228|      1|		_("transform between devices with ICC profiles");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1229|      1|	object_class->build = vips_icc_transform_build;
 1230|       |
 1231|      1|	colour_class->process_line = vips_icc_transform_line;
 1232|       |
 1233|      1|	VIPS_ARG_STRING(class, "output_profile", 110,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1234|      1|		_("Output profile"),
 1235|      1|		_("Filename to load output profile from"),
 1236|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1237|      1|		G_STRUCT_OFFSET(VipsIccTransform, output_profile_filename),
 1238|      1|		NULL);
 1239|       |
 1240|      1|	VIPS_ARG_BOOL(class, "embedded", 120,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1241|      1|		_("Embedded"),
 1242|      1|		_("Use embedded input profile, if available"),
 1243|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1244|      1|		G_STRUCT_OFFSET(VipsIccTransform, embedded),
 1245|      1|		FALSE);
 1246|       |
 1247|      1|	VIPS_ARG_STRING(class, "input_profile", 130,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1248|      1|		_("Input profile"),
 1249|      1|		_("Filename to load input profile from"),
 1250|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1251|      1|		G_STRUCT_OFFSET(VipsIccTransform, input_profile_filename),
 1252|      1|		NULL);
 1253|       |
 1254|      1|	VIPS_ARG_INT(class, "depth", 140,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1255|      1|		_("Depth"),
 1256|      1|		_("Output device space depth in bits"),
 1257|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1258|      1|		G_STRUCT_OFFSET(VipsIcc, depth),
 1259|      1|		8, 16, 8);
 1260|      1|}
icc_transform.c:vips_icc_info:
  246|  3.67k|{
  247|  3.67k|	int i;
  248|       |
  249|  17.4k|	for (i = 0; i < VIPS_NUMBER(vips_icc_info_table); i++)
  ------------------
  |  |   60|  17.4k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (249:14): [True: 17.4k, False: 8]
  ------------------
  250|  17.4k|		if (vips_icc_info_table[i].signature == signature)
  ------------------
  |  Branch (250:7): [True: 3.66k, False: 13.7k]
  ------------------
  251|  3.66k|			return &vips_icc_info_table[i];
  252|       |
  253|      8|	return NULL;
  254|  3.67k|}
icc_transform.c:vips_image_is_profile_compatible:
  553|    935|{
  554|    935|	switch (image->Type) {
  555|      3|	case VIPS_INTERPRETATION_B_W:
  ------------------
  |  Branch (555:2): [True: 3, False: 932]
  ------------------
  556|     18|	case VIPS_INTERPRETATION_GREY16:
  ------------------
  |  Branch (556:2): [True: 15, False: 920]
  ------------------
  557|       |		/* The ICC profile needs to be monochrome.
  558|       |		 */
  559|     18|		return profile_bands == 1;
  560|       |
  561|      0|	case VIPS_INTERPRETATION_XYZ:
  ------------------
  |  Branch (561:2): [True: 0, False: 935]
  ------------------
  562|      0|	case VIPS_INTERPRETATION_LAB:
  ------------------
  |  Branch (562:2): [True: 0, False: 935]
  ------------------
  563|      0|	case VIPS_INTERPRETATION_LABQ:
  ------------------
  |  Branch (563:2): [True: 0, False: 935]
  ------------------
  564|      0|	case VIPS_INTERPRETATION_RGB:
  ------------------
  |  Branch (564:2): [True: 0, False: 935]
  ------------------
  565|      0|	case VIPS_INTERPRETATION_CMC:
  ------------------
  |  Branch (565:2): [True: 0, False: 935]
  ------------------
  566|      0|	case VIPS_INTERPRETATION_LCH:
  ------------------
  |  Branch (566:2): [True: 0, False: 935]
  ------------------
  567|      0|	case VIPS_INTERPRETATION_LABS:
  ------------------
  |  Branch (567:2): [True: 0, False: 935]
  ------------------
  568|      5|	case VIPS_INTERPRETATION_sRGB:
  ------------------
  |  Branch (568:2): [True: 5, False: 930]
  ------------------
  569|      5|	case VIPS_INTERPRETATION_YXY:
  ------------------
  |  Branch (569:2): [True: 0, False: 935]
  ------------------
  570|      6|	case VIPS_INTERPRETATION_RGB16:
  ------------------
  |  Branch (570:2): [True: 1, False: 934]
  ------------------
  571|      6|	case VIPS_INTERPRETATION_scRGB:
  ------------------
  |  Branch (571:2): [True: 0, False: 935]
  ------------------
  572|      6|	case VIPS_INTERPRETATION_HSV:
  ------------------
  |  Branch (572:2): [True: 0, False: 935]
  ------------------
  573|       |		/* The band count in the ICC profile must correspond to that of
  574|       |		 * the image, with a maximum of 3 bands allowed.
  575|       |		 */
  576|      6|		return VIPS_MIN(3, image->Bands) == profile_bands;
  ------------------
  |  |   55|      6|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 1, False: 5]
  |  |  ------------------
  ------------------
  577|       |
  578|    911|	case VIPS_INTERPRETATION_CMYK:
  ------------------
  |  Branch (578:2): [True: 911, False: 24]
  ------------------
  579|       |		/* CMYK images can only be imported if the ICC-profile has at
  580|       |		 * least 4 bands thereby blocking the usage of RGB profiles.
  581|       |		 */
  582|    911|		return profile_bands >= 4;
  583|       |
  584|      0|	case VIPS_INTERPRETATION_MULTIBAND:
  ------------------
  |  Branch (584:2): [True: 0, False: 935]
  ------------------
  585|      0|	case VIPS_INTERPRETATION_HISTOGRAM:
  ------------------
  |  Branch (585:2): [True: 0, False: 935]
  ------------------
  586|      0|	case VIPS_INTERPRETATION_MATRIX:
  ------------------
  |  Branch (586:2): [True: 0, False: 935]
  ------------------
  587|      0|	case VIPS_INTERPRETATION_FOURIER:
  ------------------
  |  Branch (587:2): [True: 0, False: 935]
  ------------------
  588|      0|	default:
  ------------------
  |  Branch (588:2): [True: 0, False: 935]
  ------------------
  589|      0|		return image->Bands >= profile_bands;
  590|    935|	}
  591|    935|}

vips_profile_load:
  195|    909|{
  196|    909|	va_list ap;
  197|    909|	int result;
  198|       |
  199|    909|	va_start(ap, profile);
  200|    909|	result = vips_call_split("profile_load", ap, name, profile);
  201|    909|	va_end(ap);
  202|       |
  203|    909|	return result;
  204|    909|}
profile_load.c:vips_profile_load_class_init:
  139|      1|{
  140|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  141|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  142|       |
  143|      1|	gobject_class->set_property = vips_object_set_property;
  144|      1|	gobject_class->get_property = vips_object_get_property;
  145|       |
  146|      1|	object_class->nickname = "profile_load";
  147|      1|	object_class->description = _("load named ICC profile");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  148|      1|	object_class->build = vips_profile_load_build;
  149|       |
  150|      1|	VIPS_ARG_STRING(class, "name", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  151|      1|		_("Name"),
  152|      1|		_("Profile name"),
  153|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  154|      1|		G_STRUCT_OFFSET(VipsProfileLoad, name),
  155|      1|		NULL);
  156|       |
  157|      1|	VIPS_ARG_BOXED(class, "profile", 2,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  158|      1|		_("Profile"),
  159|      1|		_("Loaded profile"),
  160|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  161|      1|		G_STRUCT_OFFSET(VipsProfileLoad, profile),
  162|      1|		VIPS_TYPE_BLOB);
  163|      1|}
profile_load.c:vips_profile_load_build:
  101|    239|{
  102|    239|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|    239|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|    239|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    239|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  103|    239|	VipsProfileLoad *load = (VipsProfileLoad *) object;
  104|       |
  105|    239|	size_t length;
  106|    239|	const void *data;
  107|    239|	VipsBlob *profile;
  108|       |
  109|    239|	if (VIPS_OBJECT_CLASS(vips_profile_load_parent_class)->build(object))
  ------------------
  |  |  435|    239|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|    239|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    239|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (109:6): [True: 0, False: 239]
  ------------------
  110|      0|		return -1;
  111|       |
  112|    239|	if (g_ascii_strcasecmp(load->name, "none") == 0)
  ------------------
  |  Branch (112:6): [True: 0, False: 239]
  ------------------
  113|      0|		profile = NULL;
  114|    239|	else if ((data = vips_profile_fallback_get(load->name, &length)))
  ------------------
  |  Branch (114:11): [True: 239, False: 0]
  ------------------
  115|    239|		profile = vips_blob_new(
  116|    239|			(VipsCallbackFn) vips_area_free_cb, data, length);
  117|      0|	else if ((data = vips__file_read_name(load->name,
  ------------------
  |  Branch (117:11): [True: 0, False: 0]
  ------------------
  118|      0|				  vips__icc_dir(), &length)))
  119|      0|		profile = vips_blob_new(
  120|      0|			(VipsCallbackFn) vips_area_free_cb, data, length);
  121|      0|	else {
  122|      0|		vips_error(class->nickname,
  123|      0|			_("unable to load profile \"%s\""), load->name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  124|      0|		return -1;
  125|      0|	}
  126|       |
  127|    239|	g_object_set(object, "profile", profile, NULL);
  128|       |
  129|    239|	if (profile) {
  ------------------
  |  Branch (129:6): [True: 239, False: 0]
  ------------------
  130|    239|		vips_area_unref((VipsArea *) profile);
  131|    239|		profile = NULL;
  132|    239|	}
  133|       |
  134|    239|	return 0;
  135|    239|}
profile_load.c:vips_profile_fallback_get:
   63|    239|{
   64|    239|	int i;
   65|    239|	VipsProfileFallback *fallback;
   66|       |
   67|    239|	for (i = 0; (fallback = vips__profile_fallback_table[i]); i++)
  ------------------
  |  Branch (67:14): [True: 239, False: 0]
  ------------------
   68|    239|		if (g_ascii_strcasecmp(fallback->name, name) == 0) {
  ------------------
  |  Branch (68:7): [True: 239, False: 0]
  ------------------
   69|    239|			void *data;
   70|    239|			GConverter *converter;
   71|    239|			GConverterResult res;
   72|    239|			gsize bytes_read;
   73|    239|			gsize bytes_written;
   74|       |
   75|    239|			data = g_malloc0(fallback->length);
   76|    239|			converter = G_CONVERTER(g_zlib_decompressor_new(
  ------------------
  |  |   33|    239|#define G_CONVERTER(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_CONVERTER, GConverter))
  |  |  ------------------
  |  |  |  |  484|    239|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    239|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   77|    239|				G_ZLIB_COMPRESSOR_FORMAT_ZLIB));
   78|       |
   79|    239|			res = g_converter_convert(converter,
   80|    239|				fallback->data, fallback->length,
   81|    239|				data, fallback->length,
   82|    239|				G_CONVERTER_INPUT_AT_END,
   83|    239|				&bytes_read, &bytes_written, NULL);
   84|    239|			g_object_unref(converter);
   85|       |
   86|    239|			if (res == G_CONVERTER_FINISHED) {
  ------------------
  |  Branch (86:8): [True: 239, False: 0]
  ------------------
   87|    239|				*length = fallback->length;
   88|    239|				return data;
   89|    239|			}
   90|      0|			else {
   91|      0|				g_free(data);
   92|      0|				g_warning("fallback profile decompression failed");
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
   93|      0|			}
   94|    239|		}
   95|       |
   96|      0|	return NULL;
   97|    239|}
profile_load.c:vips_profile_load_init:
  167|    909|{
  168|    909|}

vips_rad2float:
  217|    246|{
  218|    246|	va_list ap;
  219|    246|	int result;
  220|       |
  221|    246|	va_start(ap, out);
  222|    246|	result = vips_call_split("rad2float", ap, in, out);
  223|    246|	va_end(ap);
  224|       |
  225|    246|	return result;
  226|    246|}
rad2float.c:vips_rad2float_class_init:
  178|      1|{
  179|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  180|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  181|       |
  182|      1|	object_class->nickname = "rad2float";
  183|      1|	object_class->description =
  184|      1|		_("unpack Radiance coding to float RGB");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  185|       |
  186|      1|	colour_class->process_line = vips_rad2float_line;
  187|      1|}
rad2float.c:vips_rad2float_line:
  166|    342|{
  167|    342|	COLR *inp = (COLR *) in[0];
  168|    342|	COLOR *outbuf = (COLOR *) out;
  169|       |
  170|    342|	int i;
  171|       |
  172|  2.55k|	for (i = 0; i < width; i++)
  ------------------
  |  Branch (172:14): [True: 2.21k, False: 342]
  ------------------
  173|  2.21k|		colr_color(outbuf[i], inp[i]);
  174|    342|}
rad2float.c:colr_color:
  144|  2.21k|{
  145|  2.21k|	if (clr[EXP] == 0)
  ------------------
  |  |  125|  2.21k|#define EXP 3	  /* exponent same for either format */
  ------------------
  |  Branch (145:6): [True: 642, False: 1.57k]
  ------------------
  146|    642|		col[RED] = col[GRN] = col[BLU] = 0.0;
  ------------------
  |  |  119|    642|#define RED 0
  ------------------
              		col[RED] = col[GRN] = col[BLU] = 0.0;
  ------------------
  |  |  120|    642|#define GRN 1
  ------------------
              		col[RED] = col[GRN] = col[BLU] = 0.0;
  ------------------
  |  |  121|    642|#define BLU 2
  ------------------
  147|  1.57k|	else {
  148|  1.57k|		double f = ldexp(1.0, (int) clr[EXP] - (COLXS + 8));
  ------------------
  |  |  125|  1.57k|#define EXP 3	  /* exponent same for either format */
  ------------------
              		double f = ldexp(1.0, (int) clr[EXP] - (COLXS + 8));
  ------------------
  |  |  126|  1.57k|#define COLXS 128 /* excess used for exponent */
  ------------------
  149|       |
  150|  1.57k|		col[RED] = (clr[RED] + 0.5) * f;
  ------------------
  |  |  119|  1.57k|#define RED 0
  ------------------
              		col[RED] = (clr[RED] + 0.5) * f;
  ------------------
  |  |  119|  1.57k|#define RED 0
  ------------------
  151|  1.57k|		col[GRN] = (clr[GRN] + 0.5) * f;
  ------------------
  |  |  120|  1.57k|#define GRN 1
  ------------------
              		col[GRN] = (clr[GRN] + 0.5) * f;
  ------------------
  |  |  120|  1.57k|#define GRN 1
  ------------------
  152|  1.57k|		col[BLU] = (clr[BLU] + 0.5) * f;
  ------------------
  |  |  121|  1.57k|#define BLU 2
  ------------------
              		col[BLU] = (clr[BLU] + 0.5) * f;
  ------------------
  |  |  121|  1.57k|#define BLU 2
  ------------------
  153|  1.57k|	}
  154|  2.21k|}
rad2float.c:vips_rad2float_init:
  191|    246|{
  192|    246|	VipsColour *colour = VIPS_COLOUR(rad2float);
  ------------------
  |  |   42|    246|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|    246|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    246|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|    246|		VIPS_TYPE_COLOUR, VipsColour))
  ------------------
  193|    246|	VipsColourCode *code = VIPS_COLOUR_CODE(rad2float);
  ------------------
  |  |  135|    246|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|    246|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    246|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  136|    246|		VIPS_TYPE_COLOUR_CODE, VipsColourCode))
  ------------------
  194|       |
  195|    246|	colour->coding = VIPS_CODING_NONE;
  196|    246|	colour->interpretation = VIPS_INTERPRETATION_scRGB;
  197|    246|	colour->format = VIPS_FORMAT_FLOAT;
  198|    246|	colour->bands = 3;
  199|       |
  200|    246|	code->input_coding = VIPS_CODING_RAD;
  201|    246|}

sRGB2HSV.c:vips_sRGB2HSV_class_init:
  128|      1|{
  129|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  130|      1|	VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_COLOUR, VipsColourClass))
  ------------------
  131|       |
  132|      1|	object_class->nickname = "sRGB2HSV";
  133|      1|	object_class->description = _("transform sRGB to HSV");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  134|       |
  135|      1|	colour_class->process_line = vips_sRGB2HSV_line;
  136|      1|}

sRGB2scRGB.c:vips_sRGB2scRGB_class_init:
  273|      1|{
  274|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  275|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  276|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  277|       |
  278|      1|	gobject_class->set_property = vips_object_set_property;
  279|      1|	gobject_class->get_property = vips_object_get_property;
  280|       |
  281|      1|	object_class->nickname = "sRGB2scRGB";
  282|      1|	object_class->description = _("convert an sRGB image to scRGB");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  283|      1|	object_class->build = vips_sRGB2scRGB_build;
  284|       |
  285|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  286|       |
  287|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  288|      1|		_("Input"),
  289|      1|		_("Input image"),
  290|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  291|      1|		G_STRUCT_OFFSET(VipssRGB2scRGB, in));
  292|       |
  293|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  294|      1|		_("Output"),
  295|      1|		_("Output image"),
  296|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  297|      1|		G_STRUCT_OFFSET(VipssRGB2scRGB, out));
  298|      1|}

scRGB2BW.c:vips_scRGB2BW_class_init:
  222|      1|{
  223|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  224|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  225|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  226|       |
  227|      1|	gobject_class->set_property = vips_object_set_property;
  228|      1|	gobject_class->get_property = vips_object_get_property;
  229|       |
  230|      1|	object_class->nickname = "scRGB2BW";
  231|      1|	object_class->description = _("convert scRGB to BW");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  232|      1|	object_class->build = vips_scRGB2BW_build;
  233|       |
  234|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  235|       |
  236|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  237|      1|		_("Input"),
  238|      1|		_("Input image"),
  239|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  240|      1|		G_STRUCT_OFFSET(VipsscRGB2BW, in));
  241|       |
  242|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  243|      1|		_("Output"),
  244|      1|		_("Output image"),
  245|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  246|      1|		G_STRUCT_OFFSET(VipsscRGB2BW, out));
  247|       |
  248|      1|	VIPS_ARG_INT(class, "depth", 130,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  249|      1|		_("Depth"),
  250|      1|		_("Output device space depth in bits"),
  251|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  252|      1|		G_STRUCT_OFFSET(VipsscRGB2BW, depth),
  253|      1|		8, 16, 8);
  254|      1|}

scRGB2XYZ.c:vips_scRGB2XYZ_class_init:
  176|      1|{
  177|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  178|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  179|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  180|       |
  181|      1|	gobject_class->set_property = vips_object_set_property;
  182|      1|	gobject_class->get_property = vips_object_get_property;
  183|       |
  184|      1|	object_class->nickname = "scRGB2XYZ";
  185|      1|	object_class->description = _("transform scRGB to XYZ");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  186|      1|	object_class->build = vips_scRGB2XYZ_build;
  187|       |
  188|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  189|       |
  190|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  191|      1|		_("Input"),
  192|      1|		_("Input image"),
  193|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  194|      1|		G_STRUCT_OFFSET(VipsscRGB2XYZ, in));
  195|       |
  196|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  197|      1|		_("Output"),
  198|      1|		_("Output image"),
  199|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  200|      1|		G_STRUCT_OFFSET(VipsscRGB2XYZ, out));
  201|      1|}

vips_scRGB2sRGB:
  316|  1.45k|{
  317|  1.45k|	va_list ap;
  318|  1.45k|	int result;
  319|       |
  320|  1.45k|	va_start(ap, out);
  321|  1.45k|	result = vips_call_split("scRGB2sRGB", ap, in, out);
  322|  1.45k|	va_end(ap);
  323|       |
  324|  1.45k|	return result;
  325|  1.45k|}
scRGB2sRGB.c:vips_scRGB2sRGB_class_init:
  255|      1|{
  256|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  257|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  258|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  259|       |
  260|      1|	gobject_class->set_property = vips_object_set_property;
  261|      1|	gobject_class->get_property = vips_object_get_property;
  262|       |
  263|      1|	object_class->nickname = "scRGB2sRGB";
  264|      1|	object_class->description = _("convert an scRGB image to sRGB");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  265|      1|	object_class->build = vips_scRGB2sRGB_build;
  266|       |
  267|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  268|       |
  269|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  270|      1|		_("Input"),
  271|      1|		_("Input image"),
  272|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  273|      1|		G_STRUCT_OFFSET(VipsscRGB2sRGB, in));
  274|       |
  275|      1|	VIPS_ARG_IMAGE(class, "out", 100,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  276|      1|		_("Output"),
  277|      1|		_("Output image"),
  278|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  279|      1|		G_STRUCT_OFFSET(VipsscRGB2sRGB, out));
  280|       |
  281|      1|	VIPS_ARG_INT(class, "depth", 130,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  282|      1|		_("Depth"),
  283|      1|		_("Output device space depth in bits"),
  284|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  285|      1|		G_STRUCT_OFFSET(VipsscRGB2sRGB, depth),
  286|      1|		8, 16, 8);
  287|      1|}
scRGB2sRGB.c:vips_scRGB2sRGB_build:
  186|  1.45k|{
  187|  1.45k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  1.45k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  1.45k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  1.45k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|  1.45k|	VipsscRGB2sRGB *scRGB2sRGB = (VipsscRGB2sRGB *) object;
  189|       |
  190|  1.45k|	VipsImage **t = (VipsImage **) vips_object_local_array(object, 2);
  191|       |
  192|  1.45k|	VipsImage *in;
  193|  1.45k|	VipsBandFormat format;
  194|  1.45k|	VipsInterpretation interpretation;
  195|  1.45k|	VipsImage *out;
  196|       |
  197|  1.45k|	if (VIPS_OBJECT_CLASS(vips_scRGB2sRGB_parent_class)->build(object))
  ------------------
  |  |  435|  1.45k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.45k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.45k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (197:6): [True: 0, False: 1.45k]
  ------------------
  198|      0|		return -1;
  199|       |
  200|  1.45k|	in = scRGB2sRGB->in;
  201|  1.45k|	if (vips_check_bands_atleast(class->nickname, in, 3))
  ------------------
  |  Branch (201:6): [True: 0, False: 1.45k]
  ------------------
  202|      0|		return -1;
  203|       |
  204|       |	// we are changing the gamma, so any profile on the image can no longer
  205|       |	// work (and will cause horrible problems in any downstream colour
  206|       |	// handling)
  207|  1.45k|	if (vips_copy(in, &t[0], NULL))
  ------------------
  |  Branch (207:6): [True: 0, False: 1.45k]
  ------------------
  208|      0|		return -1;
  209|  1.45k|	in = t[0];
  210|  1.45k|	vips_image_remove(in, VIPS_META_ICC_NAME);
  ------------------
  |  |   78|  1.45k|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  211|       |
  212|  1.45k|	switch (scRGB2sRGB->depth) {
  213|  1.45k|	case 16:
  ------------------
  |  Branch (213:2): [True: 1.45k, False: 0]
  ------------------
  214|  1.45k|		interpretation = VIPS_INTERPRETATION_RGB16;
  215|  1.45k|		format = VIPS_FORMAT_USHORT;
  216|  1.45k|		break;
  217|       |
  218|      0|	case 8:
  ------------------
  |  Branch (218:2): [True: 0, False: 1.45k]
  ------------------
  219|      0|		interpretation = VIPS_INTERPRETATION_sRGB;
  220|      0|		format = VIPS_FORMAT_UCHAR;
  221|      0|		break;
  222|       |
  223|      0|	default:
  ------------------
  |  Branch (223:2): [True: 0, False: 1.45k]
  ------------------
  224|      0|		vips_error(class->nickname, "%s", _("depth must be 8 or 16"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  225|      0|		return -1;
  226|  1.45k|	}
  227|       |
  228|  1.45k|	if (vips_cast_float(in, &t[1], NULL))
  ------------------
  |  Branch (228:6): [True: 0, False: 1.45k]
  ------------------
  229|      0|		return -1;
  230|  1.45k|	in = t[1];
  231|       |
  232|  1.45k|	out = vips_image_new();
  233|  1.45k|	if (vips_image_pipelinev(out,
  ------------------
  |  Branch (233:6): [True: 0, False: 1.45k]
  ------------------
  234|  1.45k|			VIPS_DEMAND_STYLE_THINSTRIP, in, NULL)) {
  235|      0|		g_object_unref(out);
  236|      0|		return -1;
  237|      0|	}
  238|  1.45k|	out->Type = interpretation;
  239|  1.45k|	out->BandFmt = format;
  240|       |
  241|  1.45k|	if (vips_image_generate(out,
  ------------------
  |  Branch (241:6): [True: 0, False: 1.45k]
  ------------------
  242|  1.45k|			vips_start_one, vips_scRGB2sRGB_gen, vips_stop_one,
  243|  1.45k|			in, scRGB2sRGB)) {
  244|      0|		g_object_unref(out);
  245|      0|		return -1;
  246|      0|	}
  247|       |
  248|  1.45k|	g_object_set(object, "out", out, NULL);
  249|       |
  250|  1.45k|	return 0;
  251|  1.45k|}
scRGB2sRGB.c:vips_scRGB2sRGB_gen:
  152|  4.47k|{
  153|  4.47k|	VipsRegion *ir = (VipsRegion *) seq;
  154|  4.47k|	VipsscRGB2sRGB *scRGB2sRGB = (VipsscRGB2sRGB *) b;
  155|  4.47k|	VipsRect *r = &out_region->valid;
  156|  4.47k|	VipsImage *in = ir->im;
  157|       |
  158|  4.47k|	int y;
  159|       |
  160|  4.47k|	if (vips_region_prepare(ir, r))
  ------------------
  |  Branch (160:6): [True: 495, False: 3.97k]
  ------------------
  161|    495|		return -1;
  162|       |
  163|  4.47k|	VIPS_GATE_START("vips_scRGB2sRGB_gen: work");
  ------------------
  |  |   41|  3.97k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  3.97k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  3.97k|	{ \
  |  |   43|  3.97k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 3.97k]
  |  |  ------------------
  |  |   44|  3.97k|			vips__thread_gate_start(NAME); \
  |  |   45|  3.97k|	} \
  |  |   46|  4.47k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  4.47k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  164|       |
  165|  57.1k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (165:14): [True: 53.1k, False: 3.97k]
  ------------------
  166|  53.1k|		float *p = (float *)
  167|  53.1k|			VIPS_REGION_ADDR(ir, r->left, r->top + y);
  ------------------
  |  |  227|  53.1k|	((R)->data + \
  |  |  228|  53.1k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  53.1k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  53.1k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  53.1k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  53.1k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  53.1k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|  53.1k|		VipsPel *q = (VipsPel *)
  169|  53.1k|			VIPS_REGION_ADDR(out_region, r->left, r->top + y);
  ------------------
  |  |  227|  53.1k|	((R)->data + \
  |  |  228|  53.1k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  53.1k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  53.1k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  53.1k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  53.1k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  53.1k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|       |
  171|  53.1k|		if (scRGB2sRGB->depth == 16)
  ------------------
  |  Branch (171:7): [True: 53.1k, False: 0]
  ------------------
  172|  53.1k|			vips_scRGB2sRGB_line_16((unsigned short *) q, p,
  173|  53.1k|				in->Bands - 3, r->width);
  174|      0|		else
  175|      0|			vips_scRGB2sRGB_line_8(q, p,
  176|      0|				in->Bands - 3, r->width);
  177|  53.1k|	}
  178|       |
  179|  3.97k|	VIPS_GATE_STOP("vips_scRGB2sRGB_gen: work");
  ------------------
  |  |   49|  3.97k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  3.97k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  3.97k|	{ \
  |  |   51|  3.97k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 3.97k]
  |  |  ------------------
  |  |   52|  3.97k|			vips__thread_gate_stop(NAME); \
  |  |   53|  3.97k|	} \
  |  |   54|  3.97k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  3.97k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|       |
  181|  3.97k|	return 0;
  182|  4.47k|}
scRGB2sRGB.c:vips_scRGB2sRGB_line_16:
  122|  53.1k|{
  123|  53.1k|	int i, j;
  124|       |
  125|  3.48M|	for (i = 0; i < width; i++) {
  ------------------
  |  Branch (125:14): [True: 3.43M, False: 53.1k]
  ------------------
  126|  3.43M|		float R = p[0];
  127|  3.43M|		float G = p[1];
  128|  3.43M|		float B = p[2];
  129|       |
  130|  3.43M|		int r, g, b;
  131|       |
  132|  3.43M|		vips_col_scRGB2sRGB_16(R, G, B, &r, &g, &b, NULL);
  133|       |
  134|  3.43M|		p += 3;
  135|       |
  136|  3.43M|		q[0] = r;
  137|  3.43M|		q[1] = g;
  138|  3.43M|		q[2] = b;
  139|       |
  140|  3.43M|		q += 3;
  141|       |
  142|  3.47M|		for (j = 0; j < extra_bands; j++)
  ------------------
  |  Branch (142:15): [True: 46.1k, False: 3.43M]
  ------------------
  143|  3.43M|			q[j] = VIPS_CLIP(0, (int) (p[j] * 65535.0), USHRT_MAX);
  ------------------
  |  |   57|  46.1k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|  92.3k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 718, False: 45.4k]
  |  |  |  |  |  Branch (54:32): [True: 681, False: 45.5k]
  |  |  |  |  |  Branch (54:44): [True: 681, False: 44.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  144|  3.43M|		p += extra_bands;
  145|  3.43M|		q += extra_bands;
  146|  3.43M|	}
  147|  53.1k|}
scRGB2sRGB.c:vips_scRGB2sRGB_init:
  291|  1.45k|{
  292|  1.45k|	scRGB2sRGB->depth = 8;
  293|  1.45k|}

addalpha.c:vips_addalpha_class_init:
   75|      1|{
   76|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   77|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   78|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
   79|       |
   80|      1|	gobject_class->set_property = vips_object_set_property;
   81|      1|	gobject_class->get_property = vips_object_get_property;
   82|       |
   83|      1|	vobject_class->nickname = "addalpha";
   84|      1|	vobject_class->description = _("append an alpha channel");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   85|      1|	vobject_class->build = vips_addalpha_build;
   86|       |
   87|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
   88|       |
   89|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
   90|      1|		_("Input"),
   91|      1|		_("Input image"),
   92|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   93|      1|		G_STRUCT_OFFSET(VipsAddAlpha, in));
   94|      1|}

arrayjoin.c:vips_arrayjoin_class_init:
  377|      1|{
  378|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  379|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  380|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  381|       |
  382|      1|	VIPS_DEBUG_MSG("vips_arrayjoin_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  383|       |
  384|      1|	gobject_class->set_property = vips_object_set_property;
  385|      1|	gobject_class->get_property = vips_object_get_property;
  386|       |
  387|      1|	vobject_class->nickname = "arrayjoin";
  388|      1|	vobject_class->description = _("join an array of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  389|      1|	vobject_class->build = vips_arrayjoin_build;
  390|       |
  391|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  392|       |
  393|      1|	VIPS_ARG_BOXED(class, "in", -1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  394|      1|		_("Input"),
  395|      1|		_("Array of input images"),
  396|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  397|      1|		G_STRUCT_OFFSET(VipsArrayjoin, in),
  398|      1|		VIPS_TYPE_ARRAY_IMAGE);
  399|       |
  400|      1|	VIPS_ARG_INT(class, "across", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  401|      1|		_("Across"),
  402|      1|		_("Number of images across grid"),
  403|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  404|      1|		G_STRUCT_OFFSET(VipsArrayjoin, across),
  405|      1|		1, 1000000, 1);
  406|       |
  407|      1|	VIPS_ARG_INT(class, "shim", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  408|      1|		_("Shim"),
  409|      1|		_("Pixels between images"),
  410|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  411|      1|		G_STRUCT_OFFSET(VipsArrayjoin, shim),
  412|      1|		0, 1000000, 0);
  413|       |
  414|      1|	VIPS_ARG_BOXED(class, "background", 6,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  415|      1|		_("Background"),
  416|      1|		_("Colour for new pixels"),
  417|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  418|      1|		G_STRUCT_OFFSET(VipsArrayjoin, background),
  419|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  420|       |
  421|      1|	VIPS_ARG_ENUM(class, "halign", 7,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  422|      1|		_("Horizontal align"),
  423|      1|		_("Align on the left, centre or right"),
  424|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  425|      1|		G_STRUCT_OFFSET(VipsArrayjoin, halign),
  426|      1|		VIPS_TYPE_ALIGN, VIPS_ALIGN_LOW);
  427|       |
  428|      1|	VIPS_ARG_ENUM(class, "valign", 8,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  429|      1|		_("Vertical align"),
  430|      1|		_("Align on the top, centre or bottom"),
  431|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  432|      1|		G_STRUCT_OFFSET(VipsArrayjoin, valign),
  433|      1|		VIPS_TYPE_ALIGN, VIPS_ALIGN_LOW);
  434|       |
  435|      1|	VIPS_ARG_INT(class, "hspacing", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  436|      1|		_("Horizontal spacing"),
  437|      1|		_("Horizontal spacing between images"),
  438|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  439|      1|		G_STRUCT_OFFSET(VipsArrayjoin, hspacing),
  440|      1|		1, 1000000, 1);
  441|       |
  442|      1|	VIPS_ARG_INT(class, "vspacing", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  443|      1|		_("Vertical spacing"),
  444|      1|		_("Vertical spacing between images"),
  445|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  446|      1|		G_STRUCT_OFFSET(VipsArrayjoin, vspacing),
  447|      1|		1, 1000000, 1);
  448|      1|}

vips_autorot_remove_angle:
   98|  14.8k|{
   99|  14.8k|	(void) vips_image_remove(image, VIPS_META_ORIENTATION);
  ------------------
  |  |  149|  14.8k|#define VIPS_META_ORIENTATION "orientation"
  ------------------
  100|  14.8k|	(void) vips_image_map(image, vips_autorot_remove_angle_sub, NULL);
  101|  14.8k|}
autorot.c:vips_autorot_class_init:
  195|      1|{
  196|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|       |
  199|      1|	gobject_class->set_property = vips_object_set_property;
  200|      1|	gobject_class->get_property = vips_object_get_property;
  201|       |
  202|      1|	vobject_class->nickname = "autorot";
  203|      1|	vobject_class->description = _("autorotate image by exif tag");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  204|      1|	vobject_class->build = vips_autorot_build;
  205|       |
  206|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  207|      1|		_("Input"),
  208|      1|		_("Input image"),
  209|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  210|      1|		G_STRUCT_OFFSET(VipsAutorot, in));
  211|       |
  212|      1|	VIPS_ARG_ENUM(class, "angle", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  213|      1|		_("Angle"),
  214|      1|		_("Angle image was rotated by"),
  215|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  216|      1|		G_STRUCT_OFFSET(VipsAutorot, angle),
  217|      1|		VIPS_TYPE_ANGLE, VIPS_ANGLE_D0);
  218|       |
  219|      1|	VIPS_ARG_BOOL(class, "flip", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  220|      1|		_("Flip"),
  221|      1|		_("Whether the image was flipped or not"),
  222|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  223|      1|		G_STRUCT_OFFSET(VipsAutorot, flip),
  224|      1|		FALSE);
  225|      1|}
autorot.c:vips_autorot_remove_angle_sub:
   76|   170k|{
   77|   170k|	if (strcmp(field, "exif-ifd0-Orientation") == 0) {
  ------------------
  |  Branch (77:6): [True: 0, False: 170k]
  ------------------
   78|       |#ifdef DEBUG
   79|       |		printf("vips_autorot_remove_angle: %s\n", field);
   80|       |#endif /*DEBUG*/
   81|       |
   82|      0|		(void) vips_image_remove(image, field);
   83|      0|	}
   84|       |
   85|   170k|	return NULL;
   86|   170k|}

bandary.c:vips_bandary_class_init:
  246|      1|{
  247|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  248|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  250|       |
  251|      1|	VIPS_DEBUG_MSG("vips_bandary_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|       |
  253|      1|	gobject_class->set_property = vips_object_set_property;
  254|      1|	gobject_class->get_property = vips_object_get_property;
  255|       |
  256|      1|	vobject_class->nickname = "bandary";
  257|      1|	vobject_class->description = _("operations on image bands");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  258|      1|	vobject_class->build = vips_bandary_build;
  259|       |
  260|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  261|      1|}
bandary.c:vips_bandary_build:
  195|  2.66k|{
  196|  2.66k|	VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  2.66k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  2.66k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  2.66k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|  2.66k|	VipsBandaryClass *class = VIPS_BANDARY_GET_CLASS(object);
  ------------------
  |  |   52|  2.66k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  2.66k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  2.66k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|  2.66k|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  198|  2.66k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  2.66k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  2.66k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  2.66k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  2.66k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  199|  2.66k|	VipsBandary *bandary = VIPS_BANDARY(object);
  ------------------
  |  |   42|  2.66k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  2.66k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  2.66k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   43|  2.66k|		VIPS_TYPE_BANDARY, VipsBandary))
  ------------------
  200|       |
  201|  2.66k|	int i;
  202|  2.66k|	VipsImage **decode;
  203|  2.66k|	VipsImage **format;
  204|  2.66k|	VipsImage **size;
  205|       |
  206|  2.66k|	if (VIPS_OBJECT_CLASS(vips_bandary_parent_class)->build(object))
  ------------------
  |  |  435|  2.66k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  2.66k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  2.66k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (206:6): [True: 0, False: 2.66k]
  ------------------
  207|      0|		return -1;
  208|       |
  209|  2.66k|	if (bandary->n <= 0) {
  ------------------
  |  Branch (209:6): [True: 0, False: 2.66k]
  ------------------
  210|      0|		vips_error(object_class->nickname,
  211|      0|			"%s", _("no input images"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  212|      0|		return -1;
  213|      0|	}
  214|       |
  215|  2.66k|	decode = (VipsImage **) vips_object_local_array(object, bandary->n);
  216|  2.66k|	format = (VipsImage **) vips_object_local_array(object, bandary->n);
  217|  2.66k|	size = (VipsImage **) vips_object_local_array(object, bandary->n);
  218|       |
  219|  6.84k|	for (i = 0; i < bandary->n; i++)
  ------------------
  |  Branch (219:14): [True: 4.17k, False: 2.66k]
  ------------------
  220|  4.17k|		if (vips_image_decode(bandary->in[i], &decode[i]))
  ------------------
  |  Branch (220:7): [True: 0, False: 4.17k]
  ------------------
  221|      0|			return -1;
  222|  2.66k|	if (vips__formatalike_vec(decode, format, bandary->n) ||
  ------------------
  |  Branch (222:6): [True: 0, False: 2.66k]
  ------------------
  223|  2.66k|		vips__sizealike_vec(format, size, bandary->n))
  ------------------
  |  Branch (223:3): [True: 0, False: 2.66k]
  ------------------
  224|      0|		return -1;
  225|  2.66k|	bandary->ready = size;
  226|       |
  227|  2.66k|	if (vips_image_pipeline_array(conversion->out,
  ------------------
  |  Branch (227:6): [True: 0, False: 2.66k]
  ------------------
  228|  2.66k|			VIPS_DEMAND_STYLE_THINSTRIP, bandary->ready))
  229|      0|		return -1;
  230|       |
  231|  2.66k|	conversion->out->Bands = bandary->out_bands;
  232|  2.66k|	if (class->format_table)
  ------------------
  |  Branch (232:6): [True: 0, False: 2.66k]
  ------------------
  233|      0|		conversion->out->BandFmt =
  234|      0|			class->format_table[bandary->ready[0]->BandFmt];
  235|       |
  236|  2.66k|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (236:6): [True: 0, False: 2.66k]
  ------------------
  237|  2.66k|			vips_bandary_start, vips_bandary_gen, vips_bandary_stop,
  238|  2.66k|			bandary->ready, bandary))
  239|      0|		return -1;
  240|       |
  241|  2.66k|	return 0;
  242|  2.66k|}
bandary.c:vips_bandary_start:
  105|  2.66k|{
  106|  2.66k|	VipsImage **in = (VipsImage **) a;
  107|  2.66k|	VipsBandary *bandary = (VipsBandary *) b;
  108|       |
  109|  2.66k|	VipsBandarySequence *seq;
  110|  2.66k|	int i, n;
  111|       |
  112|  2.66k|	if (!(seq = VIPS_NEW(NULL, VipsBandarySequence)))
  ------------------
  |  |   70|  2.66k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  2.66k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  2.66k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  2.66k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  2.66k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (112:6): [True: 0, False: 2.66k]
  ------------------
  113|      0|		return NULL;
  114|       |
  115|  2.66k|	seq->bandary = bandary;
  116|  2.66k|	seq->ir = NULL;
  117|  2.66k|	seq->p = NULL;
  118|  2.66k|	seq->pixels = NULL;
  119|       |
  120|       |	/* How many images?
  121|       |	 */
  122|  6.83k|	for (n = 0; in[n]; n++)
  ------------------
  |  Branch (122:14): [True: 4.16k, False: 2.66k]
  ------------------
  123|  4.16k|		;
  124|       |
  125|       |	/* Allocate space for region array.
  126|       |	 */
  127|  2.66k|	if (!(seq->ir = VIPS_ARRAY(NULL, n + 1, VipsRegion *))) {
  ------------------
  |  |   72|  2.66k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  2.66k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  2.66k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  2.66k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  2.66k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (127:6): [True: 0, False: 2.66k]
  ------------------
  128|      0|		vips_bandary_stop(seq, NULL, NULL);
  129|      0|		return NULL;
  130|      0|	}
  131|       |
  132|       |	/* Create a set of regions.
  133|       |	 */
  134|  6.83k|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (134:14): [True: 4.16k, False: 2.66k]
  ------------------
  135|  4.16k|		if (!(seq->ir[i] = vips_region_new(in[i]))) {
  ------------------
  |  Branch (135:7): [True: 0, False: 4.16k]
  ------------------
  136|      0|			vips_bandary_stop(seq, NULL, NULL);
  137|      0|			return NULL;
  138|      0|		}
  139|  2.66k|	seq->ir[n] = NULL;
  140|       |
  141|       |	/* Input pointers.
  142|       |	 */
  143|  2.66k|	if (!(seq->p = VIPS_ARRAY(NULL, n + 1, VipsPel *))) {
  ------------------
  |  |   72|  2.66k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  2.66k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  2.66k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  2.66k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  2.66k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (143:6): [True: 0, False: 2.66k]
  ------------------
  144|      0|		vips_bandary_stop(seq, NULL, NULL);
  145|      0|		return NULL;
  146|      0|	}
  147|       |
  148|       |	/* Pixel buffer. This is used as working space by some subclasses.
  149|       |	 */
  150|  2.66k|	if (!(seq->pixels = VIPS_ARRAY(NULL,
  ------------------
  |  |   72|  2.66k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  2.66k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  2.66k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  2.66k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  2.66k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (150:6): [True: 0, False: 2.66k]
  ------------------
  151|  2.66k|			  n * VIPS_IMAGE_SIZEOF_PEL(bandary->ready[0]), VipsPel))) {
  152|      0|		vips_bandary_stop(seq, NULL, NULL);
  153|      0|		return NULL;
  154|      0|	}
  155|       |
  156|  2.66k|	return seq;
  157|  2.66k|}
bandary.c:vips_bandary_gen:
  162|  6.31k|{
  163|  6.31k|	VipsBandarySequence *seq = (VipsBandarySequence *) vseq;
  164|  6.31k|	VipsBandary *bandary = (VipsBandary *) b;
  165|  6.31k|	VipsBandaryClass *class = VIPS_BANDARY_GET_CLASS(bandary);
  ------------------
  |  |   52|  6.31k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  6.31k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  6.31k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|  6.31k|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  166|  6.31k|	VipsRect *r = &out_region->valid;
  167|       |
  168|  6.31k|	VipsPel *q;
  169|  6.31k|	int y, i;
  170|       |
  171|  6.31k|	if (vips_reorder_prepare_many(out_region->im, seq->ir, r))
  ------------------
  |  Branch (171:6): [True: 12, False: 6.30k]
  ------------------
  172|     12|		return -1;
  173|  16.1k|	for (i = 0; i < bandary->n; i++)
  ------------------
  |  Branch (173:14): [True: 9.87k, False: 6.30k]
  ------------------
  174|  9.87k|		seq->p[i] = VIPS_REGION_ADDR(seq->ir[i], r->left, r->top);
  ------------------
  |  |  227|  16.1k|	((R)->data + \
  |  |  228|  16.1k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  9.87k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  16.1k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  9.87k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  9.87k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  9.87k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|  6.30k|	seq->p[i] = NULL;
  176|  6.30k|	q = VIPS_REGION_ADDR(out_region, r->left, r->top);
  ------------------
  |  |  227|  6.30k|	((R)->data + \
  |  |  228|  6.30k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  6.30k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  6.30k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  6.30k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  6.30k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  6.30k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  177|       |
  178|  6.30k|	VIPS_GATE_START("vips_bandary_gen: work");
  ------------------
  |  |   41|  6.30k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  6.30k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  6.30k|	{ \
  |  |   43|  6.30k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 6.30k]
  |  |  ------------------
  |  |   44|  6.30k|			vips__thread_gate_start(NAME); \
  |  |   45|  6.30k|	} \
  |  |   46|  6.30k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  6.30k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|       |
  180|  82.1k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (180:14): [True: 75.8k, False: 6.30k]
  ------------------
  181|  75.8k|		class->process_line(seq, q, seq->p, r->width);
  182|       |
  183|   194k|		for (i = 0; i < bandary->n; i++)
  ------------------
  |  Branch (183:15): [True: 119k, False: 75.8k]
  ------------------
  184|   119k|			seq->p[i] += VIPS_REGION_LSKIP(seq->ir[i]);
  ------------------
  |  |  195|   119k|	((size_t) ((R)->bpl))
  ------------------
  185|  75.8k|		q += VIPS_REGION_LSKIP(out_region);
  ------------------
  |  |  195|  75.8k|	((size_t) ((R)->bpl))
  ------------------
  186|  75.8k|	}
  187|       |
  188|  6.30k|	VIPS_GATE_STOP("vips_bandary_gen: work");
  ------------------
  |  |   49|  6.30k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  6.30k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  6.30k|	{ \
  |  |   51|  6.30k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 6.30k]
  |  |  ------------------
  |  |   52|  6.30k|			vips__thread_gate_stop(NAME); \
  |  |   53|  6.30k|	} \
  |  |   54|  6.30k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  6.30k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|       |
  190|  6.30k|	return 0;
  191|  6.31k|}
bandary.c:vips_bandary_stop:
   84|  2.66k|{
   85|  2.66k|	VipsBandarySequence *seq = (VipsBandarySequence *) vseq;
   86|       |
   87|  2.66k|	if (seq->ir) {
  ------------------
  |  Branch (87:6): [True: 2.66k, False: 0]
  ------------------
   88|  2.66k|		int i;
   89|       |
   90|  6.83k|		for (i = 0; seq->ir[i]; i++)
  ------------------
  |  Branch (90:15): [True: 4.16k, False: 2.66k]
  ------------------
   91|  4.16k|			VIPS_UNREF(seq->ir[i]);
  ------------------
  |  |   57|  2.66k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  4.16k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  4.16k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  4.16k|	{ \
  |  |  |  |   43|  4.16k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 4.16k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  4.16k|			(void) F((S)); \
  |  |  |  |   45|  4.16k|			(S) = 0; \
  |  |  |  |   46|  4.16k|		} \
  |  |  |  |   47|  4.16k|	} \
  |  |  |  |   48|  4.16k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  4.16k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   92|  2.66k|		VIPS_FREE(seq->ir);
  ------------------
  |  |   50|  2.66k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  2.66k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  2.66k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  2.66k|	{ \
  |  |  |  |   43|  2.66k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 2.66k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  2.66k|			(void) F((S)); \
  |  |  |  |   45|  2.66k|			(S) = 0; \
  |  |  |  |   46|  2.66k|		} \
  |  |  |  |   47|  2.66k|	} \
  |  |  |  |   48|  2.66k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  2.66k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   93|  2.66k|	}
   94|       |
   95|  2.66k|	VIPS_FREE(seq->p);
  ------------------
  |  |   50|  2.66k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  2.66k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  2.66k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  2.66k|	{ \
  |  |  |  |   43|  2.66k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 2.66k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  2.66k|			(void) F((S)); \
  |  |  |  |   45|  2.66k|			(S) = 0; \
  |  |  |  |   46|  2.66k|		} \
  |  |  |  |   47|  2.66k|	} \
  |  |  |  |   48|  2.66k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  2.66k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|  2.66k|	VIPS_FREE(seq->pixels);
  ------------------
  |  |   50|  2.66k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  2.66k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  2.66k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  2.66k|	{ \
  |  |  |  |   43|  2.66k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 2.66k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  2.66k|			(void) F((S)); \
  |  |  |  |   45|  2.66k|			(S) = 0; \
  |  |  |  |   46|  2.66k|		} \
  |  |  |  |   47|  2.66k|	} \
  |  |  |  |   48|  2.66k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  2.66k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   97|       |
   98|  2.66k|	VIPS_FREE(seq);
  ------------------
  |  |   50|  2.66k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  2.66k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  2.66k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  2.66k|	{ \
  |  |  |  |   43|  2.66k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 2.66k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  2.66k|			(void) F((S)); \
  |  |  |  |   45|  2.66k|			(S) = 0; \
  |  |  |  |   46|  2.66k|		} \
  |  |  |  |   47|  2.66k|	} \
  |  |  |  |   48|  2.66k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  2.66k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|       |
  100|  2.66k|	return 0;
  101|  2.66k|}
bandary.c:vips_bandary_init:
  265|  2.66k|{
  266|  2.66k|	bandary->out_bands = -1;
  267|  2.66k|}

bandbool.c:vips_bandbool_class_init:
  216|      1|{
  217|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  218|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  219|      1|	VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  220|       |
  221|      1|	gobject_class->set_property = vips_object_set_property;
  222|      1|	gobject_class->get_property = vips_object_get_property;
  223|       |
  224|      1|	object_class->nickname = "bandbool";
  225|      1|	object_class->description = _("boolean operation across image bands");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  226|      1|	object_class->build = vips_bandbool_build;
  227|       |
  228|      1|	bandary_class->process_line = vips_bandbool_buffer;
  229|      1|	bandary_class->format_table = vips_bandbool_format_table;
  230|       |
  231|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  232|      1|		_("Input"),
  233|      1|		_("Input image argument"),
  234|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  235|      1|		G_STRUCT_OFFSET(VipsBandbool, in));
  236|       |
  237|      1|	VIPS_ARG_ENUM(class, "boolean", 200,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  238|      1|		_("Operation"),
  239|      1|		_("Boolean to perform"),
  240|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  241|      1|		G_STRUCT_OFFSET(VipsBandbool, operation),
  242|      1|		VIPS_TYPE_OPERATION_BOOLEAN,
  243|      1|		VIPS_OPERATION_BOOLEAN_AND);
  244|      1|}

bandfold.c:vips_bandfold_class_init:
  144|      1|{
  145|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  146|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  147|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  148|       |
  149|      1|	VIPS_DEBUG_MSG("vips_bandfold_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  150|       |
  151|      1|	gobject_class->set_property = vips_object_set_property;
  152|      1|	gobject_class->get_property = vips_object_get_property;
  153|       |
  154|      1|	vobject_class->nickname = "bandfold";
  155|      1|	vobject_class->description = _("fold up x axis into bands");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  156|      1|	vobject_class->build = vips_bandfold_build;
  157|       |
  158|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  159|       |
  160|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  161|      1|		_("Input"),
  162|      1|		_("Input image"),
  163|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  164|      1|		G_STRUCT_OFFSET(VipsBandfold, in));
  165|       |
  166|      1|	VIPS_ARG_INT(class, "factor", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  167|      1|		_("Factor"),
  168|      1|		_("Fold by this factor"),
  169|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  170|      1|		G_STRUCT_OFFSET(VipsBandfold, factor),
  171|      1|		0, 10000000, 0);
  172|      1|}

vips_bandjoin:
  255|    460|{
  256|    460|	va_list ap;
  257|    460|	int result;
  258|       |
  259|    460|	va_start(ap, n);
  260|    460|	result = vips_bandjoinv(in, out, n, ap);
  261|    460|	va_end(ap);
  262|       |
  263|    460|	return result;
  264|    460|}
vips_bandjoin2:
  279|    583|{
  280|    583|	va_list ap;
  281|    583|	int result;
  282|    583|	VipsImage *in[2];
  283|       |
  284|    583|	in[0] = in1;
  285|    583|	in[1] = in2;
  286|       |
  287|    583|	va_start(ap, out);
  288|    583|	result = vips_bandjoinv(in, out, 2, ap);
  289|    583|	va_end(ap);
  290|       |
  291|    583|	return result;
  292|    583|}
bandjoin.c:vips_bandjoin_class_init:
  184|      1|{
  185|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  186|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|      1|	VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  188|       |
  189|      1|	VIPS_DEBUG_MSG("vips_bandjoin_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|       |
  191|      1|	gobject_class->set_property = vips_object_set_property;
  192|      1|	gobject_class->get_property = vips_object_get_property;
  193|       |
  194|      1|	vobject_class->nickname = "bandjoin";
  195|      1|	vobject_class->description = _("bandwise join a set of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  196|      1|	vobject_class->build = vips_bandjoin_build;
  197|       |
  198|      1|	bandary_class->process_line = vips_bandjoin_buffer;
  199|       |
  200|      1|	VIPS_ARG_BOXED(class, "in", 0,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  201|      1|		_("Input"),
  202|      1|		_("Array of input images"),
  203|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  204|      1|		G_STRUCT_OFFSET(VipsBandjoin, in),
  205|      1|		VIPS_TYPE_ARRAY_IMAGE);
  206|      1|}
bandjoin.c:vips_bandjoin_build:
  156|  1.04k|{
  157|  1.04k|	VipsBandary *bandary = (VipsBandary *) object;
  158|  1.04k|	VipsBandjoin *bandjoin = (VipsBandjoin *) object;
  159|       |
  160|  1.04k|	if (bandjoin->in) {
  ------------------
  |  Branch (160:6): [True: 1.04k, False: 0]
  ------------------
  161|  1.04k|		bandary->in = vips_array_image_get(bandjoin->in, &bandary->n);
  162|       |
  163|  1.04k|		if (bandary->n == 1)
  ------------------
  |  Branch (163:7): [True: 0, False: 1.04k]
  ------------------
  164|      0|			return vips_bandary_copy(bandary);
  165|  1.04k|		else {
  166|  1.04k|			int i;
  167|       |
  168|  1.04k|			bandary->out_bands = 0;
  169|  3.58k|			for (i = 0; i < bandary->n; i++)
  ------------------
  |  Branch (169:16): [True: 2.54k, False: 1.04k]
  ------------------
  170|  2.54k|				if (bandary->in[i])
  ------------------
  |  Branch (170:9): [True: 2.54k, False: 0]
  ------------------
  171|  2.54k|					bandary->out_bands +=
  172|  2.54k|						bandary->in[i]->Bands;
  173|  1.04k|		}
  174|  1.04k|	}
  175|       |
  176|  1.04k|	if (VIPS_OBJECT_CLASS(vips_bandjoin_parent_class)->build(object))
  ------------------
  |  |  435|  1.04k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.04k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.04k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (176:6): [True: 0, False: 1.04k]
  ------------------
  177|      0|		return -1;
  178|       |
  179|  1.04k|	return 0;
  180|  1.04k|}
bandjoin.c:vips_bandjoin_buffer:
   93|  29.7k|{
   94|  29.7k|	VipsBandary *bandary = seq->bandary;
   95|  29.7k|	VipsConversion *conversion = (VipsConversion *) bandary;
   96|  29.7k|	VipsImage **in = bandary->ready;
   97|       |
   98|       |	/* Output pel size.
   99|       |	 */
  100|  29.7k|	const int ops = VIPS_IMAGE_SIZEOF_PEL(conversion->out);
  ------------------
  |  |  384|  29.7k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|  29.7k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  101|       |
  102|  29.7k|	int i;
  103|       |
  104|       |	/* Loop for each input image. Scattered write is faster than
  105|       |	 * scattered read.
  106|       |	 */
  107|   102k|	for (i = 0; i < bandary->n; i++) {
  ------------------
  |  Branch (107:14): [True: 72.9k, False: 29.7k]
  ------------------
  108|       |		/* Input pel size.
  109|       |		 */
  110|  72.9k|		int ips = VIPS_IMAGE_SIZEOF_PEL(in[i]);
  ------------------
  |  |  384|  72.9k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|  72.9k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  111|       |
  112|  72.9k|		VipsPel *restrict p1;
  113|  72.9k|		VipsPel *restrict q1;
  114|  72.9k|		int x, z;
  115|       |
  116|  72.9k|		q1 = q;
  117|  72.9k|		p1 = p[i];
  118|       |
  119|  72.9k|		if (ips == 1) {
  ------------------
  |  Branch (119:7): [True: 9.92k, False: 63.0k]
  ------------------
  120|   324k|			for (x = 0; x < width; x++) {
  ------------------
  |  Branch (120:16): [True: 314k, False: 9.92k]
  ------------------
  121|   314k|				q1[0] = p1[x];
  122|       |
  123|   314k|				q1 += ops;
  124|   314k|			}
  125|       |
  126|  9.92k|			q += ips;
  127|  9.92k|		}
  128|  63.0k|		else if (ips == 3) {
  ------------------
  |  Branch (128:12): [True: 4.19k, False: 58.8k]
  ------------------
  129|   130k|			for (x = 0; x < width; x++) {
  ------------------
  |  Branch (129:16): [True: 126k, False: 4.19k]
  ------------------
  130|   126k|				q1[0] = p1[0];
  131|   126k|				q1[1] = p1[1];
  132|   126k|				q1[2] = p1[2];
  133|       |
  134|   126k|				p1 += ips;
  135|   126k|				q1 += ops;
  136|   126k|			}
  137|       |
  138|  4.19k|			q += ips;
  139|  4.19k|		}
  140|  58.8k|		else {
  141|   940k|			for (x = 0; x < width; x++) {
  ------------------
  |  Branch (141:16): [True: 882k, False: 58.8k]
  ------------------
  142|  5.19M|				for (z = 0; z < ips; z++)
  ------------------
  |  Branch (142:17): [True: 4.31M, False: 882k]
  ------------------
  143|  4.31M|					q1[z] = p1[z];
  144|       |
  145|   882k|				p1 += ips;
  146|   882k|				q1 += ops;
  147|   882k|			}
  148|       |
  149|  58.8k|			q += ips;
  150|  58.8k|		}
  151|  72.9k|	}
  152|  29.7k|}
bandjoin.c:vips_bandjoin_init:
  210|  1.04k|{
  211|       |	/* Init our instance fields.
  212|       |	 */
  213|  1.04k|}
bandjoin.c:vips_bandjoinv:
  217|  1.04k|{
  218|  1.04k|	VipsArrayImage *array;
  219|  1.04k|	int result;
  220|       |
  221|  1.04k|	array = vips_array_image_new(in, n);
  222|  1.04k|	result = vips_call_split("bandjoin", ap, array, out);
  223|  1.04k|	vips_area_unref(VIPS_AREA(array));
  ------------------
  |  |  137|  1.04k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  224|       |
  225|  1.04k|	return result;
  226|  1.04k|}
bandjoin.c:vips_bandjoin_const_class_init:
  418|      1|{
  419|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  420|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  421|      1|	VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  422|       |
  423|      1|	VIPS_DEBUG_MSG("vips_bandjoin_const_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  424|       |
  425|      1|	gobject_class->finalize = vips_bandjoin_const_finalize;
  426|      1|	gobject_class->set_property = vips_object_set_property;
  427|      1|	gobject_class->get_property = vips_object_get_property;
  428|       |
  429|      1|	vobject_class->nickname = "bandjoin_const";
  430|      1|	vobject_class->description = _("append a constant band to an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  431|      1|	vobject_class->build = vips_bandjoin_const_build;
  432|       |
  433|      1|	bandary_class->process_line = vips_bandjoin_const_buffer;
  434|       |
  435|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  436|      1|		_("Input"),
  437|      1|		_("Input image"),
  438|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  439|      1|		G_STRUCT_OFFSET(VipsBandjoinConst, in));
  440|       |
  441|      1|	VIPS_ARG_BOXED(class, "c", 12,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  442|      1|		_("Constants"),
  443|      1|		_("Array of constants to add"),
  444|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  445|      1|		G_STRUCT_OFFSET(VipsBandjoinConst, c),
  446|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  447|      1|}

bandmean.c:vips_bandmean_class_init:
  197|      1|{
  198|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  199|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  200|      1|	VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  201|       |
  202|      1|	gobject_class->set_property = vips_object_set_property;
  203|      1|	gobject_class->get_property = vips_object_get_property;
  204|       |
  205|      1|	object_class->nickname = "bandmean";
  206|      1|	object_class->description = _("band-wise average");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  207|      1|	object_class->build = vips_bandmean_build;
  208|       |
  209|      1|	bandary_class->process_line = vips_bandmean_buffer;
  210|       |
  211|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  212|      1|		_("Input"),
  213|      1|		_("Input image argument"),
  214|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  215|      1|		G_STRUCT_OFFSET(VipsBandmean, in));
  216|      1|}

bandrank.c:vips_bandrank_class_init:
  237|      1|{
  238|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  240|      1|	VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  241|       |
  242|      1|	VIPS_DEBUG_MSG("vips_bandrank_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|       |
  244|      1|	gobject_class->set_property = vips_object_set_property;
  245|      1|	gobject_class->get_property = vips_object_get_property;
  246|       |
  247|      1|	vobject_class->nickname = "bandrank";
  248|      1|	vobject_class->description = _("band-wise rank of a set of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  249|      1|	vobject_class->build = vips_bandrank_build;
  250|       |
  251|      1|	bandary_class->process_line = vips_bandrank_buffer;
  252|       |
  253|      1|	VIPS_ARG_BOXED(class, "in", 0,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  254|      1|		_("Input"),
  255|      1|		_("Array of input images"),
  256|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  257|      1|		G_STRUCT_OFFSET(VipsBandrank, in),
  258|      1|		VIPS_TYPE_ARRAY_IMAGE);
  259|       |
  260|      1|	VIPS_ARG_INT(class, "index", 0,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  261|      1|		_("Index"),
  262|      1|		_("Select this band element from sorted list"),
  263|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  264|      1|		G_STRUCT_OFFSET(VipsBandrank, index),
  265|      1|		-1, 1000000, -1);
  266|      1|}

bandunfold.c:vips_bandunfold_class_init:
  147|      1|{
  148|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  150|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  151|       |
  152|      1|	VIPS_DEBUG_MSG("vips_bandunfold_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  153|       |
  154|      1|	gobject_class->set_property = vips_object_set_property;
  155|      1|	gobject_class->get_property = vips_object_get_property;
  156|       |
  157|      1|	vobject_class->nickname = "bandunfold";
  158|      1|	vobject_class->description = _("unfold image bands into x axis");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  159|      1|	vobject_class->build = vips_bandunfold_build;
  160|       |
  161|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  162|       |
  163|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  164|      1|		_("Input"),
  165|      1|		_("Input image"),
  166|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  167|      1|		G_STRUCT_OFFSET(VipsBandunfold, in));
  168|       |
  169|      1|	VIPS_ARG_INT(class, "factor", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  170|      1|		_("Factor"),
  171|      1|		_("Unfold by this factor"),
  172|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  173|      1|		G_STRUCT_OFFSET(VipsBandunfold, factor),
  174|      1|		0, 10000000, 0);
  175|      1|}

byteswap.c:vips_byteswap_class_init:
  221|      1|{
  222|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  224|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  225|       |
  226|      1|	VIPS_DEBUG_MSG("vips_byteswap_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  227|       |
  228|      1|	gobject_class->set_property = vips_object_set_property;
  229|      1|	gobject_class->get_property = vips_object_get_property;
  230|       |
  231|      1|	vobject_class->nickname = "byteswap";
  232|      1|	vobject_class->description = _("byteswap an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  233|      1|	vobject_class->build = vips_byteswap_build;
  234|       |
  235|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  236|       |
  237|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  238|      1|		_("Input"),
  239|      1|		_("Input image"),
  240|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  241|      1|		G_STRUCT_OFFSET(VipsByteswap, in));
  242|      1|}

cache.c:vips_cache_class_init:
   87|      1|{
   88|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
   91|       |
   92|      1|	VIPS_DEBUG_MSG("vips_cache_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   93|       |
   94|      1|	gobject_class->set_property = vips_object_set_property;
   95|      1|	gobject_class->get_property = vips_object_get_property;
   96|       |
   97|      1|	vobject_class->nickname = "cache";
   98|      1|	vobject_class->description = _("cache an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   99|      1|	vobject_class->build = vips_cache_build;
  100|       |
  101|       |	/* sinkscreen swallows errors (you don't want to see them when you display
  102|       |	 * images), making this operation worse than useless for batch processing.
  103|       |	 * Just use tilecache() instead.
  104|       |	 */
  105|      1|	operation_class->flags |= VIPS_OPERATION_DEPRECATED;
  106|       |
  107|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  108|      1|		_("Input"),
  109|      1|		_("Input image"),
  110|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  111|      1|		G_STRUCT_OFFSET(VipsCache, in));
  112|       |
  113|      1|	VIPS_ARG_INT(class, "tile_width", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  114|      1|		_("Tile width"),
  115|      1|		_("Tile width in pixels"),
  116|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  117|      1|		G_STRUCT_OFFSET(VipsCache, tile_width),
  118|      1|		1, 1000000, 128);
  119|       |
  120|      1|	VIPS_ARG_INT(class, "tile_height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  121|      1|		_("Tile height"),
  122|      1|		_("Tile height in pixels"),
  123|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  124|      1|		G_STRUCT_OFFSET(VipsCache, tile_height),
  125|      1|		1, 1000000, 128);
  126|       |
  127|      1|	VIPS_ARG_INT(class, "max_tiles", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  128|      1|		_("Max tiles"),
  129|      1|		_("Maximum number of tiles to cache"),
  130|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  131|      1|		G_STRUCT_OFFSET(VipsCache, max_tiles),
  132|      1|		-1, 1000000, 250);
  133|      1|}

vips_cast:
  589|  45.4k|{
  590|  45.4k|	va_list ap;
  591|  45.4k|	int result;
  592|       |
  593|  45.4k|	va_start(ap, format);
  594|  45.4k|	result = vips_castv(in, out, format, ap);
  595|  45.4k|	va_end(ap);
  596|       |
  597|  45.4k|	return result;
  598|  45.4k|}
vips_cast_float:
  750|  2.63k|{
  751|  2.63k|	va_list ap;
  752|  2.63k|	int result;
  753|       |
  754|  2.63k|	va_start(ap, out);
  755|  2.63k|	result = vips_castv(in, out, VIPS_FORMAT_FLOAT, ap);
  756|  2.63k|	va_end(ap);
  757|       |
  758|  2.63k|	return result;
  759|  2.63k|}
cast.c:vips_cast_class_init:
  513|      1|{
  514|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  515|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  516|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  517|       |
  518|      1|	VIPS_DEBUG_MSG("vips_cast_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  519|       |
  520|      1|	gobject_class->set_property = vips_object_set_property;
  521|      1|	gobject_class->get_property = vips_object_get_property;
  522|       |
  523|      1|	vobject_class->nickname = "cast";
  524|      1|	vobject_class->description = _("cast an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  525|      1|	vobject_class->build = vips_cast_build;
  526|       |
  527|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  528|       |
  529|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  530|      1|		_("Input"),
  531|      1|		_("Input image"),
  532|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  533|      1|		G_STRUCT_OFFSET(VipsCast, in));
  534|       |
  535|      1|	VIPS_ARG_ENUM(class, "format", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  536|      1|		_("Format"),
  537|      1|		_("Format to cast to"),
  538|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  539|      1|		G_STRUCT_OFFSET(VipsCast, format),
  540|      1|		VIPS_TYPE_BAND_FORMAT, VIPS_FORMAT_UCHAR);
  541|       |
  542|      1|	VIPS_ARG_BOOL(class, "shift", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  543|      1|		_("Shift"),
  544|      1|		_("Shift integer values up and down"),
  545|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  546|      1|		G_STRUCT_OFFSET(VipsCast, shift),
  547|      1|		FALSE);
  548|      1|}
cast.c:vips_cast_build:
  461|  48.0k|{
  462|  48.0k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  48.0k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  48.0k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  48.0k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  48.0k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  463|  48.0k|	VipsCast *cast = (VipsCast *) object;
  464|  48.0k|	VipsImage **t = (VipsImage **)
  465|  48.0k|		vips_object_local_array(object, 2);
  466|       |
  467|  48.0k|	VipsImage *in;
  468|       |
  469|  48.0k|	if (VIPS_OBJECT_CLASS(vips_cast_parent_class)->build(object))
  ------------------
  |  |  435|  48.0k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  48.0k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  48.0k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (469:6): [True: 0, False: 48.0k]
  ------------------
  470|      0|		return -1;
  471|       |
  472|  48.0k|	in = cast->in;
  473|       |
  474|       |	/* Trivial case: fall back to copy().
  475|       |	 */
  476|  48.0k|	if (in->BandFmt == cast->format)
  ------------------
  |  Branch (476:6): [True: 45.7k, False: 2.36k]
  ------------------
  477|  45.7k|		return vips_image_write(in, conversion->out);
  478|       |
  479|  2.36k|	if (vips_image_decode(in, &t[0]))
  ------------------
  |  Branch (479:6): [True: 0, False: 2.36k]
  ------------------
  480|      0|		return -1;
  481|  2.36k|	in = t[0];
  482|       |
  483|       |	/* If @shift is on but we're not in an int format and we're going to
  484|       |	 * an int format, we need to cast to int first. For example, what
  485|       |	 * about a float image tagged as rgb16 being cast to uint8? We need
  486|       |	 * to cast to ushort before we do the final cast to uint8.
  487|       |	 */
  488|  2.36k|	if (cast->shift &&
  ------------------
  |  Branch (488:6): [True: 400, False: 1.96k]
  ------------------
  489|  2.36k|		!vips_band_format_isint(in->BandFmt) &&
  ------------------
  |  Branch (489:3): [True: 129, False: 271]
  ------------------
  490|  2.36k|		vips_band_format_isint(cast->format)) {
  ------------------
  |  Branch (490:3): [True: 129, False: 0]
  ------------------
  491|    129|		if (vips_cast(in, &t[1],
  ------------------
  |  Branch (491:7): [True: 0, False: 129]
  ------------------
  492|    129|				vips_image_guess_format(in), NULL))
  493|      0|			return -1;
  494|    129|		in = t[1];
  495|    129|	}
  496|       |
  497|  2.36k|	if (vips_image_pipelinev(conversion->out,
  ------------------
  |  Branch (497:6): [True: 0, False: 2.36k]
  ------------------
  498|  2.36k|			VIPS_DEMAND_STYLE_THINSTRIP, in, NULL))
  499|      0|		return -1;
  500|       |
  501|  2.36k|	conversion->out->BandFmt = cast->format;
  502|       |
  503|  2.36k|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (503:6): [True: 0, False: 2.36k]
  ------------------
  504|  2.36k|			vips_start_one, vips_cast_gen, vips_stop_one,
  505|  2.36k|			in, cast))
  506|      0|		return -1;
  507|       |
  508|  2.36k|	return 0;
  509|  2.36k|}
cast.c:vips_cast_gen:
  360|  5.56k|{
  361|  5.56k|	VipsRegion *ir = (VipsRegion *) vseq;
  362|  5.56k|	VipsCast *cast = (VipsCast *) b;
  363|  5.56k|	VipsConversion *conversion = (VipsConversion *) b;
  364|  5.56k|	VipsRect *r = &out_region->valid;
  365|  5.56k|	int sz = VIPS_REGION_N_ELEMENTS(out_region);
  ------------------
  |  |  197|  5.56k|	((size_t) ((R)->valid.width * (R)->im->Bands))
  ------------------
  366|       |
  367|  5.56k|	int x, y;
  368|       |
  369|  5.56k|	if (vips_region_prepare(ir, r))
  ------------------
  |  Branch (369:6): [True: 92, False: 5.47k]
  ------------------
  370|     92|		return -1;
  371|       |
  372|  5.56k|	VIPS_GATE_START("vips_cast_gen: work");
  ------------------
  |  |   41|  5.47k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  5.47k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  5.47k|	{ \
  |  |   43|  5.47k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 5.47k]
  |  |  ------------------
  |  |   44|  5.47k|			vips__thread_gate_start(NAME); \
  |  |   45|  5.47k|	} \
  |  |   46|  5.56k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  5.56k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  373|       |
  374|  74.2k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (374:14): [True: 68.7k, False: 5.47k]
  ------------------
  375|  68.7k|		VipsPel *in = VIPS_REGION_ADDR(ir, r->left, r->top + y);
  ------------------
  |  |  227|  68.7k|	((R)->data + \
  |  |  228|  68.7k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  68.7k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  68.7k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  68.7k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  68.7k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  68.7k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  376|  68.7k|		VipsPel *out = VIPS_REGION_ADDR(out_region, r->left, r->top + y);
  ------------------
  |  |  227|  68.7k|	((R)->data + \
  |  |  228|  68.7k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  68.7k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  68.7k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  68.7k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  68.7k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  68.7k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  377|       |
  378|  68.7k|		switch (ir->im->BandFmt) {
  379|  1.52k|		case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (379:3): [True: 1.52k, False: 67.2k]
  ------------------
  380|  1.52k|			BAND_SWITCH_INNER(unsigned char,
  ------------------
  |  |  310|  1.52k|	{ \
  |  |  311|  1.52k|		switch (conversion->out->BandFmt) { \
  |  |  312|      0|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 0, False: 1.52k]
  |  |  ------------------
  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  381|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  123|      0|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|      0|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 1.52k]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  381|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|  1.52k|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 1.52k, False: 0]
  |  |  ------------------
  |  |  321|  1.52k|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  381|  1.52k|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|  1.52k|	{ \
  |  |  |  |  |  |  198|  1.52k|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 1.52k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|  1.52k|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|  1.52k|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 1.52k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  1.52k|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  1.52k|	{ \
  |  |  |  |  |  |  |  |  155|  1.52k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|  1.52k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|  1.52k|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|  1.52k|\
  |  |  |  |  |  |  |  |  159|  1.52k|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|  1.52k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|  1.52k|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|  1.52k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|  1.52k|\
  |  |  |  |  |  |  |  |  161|  86.9k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 85.4k, False: 1.52k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|  85.4k|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|  1.52k|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  1.52k|		} \
  |  |  |  |  |  |  205|  1.52k|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  125|      0|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|  1.52k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|  1.52k|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 1.52k]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  381|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 1.52k]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  381|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 1.52k]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  381|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 1.52k]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  382|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|      0|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 0, False: 1.52k]
  |  |  ------------------
  |  |  341|      0|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  382|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|      0|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 1.52k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  383|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 1.52k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  383|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 1.52k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|  1.52k|		} \
  |  |  355|  1.52k|	}
  ------------------
  381|  1.52k|				INT_INT,
  382|  1.52k|				CAST_REAL_FLOAT,
  383|  1.52k|				CAST_REAL_COMPLEX);
  384|  1.52k|			break;
  385|       |
  386|  2.50k|		case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (386:3): [True: 2.50k, False: 66.2k]
  ------------------
  387|  2.50k|			BAND_SWITCH_INNER(signed char,
  ------------------
  |  |  310|  2.50k|	{ \
  |  |  311|  2.50k|		switch (conversion->out->BandFmt) { \
  |  |  312|  2.50k|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 2.50k, False: 0]
  |  |  ------------------
  |  |  313|  2.50k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  388|  2.50k|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|  2.50k|	{ \
  |  |  |  |  |  |  214|  2.50k|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 2.50k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  2.50k|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|  2.50k|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 2.50k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|  2.50k|		else { \
  |  |  |  |  |  |  222|  2.50k|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|  2.50k|	{ \
  |  |  |  |  |  |  |  |  184|  2.50k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|  2.50k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|  2.50k|\
  |  |  |  |  |  |  |  |  187|   279k|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 276k, False: 2.50k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|   276k|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|   276k|\
  |  |  |  |  |  |  |  |  190|   276k|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  313|   276k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  123|   276k|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|   276k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   553k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 6.07k, False: 270k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 276k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 270k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|   276k|		} \
  |  |  |  |  |  |  |  |  192|  2.50k|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|  2.50k|		} \
  |  |  |  |  |  |  224|  2.50k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  2.50k|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 2.50k]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  388|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|      0|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 0, False: 2.50k]
  |  |  ------------------
  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  388|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  125|      0|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|      0|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 2.50k]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  388|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 2.50k]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  388|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 2.50k]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  388|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 2.50k]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  389|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|      0|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 0, False: 2.50k]
  |  |  ------------------
  |  |  341|      0|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  389|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|      0|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 2.50k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  390|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 2.50k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  390|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 2.50k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|  2.50k|		} \
  |  |  355|  2.50k|	}
  ------------------
  388|  2.50k|				INT_INT_SIGNED,
  389|  2.50k|				CAST_REAL_FLOAT,
  390|  2.50k|				CAST_REAL_COMPLEX);
  391|  2.50k|			break;
  392|       |
  393|  16.9k|		case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (393:3): [True: 16.9k, False: 51.8k]
  ------------------
  394|  16.9k|			BAND_SWITCH_INNER(unsigned short,
  ------------------
  |  |  310|  16.9k|	{ \
  |  |  311|  16.9k|		switch (conversion->out->BandFmt) { \
  |  |  312|  16.9k|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 16.9k, False: 0]
  |  |  ------------------
  |  |  313|  16.9k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  395|  16.9k|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|  16.9k|	{ \
  |  |  |  |  |  |  198|  16.9k|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 16.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|  16.9k|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|  16.9k|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 16.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|  16.9k|		else { \
  |  |  |  |  |  |  206|  16.9k|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|  16.9k|	{ \
  |  |  |  |  |  |  |  |  184|  16.9k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|  16.9k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|  16.9k|\
  |  |  |  |  |  |  |  |  187|   422k|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 405k, False: 16.9k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|   405k|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|   405k|\
  |  |  |  |  |  |  |  |  190|   405k|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  313|   405k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  123|   405k|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|   405k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   811k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 405k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 20.9k, False: 384k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 20.9k, False: 384k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|   405k|		} \
  |  |  |  |  |  |  |  |  192|  16.9k|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  16.9k|		} \
  |  |  |  |  |  |  208|  16.9k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  16.9k|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 16.9k]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  395|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|      0|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 0, False: 16.9k]
  |  |  ------------------
  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  395|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  125|      0|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|      0|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 16.9k]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  395|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 16.9k]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  395|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 16.9k]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  395|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 16.9k]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  396|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|      0|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 0, False: 16.9k]
  |  |  ------------------
  |  |  341|      0|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  396|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|      0|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 16.9k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  397|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 16.9k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  397|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 16.9k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|  16.9k|		} \
  |  |  355|  16.9k|	}
  ------------------
  395|  16.9k|				INT_INT,
  396|  16.9k|				CAST_REAL_FLOAT,
  397|  16.9k|				CAST_REAL_COMPLEX);
  398|  16.9k|			break;
  399|       |
  400|  5.15k|		case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (400:3): [True: 5.15k, False: 63.6k]
  ------------------
  401|  5.15k|			BAND_SWITCH_INNER(signed short,
  ------------------
  |  |  310|  5.15k|	{ \
  |  |  311|  5.15k|		switch (conversion->out->BandFmt) { \
  |  |  312|  1.99k|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 1.99k, False: 3.16k]
  |  |  ------------------
  |  |  313|  1.99k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  402|  1.99k|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|  1.99k|	{ \
  |  |  |  |  |  |  214|  1.99k|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 1.99k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  1.99k|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|  1.99k|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 1.99k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|  1.99k|		else { \
  |  |  |  |  |  |  222|  1.99k|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|  1.99k|	{ \
  |  |  |  |  |  |  |  |  184|  1.99k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|  1.99k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|  1.99k|\
  |  |  |  |  |  |  |  |  187|  67.4k|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 65.4k, False: 1.99k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|  65.4k|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|  65.4k|\
  |  |  |  |  |  |  |  |  190|  65.4k|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  313|  65.4k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  123|  65.4k|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|  65.4k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   130k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 2.11k, False: 63.3k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 9.09k, False: 56.3k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 9.09k, False: 54.2k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  65.4k|		} \
  |  |  |  |  |  |  |  |  192|  1.99k|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|  1.99k|		} \
  |  |  |  |  |  |  224|  1.99k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  1.99k|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 5.15k]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  402|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|  2.08k|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 2.08k, False: 3.07k]
  |  |  ------------------
  |  |  321|  2.08k|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  402|  2.08k|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|  2.08k|	{ \
  |  |  |  |  |  |  214|  2.08k|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 437, False: 1.64k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  2.08k|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|  2.08k|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 437, False: 1.64k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|    437|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|    437|	{ \
  |  |  |  |  |  |  |  |  167|    437|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|    437|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|    437|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|    437|\
  |  |  |  |  |  |  |  |  171|    437|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|    437|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|    437|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|    437|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    437|\
  |  |  |  |  |  |  |  |  173|  14.3k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 13.9k, False: 437]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|  13.9k|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|  13.9k|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|  13.9k|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|    437|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|    437|		} \
  |  |  |  |  |  |  221|  2.08k|		else { \
  |  |  |  |  |  |  222|  1.64k|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|  1.64k|	{ \
  |  |  |  |  |  |  |  |  184|  1.64k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|  1.64k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|  1.64k|\
  |  |  |  |  |  |  |  |  187|  71.7k|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 70.1k, False: 1.64k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|  70.1k|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|  70.1k|\
  |  |  |  |  |  |  |  |  190|  70.1k|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  321|  70.1k|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  125|  70.1k|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|  70.1k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   140k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 1.10k, False: 69.0k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 70.1k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 69.0k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  70.1k|		} \
  |  |  |  |  |  |  |  |  192|  1.64k|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|  1.64k|		} \
  |  |  |  |  |  |  224|  2.08k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|  2.08k|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 5.15k]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  402|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 5.15k]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  402|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 5.15k]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  402|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|  1.07k|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 1.07k, False: 4.07k]
  |  |  ------------------
  |  |  337|  1.07k|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  403|  1.07k|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|  1.07k|	{ \
  |  |  |  |  |  |  260|  1.07k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|  1.07k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|  1.07k|\
  |  |  |  |  |  |  263|  18.1k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 17.1k, False: 1.07k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  17.1k|			q[x] = p[x]; \
  |  |  |  |  |  |  265|  1.07k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|  1.07k|			break; \
  |  |  339|      0|\
  |  |  340|      0|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 0, False: 5.15k]
  |  |  ------------------
  |  |  341|      0|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  403|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|      0|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 5.15k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  404|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 5.15k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  404|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 5.15k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|  5.15k|		} \
  |  |  355|  5.15k|	}
  ------------------
  402|  5.15k|				INT_INT_SIGNED,
  403|  5.15k|				CAST_REAL_FLOAT,
  404|  5.15k|				CAST_REAL_COMPLEX);
  405|  5.15k|			break;
  406|       |
  407|  7.29k|		case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (407:3): [True: 7.29k, False: 61.4k]
  ------------------
  408|  7.29k|			BAND_SWITCH_INNER(unsigned int,
  ------------------
  |  |  310|  7.29k|	{ \
  |  |  311|  7.29k|		switch (conversion->out->BandFmt) { \
  |  |  312|    599|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 599, False: 6.69k]
  |  |  ------------------
  |  |  313|    599|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  409|    599|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|    599|	{ \
  |  |  |  |  |  |  198|    599|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 599]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|    599|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|    599|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 599]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|    599|		else { \
  |  |  |  |  |  |  206|    599|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|    599|	{ \
  |  |  |  |  |  |  |  |  184|    599|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|    599|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|    599|\
  |  |  |  |  |  |  |  |  187|  17.5k|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 16.9k, False: 599]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|  16.9k|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|  16.9k|\
  |  |  |  |  |  |  |  |  190|  16.9k|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  313|  16.9k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  123|  16.9k|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|  16.9k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|  33.9k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 669, False: 16.2k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 4.36k, False: 12.5k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 4.36k, False: 11.9k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  16.9k|		} \
  |  |  |  |  |  |  |  |  192|    599|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    599|		} \
  |  |  |  |  |  |  208|    599|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|    599|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 7.29k]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  409|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|  6.36k|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 6.36k, False: 928]
  |  |  ------------------
  |  |  321|  6.36k|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  409|  6.36k|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|  6.36k|	{ \
  |  |  |  |  |  |  198|  6.36k|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 2.89k, False: 3.47k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|  6.36k|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  2.89k|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|  2.89k|	{ \
  |  |  |  |  |  |  |  |  140|  2.89k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|  2.89k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|  2.89k|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|  2.89k|\
  |  |  |  |  |  |  |  |  144|  2.89k|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|  2.89k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|  2.89k|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|  2.89k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|  2.89k|\
  |  |  |  |  |  |  |  |  146|   110k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 108k, False: 2.89k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|   108k|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|  2.89k|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  2.89k|		} \
  |  |  |  |  |  |  202|  6.36k|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 3.47k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|  3.47k|		else { \
  |  |  |  |  |  |  206|  3.47k|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|  3.47k|	{ \
  |  |  |  |  |  |  |  |  184|  3.47k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|  3.47k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|  3.47k|\
  |  |  |  |  |  |  |  |  187|   106k|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 102k, False: 3.47k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|   102k|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|   102k|\
  |  |  |  |  |  |  |  |  190|   102k|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  321|   102k|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  125|   102k|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|   102k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   205k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 42.9k, False: 59.7k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 2.00k, False: 100k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 2.00k, False: 57.7k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|   102k|		} \
  |  |  |  |  |  |  |  |  192|  3.47k|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  3.47k|		} \
  |  |  |  |  |  |  208|  6.36k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|  6.36k|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 7.29k]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  409|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 7.29k]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  409|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 7.29k]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  409|      0|				INT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  197|      0|	{ \
  |  |  |  |  |  |  198|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (198:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  199|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|		} \
  |  |  |  |  |  |  202|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|			SHIFT_LEFT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|	{ \
  |  |  |  |  |  |  |  |  155|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  156|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  157|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  158|      0|\
  |  |  |  |  |  |  |  |  159|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  160|      0|\
  |  |  |  |  |  |  |  |  161|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (161:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  162|      0|			q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  163|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|		} \
  |  |  |  |  |  |  205|      0|		else { \
  |  |  |  |  |  |  206|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|		} \
  |  |  |  |  |  |  208|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|    329|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 329, False: 6.96k]
  |  |  ------------------
  |  |  337|    329|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  410|    329|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|    329|	{ \
  |  |  |  |  |  |  260|    329|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|    329|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|    329|\
  |  |  |  |  |  |  263|  5.46k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 5.13k, False: 329]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  5.13k|			q[x] = p[x]; \
  |  |  |  |  |  |  265|    329|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|    329|			break; \
  |  |  339|      0|\
  |  |  340|      0|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 0, False: 7.29k]
  |  |  ------------------
  |  |  341|      0|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  410|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|      0|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 7.29k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  411|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 7.29k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  411|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 7.29k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|  7.29k|		} \
  |  |  355|  7.29k|	}
  ------------------
  409|  7.29k|				INT_INT,
  410|  7.29k|				CAST_REAL_FLOAT,
  411|  7.29k|				CAST_REAL_COMPLEX);
  412|  7.29k|			break;
  413|       |
  414|  4.10k|		case VIPS_FORMAT_INT:
  ------------------
  |  Branch (414:3): [True: 4.10k, False: 64.6k]
  ------------------
  415|  4.10k|			BAND_SWITCH_INNER(signed int,
  ------------------
  |  |  310|  4.10k|	{ \
  |  |  311|  4.10k|		switch (conversion->out->BandFmt) { \
  |  |  312|  1.08k|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 1.08k, False: 3.01k]
  |  |  ------------------
  |  |  313|  1.08k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  416|  1.08k|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|  1.08k|	{ \
  |  |  |  |  |  |  214|  1.08k|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 1.08k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  1.08k|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|  1.08k|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 1.08k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|  1.08k|		else { \
  |  |  |  |  |  |  222|  1.08k|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|  1.08k|	{ \
  |  |  |  |  |  |  |  |  184|  1.08k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|  1.08k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|  1.08k|\
  |  |  |  |  |  |  |  |  187|  33.6k|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 32.5k, False: 1.08k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|  32.5k|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|  32.5k|\
  |  |  |  |  |  |  |  |  190|  32.5k|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  313|  32.5k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  123|  32.5k|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|  32.5k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|  65.1k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 2.24k, False: 30.3k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 5.82k, False: 26.7k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 5.82k, False: 24.5k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  32.5k|		} \
  |  |  |  |  |  |  |  |  192|  1.08k|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|  1.08k|		} \
  |  |  |  |  |  |  224|  1.08k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  1.08k|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 4.10k]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  416|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|  2.67k|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 2.67k, False: 1.42k]
  |  |  ------------------
  |  |  321|  2.67k|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  416|  2.67k|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|  2.67k|	{ \
  |  |  |  |  |  |  214|  2.67k|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 2.24k, False: 434]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|  2.67k|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|  2.24k|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|  2.24k|	{ \
  |  |  |  |  |  |  |  |  140|  2.24k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|  2.24k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|  2.24k|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|  2.24k|\
  |  |  |  |  |  |  |  |  144|  2.24k|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|  2.24k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|  2.24k|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|  2.24k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|  2.24k|\
  |  |  |  |  |  |  |  |  146|   127k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 124k, False: 2.24k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|   124k|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|  2.24k|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|  2.24k|		} \
  |  |  |  |  |  |  218|  2.67k|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 434]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|    434|		else { \
  |  |  |  |  |  |  222|    434|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|    434|	{ \
  |  |  |  |  |  |  |  |  184|    434|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|    434|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|    434|\
  |  |  |  |  |  |  |  |  187|  4.37k|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 3.93k, False: 434]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|  3.93k|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|  3.93k|\
  |  |  |  |  |  |  |  |  190|  3.93k|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  321|  3.93k|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  125|  3.93k|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|  3.93k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|  7.87k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 671, False: 3.26k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 1.58k, False: 2.35k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 1.58k, False: 1.68k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|  3.93k|		} \
  |  |  |  |  |  |  |  |  192|    434|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|    434|		} \
  |  |  |  |  |  |  224|  2.67k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|  2.67k|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 4.10k]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  416|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 4.10k]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  416|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 4.10k]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  416|      0|				INT_INT_SIGNED,
  |  |  |  |  ------------------
  |  |  |  |  |  |  213|      0|	{ \
  |  |  |  |  |  |  214|      0|		if (cast->shift && \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (214:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  215|      0|			sizeof(ITYPE) > sizeof(OTYPE)) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (215:4): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  216|      0|			SHIFT_RIGHT(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  139|      0|	{ \
  |  |  |  |  |  |  |  |  140|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  141|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  142|      0|		int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \
  |  |  |  |  |  |  |  |  143|      0|\
  |  |  |  |  |  |  |  |  144|      0|		g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  145|      0|\
  |  |  |  |  |  |  |  |  146|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (146:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  147|      0|			q[x] = p[x] >> n; \
  |  |  |  |  |  |  |  |  148|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  217|      0|		} \
  |  |  |  |  |  |  218|      0|		else if (cast->shift) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (218:12): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  219|      0|			SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  166|      0|	{ \
  |  |  |  |  |  |  |  |  167|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  168|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  169|      0|		int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \
  |  |  |  |  |  |  |  |  170|      0|\
  |  |  |  |  |  |  |  |  171|      0|		g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|\
  |  |  |  |  |  |  |  |  173|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (173:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  174|      0|			q[x] = VIPS_LSHIFT_INT(p[x], n) | \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   87|      0|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  175|      0|				(((p[x] & 1) << n) - (p[x] & 1)); \
  |  |  |  |  |  |  |  |  176|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  220|      0|		} \
  |  |  |  |  |  |  221|      0|		else { \
  |  |  |  |  |  |  222|      0|			CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  183|      0|	{ \
  |  |  |  |  |  |  |  |  184|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  |  |  185|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  |  |  186|      0|\
  |  |  |  |  |  |  |  |  187|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (187:15): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  188|      0|			TEMP t = (TEMP) p[x]; \
  |  |  |  |  |  |  |  |  189|      0|\
  |  |  |  |  |  |  |  |  190|      0|			q[x] = CAST(t); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  191|      0|		} \
  |  |  |  |  |  |  |  |  192|      0|	}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  223|      0|		} \
  |  |  |  |  |  |  224|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|    337|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 337, False: 3.76k]
  |  |  ------------------
  |  |  337|    337|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  417|    337|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|    337|	{ \
  |  |  |  |  |  |  260|    337|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|    337|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|    337|\
  |  |  |  |  |  |  263|  7.47k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 7.13k, False: 337]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  7.13k|			q[x] = p[x]; \
  |  |  |  |  |  |  265|    337|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|    337|			break; \
  |  |  339|      0|\
  |  |  340|      0|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 0, False: 4.10k]
  |  |  ------------------
  |  |  341|      0|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  417|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|      0|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 4.10k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  418|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 4.10k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  418|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 4.10k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|  4.10k|		} \
  |  |  355|  4.10k|	}
  ------------------
  416|  4.10k|				INT_INT_SIGNED,
  417|  4.10k|				CAST_REAL_FLOAT,
  418|  4.10k|				CAST_REAL_COMPLEX);
  419|  4.10k|			break;
  420|       |
  421|  31.2k|		case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (421:3): [True: 31.2k, False: 37.5k]
  ------------------
  422|  31.2k|			BAND_SWITCH_INNER(float,
  ------------------
  |  |  310|  31.2k|	{ \
  |  |  311|  31.2k|		switch (conversion->out->BandFmt) { \
  |  |  312|  5.02k|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 5.02k, False: 26.2k]
  |  |  ------------------
  |  |  313|  5.02k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  423|  5.02k|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|  5.02k|	{ \
  |  |  |  |  |  |  233|  5.02k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|  5.02k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|  5.02k|\
  |  |  |  |  |  |  236|   493k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 488k, False: 5.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|   488k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  313|  5.02k|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  123|  5.02k|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|   488k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   977k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 1.32k, False: 487k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 16.0k, False: 472k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 16.0k, False: 471k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|  5.02k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|  5.02k|			break; \
  |  |  315|      0|\
  |  |  316|  1.94k|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 1.94k, False: 29.2k]
  |  |  ------------------
  |  |  317|  1.94k|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  423|  1.94k|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|  1.94k|	{ \
  |  |  |  |  |  |  233|  1.94k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|  1.94k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|  1.94k|\
  |  |  |  |  |  |  236|   209k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 207k, False: 1.94k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|   207k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  317|  1.94k|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  124|  1.94k|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|   207k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   414k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 1.88k, False: 205k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 9.44k, False: 197k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 9.44k, False: 195k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|  1.94k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|  1.94k|			break; \
  |  |  319|      0|\
  |  |  320|  15.2k|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 15.2k, False: 15.9k]
  |  |  ------------------
  |  |  321|  15.2k|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  423|  15.2k|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|  15.2k|	{ \
  |  |  |  |  |  |  233|  15.2k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|  15.2k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|  15.2k|\
  |  |  |  |  |  |  236|   491k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 476k, False: 15.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|   476k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  321|  15.2k|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  125|  15.2k|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|   476k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   952k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 9.01k, False: 467k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 4.39k, False: 471k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 4.39k, False: 462k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|  15.2k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|  15.2k|			break; \
  |  |  323|      0|\
  |  |  324|  3.38k|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 3.38k, False: 27.8k]
  |  |  ------------------
  |  |  325|  3.38k|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  423|  3.38k|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|  3.38k|	{ \
  |  |  |  |  |  |  233|  3.38k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|  3.38k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|  3.38k|\
  |  |  |  |  |  |  236|   140k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 137k, False: 3.38k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|   137k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  325|  3.38k|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  126|  3.38k|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|   137k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   274k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 1.12k, False: 136k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 5.64k, False: 131k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 5.64k, False: 130k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|  3.38k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|  3.38k|			break; \
  |  |  327|      0|\
  |  |  328|  2.40k|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 2.40k, False: 28.8k]
  |  |  ------------------
  |  |  329|  2.40k|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  423|  2.40k|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|  2.40k|	{ \
  |  |  |  |  |  |  233|  2.40k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|  2.40k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|  2.40k|\
  |  |  |  |  |  |  236|  63.5k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 61.1k, False: 2.40k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|  61.1k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  329|  2.40k|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  130|  2.40k|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|  61.1k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   122k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 61.1k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 521, False: 60.6k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 521, False: 60.6k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|  2.40k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|  2.40k|			break; \
  |  |  331|      0|\
  |  |  332|  3.21k|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 3.21k, False: 28.0k]
  |  |  ------------------
  |  |  333|  3.21k|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  423|  3.21k|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|  3.21k|	{ \
  |  |  |  |  |  |  233|  3.21k|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|  3.21k|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|  3.21k|\
  |  |  |  |  |  |  236|   123k|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 120k, False: 3.21k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|   120k|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  333|  3.21k|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  131|  3.21k|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|   120k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|   240k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 412, False: 120k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 453, False: 120k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 453, False: 119k]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|  3.21k|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|  3.21k|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 31.2k]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  424|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|      0|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 0, False: 31.2k]
  |  |  ------------------
  |  |  341|      0|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  424|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|      0|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 31.2k]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  425|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 31.2k]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  425|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 31.2k]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|  31.2k|		} \
  |  |  355|  31.2k|	}
  ------------------
  423|  31.2k|				CAST_FLOAT_INT,
  424|  31.2k|				CAST_REAL_FLOAT,
  425|  31.2k|				CAST_REAL_COMPLEX);
  426|  31.2k|			break;
  427|       |
  428|      0|		case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (428:3): [True: 0, False: 68.7k]
  ------------------
  429|      0|			BAND_SWITCH_INNER(double,
  ------------------
  |  |  310|      0|	{ \
  |  |  311|      0|		switch (conversion->out->BandFmt) { \
  |  |  312|      0|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  430|      0|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|      0|	{ \
  |  |  |  |  |  |  233|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|      0|\
  |  |  |  |  |  |  236|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  123|      0|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|      0|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  430|      0|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|      0|	{ \
  |  |  |  |  |  |  233|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|      0|\
  |  |  |  |  |  |  236|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|      0|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  430|      0|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|      0|	{ \
  |  |  |  |  |  |  233|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|      0|\
  |  |  |  |  |  |  236|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  125|      0|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|      0|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  430|      0|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|      0|	{ \
  |  |  |  |  |  |  233|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|      0|\
  |  |  |  |  |  |  236|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  430|      0|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|      0|	{ \
  |  |  |  |  |  |  233|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|      0|\
  |  |  |  |  |  |  236|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  430|      0|				CAST_FLOAT_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  232|      0|	{ \
  |  |  |  |  |  |  233|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  234|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  235|      0|\
  |  |  |  |  |  |  236|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (236:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      0|			q[x] = CAST((double) p[x]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  431|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|      0|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  341|      0|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  431|      0|				CAST_REAL_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|      0|	{ \
  |  |  |  |  |  |  260|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  261|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  262|      0|\
  |  |  |  |  |  |  263|      0|		for (x = 0; x < sz; x++) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (263:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|			q[x] = p[x]; \
  |  |  |  |  |  |  265|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|      0|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  432|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  432|      0|				CAST_REAL_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  283|      0|	{ \
  |  |  |  |  |  |  284|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  285|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  286|      0|\
  |  |  |  |  |  |  287|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (287:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  288|      0|			q[0] = p[x]; \
  |  |  |  |  |  |  289|      0|			q[1] = 0.0; \
  |  |  |  |  |  |  290|      0|			q += 2; \
  |  |  |  |  |  |  291|      0|		} \
  |  |  |  |  |  |  292|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|      0|		} \
  |  |  355|      0|	}
  ------------------
  430|      0|				CAST_FLOAT_INT,
  431|      0|				CAST_REAL_FLOAT,
  432|      0|				CAST_REAL_COMPLEX);
  433|      0|			break;
  434|       |
  435|      0|		case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (435:3): [True: 0, False: 68.7k]
  ------------------
  436|      0|			BAND_SWITCH_INNER(float,
  ------------------
  |  |  310|      0|	{ \
  |  |  311|      0|		switch (conversion->out->BandFmt) { \
  |  |  312|      0|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  437|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  123|      0|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|      0|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  437|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|      0|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  437|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  125|      0|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|      0|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  437|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  437|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  437|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  438|      0|				CAST_COMPLEX_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      0|	{ \
  |  |  |  |  |  |  271|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  272|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  273|      0|\
  |  |  |  |  |  |  274|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (274:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  275|      0|			q[x] = p[0]; \
  |  |  |  |  |  |  276|      0|			p += 2; \
  |  |  |  |  |  |  277|      0|		} \
  |  |  |  |  |  |  278|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|      0|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  341|      0|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  438|      0|				CAST_COMPLEX_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      0|	{ \
  |  |  |  |  |  |  271|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  272|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  273|      0|\
  |  |  |  |  |  |  274|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (274:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  275|      0|			q[x] = p[0]; \
  |  |  |  |  |  |  276|      0|			p += 2; \
  |  |  |  |  |  |  277|      0|		} \
  |  |  |  |  |  |  278|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|      0|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  439|      0|				CAST_COMPLEX_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  297|      0|	{ \
  |  |  |  |  |  |  298|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  299|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  300|      0|\
  |  |  |  |  |  |  301|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (301:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      0|			q[0] = p[0]; \
  |  |  |  |  |  |  303|      0|			q[1] = p[1]; \
  |  |  |  |  |  |  304|      0|			p += 2; \
  |  |  |  |  |  |  305|      0|			q += 2; \
  |  |  |  |  |  |  306|      0|		} \
  |  |  |  |  |  |  307|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  439|      0|				CAST_COMPLEX_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  297|      0|	{ \
  |  |  |  |  |  |  298|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  299|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  300|      0|\
  |  |  |  |  |  |  301|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (301:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      0|			q[0] = p[0]; \
  |  |  |  |  |  |  303|      0|			q[1] = p[1]; \
  |  |  |  |  |  |  304|      0|			p += 2; \
  |  |  |  |  |  |  305|      0|			q += 2; \
  |  |  |  |  |  |  306|      0|		} \
  |  |  |  |  |  |  307|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|      0|		} \
  |  |  355|      0|	}
  ------------------
  437|      0|				CAST_COMPLEX_INT,
  438|      0|				CAST_COMPLEX_FLOAT,
  439|      0|				CAST_COMPLEX_COMPLEX);
  440|      0|			break;
  441|       |
  442|      0|		case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (442:3): [True: 0, False: 68.7k]
  ------------------
  443|      0|			BAND_SWITCH_INNER(double,
  ------------------
  |  |  310|      0|	{ \
  |  |  311|      0|		switch (conversion->out->BandFmt) { \
  |  |  312|      0|		case VIPS_FORMAT_UCHAR: \
  |  |  ------------------
  |  |  |  Branch (312:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  ------------------
  |  |  |  |  444|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  313|      0|			INT(ITYPE, unsigned char, int, CAST_UCHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  123|      0|#define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  314|      0|			break; \
  |  |  315|      0|\
  |  |  316|      0|		case VIPS_FORMAT_CHAR: \
  |  |  ------------------
  |  |  |  Branch (316:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  ------------------
  |  |  |  |  444|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  317|      0|			INT(ITYPE, signed char, int, CAST_CHAR); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  124|      0|#define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  318|      0|			break; \
  |  |  319|      0|\
  |  |  320|      0|		case VIPS_FORMAT_USHORT: \
  |  |  ------------------
  |  |  |  Branch (320:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  ------------------
  |  |  |  |  444|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  321|      0|			INT(ITYPE, unsigned short, int, CAST_USHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  125|      0|#define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  322|      0|			break; \
  |  |  323|      0|\
  |  |  324|      0|		case VIPS_FORMAT_SHORT: \
  |  |  ------------------
  |  |  |  Branch (324:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  ------------------
  |  |  |  |  444|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  325|      0|			INT(ITYPE, signed short, int, CAST_SHORT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  126|      0|#define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  326|      0|			break; \
  |  |  327|      0|\
  |  |  328|      0|		case VIPS_FORMAT_UINT: \
  |  |  ------------------
  |  |  |  Branch (328:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  ------------------
  |  |  |  |  444|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  329|      0|			INT(ITYPE, unsigned int, gint64, CAST_UINT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  130|      0|#define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  330|      0|			break; \
  |  |  331|      0|\
  |  |  332|      0|		case VIPS_FORMAT_INT: \
  |  |  ------------------
  |  |  |  Branch (332:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  ------------------
  |  |  |  |  444|      0|				CAST_COMPLEX_INT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  246|      0|	{ \
  |  |  |  |  |  |  247|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  248|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  249|      0|\
  |  |  |  |  |  |  250|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (250:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  251|      0|			q[x] = CAST((double) p[0]); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  333|      0|			INT(ITYPE, signed int, gint64, CAST_INT); \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  131|      0|#define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  252|      0|			p += 2; \
  |  |  |  |  |  |  253|      0|		} \
  |  |  |  |  |  |  254|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  334|      0|			break; \
  |  |  335|      0|\
  |  |  336|      0|		case VIPS_FORMAT_FLOAT: \
  |  |  ------------------
  |  |  |  Branch (336:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  337|      0|			FLOAT(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  445|      0|				CAST_COMPLEX_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      0|	{ \
  |  |  |  |  |  |  271|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  272|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  273|      0|\
  |  |  |  |  |  |  274|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (274:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  275|      0|			q[x] = p[0]; \
  |  |  |  |  |  |  276|      0|			p += 2; \
  |  |  |  |  |  |  277|      0|		} \
  |  |  |  |  |  |  278|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  338|      0|			break; \
  |  |  339|      0|\
  |  |  340|      0|		case VIPS_FORMAT_DOUBLE: \
  |  |  ------------------
  |  |  |  Branch (340:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  341|      0|			FLOAT(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  445|      0|				CAST_COMPLEX_FLOAT,
  |  |  |  |  ------------------
  |  |  |  |  |  |  270|      0|	{ \
  |  |  |  |  |  |  271|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  272|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  273|      0|\
  |  |  |  |  |  |  274|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (274:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  275|      0|			q[x] = p[0]; \
  |  |  |  |  |  |  276|      0|			p += 2; \
  |  |  |  |  |  |  277|      0|		} \
  |  |  |  |  |  |  278|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  342|      0|			break; \
  |  |  343|      0|\
  |  |  344|      0|		case VIPS_FORMAT_COMPLEX: \
  |  |  ------------------
  |  |  |  Branch (344:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  345|      0|			COMPLEX(ITYPE, float); \
  |  |  ------------------
  |  |  |  |  446|      0|				CAST_COMPLEX_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  297|      0|	{ \
  |  |  |  |  |  |  298|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  299|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  300|      0|\
  |  |  |  |  |  |  301|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (301:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      0|			q[0] = p[0]; \
  |  |  |  |  |  |  303|      0|			q[1] = p[1]; \
  |  |  |  |  |  |  304|      0|			p += 2; \
  |  |  |  |  |  |  305|      0|			q += 2; \
  |  |  |  |  |  |  306|      0|		} \
  |  |  |  |  |  |  307|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  346|      0|			break; \
  |  |  347|      0|\
  |  |  348|      0|		case VIPS_FORMAT_DPCOMPLEX: \
  |  |  ------------------
  |  |  |  Branch (348:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  349|      0|			COMPLEX(ITYPE, double); \
  |  |  ------------------
  |  |  |  |  446|      0|				CAST_COMPLEX_COMPLEX);
  |  |  |  |  ------------------
  |  |  |  |  |  |  297|      0|	{ \
  |  |  |  |  |  |  298|      0|		ITYPE *restrict p = (ITYPE *) in; \
  |  |  |  |  |  |  299|      0|		OTYPE *restrict q = (OTYPE *) out; \
  |  |  |  |  |  |  300|      0|\
  |  |  |  |  |  |  301|      0|		for (x = 0; x < sz; x++) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (301:15): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  302|      0|			q[0] = p[0]; \
  |  |  |  |  |  |  303|      0|			q[1] = p[1]; \
  |  |  |  |  |  |  304|      0|			p += 2; \
  |  |  |  |  |  |  305|      0|			q += 2; \
  |  |  |  |  |  |  306|      0|		} \
  |  |  |  |  |  |  307|      0|	}
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  350|      0|			break; \
  |  |  351|      0|\
  |  |  352|      0|		default: \
  |  |  ------------------
  |  |  |  Branch (352:3): [True: 0, False: 0]
  |  |  ------------------
  |  |  353|      0|			g_assert_not_reached(); \
  |  |  ------------------
  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  354|      0|		} \
  |  |  355|      0|	}
  ------------------
  444|      0|				CAST_COMPLEX_INT,
  445|      0|				CAST_COMPLEX_FLOAT,
  446|      0|				CAST_COMPLEX_COMPLEX);
  447|      0|			break;
  448|       |
  449|      0|		default:
  ------------------
  |  Branch (449:3): [True: 0, False: 68.7k]
  ------------------
  450|      0|			g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  451|  68.7k|		}
  452|  68.7k|	}
  453|       |
  454|  5.47k|	VIPS_GATE_STOP("vips_cast_gen: work");
  ------------------
  |  |   49|  5.47k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  5.47k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  5.47k|	{ \
  |  |   51|  5.47k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 5.47k]
  |  |  ------------------
  |  |   52|  5.47k|			vips__thread_gate_stop(NAME); \
  |  |   53|  5.47k|	} \
  |  |   54|  5.47k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  5.47k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  455|       |
  456|  5.47k|	return 0;
  457|  5.47k|}
cast.c:vips_cast_init:
  552|  48.0k|{
  553|  48.0k|}
cast.c:vips_castv:
  557|  48.0k|{
  558|  48.0k|	return vips_call_split("cast", ap, in, out, format);
  559|  48.0k|}

composite.cpp:_ZL30vips_composite_base_class_initP20_VipsConversionClass:
 1466|      1|{
 1467|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1468|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(klass);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1469|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(klass);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
 1470|       |
 1471|      1|	VIPS_DEBUG_MSG("vips_composite_base_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1472|       |
 1473|      1|	gobject_class->dispose = vips_composite_base_dispose;
 1474|      1|	gobject_class->set_property = vips_object_set_property;
 1475|      1|	gobject_class->get_property = vips_object_get_property;
 1476|       |
 1477|      1|	vobject_class->nickname = "composite_base";
 1478|      1|	vobject_class->description = _("blend images together");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1479|      1|	vobject_class->build = vips_composite_base_build;
 1480|       |
 1481|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
 1482|       |
 1483|      1|	VIPS_ARG_ENUM(klass, "compositing_space", 10,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1484|      1|		_("Compositing space"),
 1485|      1|		_("Composite images in this colour space"),
 1486|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1487|      1|		G_STRUCT_OFFSET(VipsCompositeBase, compositing_space),
 1488|      1|		VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_sRGB);
 1489|       |
 1490|      1|	VIPS_ARG_BOOL(klass, "premultiplied", 11,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1491|      1|		_("Premultiplied"),
 1492|      1|		_("Images have premultiplied alpha"),
 1493|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1494|      1|		G_STRUCT_OFFSET(VipsCompositeBase, premultiplied),
 1495|      1|		FALSE);
 1496|      1|}
composite.cpp:_ZL25vips_composite_class_initP20_VipsConversionClass:
 1562|      1|{
 1563|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1564|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(klass);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1565|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(klass);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
 1566|       |
 1567|      1|	VIPS_DEBUG_MSG("vips_composite_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1568|       |
 1569|      1|	gobject_class->set_property = vips_object_set_property;
 1570|      1|	gobject_class->get_property = vips_object_get_property;
 1571|       |
 1572|      1|	vobject_class->nickname = "composite";
 1573|      1|	vobject_class->description =
 1574|      1|		_("blend an array of images with an array of blend modes");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1575|      1|	vobject_class->build = vips_composite_build;
 1576|       |
 1577|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
 1578|       |
 1579|      1|	VIPS_ARG_BOXED(klass, "in", 0,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1580|      1|		_("Inputs"),
 1581|      1|		_("Array of input images"),
 1582|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1583|      1|		G_STRUCT_OFFSET(VipsCompositeBase, in),
 1584|      1|		VIPS_TYPE_ARRAY_IMAGE);
 1585|       |
 1586|      1|	VIPS_ARG_BOXED(klass, "mode", 3,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1587|      1|		_("Blend modes"),
 1588|      1|		_("Array of VipsBlendMode to join with"),
 1589|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1590|      1|		G_STRUCT_OFFSET(VipsCompositeBase, mode),
 1591|      1|		VIPS_TYPE_ARRAY_INT);
 1592|       |
 1593|      1|	VIPS_ARG_BOXED(klass, "x", 4,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1594|      1|		_("x coordinates"),
 1595|      1|		_("Array of x coordinates to join at"),
 1596|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1597|      1|		G_STRUCT_OFFSET(VipsComposite, x),
 1598|      1|		VIPS_TYPE_ARRAY_INT);
 1599|       |
 1600|      1|	VIPS_ARG_BOXED(klass, "y", 5,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1601|      1|		_("y coordinates"),
 1602|      1|		_("Array of y coordinates to join at"),
 1603|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1604|      1|		G_STRUCT_OFFSET(VipsComposite, y),
 1605|      1|		VIPS_TYPE_ARRAY_INT);
 1606|      1|}
composite.cpp:_ZL26vips_composite2_class_initP20_VipsConversionClass:
 1696|      1|{
 1697|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1698|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(klass);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1699|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(klass);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
 1700|       |
 1701|      1|	VIPS_DEBUG_MSG("vips_composite_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1702|       |
 1703|      1|	gobject_class->set_property = vips_object_set_property;
 1704|      1|	gobject_class->get_property = vips_object_get_property;
 1705|       |
 1706|      1|	vobject_class->nickname = "composite2";
 1707|      1|	vobject_class->description =
 1708|      1|		_("blend a pair of images with a blend mode");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1709|      1|	vobject_class->build = vips_composite2_build;
 1710|       |
 1711|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
 1712|       |
 1713|      1|	VIPS_ARG_IMAGE(klass, "base", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
 1714|      1|		_("Base"),
 1715|      1|		_("Base image"),
 1716|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1717|      1|		G_STRUCT_OFFSET(VipsComposite2, base));
 1718|       |
 1719|      1|	VIPS_ARG_IMAGE(klass, "overlay", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
 1720|      1|		_("Overlay"),
 1721|      1|		_("Overlay image"),
 1722|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1723|      1|		G_STRUCT_OFFSET(VipsComposite2, overlay));
 1724|       |
 1725|      1|	VIPS_ARG_ENUM(klass, "mode", 3,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1726|      1|		_("Blend mode"),
 1727|      1|		_("VipsBlendMode to join with"),
 1728|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1729|      1|		G_STRUCT_OFFSET(VipsComposite2, mode),
 1730|      1|		VIPS_TYPE_BLEND_MODE, VIPS_BLEND_MODE_OVER);
 1731|       |
 1732|      1|	VIPS_ARG_INT(klass, "x", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1733|      1|		_("x"),
 1734|      1|		_("x position of overlay"),
 1735|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1736|      1|		G_STRUCT_OFFSET(VipsComposite2, x),
 1737|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
 1738|       |
 1739|      1|	VIPS_ARG_INT(klass, "y", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1740|      1|		_("y"),
 1741|      1|		_("y position of overlay"),
 1742|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1743|      1|		G_STRUCT_OFFSET(VipsComposite2, y),
 1744|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
 1745|      1|}

vips_conversion_operation_init:
  362|      2|{
  363|      2|	extern GType vips_copy_get_type(void);
  364|      2|	extern GType vips_tile_cache_get_type(void);
  365|      2|	extern GType vips_line_cache_get_type(void);
  366|      2|	extern GType vips_sequential_get_type(void);
  367|      2|	extern GType vips_cache_get_type(void);
  368|      2|	extern GType vips_embed_get_type(void);
  369|      2|	extern GType vips_gravity_get_type(void);
  370|      2|	extern GType vips_flip_get_type(void);
  371|      2|	extern GType vips_insert_get_type(void);
  372|      2|	extern GType vips_join_get_type(void);
  373|      2|	extern GType vips_arrayjoin_get_type(void);
  374|      2|	extern GType vips_extract_area_get_type(void);
  375|      2|	extern GType vips_crop_get_type(void);
  376|      2|	extern GType vips_smartcrop_get_type(void);
  377|      2|	extern GType vips_extract_band_get_type(void);
  378|      2|	extern GType vips_replicate_get_type(void);
  379|      2|	extern GType vips_cast_get_type(void);
  380|      2|	extern GType vips_bandjoin_get_type(void);
  381|      2|	extern GType vips_bandjoin_const_get_type(void);
  382|      2|	extern GType vips_bandrank_get_type(void);
  383|      2|	extern GType vips_black_get_type(void);
  384|      2|	extern GType vips_rot_get_type(void);
  385|      2|	extern GType vips_rot45_get_type(void);
  386|      2|	extern GType vips_autorot_get_type(void);
  387|      2|	extern GType vips_ifthenelse_get_type(void);
  388|      2|	extern GType vips_switch_get_type(void);
  389|      2|	extern GType vips_recomb_get_type(void);
  390|      2|	extern GType vips_bandmean_get_type(void);
  391|      2|	extern GType vips_bandfold_get_type(void);
  392|      2|	extern GType vips_bandunfold_get_type(void);
  393|      2|	extern GType vips_flatten_get_type(void);
  394|      2|	extern GType vips_premultiply_get_type(void);
  395|      2|	extern GType vips_unpremultiply_get_type(void);
  396|      2|	extern GType vips_bandbool_get_type(void);
  397|      2|	extern GType vips_gaussnoise_get_type(void);
  398|      2|	extern GType vips_grid_get_type(void);
  399|      2|	extern GType vips_transpose3d_get_type(void);
  400|      2|	extern GType vips_scale_get_type(void);
  401|      2|	extern GType vips_wrap_get_type(void);
  402|      2|	extern GType vips_zoom_get_type(void);
  403|      2|	extern GType vips_subsample_get_type(void);
  404|      2|	extern GType vips_msb_get_type(void);
  405|      2|	extern GType vips_byteswap_get_type(void);
  406|      2|	extern GType vips_xyz_get_type(void);
  407|      2|	extern GType vips_falsecolour_get_type(void);
  408|      2|	extern GType vips_gamma_get_type(void);
  409|      2|	extern GType vips_composite_get_type(void);
  410|      2|	extern GType vips_composite2_get_type(void);
  411|      2|	extern GType vips_addalpha_get_type(void);
  412|       |
  413|      2|	vips_copy_get_type();
  414|      2|	vips_tile_cache_get_type();
  415|      2|	vips_line_cache_get_type();
  416|      2|	vips_sequential_get_type();
  417|      2|	vips_cache_get_type();
  418|      2|	vips_embed_get_type();
  419|      2|	vips_gravity_get_type();
  420|      2|	vips_flip_get_type();
  421|      2|	vips_insert_get_type();
  422|      2|	vips_join_get_type();
  423|      2|	vips_arrayjoin_get_type();
  424|      2|	vips_extract_area_get_type();
  425|      2|	vips_crop_get_type();
  426|      2|	vips_smartcrop_get_type();
  427|      2|	vips_extract_band_get_type();
  428|      2|	vips_replicate_get_type();
  429|      2|	vips_cast_get_type();
  430|      2|	vips_bandjoin_get_type();
  431|      2|	vips_bandjoin_const_get_type();
  432|      2|	vips_bandrank_get_type();
  433|      2|	vips_black_get_type();
  434|      2|	vips_rot_get_type();
  435|      2|	vips_rot45_get_type();
  436|      2|	vips_autorot_get_type();
  437|      2|	vips_ifthenelse_get_type();
  438|      2|	vips_switch_get_type();
  439|      2|	vips_recomb_get_type();
  440|      2|	vips_bandmean_get_type();
  441|      2|	vips_bandfold_get_type();
  442|      2|	vips_bandunfold_get_type();
  443|      2|	vips_flatten_get_type();
  444|      2|	vips_premultiply_get_type();
  445|      2|	vips_unpremultiply_get_type();
  446|      2|	vips_bandbool_get_type();
  447|      2|	vips_gaussnoise_get_type();
  448|      2|	vips_grid_get_type();
  449|      2|	vips_transpose3d_get_type();
  450|      2|	vips_scale_get_type();
  451|      2|	vips_wrap_get_type();
  452|      2|	vips_zoom_get_type();
  453|      2|	vips_subsample_get_type();
  454|      2|	vips_msb_get_type();
  455|      2|	vips_byteswap_get_type();
  456|      2|	vips_xyz_get_type();
  457|      2|	vips_falsecolour_get_type();
  458|      2|	vips_gamma_get_type();
  459|      2|	vips_composite_get_type();
  460|      2|	vips_composite2_get_type();
  461|      2|	vips_addalpha_get_type();
  462|      2|}
conversion.c:vips_conversion_class_init:
  334|      1|{
  335|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  336|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  337|       |
  338|      1|	gobject_class->set_property = vips_object_set_property;
  339|      1|	gobject_class->get_property = vips_object_get_property;
  340|       |
  341|      1|	vobject_class->nickname = "conversion";
  342|      1|	vobject_class->description = _("conversion operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  343|      1|	vobject_class->build = vips_conversion_build;
  344|       |
  345|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  346|      1|		_("Output"),
  347|      1|		_("Output image"),
  348|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  349|      1|		G_STRUCT_OFFSET(VipsConversion, out));
  350|      1|}
conversion.c:vips_conversion_build:
  315|   122k|{
  316|   122k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|   122k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   122k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   122k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|   122k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  317|       |
  318|       |#ifdef DEBUG
  319|       |	printf("vips_conversion_build: ");
  320|       |	vips_object_print_name(object);
  321|       |	printf("\n");
  322|       |#endif /*DEBUG*/
  323|       |
  324|   122k|	g_object_set(conversion, "out", vips_image_new(), NULL);
  325|       |
  326|   122k|	if (VIPS_OBJECT_CLASS(vips_conversion_parent_class)->build(object))
  ------------------
  |  |  435|   122k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|   122k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   122k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (326:6): [True: 0, False: 122k]
  ------------------
  327|      0|		return -1;
  328|       |
  329|   122k|	return 0;
  330|   122k|}
conversion.c:vips_conversion_init:
  354|   122k|{
  355|   122k|}

vips_copy:
  395|  30.5k|{
  396|  30.5k|	va_list ap;
  397|  30.5k|	int result;
  398|       |
  399|  30.5k|	va_start(ap, out);
  400|  30.5k|	result = vips_call_split("copy", ap, in, out);
  401|  30.5k|	va_end(ap);
  402|       |
  403|  30.5k|	return result;
  404|  30.5k|}
copy.c:vips_copy_class_init:
  250|      1|{
  251|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  254|       |
  255|      1|	VIPS_DEBUG_MSG("vips_copy_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|       |
  257|      1|	gobject_class->set_property = vips_object_set_property;
  258|      1|	gobject_class->get_property = vips_object_get_property;
  259|       |
  260|      1|	vobject_class->nickname = "copy";
  261|      1|	vobject_class->description = _("copy an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  262|      1|	vobject_class->build = vips_copy_build;
  263|       |
  264|       |	/* We use copy to make fresh vipsimages to stop sharing, so don't
  265|       |	 * cache it. Plus copy is cheap.
  266|       |	 */
  267|      1|	operation_class->flags =
  268|      1|		VIPS_OPERATION_SEQUENTIAL |
  269|      1|		VIPS_OPERATION_NOCACHE;
  270|       |
  271|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  272|      1|		_("Input"),
  273|      1|		_("Input image"),
  274|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  275|      1|		G_STRUCT_OFFSET(VipsCopy, in));
  276|       |
  277|      1|	VIPS_ARG_BOOL(class, "swap", 2,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  278|      1|		_("Swap"),
  279|      1|		_("Swap bytes in image between little and big-endian"),
  280|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  281|      1|		G_STRUCT_OFFSET(VipsCopy, swap),
  282|      1|		FALSE);
  283|       |
  284|      1|	VIPS_ARG_INT(class, "width", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  285|      1|		_("Width"),
  286|      1|		_("Image width in pixels"),
  287|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  288|      1|		G_STRUCT_OFFSET(VipsCopy, width),
  289|      1|		0, VIPS_MAX_COORD, 0);
  290|       |
  291|      1|	VIPS_ARG_INT(class, "height", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  292|      1|		_("Height"),
  293|      1|		_("Image height in pixels"),
  294|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  295|      1|		G_STRUCT_OFFSET(VipsCopy, height),
  296|      1|		0, VIPS_MAX_COORD, 0);
  297|       |
  298|      1|	VIPS_ARG_INT(class, "bands", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  299|      1|		_("Bands"),
  300|      1|		_("Number of bands in image"),
  301|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  302|      1|		G_STRUCT_OFFSET(VipsCopy, bands),
  303|      1|		0, VIPS_MAX_COORD, 0);
  304|       |
  305|      1|	VIPS_ARG_ENUM(class, "format", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  306|      1|		_("Format"),
  307|      1|		_("Pixel format in image"),
  308|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  309|      1|		G_STRUCT_OFFSET(VipsCopy, format),
  310|      1|		VIPS_TYPE_BAND_FORMAT, VIPS_FORMAT_UCHAR);
  311|       |
  312|      1|	VIPS_ARG_ENUM(class, "coding", 7,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  313|      1|		_("Coding"),
  314|      1|		_("Pixel coding"),
  315|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  316|      1|		G_STRUCT_OFFSET(VipsCopy, coding),
  317|      1|		VIPS_TYPE_CODING, VIPS_CODING_NONE);
  318|       |
  319|      1|	VIPS_ARG_ENUM(class, "interpretation", 8,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  320|      1|		_("Interpretation"),
  321|      1|		_("Pixel interpretation"),
  322|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  323|      1|		G_STRUCT_OFFSET(VipsCopy, interpretation),
  324|      1|		VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_MULTIBAND);
  325|       |
  326|      1|	VIPS_ARG_DOUBLE(class, "xres", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  327|      1|		_("Xres"),
  328|      1|		_("Horizontal resolution in pixels/mm"),
  329|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  330|      1|		G_STRUCT_OFFSET(VipsCopy, xres),
  331|      1|		-0.0, 1000000, 0);
  332|       |
  333|      1|	VIPS_ARG_DOUBLE(class, "yres", 10,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  334|      1|		_("Yres"),
  335|      1|		_("Vertical resolution in pixels/mm"),
  336|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  337|      1|		G_STRUCT_OFFSET(VipsCopy, yres),
  338|      1|		-0.0, 1000000, 0);
  339|       |
  340|      1|	VIPS_ARG_INT(class, "xoffset", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  341|      1|		_("Xoffset"),
  342|      1|		_("Horizontal offset of origin"),
  343|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  344|      1|		G_STRUCT_OFFSET(VipsCopy, xoffset),
  345|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  346|       |
  347|      1|	VIPS_ARG_INT(class, "yoffset", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  348|      1|		_("Yoffset"),
  349|      1|		_("Vertical offset of origin"),
  350|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  351|      1|		G_STRUCT_OFFSET(VipsCopy, yoffset),
  352|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  353|      1|}
copy.c:vips_copy_build:
  164|  30.5k|{
  165|  30.5k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  30.5k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  30.5k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  30.5k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|  30.5k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  30.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  30.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  30.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  30.5k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  167|  30.5k|	VipsCopy *copy = (VipsCopy *) object;
  168|       |
  169|  30.5k|	guint64 pel_size_before;
  170|  30.5k|	guint64 pel_size_after;
  171|  30.5k|	VipsImage copy_of_fields;
  172|  30.5k|	int i;
  173|       |
  174|  30.5k|	if (VIPS_OBJECT_CLASS(vips_copy_parent_class)->build(object))
  ------------------
  |  |  435|  30.5k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  30.5k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  30.5k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (174:6): [True: 0, False: 30.5k]
  ------------------
  175|      0|		return -1;
  176|       |
  177|  30.5k|	if (vips_image_pio_input(copy->in))
  ------------------
  |  Branch (177:6): [True: 0, False: 30.5k]
  ------------------
  178|      0|		return -1;
  179|       |
  180|  30.5k|	if (copy->swap)
  ------------------
  |  Branch (180:6): [True: 0, False: 30.5k]
  ------------------
  181|      0|		g_warning("%s",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  182|  30.5k|			_("copy swap is deprecated, use byteswap instead"));
  183|       |
  184|  30.5k|	if (vips_image_pipelinev(conversion->out,
  ------------------
  |  Branch (184:6): [True: 0, False: 30.5k]
  ------------------
  185|  30.5k|			VIPS_DEMAND_STYLE_THINSTRIP, copy->in, NULL))
  186|      0|		return -1;
  187|       |
  188|       |	/* Take a copy of all the basic header fields. We use this for
  189|       |	 * sanity-checking the changes our caller has made.
  190|       |	 */
  191|  30.5k|	copy_of_fields = *conversion->out;
  192|       |
  193|       |	/* Use props to adjust header fields.
  194|       |	 */
  195|   336k|	for (i = 0; i < VIPS_NUMBER(vips_copy_names); i++) {
  ------------------
  |  |   60|   336k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (195:14): [True: 305k, False: 30.5k]
  ------------------
  196|   305k|		const char *name = vips_copy_names[i];
  197|       |
  198|   305k|		GParamSpec *pspec;
  199|   305k|		VipsArgumentClass *argument_class;
  200|   305k|		VipsArgumentInstance *argument_instance;
  201|       |
  202|   305k|		if (vips_object_get_argument(object, name,
  ------------------
  |  Branch (202:7): [True: 0, False: 305k]
  ------------------
  203|   305k|				&pspec, &argument_class, &argument_instance))
  204|      0|			return -1;
  205|       |
  206|   305k|		if (argument_instance->assigned) {
  ------------------
  |  Branch (206:7): [True: 0, False: 305k]
  ------------------
  207|      0|			GType type = G_PARAM_SPEC_VALUE_TYPE(pspec);
  ------------------
  |  |  103|      0|#define	G_PARAM_SPEC_VALUE_TYPE(pspec)	(G_PARAM_SPEC (pspec)->value_type)
  |  |  ------------------
  |  |  |  |   45|      0|#define G_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|      0|			GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|      0|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
  209|       |
  210|      0|			g_value_init(&value, type);
  211|      0|			g_object_get_property(G_OBJECT(object),
  ------------------
  |  |   51|      0|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  212|      0|				name, &value);
  213|       |
  214|       |#ifdef VIPS_DEBUG
  215|       |			{
  216|       |				char *str;
  217|       |
  218|       |				str = g_strdup_value_contents(&value);
  219|       |				printf("vips_copy_build: %s = %s\n", name, str);
  220|       |				g_free(str);
  221|       |			}
  222|       |#endif /* VIPS_DEBUG */
  223|       |
  224|      0|			g_object_set_property(G_OBJECT(conversion->out),
  ------------------
  |  |   51|      0|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  225|      0|				name, &value);
  226|      0|			g_value_unset(&value);
  227|      0|		}
  228|   305k|	}
  229|       |
  230|       |	/* Disallow changes which alter sizeof(pel).
  231|       |	 */
  232|  30.5k|	pel_size_before = VIPS_IMAGE_SIZEOF_PEL(&copy_of_fields);
  ------------------
  |  |  384|  30.5k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|  30.5k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  233|  30.5k|	pel_size_after = VIPS_IMAGE_SIZEOF_PEL(conversion->out);
  ------------------
  |  |  384|  30.5k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|  30.5k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  234|  30.5k|	if (pel_size_after != pel_size_before) {
  ------------------
  |  Branch (234:6): [True: 0, False: 30.5k]
  ------------------
  235|      0|		vips_error(class->nickname,
  236|      0|			"%s", _("must not change pel size"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  237|      0|		return -1;
  238|      0|	}
  239|       |
  240|  30.5k|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (240:6): [True: 0, False: 30.5k]
  ------------------
  241|  30.5k|			vips_start_one, vips_copy_gen, vips_stop_one,
  242|  30.5k|			copy->in, copy))
  243|      0|		return -1;
  244|       |
  245|  30.5k|	return 0;
  246|  30.5k|}
copy.c:vips_copy_gen:
  136|  62.7k|{
  137|  62.7k|	VipsRegion *ir = (VipsRegion *) seq;
  138|  62.7k|	VipsRect *r = &out_region->valid;
  139|       |
  140|  62.7k|	if (vips_region_prepare(ir, r) ||
  ------------------
  |  Branch (140:6): [True: 13.9k, False: 48.8k]
  ------------------
  141|  62.7k|		vips_region_region(out_region, ir, r, r->left, r->top))
  ------------------
  |  Branch (141:3): [True: 0, False: 48.8k]
  ------------------
  142|  13.9k|		return -1;
  143|       |
  144|  48.8k|	return 0;
  145|  62.7k|}
copy.c:vips_copy_init:
  357|  30.5k|{
  358|       |	/* Init our instance fields.
  359|       |	 */
  360|  30.5k|}

embed.c:vips_embed_base_class_init:
  551|      1|{
  552|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  553|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  554|       |
  555|      1|	VIPS_DEBUG_MSG("vips_embed_base_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  556|       |
  557|      1|	gobject_class->set_property = vips_object_set_property;
  558|      1|	gobject_class->get_property = vips_object_get_property;
  559|       |
  560|      1|	vobject_class->nickname = "embed_base";
  561|      1|	vobject_class->description = _("embed an image in a larger image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  562|      1|	vobject_class->build = vips_embed_base_build;
  563|       |
  564|       |	/* Not seq with mirror.
  565|       |	 */
  566|       |
  567|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  568|      1|		_("Input"),
  569|      1|		_("Input image"),
  570|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  571|      1|		G_STRUCT_OFFSET(VipsEmbedBase, in));
  572|       |
  573|      1|	VIPS_ARG_INT(class, "width", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  574|      1|		_("Width"),
  575|      1|		_("Image width in pixels"),
  576|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  577|      1|		G_STRUCT_OFFSET(VipsEmbedBase, width),
  578|      1|		1, 1000000000, 1);
  579|       |
  580|      1|	VIPS_ARG_INT(class, "height", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  581|      1|		_("Height"),
  582|      1|		_("Image height in pixels"),
  583|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  584|      1|		G_STRUCT_OFFSET(VipsEmbedBase, height),
  585|      1|		1, 1000000000, 1);
  586|       |
  587|      1|	VIPS_ARG_ENUM(class, "extend", 7,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  588|      1|		_("Extend"),
  589|      1|		_("How to generate the extra pixels"),
  590|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  591|      1|		G_STRUCT_OFFSET(VipsEmbedBase, extend),
  592|      1|		VIPS_TYPE_EXTEND, VIPS_EXTEND_BLACK);
  593|       |
  594|      1|	VIPS_ARG_BOXED(class, "background", 12,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  595|      1|		_("Background"),
  596|      1|		_("Color for background pixels"),
  597|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  598|      1|		G_STRUCT_OFFSET(VipsEmbedBase, background),
  599|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  600|      1|}
embed.c:vips_embed_class_init:
  642|      1|{
  643|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  644|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  645|       |
  646|      1|	VIPS_DEBUG_MSG("vips_embed_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  647|       |
  648|      1|	gobject_class->set_property = vips_object_set_property;
  649|      1|	gobject_class->get_property = vips_object_get_property;
  650|       |
  651|      1|	vobject_class->nickname = "embed";
  652|      1|	vobject_class->description = _("embed an image in a larger image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  653|      1|	vobject_class->build = vips_embed_build;
  654|       |
  655|      1|	VIPS_ARG_INT(class, "x", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  656|      1|		_("x"),
  657|      1|		_("Left edge of input in output"),
  658|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  659|      1|		G_STRUCT_OFFSET(VipsEmbed, x),
  660|      1|		-1000000000, 1000000000, 0);
  661|       |
  662|      1|	VIPS_ARG_INT(class, "y", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  663|      1|		_("y"),
  664|      1|		_("Top edge of input in output"),
  665|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  666|      1|		G_STRUCT_OFFSET(VipsEmbed, y),
  667|      1|		-1000000000, 1000000000, 0);
  668|      1|}
embed.c:vips_gravity_class_init:
  796|      1|{
  797|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  798|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  799|       |
  800|      1|	VIPS_DEBUG_MSG("vips_gravity_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  801|       |
  802|      1|	gobject_class->set_property = vips_object_set_property;
  803|      1|	gobject_class->get_property = vips_object_get_property;
  804|       |
  805|      1|	vobject_class->nickname = "gravity";
  806|      1|	vobject_class->description = _("place an image within a larger "
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  807|      1|								   "image with a certain gravity");
  808|      1|	vobject_class->build = vips_gravity_build;
  809|       |
  810|      1|	VIPS_ARG_ENUM(class, "direction", 3,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  811|      1|		_("Direction"),
  812|      1|		_("Direction to place image within width/height"),
  813|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  814|      1|		G_STRUCT_OFFSET(VipsGravity, direction),
  815|      1|		VIPS_TYPE_COMPASS_DIRECTION, VIPS_COMPASS_DIRECTION_CENTRE);
  816|      1|}

vips_extract_area:
  260|  2.57k|{
  261|  2.57k|	va_list ap;
  262|  2.57k|	int result;
  263|       |
  264|  2.57k|	va_start(ap, height);
  265|  2.57k|	result = vips_call_split("extract_area", ap, in, out,
  266|  2.57k|		left, top, width, height);
  267|  2.57k|	va_end(ap);
  268|       |
  269|  2.57k|	return result;
  270|  2.57k|}
vips_crop_get_type:
  277|      2|{
  278|      2|	static gsize gtype_id = 0;
  279|       |
  280|      2|	if (g_once_init_enter(&gtype_id)) {
  ------------------
  |  |  248|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  |  Branch (248:3): [True: 2, False: 0]
  |  |  ------------------
  |  |  249|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  250|      2|    (void) (0 ? (gpointer) *(location) : NULL);                      \
  |  |  ------------------
  |  |  |  Branch (250:13): [Folded - Ignored]
  |  |  ------------------
  |  |  251|      2|    (!g_atomic_pointer_get (location) &&                             \
  |  |  ------------------
  |  |  |  |  125|      4|  (G_GNUC_EXTENSION ({                                                       \
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  126|      4|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer));                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  |  |  ------------------
  |  |  |  |  127|      4|    gpointer gapg_temp_newval;                                               \
  |  |  |  |  128|      4|    gpointer *gapg_temp_atomic = (gpointer *)(atomic);                       \
  |  |  |  |  129|      4|    __atomic_load (gapg_temp_atomic, &gapg_temp_newval, __ATOMIC_SEQ_CST);   \
  |  |  |  |  130|      4|    gapg_temp_newval;                                                        \
  |  |  |  |  131|      4|  }))
  |  |  ------------------
  |  |  |  Branch (251:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  252|      2|     g_once_init_enter (location));                                  \
  |  |  ------------------
  |  |  |  Branch (252:6): [True: 2, False: 0]
  |  |  ------------------
  |  |  253|      2|  }))
  ------------------
  281|      2|		GType new_type = g_type_register_static_simple(VIPS_TYPE_CONVERSION,
  ------------------
  |  |   38|      2|#define VIPS_TYPE_CONVERSION (vips_conversion_get_type())
  ------------------
  282|      2|			g_intern_static_string("crop"),
  283|      2|			sizeof(VipsExtractAreaClass),
  284|      2|			(GClassInitFunc) (void (*)(void)) vips_extract_area_class_intern_init,
  285|      2|			sizeof(VipsExtractArea),
  286|       |#ifdef __EMSCRIPTEN__
  287|       |			(GInstanceInitFunc) vips_crop_init_adapter,
  288|       |#else
  289|      2|			(GInstanceInitFunc) (void (*)(void)) vips_extract_area_init,
  290|      2|#endif
  291|      2|			(GTypeFlags) 0);
  292|       |
  293|      2|		g_once_init_leave(&gtype_id, new_type);
  ------------------
  |  |  255|      2|  (G_GNUC_EXTENSION ({                                               \
  |  |  ------------------
  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  256|      2|    G_STATIC_ASSERT (sizeof *(location) == sizeof (gpointer));       \
  |  |  ------------------
  |  |  |  |  745|      2|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  257|      2|    0 ? (void) (*(location) = (result)) : (void) 0;                  \
  |  |  ------------------
  |  |  |  Branch (257:5): [Folded - Ignored]
  |  |  ------------------
  |  |  258|      2|    g_once_init_leave ((location), (gsize) (result));                \
  |  |  259|      2|  }))
  ------------------
  294|      2|	}
  295|       |
  296|      2|	return (GType) gtype_id;
  297|      2|}
vips_extract_band:
  479|  1.62k|{
  480|  1.62k|	va_list ap;
  481|  1.62k|	int result;
  482|       |
  483|  1.62k|	va_start(ap, band);
  484|  1.62k|	result = vips_call_split("extract_band", ap, in, out, band);
  485|  1.62k|	va_end(ap);
  486|       |
  487|  1.62k|	return result;
  488|  1.62k|}
extract.c:vips_extract_area_class_init:
  177|      2|{
  178|      2|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      2|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|      2|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|      2|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      2|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  181|       |
  182|      2|	VIPS_DEBUG_MSG("vips_extract_area_class_init\n");
  ------------------
  |  |   47|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      2|	{ \
  |  |   49|      2|		; \
  |  |   50|      2|	} \
  |  |   51|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  183|       |
  184|      2|	gobject_class->set_property = vips_object_set_property;
  185|      2|	gobject_class->get_property = vips_object_get_property;
  186|       |
  187|      2|	vobject_class->nickname = "extract_area";
  188|      2|	vobject_class->description = _("extract an area from an image");
  ------------------
  |  |   30|      2|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      2|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  189|      2|	vobject_class->build = vips_extract_area_build;
  190|       |
  191|      2|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  192|       |
  193|      2|	VIPS_ARG_IMAGE(class, "input", 1,
  ------------------
  |  |  112|      2|	{ \
  |  |  113|      2|		GParamSpec *pspec; \
  |  |  114|      2|\
  |  |  115|      2|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      2|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      2|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      2|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      2|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      2|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      2|			vips_argument_get_id(), pspec); \
  |  |  120|      2|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      2|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      2|	}
  ------------------
  194|      2|		_("Input"),
  195|      2|		_("Input image"),
  196|      2|		VIPS_ARGUMENT_REQUIRED_INPUT,
  197|      2|		G_STRUCT_OFFSET(VipsExtractArea, in));
  198|       |
  199|      2|	VIPS_ARG_INT(class, "left", 3,
  ------------------
  |  |  184|      2|	{ \
  |  |  185|      2|		GParamSpec *pspec; \
  |  |  186|      2|\
  |  |  187|      2|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      2|			(MIN), (MAX), (VALUE), \
  |  |  189|      2|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      2|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      2|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      2|			vips_argument_get_id(), pspec); \
  |  |  192|      2|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      2|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      2|	}
  ------------------
  200|      2|		_("Left"),
  201|      2|		_("Left edge of extract area"),
  202|      2|		VIPS_ARGUMENT_REQUIRED_INPUT,
  203|      2|		G_STRUCT_OFFSET(VipsExtractArea, left),
  204|      2|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  205|       |
  206|      2|	VIPS_ARG_INT(class, "top", 4,
  ------------------
  |  |  184|      2|	{ \
  |  |  185|      2|		GParamSpec *pspec; \
  |  |  186|      2|\
  |  |  187|      2|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      2|			(MIN), (MAX), (VALUE), \
  |  |  189|      2|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      2|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      2|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      2|			vips_argument_get_id(), pspec); \
  |  |  192|      2|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      2|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      2|	}
  ------------------
  207|      2|		_("Top"),
  208|      2|		_("Top edge of extract area"),
  209|      2|		VIPS_ARGUMENT_REQUIRED_INPUT,
  210|      2|		G_STRUCT_OFFSET(VipsExtractArea, top),
  211|      2|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  212|       |
  213|      2|	VIPS_ARG_INT(class, "width", 5,
  ------------------
  |  |  184|      2|	{ \
  |  |  185|      2|		GParamSpec *pspec; \
  |  |  186|      2|\
  |  |  187|      2|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      2|			(MIN), (MAX), (VALUE), \
  |  |  189|      2|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      2|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      2|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      2|			vips_argument_get_id(), pspec); \
  |  |  192|      2|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      2|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      2|	}
  ------------------
  214|      2|		_("Width"),
  215|      2|		_("Width of extract area"),
  216|      2|		VIPS_ARGUMENT_REQUIRED_INPUT,
  217|      2|		G_STRUCT_OFFSET(VipsExtractArea, width),
  218|      2|		1, VIPS_MAX_COORD, 1);
  219|       |
  220|      2|	VIPS_ARG_INT(class, "height", 6,
  ------------------
  |  |  184|      2|	{ \
  |  |  185|      2|		GParamSpec *pspec; \
  |  |  186|      2|\
  |  |  187|      2|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      2|			(MIN), (MAX), (VALUE), \
  |  |  189|      2|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      2|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      2|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      2|			vips_argument_get_id(), pspec); \
  |  |  192|      2|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      2|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      2|	}
  ------------------
  221|      2|		_("Height"),
  222|      2|		_("Height of extract area"),
  223|      2|		VIPS_ARGUMENT_REQUIRED_INPUT,
  224|      2|		G_STRUCT_OFFSET(VipsExtractArea, height),
  225|      2|		1, VIPS_MAX_COORD, 1);
  226|      2|}
extract.c:vips_extract_area_build:
  138|  2.57k|{
  139|  2.57k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  2.57k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  2.57k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  2.57k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  140|  2.57k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  2.57k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  2.57k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  2.57k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  2.57k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  141|  2.57k|	VipsExtractArea *extract = (VipsExtractArea *) object;
  142|       |
  143|  2.57k|	if (VIPS_OBJECT_CLASS(vips_extract_area_parent_class)->build(object))
  ------------------
  |  |  435|  2.57k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  2.57k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  2.57k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (143:6): [True: 0, False: 2.57k]
  ------------------
  144|      0|		return -1;
  145|       |
  146|  2.57k|	if (extract->left + extract->width > extract->in->Xsize ||
  ------------------
  |  Branch (146:6): [True: 0, False: 2.57k]
  ------------------
  147|  2.57k|		extract->top + extract->height > extract->in->Ysize ||
  ------------------
  |  Branch (147:3): [True: 0, False: 2.57k]
  ------------------
  148|  2.57k|		extract->left < 0 || extract->top < 0 ||
  ------------------
  |  Branch (148:3): [True: 0, False: 2.57k]
  |  Branch (148:24): [True: 0, False: 2.57k]
  ------------------
  149|  2.57k|		extract->width <= 0 || extract->height <= 0) {
  ------------------
  |  Branch (149:3): [True: 0, False: 2.57k]
  |  Branch (149:26): [True: 0, False: 2.57k]
  ------------------
  150|      0|		vips_error(class->nickname, "%s", _("bad extract area"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  151|      0|		return -1;
  152|      0|	}
  153|       |
  154|  2.57k|	if (vips_image_pio_input(extract->in) ||
  ------------------
  |  Branch (154:6): [True: 0, False: 2.57k]
  ------------------
  155|  2.57k|		vips_check_coding_known(class->nickname, extract->in))
  ------------------
  |  Branch (155:3): [True: 0, False: 2.57k]
  ------------------
  156|      0|		return -1;
  157|       |
  158|  2.57k|	if (vips_image_pipelinev(conversion->out,
  ------------------
  |  Branch (158:6): [True: 0, False: 2.57k]
  ------------------
  159|  2.57k|			VIPS_DEMAND_STYLE_THINSTRIP, extract->in, NULL))
  160|      0|		return -1;
  161|       |
  162|  2.57k|	conversion->out->Xsize = extract->width;
  163|  2.57k|	conversion->out->Ysize = extract->height;
  164|  2.57k|	conversion->out->Xoffset = -extract->left;
  165|  2.57k|	conversion->out->Yoffset = -extract->top;
  166|       |
  167|  2.57k|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (167:6): [True: 0, False: 2.57k]
  ------------------
  168|  2.57k|			vips_start_one, vips_extract_area_gen, vips_stop_one,
  169|  2.57k|			extract->in, extract))
  170|      0|		return -1;
  171|       |
  172|  2.57k|	return 0;
  173|  2.57k|}
extract.c:vips_extract_area_gen:
  113|  8.34k|{
  114|  8.34k|	VipsRegion *ir = (VipsRegion *) seq;
  115|  8.34k|	VipsExtractArea *extract = (VipsExtractArea *) b;
  116|  8.34k|	VipsRect iarea;
  117|       |
  118|       |	/* Ask for input we need. Translate from demand in or's space to
  119|       |	 * demand in ir's space.
  120|       |	 */
  121|  8.34k|	iarea = out_region->valid;
  122|  8.34k|	iarea.left += extract->left;
  123|  8.34k|	iarea.top += extract->top;
  124|  8.34k|	if (vips_region_prepare(ir, &iarea))
  ------------------
  |  Branch (124:6): [True: 954, False: 7.39k]
  ------------------
  125|    954|		return -1;
  126|       |
  127|       |	/* Attach or to ir.
  128|       |	 */
  129|  7.39k|	if (vips_region_region(out_region, ir,
  ------------------
  |  Branch (129:6): [True: 0, False: 7.39k]
  ------------------
  130|  7.39k|			&out_region->valid, iarea.left, iarea.top))
  131|      0|		return -1;
  132|       |
  133|  7.39k|	return 0;
  134|  7.39k|}
extract.c:vips_extract_area_init:
  238|  2.57k|{
  239|  2.57k|}
extract.c:vips_extract_band_class_init:
  415|      1|{
  416|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  417|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  418|      1|	VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_BANDARY, VipsBandaryClass))
  ------------------
  419|       |
  420|      1|	VIPS_DEBUG_MSG("vips_extract_band_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  421|       |
  422|      1|	gobject_class->set_property = vips_object_set_property;
  423|      1|	gobject_class->get_property = vips_object_get_property;
  424|       |
  425|      1|	vobject_class->nickname = "extract_band";
  426|      1|	vobject_class->description = _("extract band from an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  427|      1|	vobject_class->build = vips_extract_band_build;
  428|       |
  429|      1|	bandary_class->process_line = vips_extract_band_buffer;
  430|       |
  431|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  432|      1|		_("Input"),
  433|      1|		_("Input image"),
  434|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  435|      1|		G_STRUCT_OFFSET(VipsExtractBand, in));
  436|       |
  437|      1|	VIPS_ARG_INT(class, "band", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  438|      1|		_("Band"),
  439|      1|		_("Band to extract"),
  440|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  441|      1|		G_STRUCT_OFFSET(VipsExtractBand, band),
  442|      1|		0, VIPS_MAX_COORD, 0);
  443|       |
  444|      1|	VIPS_ARG_INT(class, "n", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  445|      1|		_("n"),
  446|      1|		_("Number of bands to extract"),
  447|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  448|      1|		G_STRUCT_OFFSET(VipsExtractBand, n),
  449|      1|		1, VIPS_MAX_COORD, 1);
  450|      1|}
extract.c:vips_extract_band_build:
  382|  1.62k|{
  383|  1.62k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  1.62k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  1.62k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  1.62k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  384|  1.62k|	VipsBandary *bandary = (VipsBandary *) object;
  385|  1.62k|	VipsExtractBand *extract = (VipsExtractBand *) object;
  386|       |
  387|  1.62k|	if (extract->in) {
  ------------------
  |  Branch (387:6): [True: 1.62k, False: 0]
  ------------------
  388|  1.62k|		int bands;
  389|       |
  390|  1.62k|		vips_image_decode_predict(extract->in, &bands, NULL);
  391|       |
  392|  1.62k|		bandary->n = 1;
  393|  1.62k|		bandary->in = &extract->in;
  394|  1.62k|		bandary->out_bands = extract->n;
  395|       |
  396|  1.62k|		if (extract->band + extract->n > bands) {
  ------------------
  |  Branch (396:7): [True: 0, False: 1.62k]
  ------------------
  397|      0|			vips_error(class->nickname,
  398|      0|				"%s", _("bad extract band"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  399|      0|			return -1;
  400|      0|		}
  401|       |
  402|  1.62k|		if (extract->band == 0 &&
  ------------------
  |  Branch (402:7): [True: 1.04k, False: 583]
  ------------------
  403|  1.62k|			extract->n == bands)
  ------------------
  |  Branch (403:4): [True: 0, False: 1.04k]
  ------------------
  404|      0|			return vips_bandary_copy(bandary);
  405|  1.62k|	}
  406|       |
  407|  1.62k|	if (VIPS_OBJECT_CLASS(vips_extract_band_parent_class)->build(object))
  ------------------
  |  |  435|  1.62k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.62k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.62k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (407:6): [True: 0, False: 1.62k]
  ------------------
  408|      0|		return -1;
  409|       |
  410|  1.62k|	return 0;
  411|  1.62k|}
extract.c:vips_extract_band_buffer:
  348|  46.0k|{
  349|  46.0k|	VipsBandary *bandary = seq->bandary;
  350|  46.0k|	VipsConversion *conversion = (VipsConversion *) bandary;
  351|  46.0k|	VipsExtractBand *extract = (VipsExtractBand *) bandary;
  352|  46.0k|	VipsImage *im = bandary->ready[0];
  353|  46.0k|	int es = VIPS_IMAGE_SIZEOF_ELEMENT(im);
  ------------------
  |  |  382|  46.0k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  ------------------
  354|  46.0k|	int ips = VIPS_IMAGE_SIZEOF_PEL(im);
  ------------------
  |  |  384|  46.0k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|  46.0k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  355|  46.0k|	const int ops = VIPS_IMAGE_SIZEOF_PEL(conversion->out);
  ------------------
  |  |  384|  46.0k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|  46.0k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  356|       |
  357|  46.0k|	VipsPel *restrict p;
  358|  46.0k|	VipsPel *restrict q;
  359|  46.0k|	int x, z;
  360|       |
  361|  46.0k|	p = in[0] + extract->band * es;
  362|  46.0k|	q = out;
  363|  46.0k|	if (ops == 1) {
  ------------------
  |  Branch (363:6): [True: 3.30k, False: 42.7k]
  ------------------
  364|   108k|		for (x = 0; x < width; x++) {
  ------------------
  |  Branch (364:15): [True: 104k, False: 3.30k]
  ------------------
  365|   104k|			q[x] = p[0];
  366|   104k|			p += ips;
  367|   104k|		}
  368|  3.30k|	}
  369|  42.7k|	else {
  370|   761k|		for (x = 0; x < width; x++) {
  ------------------
  |  Branch (370:15): [True: 718k, False: 42.7k]
  ------------------
  371|  4.61M|			for (z = 0; z < ops; z++)
  ------------------
  |  Branch (371:16): [True: 3.90M, False: 718k]
  ------------------
  372|  3.90M|				q[z] = p[z];
  373|       |
  374|   718k|			p += ips;
  375|   718k|			q += ops;
  376|   718k|		}
  377|  42.7k|	}
  378|  46.0k|}
extract.c:vips_extract_band_init:
  454|  1.62k|{
  455|  1.62k|	extract->n = 1;
  456|  1.62k|}

falsecolour.c:vips_falsecolour_class_init:
  365|      1|{
  366|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  367|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  368|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  369|       |
  370|      1|	gobject_class->set_property = vips_object_set_property;
  371|      1|	gobject_class->get_property = vips_object_get_property;
  372|       |
  373|      1|	vobject_class->nickname = "falsecolour";
  374|      1|	vobject_class->description = _("false-color an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  375|      1|	vobject_class->build = vips_falsecolour_build;
  376|       |
  377|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  378|       |
  379|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  380|      1|		_("Input"),
  381|      1|		_("Input image"),
  382|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  383|      1|		G_STRUCT_OFFSET(VipsFalsecolour, in));
  384|      1|}

flatten.c:vips_flatten_class_init:
  402|      1|{
  403|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  404|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  405|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  406|       |
  407|      1|	VIPS_DEBUG_MSG("vips_flatten_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|       |
  409|      1|	gobject_class->set_property = vips_object_set_property;
  410|      1|	gobject_class->get_property = vips_object_get_property;
  411|       |
  412|      1|	vobject_class->nickname = "flatten";
  413|      1|	vobject_class->description = _("flatten alpha out of an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  414|      1|	vobject_class->build = vips_flatten_build;
  415|       |
  416|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  417|       |
  418|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  419|      1|		_("Input"),
  420|      1|		_("Input image"),
  421|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  422|      1|		G_STRUCT_OFFSET(VipsFlatten, in));
  423|       |
  424|      1|	VIPS_ARG_BOXED(class, "background", 2,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  425|      1|		_("Background"),
  426|      1|		_("Background value"),
  427|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  428|      1|		G_STRUCT_OFFSET(VipsFlatten, background),
  429|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  430|       |
  431|      1|	VIPS_ARG_DOUBLE(class, "max_alpha", 115,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  432|      1|		_("Maximum alpha"),
  433|      1|		_("Maximum value of alpha channel"),
  434|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  435|      1|		G_STRUCT_OFFSET(VipsFlatten, max_alpha),
  436|      1|		0, 100000000, 255);
  437|      1|}

flip.c:vips_flip_class_init:
  226|      1|{
  227|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  228|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  229|       |
  230|      1|	VIPS_DEBUG_MSG("vips_flip_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|       |
  232|      1|	gobject_class->set_property = vips_object_set_property;
  233|      1|	gobject_class->get_property = vips_object_get_property;
  234|       |
  235|      1|	vobject_class->nickname = "flip";
  236|      1|	vobject_class->description = _("flip an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  237|      1|	vobject_class->build = vips_flip_build;
  238|       |
  239|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  240|      1|		_("Input"),
  241|      1|		_("Input image"),
  242|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  243|      1|		G_STRUCT_OFFSET(VipsFlip, in));
  244|       |
  245|      1|	VIPS_ARG_ENUM(class, "direction", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  246|      1|		_("Direction"),
  247|      1|		_("Direction to flip image"),
  248|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  249|      1|		G_STRUCT_OFFSET(VipsFlip, direction),
  250|      1|		VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL);
  251|      1|}

gamma.c:vips_gamma_class_init:
  127|      1|{
  128|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  129|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  130|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  131|       |
  132|      1|	gobject_class->set_property = vips_object_set_property;
  133|      1|	gobject_class->get_property = vips_object_get_property;
  134|       |
  135|      1|	vobject_class->nickname = "gamma";
  136|      1|	vobject_class->description = _("gamma an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  137|      1|	vobject_class->build = vips_gamma_build;
  138|       |
  139|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  140|       |
  141|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  142|      1|		_("Input"),
  143|      1|		_("Input image"),
  144|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  145|      1|		G_STRUCT_OFFSET(VipsGamma, in));
  146|       |
  147|      1|	VIPS_ARG_DOUBLE(class, "exponent", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  148|      1|		_("Exponent"),
  149|      1|		_("Gamma factor"),
  150|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  151|      1|		G_STRUCT_OFFSET(VipsGamma, exponent),
  152|      1|		0.000001, 1000.0, 1.0 / 2.4);
  153|      1|}

grid.c:vips_grid_class_init:
  187|      1|{
  188|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|       |
  191|      1|	gobject_class->set_property = vips_object_set_property;
  192|      1|	gobject_class->get_property = vips_object_get_property;
  193|       |
  194|      1|	vobject_class->nickname = "grid";
  195|      1|	vobject_class->description = _("grid an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  196|      1|	vobject_class->build = vips_grid_build;
  197|       |
  198|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  199|      1|		_("Input"),
  200|      1|		_("Input image"),
  201|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  202|      1|		G_STRUCT_OFFSET(VipsGrid, in));
  203|       |
  204|      1|	VIPS_ARG_INT(class, "tile_height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  205|      1|		_("Tile height"),
  206|      1|		_("Chop into tiles this high"),
  207|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  208|      1|		G_STRUCT_OFFSET(VipsGrid, tile_height),
  209|      1|		1, 10000000, 128);
  210|       |
  211|      1|	VIPS_ARG_INT(class, "across", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  212|      1|		_("Across"),
  213|      1|		_("Number of tiles across"),
  214|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  215|      1|		G_STRUCT_OFFSET(VipsGrid, across),
  216|      1|		1, 10000000, 1);
  217|       |
  218|      1|	VIPS_ARG_INT(class, "down", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  219|      1|		_("Down"),
  220|      1|		_("Number of tiles down"),
  221|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  222|      1|		G_STRUCT_OFFSET(VipsGrid, down),
  223|      1|		1, 10000000, 1);
  224|      1|}

ifthenelse.c:vips_ifthenelse_class_init:
  515|      1|{
  516|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  518|       |
  519|      1|	VIPS_DEBUG_MSG("vips_ifthenelse_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|       |
  521|      1|	gobject_class->set_property = vips_object_set_property;
  522|      1|	gobject_class->get_property = vips_object_get_property;
  523|       |
  524|      1|	vobject_class->nickname = "ifthenelse";
  525|      1|	vobject_class->description = _("ifthenelse an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  526|      1|	vobject_class->build = vips_ifthenelse_build;
  527|       |
  528|      1|	VIPS_ARG_IMAGE(class, "cond", -2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  529|      1|		_("Condition"),
  530|      1|		_("Condition input image"),
  531|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  532|      1|		G_STRUCT_OFFSET(VipsIfthenelse, cond));
  533|       |
  534|      1|	VIPS_ARG_IMAGE(class, "in1", -1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  535|      1|		_("Then image"),
  536|      1|		_("Source for TRUE pixels"),
  537|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  538|      1|		G_STRUCT_OFFSET(VipsIfthenelse, in1));
  539|       |
  540|      1|	VIPS_ARG_IMAGE(class, "in2", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  541|      1|		_("Else image"),
  542|      1|		_("Source for FALSE pixels"),
  543|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  544|      1|		G_STRUCT_OFFSET(VipsIfthenelse, in2));
  545|       |
  546|      1|	VIPS_ARG_BOOL(class, "blend", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  547|      1|		_("Blend"),
  548|      1|		_("Blend smoothly between then and else parts"),
  549|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  550|      1|		G_STRUCT_OFFSET(VipsIfthenelse, blend),
  551|      1|		FALSE);
  552|      1|}

vips__vector_to_pels:
  248|      2|{
  249|       |	/* Run our pipeline relative to this.
  250|       |	 */
  251|      2|	VipsImage *context = vips_image_new();
  252|       |
  253|      2|	VipsImage **t = (VipsImage **)
  254|      2|		vips_object_local_array(VIPS_OBJECT(context), 8);
  ------------------
  |  |  433|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|       |
  256|      2|	VipsImage *in;
  257|      2|	double *ones;
  258|      2|	VipsPel *result;
  259|      2|	int i;
  260|       |
  261|       |#ifdef VIPS_DEBUG
  262|       |	printf("vips__vector_to_pels: starting\n");
  263|       |#endif /*VIPS_DEBUG*/
  264|       |
  265|      2|	ones = VIPS_ARRAY(context, n, double);
  ------------------
  |  |   72|      2|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|      2|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  266|      4|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (266:14): [True: 2, False: 2]
  ------------------
  267|      2|		ones[i] = 1.0;
  268|       |
  269|       |	/* Make the real and imaginary parts.
  270|       |	 */
  271|      2|	if (vips_black(&t[0], 1, 1, "bands", bands, NULL) ||
  ------------------
  |  Branch (271:6): [True: 0, False: 2]
  ------------------
  272|      2|		vips_linear(t[0], &t[1], ones, real, n, NULL)) {
  ------------------
  |  Branch (272:3): [True: 0, False: 2]
  ------------------
  273|      0|		g_object_unref(context);
  274|      0|		return NULL;
  275|      0|	}
  276|      2|	in = t[1];
  277|       |
  278|      2|	if (imag) {
  ------------------
  |  Branch (278:6): [True: 0, False: 2]
  ------------------
  279|      0|		if (vips_black(&t[2], 1, 1, "bands", bands, NULL) ||
  ------------------
  |  Branch (279:7): [True: 0, False: 0]
  ------------------
  280|      0|			vips_linear(t[2], &t[3], ones, imag, n, NULL) ||
  ------------------
  |  Branch (280:4): [True: 0, False: 0]
  ------------------
  281|      0|			vips_complexform(in, t[3], &t[4], NULL)) {
  ------------------
  |  Branch (281:4): [True: 0, False: 0]
  ------------------
  282|      0|			g_object_unref(context);
  283|      0|			return NULL;
  284|      0|		}
  285|      0|		in = t[4];
  286|      0|	}
  287|       |
  288|       |	/* Cast to the output type and coding.
  289|       |	 */
  290|      2|	if (vips_cast(in, &t[5], format, NULL) ||
  ------------------
  |  Branch (290:6): [True: 0, False: 2]
  ------------------
  291|      2|		vips_image_encode(t[5], &t[6], coding)) {
  ------------------
  |  Branch (291:3): [True: 0, False: 2]
  ------------------
  292|      0|		g_object_unref(context);
  293|      0|		return NULL;
  294|      0|	}
  295|      2|	in = t[6];
  296|       |
  297|       |	/* Write to memory, copy to output buffer.
  298|       |	 */
  299|      2|	vips_image_set_int(in, "hide-progress", 1);
  300|      2|	if (!(t[7] = vips_image_new_memory()) ||
  ------------------
  |  Branch (300:6): [True: 0, False: 2]
  ------------------
  301|      2|		vips_image_write(in, t[7])) {
  ------------------
  |  Branch (301:3): [True: 0, False: 2]
  ------------------
  302|      0|		g_object_unref(context);
  303|      0|		return NULL;
  304|      0|	}
  305|      2|	in = t[7];
  306|       |
  307|      2|	if (!(result =
  ------------------
  |  Branch (307:6): [True: 0, False: 2]
  ------------------
  308|      2|				VIPS_ARRAY(NULL, VIPS_IMAGE_SIZEOF_PEL(in), VipsPel))) {
  ------------------
  |  |   72|      2|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|      2|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|      0|		g_object_unref(context);
  310|      0|		return NULL;
  311|      0|	}
  312|       |
  313|      2|	memcpy(result, in->data, VIPS_IMAGE_SIZEOF_PEL(in));
  ------------------
  |  |  384|      2|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|      2|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  314|       |
  315|       |#ifdef VIPS_DEBUG
  316|       |	{
  317|       |		int i;
  318|       |
  319|       |		printf("vips__vector_to_ink:\n");
  320|       |		printf("\t(real, imag) = ");
  321|       |		for (i = 0; i < n; i++)
  322|       |			printf("(%g, %g) ", real[i], imag ? imag[i] : 0);
  323|       |		printf("\n");
  324|       |		printf("\tink = ");
  325|       |		for (i = 0; i < VIPS_IMAGE_SIZEOF_PEL(in); i++)
  326|       |			printf("%d ", result[i]);
  327|       |		printf("\n");
  328|       |	}
  329|       |#endif /*VIPS_DEBUG*/
  330|       |
  331|      2|	g_object_unref(context);
  332|       |
  333|      2|	return result;
  334|      2|}
vips__vector_to_ink:
  348|      2|{
  349|      2|	int bands;
  350|      2|	VipsBandFormat format;
  351|      2|	VipsPel *result;
  352|       |
  353|      2|	vips_image_decode_predict(im, &bands, &format);
  354|       |
  355|      2|	if (!(result = vips__vector_to_pels(domain,
  ------------------
  |  Branch (355:6): [True: 0, False: 2]
  ------------------
  356|      2|			  bands, format, im->Coding, real, imag, n)))
  357|      0|		return NULL;
  358|       |
  359|      2|	g_signal_connect(im, "postclose",
  ------------------
  |  |  491|      2|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  360|      2|		G_CALLBACK(vips__vector_to_ink_cb), result);
  361|       |
  362|      2|	return result;
  363|      2|}
insert.c:vips_insert_class_init:
  448|      1|{
  449|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  450|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  451|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  452|       |
  453|      1|	VIPS_DEBUG_MSG("vips_insert_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  454|       |
  455|      1|	gobject_class->set_property = vips_object_set_property;
  456|      1|	gobject_class->get_property = vips_object_get_property;
  457|       |
  458|      1|	vobject_class->nickname = "insert";
  459|      1|	vobject_class->description =
  460|      1|		_("insert image @sub into @main at @x, @y");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  461|      1|	vobject_class->build = vips_insert_build;
  462|       |
  463|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  464|       |
  465|      1|	VIPS_ARG_IMAGE(class, "main", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  466|      1|		_("Main"),
  467|      1|		_("Main input image"),
  468|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  469|      1|		G_STRUCT_OFFSET(VipsInsert, main));
  470|       |
  471|      1|	VIPS_ARG_IMAGE(class, "sub", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  472|      1|		_("Sub-image"),
  473|      1|		_("Sub-image to insert into main image"),
  474|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  475|      1|		G_STRUCT_OFFSET(VipsInsert, sub));
  476|       |
  477|      1|	VIPS_ARG_INT(class, "x", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  478|      1|		_("X"),
  479|      1|		_("Left edge of sub in main"),
  480|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  481|      1|		G_STRUCT_OFFSET(VipsInsert, x),
  482|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  483|       |
  484|      1|	VIPS_ARG_INT(class, "y", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  485|      1|		_("Y"),
  486|      1|		_("Top edge of sub in main"),
  487|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  488|      1|		G_STRUCT_OFFSET(VipsInsert, y),
  489|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  490|       |
  491|      1|	VIPS_ARG_BOOL(class, "expand", 5,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  492|      1|		_("Expand"),
  493|      1|		_("Expand output to hold all of both inputs"),
  494|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  495|      1|		G_STRUCT_OFFSET(VipsInsert, expand),
  496|      1|		FALSE);
  497|       |
  498|      1|	VIPS_ARG_BOXED(class, "background", 6,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  499|      1|		_("Background"),
  500|      1|		_("Color for new pixels"),
  501|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  502|      1|		G_STRUCT_OFFSET(VipsInsert, background),
  503|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  504|      1|}
insert.c:vips__vector_to_ink_cb:
  338|      2|{
  339|      2|	g_free(buf);
  340|      2|}

join.c:vips_join_class_init:
  220|      1|{
  221|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  224|       |
  225|      1|	VIPS_DEBUG_MSG("vips_join_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  226|       |
  227|      1|	gobject_class->set_property = vips_object_set_property;
  228|      1|	gobject_class->get_property = vips_object_get_property;
  229|       |
  230|      1|	vobject_class->nickname = "join";
  231|      1|	vobject_class->description = _("join a pair of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  232|      1|	vobject_class->build = vips_join_build;
  233|       |
  234|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  235|       |
  236|      1|	VIPS_ARG_IMAGE(class, "in1", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  237|      1|		_("in1"),
  238|      1|		_("First input image"),
  239|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  240|      1|		G_STRUCT_OFFSET(VipsJoin, in1));
  241|       |
  242|      1|	VIPS_ARG_IMAGE(class, "in2", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  243|      1|		_("in2"),
  244|      1|		_("Second input image"),
  245|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  246|      1|		G_STRUCT_OFFSET(VipsJoin, in2));
  247|       |
  248|      1|	VIPS_ARG_ENUM(class, "direction", 3,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  249|      1|		_("Direction"),
  250|      1|		_("Join left-right or up-down"),
  251|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  252|      1|		G_STRUCT_OFFSET(VipsJoin, direction),
  253|      1|		VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL);
  254|       |
  255|      1|	VIPS_ARG_BOOL(class, "expand", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  256|      1|		_("Expand"),
  257|      1|		_("Expand output to hold all of both inputs"),
  258|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  259|      1|		G_STRUCT_OFFSET(VipsJoin, expand),
  260|      1|		FALSE);
  261|       |
  262|      1|	VIPS_ARG_INT(class, "shim", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  263|      1|		_("Shim"),
  264|      1|		_("Pixels between images"),
  265|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  266|      1|		G_STRUCT_OFFSET(VipsJoin, shim),
  267|      1|		0, 1000000, 0);
  268|       |
  269|      1|	VIPS_ARG_BOXED(class, "background", 6,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  270|      1|		_("Background"),
  271|      1|		_("Colour for new pixels"),
  272|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  273|      1|		G_STRUCT_OFFSET(VipsJoin, background),
  274|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  275|       |
  276|      1|	VIPS_ARG_ENUM(class, "align", 7,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  277|      1|		_("Align"),
  278|      1|		_("Align on the low, centre or high coordinate edge"),
  279|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  280|      1|		G_STRUCT_OFFSET(VipsJoin, align),
  281|      1|		VIPS_TYPE_ALIGN, VIPS_ALIGN_LOW);
  282|      1|}

msb.c:vips_msb_class_init:
  231|      1|{
  232|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  234|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  235|       |
  236|      1|	gobject_class->set_property = vips_object_set_property;
  237|      1|	gobject_class->get_property = vips_object_get_property;
  238|       |
  239|      1|	vobject_class->nickname = "msb";
  240|      1|	vobject_class->description =
  241|      1|		_("pick most-significant byte from an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  242|      1|	vobject_class->build = vips_msb_build;
  243|       |
  244|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  245|       |
  246|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  247|      1|		_("Input"),
  248|      1|		_("Input image"),
  249|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  250|      1|		G_STRUCT_OFFSET(VipsMsb, in));
  251|       |
  252|      1|	VIPS_ARG_INT(class, "band", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  253|      1|		_("Band"),
  254|      1|		_("Band to msb"),
  255|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  256|      1|		G_STRUCT_OFFSET(VipsMsb, band),
  257|      1|		-1, 100000000, -1);
  258|      1|}

premultiply.c:vips_premultiply_class_init:
  244|      1|{
  245|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  246|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  247|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  248|       |
  249|      1|	VIPS_DEBUG_MSG("vips_premultiply_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|       |
  251|      1|	gobject_class->set_property = vips_object_set_property;
  252|      1|	gobject_class->get_property = vips_object_get_property;
  253|       |
  254|      1|	vobject_class->nickname = "premultiply";
  255|      1|	vobject_class->description = _("premultiply image alpha");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  256|      1|	vobject_class->build = vips_premultiply_build;
  257|       |
  258|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  259|       |
  260|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  261|      1|		_("Input"),
  262|      1|		_("Input image"),
  263|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  264|      1|		G_STRUCT_OFFSET(VipsPremultiply, in));
  265|       |
  266|      1|	VIPS_ARG_DOUBLE(class, "max_alpha", 115,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  267|      1|		_("Maximum alpha"),
  268|      1|		_("Maximum value of alpha channel"),
  269|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  270|      1|		G_STRUCT_OFFSET(VipsPremultiply, max_alpha),
  271|      1|		0, 100000000, 255);
  272|      1|}

recomb.c:vips_recomb_class_init:
  209|      1|{
  210|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  211|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  212|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  213|       |
  214|      1|	gobject_class->set_property = vips_object_set_property;
  215|      1|	gobject_class->get_property = vips_object_get_property;
  216|       |
  217|      1|	object_class->nickname = "recomb";
  218|      1|	object_class->description = _("linear recombination with matrix");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  219|      1|	object_class->build = vips_recomb_build;
  220|       |
  221|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  222|       |
  223|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  224|      1|		_("Input"),
  225|      1|		_("Input image argument"),
  226|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  227|      1|		G_STRUCT_OFFSET(VipsRecomb, in));
  228|       |
  229|      1|	VIPS_ARG_IMAGE(class, "m", 102,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  230|      1|		_("M"),
  231|      1|		_("Matrix of coefficients"),
  232|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  233|      1|		G_STRUCT_OFFSET(VipsRecomb, m));
  234|      1|}

replicate.c:vips_replicate_class_init:
  182|      1|{
  183|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  184|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  185|       |
  186|      1|	VIPS_DEBUG_MSG("vips_replicate_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|       |
  188|      1|	gobject_class->set_property = vips_object_set_property;
  189|      1|	gobject_class->get_property = vips_object_get_property;
  190|       |
  191|      1|	vobject_class->nickname = "replicate";
  192|      1|	vobject_class->description = _("replicate an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  193|      1|	vobject_class->build = vips_replicate_build;
  194|       |
  195|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  196|      1|		_("Input"),
  197|      1|		_("Input image"),
  198|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  199|      1|		G_STRUCT_OFFSET(VipsReplicate, in));
  200|       |
  201|      1|	VIPS_ARG_INT(class, "across", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  202|      1|		_("Across"),
  203|      1|		_("Repeat this many times horizontally"),
  204|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  205|      1|		G_STRUCT_OFFSET(VipsReplicate, across),
  206|      1|		1, 1000000, 1);
  207|       |
  208|      1|	VIPS_ARG_INT(class, "down", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  209|      1|		_("Down"),
  210|      1|		_("Repeat this many times vertically"),
  211|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  212|      1|		G_STRUCT_OFFSET(VipsReplicate, down),
  213|      1|		1, 1000000, 1);
  214|      1|}

rot.c:vips_rot_class_init:
  351|      1|{
  352|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  353|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  354|       |
  355|      1|	VIPS_DEBUG_MSG("vips_rot_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  356|       |
  357|      1|	gobject_class->set_property = vips_object_set_property;
  358|      1|	gobject_class->get_property = vips_object_get_property;
  359|       |
  360|      1|	vobject_class->nickname = "rot";
  361|      1|	vobject_class->description = _("rotate an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  362|      1|	vobject_class->build = vips_rot_build;
  363|       |
  364|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  365|      1|		_("Input"),
  366|      1|		_("Input image"),
  367|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  368|      1|		G_STRUCT_OFFSET(VipsRot, in));
  369|       |
  370|      1|	VIPS_ARG_ENUM(class, "angle", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  371|      1|		_("Angle"),
  372|      1|		_("Angle to rotate image"),
  373|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  374|      1|		G_STRUCT_OFFSET(VipsRot, angle),
  375|      1|		VIPS_TYPE_ANGLE, VIPS_ANGLE_D90);
  376|      1|}

rot45.c:vips_rot45_class_init:
  254|      1|{
  255|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  257|       |
  258|      1|	VIPS_DEBUG_MSG("vips_rot45_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|       |
  260|      1|	gobject_class->set_property = vips_object_set_property;
  261|      1|	gobject_class->get_property = vips_object_get_property;
  262|       |
  263|      1|	vobject_class->nickname = "rot45";
  264|      1|	vobject_class->description = _("rotate an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  265|      1|	vobject_class->build = vips_rot45_build;
  266|       |
  267|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  268|      1|		_("Input"),
  269|      1|		_("Input image"),
  270|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  271|      1|		G_STRUCT_OFFSET(VipsRot45, in));
  272|       |
  273|      1|	VIPS_ARG_ENUM(class, "angle", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  274|      1|		_("Angle"),
  275|      1|		_("Angle to rotate image"),
  276|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  277|      1|		G_STRUCT_OFFSET(VipsRot45, angle),
  278|      1|		VIPS_TYPE_ANGLE45, VIPS_ANGLE45_D45);
  279|      1|}

scale.c:vips_scale_class_init:
  143|      1|{
  144|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  145|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  146|       |
  147|      1|	gobject_class->set_property = vips_object_set_property;
  148|      1|	gobject_class->get_property = vips_object_get_property;
  149|       |
  150|      1|	vobject_class->nickname = "scale";
  151|      1|	vobject_class->description = _("scale an image to uchar");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  152|      1|	vobject_class->build = vips_scale_build;
  153|       |
  154|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  155|      1|		_("Input"),
  156|      1|		_("Input image"),
  157|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  158|      1|		G_STRUCT_OFFSET(VipsScale, in));
  159|       |
  160|      1|	VIPS_ARG_BOOL(class, "log", 3,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  161|      1|		_("Log"),
  162|      1|		_("Log scale"),
  163|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  164|      1|		G_STRUCT_OFFSET(VipsScale, log),
  165|      1|		FALSE);
  166|       |
  167|      1|	VIPS_ARG_DOUBLE(class, "exp", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  168|      1|		_("Exponent"),
  169|      1|		_("Exponent for log scale"),
  170|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  171|      1|		G_STRUCT_OFFSET(VipsScale, exp),
  172|      1|		0.00001, 10000, 0.25);
  173|      1|}

vips_sequential:
  303|  17.8k|{
  304|  17.8k|	va_list ap;
  305|  17.8k|	int result;
  306|       |
  307|  17.8k|	va_start(ap, out);
  308|  17.8k|	result = vips_call_split("sequential", ap, in, out);
  309|  17.8k|	va_end(ap);
  310|       |
  311|  17.8k|	return result;
  312|  17.8k|}
sequential.c:vips_sequential_class_init:
  228|      1|{
  229|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  230|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|       |
  232|      1|	VIPS_DEBUG_MSG("vips_sequential_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|       |
  234|      1|	gobject_class->dispose = vips_sequential_dispose;
  235|      1|	gobject_class->set_property = vips_object_set_property;
  236|      1|	gobject_class->get_property = vips_object_get_property;
  237|       |
  238|      1|	vobject_class->nickname = "sequential";
  239|      1|	vobject_class->description = _("check sequential access");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  240|      1|	vobject_class->build = vips_sequential_build;
  241|       |
  242|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  243|      1|		_("Input"),
  244|      1|		_("Input image"),
  245|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  246|      1|		G_STRUCT_OFFSET(VipsSequential, in));
  247|       |
  248|      1|	VIPS_ARG_INT(class, "tile_height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  249|      1|		_("Tile height"),
  250|      1|		_("Tile height in pixels"),
  251|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  252|      1|		G_STRUCT_OFFSET(VipsSequential, tile_height),
  253|      1|		1, 1000000, 1);
  254|       |
  255|      1|	VIPS_ARG_ENUM(class, "access", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  256|      1|		_("Strategy"),
  257|      1|		_("Expected access pattern"),
  258|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  259|      1|		G_STRUCT_OFFSET(VipsSequential, access),
  260|      1|		VIPS_TYPE_ACCESS, VIPS_ACCESS_SEQUENTIAL);
  261|       |
  262|      1|	VIPS_ARG_BOOL(class, "trace", 2,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  263|      1|		_("Trace"),
  264|      1|		_("Trace pixel requests"),
  265|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  266|      1|		G_STRUCT_OFFSET(VipsSequential, trace),
  267|      1|		TRUE);
  268|      1|}
sequential.c:vips_sequential_dispose:
  106|  17.8k|{
  107|  17.8k|	VipsSequential *sequential = (VipsSequential *) gobject;
  108|       |
  109|  17.8k|	VIPS_FREEF(vips_g_mutex_free, sequential->lock);
  ------------------
  |  |   41|  17.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  17.8k|	{ \
  |  |   43|  17.8k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 17.8k, False: 0]
  |  |  ------------------
  |  |   44|  17.8k|			(void) F((S)); \
  |  |   45|  17.8k|			(S) = 0; \
  |  |   46|  17.8k|		} \
  |  |   47|  17.8k|	} \
  |  |   48|  17.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  110|       |
  111|  17.8k|	G_OBJECT_CLASS(vips_sequential_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  17.8k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  17.8k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  17.8k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  112|  17.8k|}
sequential.c:vips_sequential_build:
  188|  17.8k|{
  189|  17.8k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  17.8k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  17.8k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  17.8k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  17.8k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  190|  17.8k|	VipsSequential *sequential = (VipsSequential *) object;
  191|       |
  192|  17.8k|	VipsImage *t;
  193|       |
  194|  17.8k|	VIPS_DEBUG_MSG("vips_sequential_build\n");
  ------------------
  |  |   47|  17.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  17.8k|	{ \
  |  |   49|  17.8k|		; \
  |  |   50|  17.8k|	} \
  |  |   51|  17.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  195|       |
  196|  17.8k|	if (VIPS_OBJECT_CLASS(vips_sequential_parent_class)->build(object))
  ------------------
  |  |  435|  17.8k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  17.8k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  17.8k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (196:6): [True: 0, False: 17.8k]
  ------------------
  197|      0|		return -1;
  198|       |
  199|       |	/* We've gone forwards and backwards on sequential caches being
  200|       |	 * persistent. Persistent caches can be useful if you want to eg.
  201|       |	 * make several crop() operations on a seq image source, but they use
  202|       |	 * a lot of memory with eg. arrayjoin.
  203|       |	 *
  204|       |	 * On balance, if you want to make many crops from one source, use a
  205|       |	 * RANDOM image.
  206|       |	 */
  207|  17.8k|	if (vips_linecache(sequential->in, &t,
  ------------------
  |  Branch (207:6): [True: 0, False: 17.8k]
  ------------------
  208|  17.8k|			"tile_height", sequential->tile_height,
  209|  17.8k|			"access", VIPS_ACCESS_SEQUENTIAL,
  210|  17.8k|			NULL))
  211|      0|		return -1;
  212|       |
  213|  17.8k|	vips_object_local(object, t);
  ------------------
  |  |  698|  17.8k|	(g_signal_connect(V, "close", G_CALLBACK(vips_object_local_cb), G))
  |  |  ------------------
  |  |  |  |  491|  17.8k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  |  |  ------------------
  ------------------
  214|       |
  215|  17.8k|	if (vips_image_pipelinev(conversion->out,
  ------------------
  |  Branch (215:6): [True: 0, False: 17.8k]
  ------------------
  216|  17.8k|			VIPS_DEMAND_STYLE_THINSTRIP, t, NULL))
  217|      0|		return -1;
  218|  17.8k|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (218:6): [True: 0, False: 17.8k]
  ------------------
  219|  17.8k|			vips_start_one, vips_sequential_generate, vips_stop_one,
  220|  17.8k|			t, sequential))
  221|      0|		return -1;
  222|       |
  223|  17.8k|	return 0;
  224|  17.8k|}
sequential.c:vips_sequential_generate:
  117|  37.2k|{
  118|  37.2k|	VipsSequential *sequential = (VipsSequential *) b;
  119|  37.2k|	VipsRect *r = &out_region->valid;
  120|  37.2k|	VipsRegion *ir = (VipsRegion *) seq;
  121|       |
  122|       |	/*
  123|       |	printf("vips_sequential_generate %p: request for line %d, height %d\n",
  124|       |		sequential, r->top, r->height);
  125|       |	 */
  126|       |
  127|  37.2k|	VIPS_GATE_START("vips_sequential_generate: wait");
  ------------------
  |  |   41|  37.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  37.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  37.2k|	{ \
  |  |   43|  37.2k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 37.2k]
  |  |  ------------------
  |  |   44|  37.2k|			vips__thread_gate_start(NAME); \
  |  |   45|  37.2k|	} \
  |  |   46|  37.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  37.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  128|       |
  129|  37.2k|	vips__worker_lock(sequential->lock);
  130|       |
  131|  37.2k|	VIPS_GATE_STOP("vips_sequential_generate: wait");
  ------------------
  |  |   49|  37.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  37.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  37.2k|	{ \
  |  |   51|  37.2k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 37.2k]
  |  |  ------------------
  |  |   52|  37.2k|			vips__thread_gate_stop(NAME); \
  |  |   53|  37.2k|	} \
  |  |   54|  37.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  37.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|       |
  133|       |	/* If we've seen an error, everything must stop.
  134|       |	 */
  135|  37.2k|	if (sequential->error) {
  ------------------
  |  Branch (135:6): [True: 0, False: 37.2k]
  ------------------
  136|      0|		g_mutex_unlock(sequential->lock);
  137|      0|		return -1;
  138|      0|	}
  139|       |
  140|  37.2k|	if (r->top > sequential->y_pos) {
  ------------------
  |  Branch (140:6): [True: 0, False: 37.2k]
  ------------------
  141|       |		/* This is a request for something some way down the image.
  142|       |		 * Probably the operation is something like extract_area and
  143|       |		 * we should skip the initial part of the image. In fact,
  144|       |		 * we read to cache, since it may be useful.
  145|       |		 *
  146|       |		 * Read in chunks, since we may be skipping *many* lines of image from
  147|       |		 * a file source.
  148|       |		 */
  149|      0|		int y;
  150|       |
  151|      0|		for (y = sequential->y_pos; y < r->top; y += sequential->tile_height) {
  ------------------
  |  Branch (151:31): [True: 0, False: 0]
  ------------------
  152|      0|			VipsRect area;
  153|       |
  154|      0|			area.left = 0;
  155|      0|			area.top = y;
  156|      0|			area.width = 1;
  157|      0|			area.height = VIPS_MIN(sequential->tile_height, r->top - area.top);
  ------------------
  |  |   55|      0|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  158|      0|			if (vips_region_prepare(ir, &area)) {
  ------------------
  |  Branch (158:8): [True: 0, False: 0]
  ------------------
  159|      0|				sequential->error = -1;
  160|      0|				g_mutex_unlock(sequential->lock);
  161|      0|				return -1;
  162|      0|			}
  163|       |
  164|      0|			sequential->y_pos += area.height;
  165|      0|		}
  166|      0|	}
  167|       |
  168|       |	/* This is a request for old pixels, or for pixels exactly at the read
  169|       |	 * point. This might trigger a generate from the thing feeding the cache,
  170|       |	 * eg. a loader.
  171|       |	 */
  172|  37.2k|	if (vips_region_prepare(ir, r) ||
  ------------------
  |  Branch (172:6): [True: 10.7k, False: 26.4k]
  ------------------
  173|  37.2k|		vips_region_region(out_region, ir, r, r->left, r->top)) {
  ------------------
  |  Branch (173:3): [True: 0, False: 26.4k]
  ------------------
  174|  10.7k|		sequential->error = -1;
  175|  10.7k|		g_mutex_unlock(sequential->lock);
  176|  10.7k|		return -1;
  177|  10.7k|	}
  178|       |
  179|  26.4k|	sequential->y_pos = VIPS_MAX(sequential->y_pos, VIPS_RECT_BOTTOM(r));
  ------------------
  |  |   54|  26.4k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 26.4k]
  |  |  ------------------
  ------------------
  180|       |
  181|  26.4k|	g_mutex_unlock(sequential->lock);
  182|       |
  183|  26.4k|	return 0;
  184|  37.2k|}
sequential.c:vips_sequential_init:
  272|  17.8k|{
  273|  17.8k|	sequential->lock = vips_g_mutex_new();
  274|  17.8k|	sequential->tile_height = 1;
  275|  17.8k|	sequential->error = 0;
  276|  17.8k|	sequential->trace = FALSE;
  ------------------
  |  |  794|  17.8k|#define	FALSE	(0)
  ------------------
  277|  17.8k|}

smartcrop.c:vips_smartcrop_class_init:
  419|      1|{
  420|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  421|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  422|       |
  423|      1|	VIPS_DEBUG_MSG("vips_smartcrop_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  424|       |
  425|      1|	gobject_class->set_property = vips_object_set_property;
  426|      1|	gobject_class->get_property = vips_object_get_property;
  427|       |
  428|      1|	vobject_class->nickname = "smartcrop";
  429|      1|	vobject_class->description = _("extract an area from an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  430|      1|	vobject_class->build = vips_smartcrop_build;
  431|       |
  432|      1|	VIPS_ARG_IMAGE(class, "input", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  433|      1|		_("Input"),
  434|      1|		_("Input image"),
  435|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  436|      1|		G_STRUCT_OFFSET(VipsSmartcrop, in));
  437|       |
  438|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  439|      1|		_("Width"),
  440|      1|		_("Width of extract area"),
  441|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  442|      1|		G_STRUCT_OFFSET(VipsSmartcrop, width),
  443|      1|		1, VIPS_MAX_COORD, 1);
  444|       |
  445|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  446|      1|		_("Height"),
  447|      1|		_("Height of extract area"),
  448|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  449|      1|		G_STRUCT_OFFSET(VipsSmartcrop, height),
  450|      1|		1, VIPS_MAX_COORD, 1);
  451|       |
  452|      1|	VIPS_ARG_ENUM(class, "interesting", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  453|      1|		_("Interesting"),
  454|      1|		_("How to measure interestingness"),
  455|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  456|      1|		G_STRUCT_OFFSET(VipsSmartcrop, interesting),
  457|      1|		VIPS_TYPE_INTERESTING, VIPS_INTERESTING_ATTENTION);
  458|       |
  459|      1|	VIPS_ARG_INT(class, "attention_x", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  460|      1|		_("Attention x"),
  461|      1|		_("Horizontal position of attention centre"),
  462|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  463|      1|		G_STRUCT_OFFSET(VipsSmartcrop, attention_x),
  464|      1|		0, VIPS_MAX_COORD, 0);
  465|       |
  466|      1|	VIPS_ARG_INT(class, "attention_y", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  467|      1|		_("Attention y"),
  468|      1|		_("Vertical position of attention centre"),
  469|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  470|      1|		G_STRUCT_OFFSET(VipsSmartcrop, attention_y),
  471|      1|		0, VIPS_MAX_COORD, 0);
  472|       |
  473|      1|	VIPS_ARG_BOOL(class, "premultiplied", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  474|      1|		_("Premultiplied"),
  475|      1|		_("Input image already has premultiplied alpha"),
  476|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  477|      1|		G_STRUCT_OFFSET(VipsSmartcrop, premultiplied),
  478|      1|		FALSE);
  479|      1|}

subsample.c:vips_subsample_class_init:
  251|      1|{
  252|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|       |
  255|      1|	gobject_class->set_property = vips_object_set_property;
  256|      1|	gobject_class->get_property = vips_object_get_property;
  257|       |
  258|      1|	vobject_class->nickname = "subsample";
  259|      1|	vobject_class->description = _("subsample an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  260|      1|	vobject_class->build = vips_subsample_build;
  261|       |
  262|       |	/* We don't work well as sequential: we can easily skip the first few
  263|       |	 * scanlines, and that confuses vips_sequential().
  264|       |	 */
  265|       |
  266|      1|	VIPS_ARG_IMAGE(class, "input", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  267|      1|		_("Input"),
  268|      1|		_("Input image"),
  269|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  270|      1|		G_STRUCT_OFFSET(VipsSubsample, in));
  271|       |
  272|      1|	VIPS_ARG_INT(class, "xfac", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  273|      1|		_("Xfac"),
  274|      1|		_("Horizontal subsample factor"),
  275|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  276|      1|		G_STRUCT_OFFSET(VipsSubsample, xfac),
  277|      1|		1, VIPS_MAX_COORD, 1);
  278|       |
  279|      1|	VIPS_ARG_INT(class, "yfac", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  280|      1|		_("Yfac"),
  281|      1|		_("Vertical subsample factor"),
  282|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  283|      1|		G_STRUCT_OFFSET(VipsSubsample, yfac),
  284|      1|		1, VIPS_MAX_COORD, 1);
  285|       |
  286|      1|	VIPS_ARG_BOOL(class, "point", 5,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  287|      1|		_("Point"),
  288|      1|		_("Point sample"),
  289|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  290|      1|		G_STRUCT_OFFSET(VipsSubsample, point),
  291|      1|		FALSE);
  292|      1|}

switch.c:vips_switch_class_init:
  179|      1|{
  180|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  181|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  182|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  183|       |
  184|      1|	gobject_class->set_property = vips_object_set_property;
  185|      1|	gobject_class->get_property = vips_object_get_property;
  186|       |
  187|      1|	object_class->nickname = "switch";
  188|      1|	object_class->description =
  189|      1|		_("find the index of the first non-zero pixel in tests");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  190|      1|	object_class->build = vips_switch_build;
  191|       |
  192|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  193|       |
  194|      1|	VIPS_ARG_BOXED(class, "tests", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  195|      1|		_("Tests"),
  196|      1|		_("Table of images to test"),
  197|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  198|      1|		G_STRUCT_OFFSET(VipsSwitch, tests),
  199|      1|		VIPS_TYPE_ARRAY_IMAGE);
  200|       |
  201|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  202|      1|		_("Output"),
  203|      1|		_("Output image"),
  204|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  205|      1|		G_STRUCT_OFFSET(VipsSwitch, out));
  206|      1|}

vips_tilecache:
  864|  1.40k|{
  865|  1.40k|	va_list ap;
  866|  1.40k|	int result;
  867|       |
  868|  1.40k|	va_start(ap, out);
  869|  1.40k|	result = vips_call_split("tilecache", ap, in, out);
  870|  1.40k|	va_end(ap);
  871|       |
  872|  1.40k|	return result;
  873|  1.40k|}
vips_linecache:
 1031|  17.8k|{
 1032|  17.8k|	va_list ap;
 1033|  17.8k|	int result;
 1034|       |
 1035|  17.8k|	va_start(ap, out);
 1036|  17.8k|	result = vips_call_split("linecache", ap, in, out);
 1037|  17.8k|	va_end(ap);
 1038|       |
 1039|  17.8k|	return result;
 1040|  17.8k|}
tilecache.c:vips_block_cache_class_init:
  380|      1|{
  381|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  382|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  383|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  384|       |
  385|      1|	VIPS_DEBUG_MSG("vips_block_cache_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  386|       |
  387|      1|	gobject_class->dispose = vips_block_cache_dispose;
  388|      1|	gobject_class->set_property = vips_object_set_property;
  389|      1|	gobject_class->get_property = vips_object_get_property;
  390|       |
  391|      1|	vobject_class->nickname = "blockcache";
  392|      1|	vobject_class->description = _("cache an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  393|      1|	vobject_class->build = vips_block_cache_build;
  394|       |
  395|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  396|       |
  397|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  398|      1|		_("Input"),
  399|      1|		_("Input image"),
  400|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  401|      1|		G_STRUCT_OFFSET(VipsBlockCache, in));
  402|       |
  403|      1|	VIPS_ARG_INT(class, "tile_height", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  404|      1|		_("Tile height"),
  405|      1|		_("Tile height in pixels"),
  406|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  407|      1|		G_STRUCT_OFFSET(VipsBlockCache, tile_height),
  408|      1|		1, 1000000, 128);
  409|       |
  410|      1|	VIPS_ARG_ENUM(class, "access", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  411|      1|		_("Access"),
  412|      1|		_("Expected access pattern"),
  413|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  414|      1|		G_STRUCT_OFFSET(VipsBlockCache, access),
  415|      1|		VIPS_TYPE_ACCESS, VIPS_ACCESS_RANDOM);
  416|       |
  417|      1|	VIPS_ARG_BOOL(class, "threaded", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  418|      1|		_("Threaded"),
  419|      1|		_("Allow threaded access"),
  420|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  421|      1|		G_STRUCT_OFFSET(VipsBlockCache, threaded),
  422|      1|		FALSE);
  423|       |
  424|      1|	VIPS_ARG_BOOL(class, "persistent", 8,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  425|      1|		_("Persistent"),
  426|      1|		_("Keep cache between evaluations"),
  427|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  428|      1|		G_STRUCT_OFFSET(VipsBlockCache, persistent),
  429|      1|		FALSE);
  430|      1|}
tilecache.c:vips_block_cache_dispose:
  157|  19.2k|{
  158|  19.2k|	VipsBlockCache *cache = (VipsBlockCache *) gobject;
  159|       |
  160|  19.2k|	vips_block_cache_drop_all(cache);
  161|  19.2k|	VIPS_FREEF(vips_g_mutex_free, cache->lock);
  ------------------
  |  |   41|  19.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  19.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  19.2k|	{ \
  |  |   43|  19.2k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 19.2k, False: 0]
  |  |  ------------------
  |  |   44|  19.2k|			(void) F((S)); \
  |  |   45|  19.2k|			(S) = 0; \
  |  |   46|  19.2k|		} \
  |  |   47|  19.2k|	} \
  |  |   48|  19.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  19.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  162|  19.2k|	VIPS_FREEF(vips_g_cond_free, cache->new_tile);
  ------------------
  |  |   41|  19.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  19.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  19.2k|	{ \
  |  |   43|  19.2k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 19.2k, False: 0]
  |  |  ------------------
  |  |   44|  19.2k|			(void) F((S)); \
  |  |   45|  19.2k|			(S) = 0; \
  |  |   46|  19.2k|		} \
  |  |   47|  19.2k|	} \
  |  |   48|  19.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  19.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|       |
  164|  19.2k|	if (cache->tiles)
  ------------------
  |  Branch (164:6): [True: 19.2k, False: 0]
  ------------------
  165|  19.2k|		g_assert(g_hash_table_size(cache->tiles) == 0);
  ------------------
  |  |  166|  19.2k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  19.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  19.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|  19.2k|	VIPS_FREEF(g_hash_table_destroy, cache->tiles);
  ------------------
  |  |   41|  19.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  19.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  19.2k|	{ \
  |  |   43|  19.2k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 19.2k, False: 0]
  |  |  ------------------
  |  |   44|  19.2k|			(void) F((S)); \
  |  |   45|  19.2k|			(S) = 0; \
  |  |   46|  19.2k|		} \
  |  |   47|  19.2k|	} \
  |  |   48|  19.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  19.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|  19.2k|	VIPS_FREEF(g_queue_free, cache->recycle);
  ------------------
  |  |   41|  19.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  19.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  19.2k|	{ \
  |  |   43|  19.2k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 19.2k, False: 0]
  |  |  ------------------
  |  |   44|  19.2k|			(void) F((S)); \
  |  |   45|  19.2k|			(S) = 0; \
  |  |   46|  19.2k|		} \
  |  |   47|  19.2k|	} \
  |  |   48|  19.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  19.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|       |
  169|  19.2k|	G_OBJECT_CLASS(vips_block_cache_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  19.2k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  19.2k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  19.2k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|  19.2k|}
tilecache.c:vips_block_cache_drop_all:
  147|  19.2k|{
  148|       |	/* FIXME this is a disaster if active threads are working on tiles. We
  149|       |	 * should have something to block new requests, and only dispose once
  150|       |	 * all tiles are unreffed.
  151|       |	 */
  152|  19.2k|	g_hash_table_remove_all(cache->tiles);
  153|  19.2k|}
tilecache.c:vips_block_cache_build:
  357|  19.2k|{
  358|  19.2k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  19.2k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  19.2k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  19.2k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  19.2k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  359|  19.2k|	VipsBlockCache *cache = (VipsBlockCache *) object;
  360|       |
  361|  19.2k|	VIPS_DEBUG_MSG("vips_block_cache_build:\n");
  ------------------
  |  |   47|  19.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  19.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  19.2k|	{ \
  |  |   49|  19.2k|		; \
  |  |   50|  19.2k|	} \
  |  |   51|  19.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  19.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  362|       |
  363|  19.2k|	if (VIPS_OBJECT_CLASS(vips_block_cache_parent_class)->build(object))
  ------------------
  |  |  435|  19.2k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  19.2k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  19.2k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (363:6): [True: 0, False: 19.2k]
  ------------------
  364|      0|		return -1;
  365|       |
  366|  19.2k|	VIPS_DEBUG_MSG("vips_block_cache_build: max size = %g MB\n",
  ------------------
  |  |   47|  19.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  19.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  19.2k|	{ \
  |  |   49|  19.2k|		; \
  |  |   50|  19.2k|	} \
  |  |   51|  19.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  19.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  367|  19.2k|		(cache->max_tiles * cache->tile_width * cache->tile_height *
  368|  19.2k|			VIPS_IMAGE_SIZEOF_PEL(cache->in)) /
  369|  19.2k|			(1024 * 1024.0));
  370|       |
  371|  19.2k|	if (!cache->persistent)
  ------------------
  |  Branch (371:6): [True: 19.2k, False: 0]
  ------------------
  372|  19.2k|		g_signal_connect(conversion->out, "minimise",
  ------------------
  |  |  491|  19.2k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  373|  19.2k|			G_CALLBACK(vips_block_cache_minimise), cache);
  374|       |
  375|  19.2k|	return 0;
  376|  19.2k|}
tilecache.c:vips_block_cache_minimise:
  342|  38.5k|{
  343|  38.5k|	VIPS_DEBUG_MSG("vips_block_cache_minimise:\n");
  ------------------
  |  |   47|  38.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  38.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  38.5k|	{ \
  |  |   49|  38.5k|		; \
  |  |   50|  38.5k|	} \
  |  |   51|  38.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  38.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  344|       |
  345|  38.5k|	g_mutex_lock(cache->lock);
  346|       |
  347|       |	/* We can't drop tiles that are in use.
  348|       |	 */
  349|  38.5k|	g_hash_table_foreach_remove(cache->tiles,
  350|  38.5k|		vips_tile_unlocked, NULL);
  351|       |
  352|  38.5k|	g_mutex_unlock(cache->lock);
  353|  38.5k|}
tilecache.c:vips_tile_unlocked:
  334|   186k|{
  335|   186k|	VipsTile *tile = (VipsTile *) value;
  336|       |
  337|   186k|	return !tile->ref_count;
  338|   186k|}
tilecache.c:vips_block_cache_init:
  476|  19.2k|{
  477|  19.2k|	cache->tile_width = 128;
  478|  19.2k|	cache->tile_height = 128;
  479|  19.2k|	cache->max_tiles = 1000;
  480|  19.2k|	cache->access = VIPS_ACCESS_RANDOM;
  481|  19.2k|	cache->threaded = FALSE;
  ------------------
  |  |  794|  19.2k|#define	FALSE	(0)
  ------------------
  482|  19.2k|	cache->persistent = FALSE;
  ------------------
  |  |  794|  19.2k|#define	FALSE	(0)
  ------------------
  483|       |
  484|  19.2k|	cache->lock = vips_g_mutex_new();
  485|  19.2k|	cache->new_tile = vips_g_cond_new();
  486|  19.2k|	cache->tiles = g_hash_table_new_full(
  487|  19.2k|		(GHashFunc) vips_rect_hash,
  488|  19.2k|		(GEqualFunc) vips_rect_equal,
  489|  19.2k|		NULL,
  490|  19.2k|		(GDestroyNotify) vips_tile_destroy);
  491|  19.2k|	cache->recycle = g_queue_new();
  492|  19.2k|}
tilecache.c:vips_rect_hash:
  434|   380k|{
  435|   380k|	guint hash;
  436|       |
  437|       |	/* We could shift down by the tile size?
  438|       |	 *
  439|       |	 * X discrimination is more important than Y, since
  440|       |	 * most tiles will have a similar Y.
  441|       |	 */
  442|   380k|	hash = (guint) pos->left ^ ((guint) pos->top << 16);
  443|       |
  444|   380k|	return hash;
  445|   380k|}
tilecache.c:vips_rect_equal:
  449|  7.77k|{
  450|  7.77k|	return a->left == b->left && a->top == b->top;
  ------------------
  |  Branch (450:9): [True: 7.77k, False: 0]
  |  Branch (450:31): [True: 7.77k, False: 0]
  ------------------
  451|  7.77k|}
tilecache.c:vips_tile_destroy:
  455|   186k|{
  456|   186k|	VipsBlockCache *cache = tile->cache;
  457|       |
  458|   186k|	VIPS_DEBUG_MSG_RED("vips_tile_destroy: tile %d, %d (%p)\n",
  ------------------
  |  |   63|   186k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   186k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|   186k|	{ \
  |  |   65|   186k|		; \
  |  |   66|   186k|	} \
  |  |   67|   186k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   186k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  459|   186k|		tile->pos.left, tile->pos.top, tile);
  460|       |
  461|       |	/* 0 ref tiles should be on the recycle list.
  462|       |	 */
  463|   186k|	g_assert(tile->ref_count == 0);
  ------------------
  |  |  166|   186k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   186k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   186k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  464|   186k|	g_assert(g_queue_find(tile->cache->recycle, tile));
  ------------------
  |  |  166|   186k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   186k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   186k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  465|   186k|	g_queue_remove(cache->recycle, tile);
  466|       |
  467|   186k|	tile->cache = NULL;
  468|       |
  469|   186k|	VIPS_UNREF(tile->region);
  ------------------
  |  |   57|   186k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|   186k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   186k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   186k|	{ \
  |  |  |  |   43|   186k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 186k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|   186k|			(void) F((S)); \
  |  |  |  |   45|   186k|			(S) = 0; \
  |  |  |  |   46|   186k|		} \
  |  |  |  |   47|   186k|	} \
  |  |  |  |   48|   186k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   186k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|       |
  471|   186k|	g_free(tile);
  472|   186k|}
tilecache.c:vips_tile_cache_class_init:
  786|      1|{
  787|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  788|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  789|       |
  790|      1|	VIPS_DEBUG_MSG("vips_tile_cache_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  791|       |
  792|      1|	gobject_class->set_property = vips_object_set_property;
  793|      1|	gobject_class->get_property = vips_object_get_property;
  794|       |
  795|      1|	vobject_class->nickname = "tilecache";
  796|      1|	vobject_class->description = _("cache an image as a set of tiles");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  797|      1|	vobject_class->build = vips_tile_cache_build;
  798|       |
  799|      1|	VIPS_ARG_INT(class, "tile_width", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  800|      1|		_("Tile width"),
  801|      1|		_("Tile width in pixels"),
  802|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  803|      1|		G_STRUCT_OFFSET(VipsBlockCache, tile_width),
  804|      1|		1, 1000000, 128);
  805|       |
  806|      1|	VIPS_ARG_INT(class, "max_tiles", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  807|      1|		_("Max tiles"),
  808|      1|		_("Maximum number of tiles to cache"),
  809|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  810|      1|		G_STRUCT_OFFSET(VipsBlockCache, max_tiles),
  811|      1|		-1, 1000000, 1000);
  812|      1|}
tilecache.c:vips_tile_cache_build:
  759|  1.40k|{
  760|  1.40k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  1.40k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  1.40k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.40k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  1.40k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  761|  1.40k|	VipsBlockCache *block_cache = (VipsBlockCache *) object;
  762|  1.40k|	VipsTileCache *cache = (VipsTileCache *) object;
  763|       |
  764|  1.40k|	VIPS_DEBUG_MSG("vips_tile_cache_build\n");
  ------------------
  |  |   47|  1.40k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.40k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  1.40k|	{ \
  |  |   49|  1.40k|		; \
  |  |   50|  1.40k|	} \
  |  |   51|  1.40k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.40k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  765|       |
  766|  1.40k|	if (VIPS_OBJECT_CLASS(vips_tile_cache_parent_class)->build(object))
  ------------------
  |  |  435|  1.40k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.40k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.40k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (766:6): [True: 0, False: 1.40k]
  ------------------
  767|      0|		return -1;
  768|       |
  769|  1.40k|	if (vips_image_pio_input(block_cache->in))
  ------------------
  |  Branch (769:6): [True: 0, False: 1.40k]
  ------------------
  770|      0|		return -1;
  771|       |
  772|  1.40k|	if (vips_image_pipelinev(conversion->out,
  ------------------
  |  Branch (772:6): [True: 0, False: 1.40k]
  ------------------
  773|  1.40k|			VIPS_DEMAND_STYLE_SMALLTILE, block_cache->in, NULL))
  774|      0|		return -1;
  775|       |
  776|  1.40k|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (776:6): [True: 0, False: 1.40k]
  ------------------
  777|  1.40k|			vips_start_one, vips_tile_cache_gen, vips_stop_one,
  778|  1.40k|			block_cache->in, cache))
  779|      0|		return -1;
  780|       |
  781|  1.40k|	return 0;
  782|  1.40k|}
tilecache.c:vips_tile_cache_gen:
  604|  38.6k|{
  605|  38.6k|	VipsRegion *in = (VipsRegion *) seq;
  606|  38.6k|	VipsBlockCache *cache = (VipsBlockCache *) b;
  607|  38.6k|	VipsRect *r = &out_region->valid;
  608|       |
  609|  38.6k|	VipsTile *tile;
  610|  38.6k|	GSList *work;
  611|  38.6k|	GSList *p;
  612|  38.6k|	int result;
  613|       |
  614|  38.6k|	result = 0;
  615|       |
  616|  38.6k|	VIPS_GATE_START("vips_tile_cache_gen: wait1");
  ------------------
  |  |   41|  38.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  38.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  38.6k|	{ \
  |  |   43|  38.6k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 38.6k]
  |  |  ------------------
  |  |   44|  38.6k|			vips__thread_gate_start(NAME); \
  |  |   45|  38.6k|	} \
  |  |   46|  38.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  38.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  617|       |
  618|  38.6k|	vips__worker_lock(cache->lock);
  619|       |
  620|  38.6k|	VIPS_GATE_STOP("vips_tile_cache_gen: wait1");
  ------------------
  |  |   49|  38.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  38.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  38.6k|	{ \
  |  |   51|  38.6k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 38.6k]
  |  |  ------------------
  |  |   52|  38.6k|			vips__thread_gate_stop(NAME); \
  |  |   53|  38.6k|	} \
  |  |   54|  38.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  38.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  621|       |
  622|  38.6k|	VIPS_DEBUG_MSG_RED(
  ------------------
  |  |   63|  38.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  38.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|  38.6k|	{ \
  |  |   65|  38.6k|		; \
  |  |   66|  38.6k|	} \
  |  |   67|  38.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  38.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  623|  38.6k|		"vips_tile_cache_gen: "
  624|  38.6k|		"left = %d, top = %d, width = %d, height = %d\n",
  625|  38.6k|		r->left, r->top, r->width, r->height);
  626|       |
  627|       |	/* Ref all the tiles we will need.
  628|       |	 */
  629|  38.6k|	work = vips_tile_cache_ref(cache, r);
  630|       |
  631|   263k|	while (work) {
  ------------------
  |  Branch (631:9): [True: 224k, False: 38.6k]
  ------------------
  632|       |		/* Search for data tiles: easy, we can just paste those in.
  633|       |		 */
  634|   418k|		for (;;) {
  635|  1.79M|			for (p = work; p; p = p->next) {
  ------------------
  |  Branch (635:19): [True: 1.56M, False: 224k]
  ------------------
  636|  1.56M|				tile = (VipsTile *) p->data;
  637|       |
  638|  1.56M|				if (tile->state == VIPS_TILE_STATE_DATA)
  ------------------
  |  Branch (638:9): [True: 193k, False: 1.37M]
  ------------------
  639|   193k|					break;
  640|  1.56M|			}
  641|       |
  642|   418k|			if (!p)
  ------------------
  |  Branch (642:8): [True: 224k, False: 193k]
  ------------------
  643|   224k|				break;
  644|       |
  645|   418k|			VIPS_DEBUG_MSG_RED(
  ------------------
  |  |   63|   193k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   193k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|   193k|	{ \
  |  |   65|   193k|		; \
  |  |   66|   193k|	} \
  |  |   67|   418k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   418k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  646|   193k|				"vips_tile_cache_gen: pasting %p\n",
  647|   193k|				tile);
  648|       |
  649|   193k|			vips_tile_paste(tile, out_region);
  650|       |
  651|       |			/* We're done with this tile.
  652|       |			 */
  653|   193k|			work = g_slist_remove(work, tile);
  654|   193k|			vips_tile_unref(tile);
  655|   193k|		}
  656|       |
  657|       |		/* Calculate the first PEND tile we find on the work list. We
  658|       |		 * don't calculate all PEND tiles since after the first, more
  659|       |		 * DATA tiles might heve been made available by other threads
  660|       |		 * and we want to get them out of the way as soon as we can.
  661|       |		 */
  662|   224k|		for (p = work; p; p = p->next) {
  ------------------
  |  Branch (662:18): [True: 186k, False: 38.6k]
  ------------------
  663|   186k|			tile = (VipsTile *) p->data;
  664|       |
  665|   186k|			if (tile->state == VIPS_TILE_STATE_PEND) {
  ------------------
  |  Branch (665:8): [True: 186k, False: 0]
  ------------------
  666|   186k|				tile->state = VIPS_TILE_STATE_CALC;
  667|       |
  668|   186k|				VIPS_DEBUG_MSG_RED(
  ------------------
  |  |   63|   186k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   186k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|   186k|	{ \
  |  |   65|   186k|		; \
  |  |   66|   186k|	} \
  |  |   67|   186k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   186k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  669|   186k|					"vips_tile_cache_gen: calc of %p\n",
  670|   186k|					tile);
  671|       |
  672|       |				/* In threaded mode, we let other threads run
  673|       |				 * while we calc this tile. In non-threaded
  674|       |				 * mode, we keep the lock and make 'em wait.
  675|       |				 */
  676|   186k|				if (cache->threaded)
  ------------------
  |  Branch (676:9): [True: 18.4k, False: 167k]
  ------------------
  677|  18.4k|					g_mutex_unlock(cache->lock);
  678|       |
  679|       |				/* Don't compute if we've seen an error
  680|       |				 * previously.
  681|       |				 */
  682|   186k|				if (!result)
  ------------------
  |  Branch (682:9): [True: 78.5k, False: 107k]
  ------------------
  683|  78.5k|					result = vips_region_prepare_to(in,
  684|  78.5k|						tile->region,
  685|  78.5k|						&tile->pos,
  686|  78.5k|						tile->pos.left, tile->pos.top);
  687|       |
  688|   186k|				if (cache->threaded) {
  ------------------
  |  Branch (688:9): [True: 18.4k, False: 167k]
  ------------------
  689|  18.4k|					VIPS_GATE_START("vips_tile_cache_gen: wait2");
  ------------------
  |  |   41|  18.4k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  18.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  18.4k|	{ \
  |  |   43|  18.4k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 18.4k]
  |  |  ------------------
  |  |   44|  18.4k|			vips__thread_gate_start(NAME); \
  |  |   45|  18.4k|	} \
  |  |   46|  18.4k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  18.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  690|       |
  691|  18.4k|					g_mutex_lock(cache->lock);
  692|       |
  693|  18.4k|					VIPS_GATE_STOP("vips_tile_cache_gen: wait2");
  ------------------
  |  |   49|  18.4k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  18.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  18.4k|	{ \
  |  |   51|  18.4k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 18.4k]
  |  |  ------------------
  |  |   52|  18.4k|			vips__thread_gate_stop(NAME); \
  |  |   53|  18.4k|	} \
  |  |   54|  18.4k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  18.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  694|  18.4k|				}
  695|       |
  696|       |				/* If there was an error calculating this
  697|       |				 * tile, black it out and terminate
  698|       |				 * calculation. We have to stop so we can
  699|       |				 * support things like --fail on jpegload.
  700|       |				 *
  701|       |				 * Don't return early, we'd deadlock.
  702|       |				 */
  703|   186k|				if (result) {
  ------------------
  |  Branch (703:9): [True: 118k, False: 67.6k]
  ------------------
  704|   118k|					VIPS_DEBUG_MSG_RED(
  ------------------
  |  |   63|   118k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   118k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|   118k|	{ \
  |  |   65|   118k|		; \
  |  |   66|   118k|	} \
  |  |   67|   118k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   118k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  705|   118k|						"vips_tile_cache_gen: error on tile %p\n",
  706|   118k|						tile);
  707|       |
  708|   118k|					g_warning(_("error in tile %d x %d"),
  ------------------
  |  |  338|   118k|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|   118k|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|   118k|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|   118k|                               __VA_ARGS__)
  ------------------
  709|   118k|						tile->pos.left, tile->pos.top);
  710|       |
  711|   118k|					vips_region_black(tile->region);
  712|       |
  713|   118k|					*stop = TRUE;
  ------------------
  |  |  798|   118k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   118k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  714|   118k|				}
  715|       |
  716|   186k|				tile->state = VIPS_TILE_STATE_DATA;
  717|       |
  718|       |				/* Let everyone know there's a new DATA tile.
  719|       |				 * They need to all check their work lists.
  720|       |				 */
  721|   186k|				g_cond_broadcast(cache->new_tile);
  722|       |
  723|   186k|				break;
  724|   186k|			}
  725|   186k|		}
  726|       |
  727|       |		/* There are no PEND or DATA tiles, we must need a tile some
  728|       |		 * other thread is currently calculating.
  729|       |		 *
  730|       |		 * We must block until the CALC tiles we need are done.
  731|       |		 */
  732|   224k|		if (!p &&
  ------------------
  |  Branch (732:7): [True: 38.6k, False: 186k]
  ------------------
  733|   224k|			work) {
  ------------------
  |  Branch (733:4): [True: 0, False: 38.6k]
  ------------------
  734|      0|			for (p = work; p; p = p->next) {
  ------------------
  |  Branch (734:19): [True: 0, False: 0]
  ------------------
  735|      0|				tile = (VipsTile *) p->data;
  736|       |
  737|      0|				g_assert(tile->state == VIPS_TILE_STATE_CALC);
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  738|      0|			}
  739|       |
  740|      0|			VIPS_DEBUG_MSG_RED("vips_tile_cache_gen: waiting\n");
  ------------------
  |  |   63|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|      0|	{ \
  |  |   65|      0|		; \
  |  |   66|      0|	} \
  |  |   67|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  741|       |
  742|      0|			VIPS_GATE_START("vips_tile_cache_gen: wait3");
  ------------------
  |  |   41|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      0|	{ \
  |  |   43|      0|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   44|      0|			vips__thread_gate_start(NAME); \
  |  |   45|      0|	} \
  |  |   46|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  743|       |
  744|      0|			vips__worker_cond_wait(cache->new_tile, cache->lock);
  745|       |
  746|      0|			VIPS_GATE_STOP("vips_tile_cache_gen: wait3");
  ------------------
  |  |   49|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|      0|	{ \
  |  |   51|      0|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   52|      0|			vips__thread_gate_stop(NAME); \
  |  |   53|      0|	} \
  |  |   54|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  747|       |
  748|      0|			VIPS_DEBUG_MSG("vips_tile_cache_gen: awake!\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|      0|		}
  750|   224k|	}
  751|       |
  752|  38.6k|	g_mutex_unlock(cache->lock);
  753|       |
  754|  38.6k|	return result;
  755|  38.6k|}
tilecache.c:vips_tile_cache_ref:
  549|  38.6k|{
  550|  38.6k|	const int tw = cache->tile_width;
  551|  38.6k|	const int th = cache->tile_height;
  552|       |
  553|       |	/* Find top left of tiles we need.
  554|       |	 */
  555|  38.6k|	const int xs = (r->left / tw) * tw;
  556|  38.6k|	const int ys = (r->top / th) * th;
  557|       |
  558|  38.6k|	GSList *work;
  559|  38.6k|	VipsTile *tile;
  560|  38.6k|	int x, y;
  561|       |
  562|       |	/* Ref all the tiles we will need.
  563|       |	 */
  564|  38.6k|	work = NULL;
  565|   217k|	for (y = ys; y < VIPS_RECT_BOTTOM(r); y += th)
  ------------------
  |  |   49|   217k|#define VIPS_RECT_BOTTOM(R) ((R)->top + (R)->height)
  ------------------
  |  Branch (565:15): [True: 179k, False: 38.6k]
  ------------------
  566|   373k|		for (x = xs; x < VIPS_RECT_RIGHT(r); x += tw) {
  ------------------
  |  |   48|   373k|#define VIPS_RECT_RIGHT(R) ((R)->left + (R)->width)
  ------------------
  |  Branch (566:16): [True: 193k, False: 179k]
  ------------------
  567|   193k|			if (!(tile = vips_tile_find(cache, x, y))) {
  ------------------
  |  Branch (567:8): [True: 0, False: 193k]
  ------------------
  568|      0|				vips_tile_cache_unref(work);
  569|      0|				return NULL;
  570|      0|			}
  571|       |
  572|   193k|			vips_tile_ref(tile);
  573|       |
  574|       |			/* We must append, since we want to keep tile ordering
  575|       |			 * for sequential sources.
  576|       |			 */
  577|   193k|			work = g_slist_append(work, tile);
  578|       |
  579|   193k|			VIPS_DEBUG_MSG_RED(
  ------------------
  |  |   63|   193k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   193k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|   193k|	{ \
  |  |   65|   193k|		; \
  |  |   66|   193k|	} \
  |  |   67|   193k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   193k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  580|   193k|				"vips_tile_cache_ref: tile %d, %d (%p)\n",
  581|   193k|				x, y, tile);
  582|   193k|		}
  583|       |
  584|  38.6k|	return work;
  585|  38.6k|}
tilecache.c:vips_tile_find:
  277|   193k|{
  278|   193k|	VipsTile *tile;
  279|       |
  280|       |	/* In cache already?
  281|       |	 */
  282|   193k|	if ((tile = vips_tile_search(cache, x, y))) {
  ------------------
  |  Branch (282:6): [True: 7.77k, False: 186k]
  ------------------
  283|  7.77k|		VIPS_DEBUG_MSG_RED(
  ------------------
  |  |   63|  7.77k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  7.77k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|  7.77k|	{ \
  |  |   65|  7.77k|		; \
  |  |   66|  7.77k|	} \
  |  |   67|  7.77k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.77k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|  7.77k|			"vips_tile_find: tile %d x %d in cache\n", x, y);
  285|  7.77k|		return tile;
  286|  7.77k|	}
  287|       |
  288|       |	/* VipsBlockCache not full?
  289|       |	 */
  290|   186k|	if (cache->max_tiles == -1 ||
  ------------------
  |  Branch (290:6): [True: 0, False: 186k]
  ------------------
  291|   186k|		g_hash_table_size(cache->tiles) < cache->max_tiles) {
  ------------------
  |  Branch (291:3): [True: 179k, False: 6.49k]
  ------------------
  292|   179k|		VIPS_DEBUG_MSG_RED(
  ------------------
  |  |   63|   179k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   179k|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|   179k|	{ \
  |  |   65|   179k|		; \
  |  |   66|   179k|	} \
  |  |   67|   179k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   179k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  293|   179k|			"vips_tile_find: making new tile at %d x %d\n", x, y);
  294|   179k|		if (!(tile = vips_tile_new(cache, x, y)))
  ------------------
  |  Branch (294:7): [True: 0, False: 179k]
  ------------------
  295|      0|			return NULL;
  296|       |
  297|   179k|		return tile;
  298|   179k|	}
  299|       |
  300|       |	/* Reuse an old one, if there are any. We just peek the tile pointer,
  301|       |	 * it is removed from the recycle list later on _ref.
  302|       |	 */
  303|  6.49k|	if (cache->recycle) {
  ------------------
  |  Branch (303:6): [True: 6.49k, False: 0]
  ------------------
  304|  6.49k|		if (cache->access == VIPS_ACCESS_RANDOM)
  ------------------
  |  Branch (304:7): [True: 6.49k, False: 0]
  ------------------
  305|  6.49k|			tile = g_queue_peek_head(cache->recycle);
  306|      0|		else
  307|       |			/* This is slower :( We have to search the recycle
  308|       |			 * queue.
  309|       |			 */
  310|      0|			tile = vips_tile_find_topmost(cache->recycle);
  311|  6.49k|	}
  312|       |
  313|  6.49k|	if (!tile) {
  ------------------
  |  Branch (313:6): [True: 6.49k, False: 0]
  ------------------
  314|       |		/* There are no tiles we can reuse -- we have to make another
  315|       |		 * for now. They will get culled down again next time around.
  316|       |		 */
  317|  6.49k|		if (!(tile = vips_tile_new(cache, x, y)))
  ------------------
  |  Branch (317:7): [True: 0, False: 6.49k]
  ------------------
  318|      0|			return NULL;
  319|       |
  320|  6.49k|		return tile;
  321|  6.49k|	}
  322|       |
  323|  6.49k|	VIPS_DEBUG_MSG_RED("vips_tile_find: reusing tile %d x %d\n",
  ------------------
  |  |   63|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|      0|	{ \
  |  |   65|      0|		; \
  |  |   66|      0|	} \
  |  |   67|  6.49k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  6.49k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  324|      0|		tile->pos.left, tile->pos.top);
  325|       |
  326|      0|	if (vips_tile_move(tile, x, y))
  ------------------
  |  Branch (326:6): [True: 0, False: 0]
  ------------------
  327|      0|		return NULL;
  328|       |
  329|      0|	return tile;
  330|      0|}
tilecache.c:vips_tile_search:
  235|   193k|{
  236|   193k|	VipsRect pos;
  237|   193k|	VipsTile *tile;
  238|       |
  239|   193k|	pos.left = x;
  240|   193k|	pos.top = y;
  241|   193k|	pos.width = cache->tile_width;
  242|   193k|	pos.height = cache->tile_height;
  243|   193k|	tile = (VipsTile *) g_hash_table_lookup(cache->tiles, &pos);
  244|       |
  245|   193k|	return tile;
  246|   193k|}
tilecache.c:vips_tile_new:
  199|   186k|{
  200|   186k|	VipsTile *tile;
  201|       |
  202|   186k|	if (!(tile = VIPS_NEW(NULL, VipsTile)))
  ------------------
  |  |   70|   186k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|   186k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|   186k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|   186k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|   186k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (202:6): [True: 0, False: 186k]
  ------------------
  203|      0|		return NULL;
  204|       |
  205|   186k|	tile->cache = cache;
  206|   186k|	tile->state = VIPS_TILE_STATE_PEND;
  207|   186k|	tile->ref_count = 0;
  208|   186k|	tile->region = NULL;
  209|   186k|	tile->pos.left = x;
  210|   186k|	tile->pos.top = y;
  211|   186k|	tile->pos.width = cache->tile_width;
  212|   186k|	tile->pos.height = cache->tile_height;
  213|   186k|	g_hash_table_insert(cache->tiles, &tile->pos, tile);
  214|   186k|	g_queue_push_tail(tile->cache->recycle, tile);
  215|       |
  216|   186k|	if (!(tile->region = vips_region_new(cache->in))) {
  ------------------
  |  Branch (216:6): [True: 0, False: 186k]
  ------------------
  217|      0|		g_hash_table_remove(cache->tiles, &tile->pos);
  218|      0|		return NULL;
  219|      0|	}
  220|       |
  221|   186k|	vips__region_no_ownership(tile->region);
  222|       |
  223|   186k|	if (vips_region_buffer(tile->region, &tile->pos)) {
  ------------------
  |  Branch (223:6): [True: 0, False: 186k]
  ------------------
  224|      0|		g_hash_table_remove(cache->tiles, &tile->pos);
  225|      0|		return NULL;
  226|      0|	}
  227|       |
  228|   186k|	return tile;
  229|   186k|}
tilecache.c:vips_tile_ref:
  522|   193k|{
  523|   193k|	tile->ref_count += 1;
  524|       |
  525|   193k|	g_assert(tile->ref_count > 0);
  ------------------
  |  |  166|   193k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   193k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   193k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  526|       |
  527|   193k|	if (tile->ref_count == 1) {
  ------------------
  |  Branch (527:6): [True: 193k, False: 0]
  ------------------
  528|   193k|		g_assert(g_queue_find(tile->cache->recycle, tile));
  ------------------
  |  |  166|   193k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   193k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   193k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|       |
  530|   193k|		g_queue_remove(tile->cache->recycle, tile);
  531|   193k|	}
  532|   193k|}
tilecache.c:vips_tile_paste:
  589|   193k|{
  590|   193k|	VipsRect hit;
  591|       |
  592|       |	/* The part of the tile that we need.
  593|       |	 */
  594|   193k|	vips_rect_intersectrect(&out_region->valid, &tile->pos, &hit);
  595|   193k|	if (!vips_rect_isempty(&hit))
  ------------------
  |  Branch (595:6): [True: 193k, False: 0]
  ------------------
  596|   193k|		vips_region_copy(tile->region, out_region, &hit, hit.left, hit.top);
  597|   193k|}
tilecache.c:vips_tile_unref:
  505|   193k|{
  506|   193k|	g_assert(tile->ref_count > 0);
  ------------------
  |  |  166|   193k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   193k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   193k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  507|       |
  508|   193k|	tile->ref_count -= 1;
  509|       |
  510|   193k|	if (tile->ref_count == 0) {
  ------------------
  |  Branch (510:6): [True: 193k, False: 0]
  ------------------
  511|       |		/* Place at the end of the recycle queue. We pop from the
  512|       |		 * front when selecting an unused tile for reuse.
  513|       |		 */
  514|   193k|		g_assert(!g_queue_find(tile->cache->recycle, tile));
  ------------------
  |  |  166|   193k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   193k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   193k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  515|       |
  516|   193k|		g_queue_push_tail(tile->cache->recycle, tile);
  517|   193k|	}
  518|   193k|}
tilecache.c:vips_tile_cache_init:
  816|  1.40k|{
  817|  1.40k|}
tilecache.c:vips_line_cache_class_init:
  977|      1|{
  978|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  979|       |
  980|      1|	VIPS_DEBUG_MSG("vips_line_cache_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  981|       |
  982|      1|	vobject_class->nickname = "linecache";
  983|      1|	vobject_class->description = _("cache an image as a set of lines");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  984|      1|	vobject_class->build = vips_line_cache_build;
  985|      1|}
tilecache.c:vips_line_cache_build:
  913|  17.8k|{
  914|  17.8k|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|  17.8k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  17.8k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  17.8k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  17.8k|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  915|  17.8k|	VipsBlockCache *block_cache = (VipsBlockCache *) object;
  916|  17.8k|	VipsLineCache *cache = (VipsLineCache *) object;
  917|       |
  918|  17.8k|	int tile_width;
  919|  17.8k|	int tile_height;
  920|  17.8k|	int n_lines;
  921|       |
  922|  17.8k|	VIPS_DEBUG_MSG("vips_line_cache_build\n");
  ------------------
  |  |   47|  17.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  17.8k|	{ \
  |  |   49|  17.8k|		; \
  |  |   50|  17.8k|	} \
  |  |   51|  17.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  923|       |
  924|  17.8k|	if (!vips_object_argument_isset(object, "access"))
  ------------------
  |  Branch (924:6): [True: 0, False: 17.8k]
  ------------------
  925|      0|		block_cache->access = VIPS_ACCESS_SEQUENTIAL; // FIXME: Invalidates operation cache
  926|       |
  927|  17.8k|	if (VIPS_OBJECT_CLASS(vips_line_cache_parent_class)->build(object))
  ------------------
  |  |  435|  17.8k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  17.8k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  17.8k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (927:6): [True: 0, False: 17.8k]
  ------------------
  928|      0|		return -1;
  929|       |
  930|       |	/* This can go up with request size, see vips_line_cache_gen().
  931|       |	 */
  932|  17.8k|	vips_get_tile_size(block_cache->in,
  933|  17.8k|		&tile_width, &tile_height, &n_lines);
  934|  17.8k|	block_cache->tile_width = block_cache->in->Xsize; // FIXME: Invalidates operation cache
  935|       |
  936|       |	/* Output has two buffers n_lines height, so 2 * n_lines is the maximum
  937|       |	 * non-locality from threading. Double again for conv, rounding, etc.
  938|       |	 *
  939|       |	 * tile_height can be huge for things like tiff read, where we can
  940|       |	 * have a whole strip in a single tile ... we still need to have a
  941|       |	 * minimum of two strips, so we can handle requests that straddle a
  942|       |	 * tile boundary.
  943|       |	 */
  944|  17.8k|	block_cache->max_tiles = VIPS_MAX(2, // FIXME: Invalidates operation cache
  ------------------
  |  |   54|  17.8k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 17.8k]
  |  |  ------------------
  ------------------
  945|  17.8k|		4 * n_lines / block_cache->tile_height);
  946|       |
  947|  17.8k|	VIPS_DEBUG_MSG("vips_line_cache_build: n_lines = %d\n",
  ------------------
  |  |   47|  17.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  17.8k|	{ \
  |  |   49|  17.8k|		; \
  |  |   50|  17.8k|	} \
  |  |   51|  17.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  948|  17.8k|		n_lines);
  949|  17.8k|	VIPS_DEBUG_MSG("vips_line_cache_build: max_tiles = %d\n",
  ------------------
  |  |   47|  17.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  17.8k|	{ \
  |  |   49|  17.8k|		; \
  |  |   50|  17.8k|	} \
  |  |   51|  17.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  950|  17.8k|		block_cache->max_tiles);
  951|  17.8k|	VIPS_DEBUG_MSG("vips_line_cache_build: tile_height = %d\n",
  ------------------
  |  |   47|  17.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  17.8k|	{ \
  |  |   49|  17.8k|		; \
  |  |   50|  17.8k|	} \
  |  |   51|  17.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  952|  17.8k|		block_cache->tile_height);
  953|  17.8k|	VIPS_DEBUG_MSG("vips_line_cache_build: max size = %g MB\n",
  ------------------
  |  |   47|  17.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  17.8k|	{ \
  |  |   49|  17.8k|		; \
  |  |   50|  17.8k|	} \
  |  |   51|  17.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  954|  17.8k|		(block_cache->max_tiles *
  955|  17.8k|			block_cache->tile_width *
  956|  17.8k|			block_cache->tile_height *
  957|  17.8k|			VIPS_IMAGE_SIZEOF_PEL(block_cache->in)) /
  958|  17.8k|			(1024 * 1024.0));
  959|       |
  960|  17.8k|	if (vips_image_pio_input(block_cache->in))
  ------------------
  |  Branch (960:6): [True: 0, False: 17.8k]
  ------------------
  961|      0|		return -1;
  962|       |
  963|  17.8k|	if (vips_image_pipelinev(conversion->out,
  ------------------
  |  Branch (963:6): [True: 0, False: 17.8k]
  ------------------
  964|  17.8k|			VIPS_DEMAND_STYLE_THINSTRIP, block_cache->in, NULL))
  965|      0|		return -1;
  966|       |
  967|  17.8k|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (967:6): [True: 0, False: 17.8k]
  ------------------
  968|  17.8k|			vips_start_one, vips_line_cache_gen, vips_stop_one,
  969|  17.8k|			block_cache->in, cache))
  970|      0|		return -1;
  971|       |
  972|  17.8k|	return 0;
  973|  17.8k|}
tilecache.c:vips_line_cache_gen:
  887|  37.2k|{
  888|  37.2k|	VipsBlockCache *block_cache = (VipsBlockCache *) b;
  889|       |
  890|  37.2k|	VIPS_GATE_START("vips_line_cache_gen: wait");
  ------------------
  |  |   41|  37.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  37.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  37.2k|	{ \
  |  |   43|  37.2k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 37.2k]
  |  |  ------------------
  |  |   44|  37.2k|			vips__thread_gate_start(NAME); \
  |  |   45|  37.2k|	} \
  |  |   46|  37.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  37.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  891|       |
  892|  37.2k|	vips__worker_lock(block_cache->lock);
  893|       |
  894|  37.2k|	VIPS_GATE_STOP("vips_line_cache_gen: wait");
  ------------------
  |  |   49|  37.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  37.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  37.2k|	{ \
  |  |   51|  37.2k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 37.2k]
  |  |  ------------------
  |  |   52|  37.2k|			vips__thread_gate_stop(NAME); \
  |  |   53|  37.2k|	} \
  |  |   54|  37.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  37.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  895|       |
  896|       |	/* We size up the cache to the largest request.
  897|       |	 */
  898|  37.2k|	if (out_region->valid.height >
  ------------------
  |  Branch (898:6): [True: 0, False: 37.2k]
  ------------------
  899|  37.2k|		block_cache->max_tiles * block_cache->tile_height) {
  900|      0|		block_cache->max_tiles = // FIXME: Invalidates operation cache
  901|      0|			1 + (out_region->valid.height / block_cache->tile_height);
  902|      0|		VIPS_DEBUG_MSG("vips_line_cache_gen: bumped max_tiles to %d\n",
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  903|      0|			block_cache->max_tiles);
  904|      0|	}
  905|       |
  906|  37.2k|	g_mutex_unlock(block_cache->lock);
  907|       |
  908|  37.2k|	return vips_tile_cache_gen(out_region, seq, a, b, stop);
  909|  37.2k|}
tilecache.c:vips_line_cache_init:
  989|  17.8k|{
  990|  17.8k|}

transpose3d.c:vips_transpose3d_class_init:
  155|      1|{
  156|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  157|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  158|       |
  159|      1|	gobject_class->set_property = vips_object_set_property;
  160|      1|	gobject_class->get_property = vips_object_get_property;
  161|       |
  162|      1|	vobject_class->nickname = "transpose3d";
  163|      1|	vobject_class->description = _("transpose3d an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  164|      1|	vobject_class->build = vips_transpose3d_build;
  165|       |
  166|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  167|      1|		_("Input"),
  168|      1|		_("Input image"),
  169|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  170|      1|		G_STRUCT_OFFSET(VipsTranspose3d, in));
  171|       |
  172|      1|	VIPS_ARG_INT(class, "page_height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  173|      1|		_("Page height"),
  174|      1|		_("Height of each input page"),
  175|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  176|      1|		G_STRUCT_OFFSET(VipsTranspose3d, page_height),
  177|      1|		0, 10000000, 0);
  178|      1|}

vips_unpremultiply:
  393|    949|{
  394|    949|	va_list ap;
  395|    949|	int result;
  396|       |
  397|    949|	va_start(ap, out);
  398|    949|	result = vips_call_split("unpremultiply", ap, in, out);
  399|    949|	va_end(ap);
  400|       |
  401|    949|	return result;
  402|    949|}
unpremultiply.c:vips_unpremultiply_class_init:
  306|      1|{
  307|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  308|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  310|       |
  311|      1|	VIPS_DEBUG_MSG("vips_unpremultiply_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  312|       |
  313|      1|	gobject_class->set_property = vips_object_set_property;
  314|      1|	gobject_class->get_property = vips_object_get_property;
  315|       |
  316|      1|	vobject_class->nickname = "unpremultiply";
  317|      1|	vobject_class->description = _("unpremultiply image alpha");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  318|      1|	vobject_class->build = vips_unpremultiply_build;
  319|       |
  320|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  321|       |
  322|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  323|      1|		_("Input"),
  324|      1|		_("Input image"),
  325|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  326|      1|		G_STRUCT_OFFSET(VipsUnpremultiply, in));
  327|       |
  328|      1|	VIPS_ARG_DOUBLE(class, "max_alpha", 115,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  329|      1|		_("Maximum alpha"),
  330|      1|		_("Maximum value of alpha channel"),
  331|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  332|      1|		G_STRUCT_OFFSET(VipsUnpremultiply, max_alpha),
  333|      1|		0, 100000000, 255);
  334|       |
  335|      1|	VIPS_ARG_INT(class, "alpha_band", 116,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  336|      1|		_("Alpha band"),
  337|      1|		_("Unpremultiply with this alpha"),
  338|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  339|      1|		G_STRUCT_OFFSET(VipsUnpremultiply, alpha_band),
  340|      1|		0, 100000000, 3);
  341|      1|}
unpremultiply.c:vips_unpremultiply_build:
  251|    949|{
  252|    949|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|    949|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|    949|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    949|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|    949|	VipsConversion *conversion = VIPS_CONVERSION(object);
  ------------------
  |  |   40|    949|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|    949|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    949|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|    949|		VIPS_TYPE_CONVERSION, VipsConversion))
  ------------------
  254|    949|	VipsUnpremultiply *unpremultiply = (VipsUnpremultiply *) object;
  255|    949|	VipsImage **t = (VipsImage **) vips_object_local_array(object, 1);
  256|       |
  257|    949|	VipsImage *in;
  258|       |
  259|    949|	if (VIPS_OBJECT_CLASS(vips_unpremultiply_parent_class)->build(object))
  ------------------
  |  |  435|    949|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|    949|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    949|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (259:6): [True: 0, False: 949]
  ------------------
  260|      0|		return -1;
  261|       |
  262|    949|	in = unpremultiply->in;
  263|       |
  264|    949|	if (vips_image_decode(in, &t[0]))
  ------------------
  |  Branch (264:6): [True: 0, False: 949]
  ------------------
  265|      0|		return -1;
  266|    949|	in = t[0];
  267|       |
  268|       |	/* Trivial case: fall back to copy().
  269|       |	 */
  270|    949|	if (in->Bands == 1)
  ------------------
  |  Branch (270:6): [True: 89, False: 860]
  ------------------
  271|     89|		return vips_image_write(in, conversion->out);
  272|       |
  273|    860|	if (vips_check_noncomplex(class->nickname, in))
  ------------------
  |  Branch (273:6): [True: 0, False: 860]
  ------------------
  274|      0|		return -1;
  275|       |
  276|    860|	if (vips_image_pipelinev(conversion->out,
  ------------------
  |  Branch (276:6): [True: 0, False: 860]
  ------------------
  277|    860|			VIPS_DEMAND_STYLE_THINSTRIP, in, NULL))
  278|      0|		return -1;
  279|       |
  280|       |	/* Is max-alpha unset? Default to the correct value for this
  281|       |	 * interpretation.
  282|       |	 */
  283|    860|	if (!vips_object_argument_isset(object, "max_alpha"))
  ------------------
  |  Branch (283:6): [True: 860, False: 0]
  ------------------
  284|    860|		unpremultiply->max_alpha = vips_interpretation_max_alpha(in->Type); // FIXME: Invalidates operation cache
  285|       |
  286|       |	/* Is alpha-band unset? Default to the final band for this image.
  287|       |	 */
  288|    860|	if (!vips_object_argument_isset(object, "alpha_band"))
  ------------------
  |  Branch (288:6): [True: 0, False: 860]
  ------------------
  289|      0|		unpremultiply->alpha_band = in->Bands - 1; // FIXME: Invalidates operation cache
  290|       |
  291|    860|	if (in->BandFmt == VIPS_FORMAT_DOUBLE)
  ------------------
  |  Branch (291:6): [True: 0, False: 860]
  ------------------
  292|      0|		conversion->out->BandFmt = VIPS_FORMAT_DOUBLE;
  293|    860|	else
  294|    860|		conversion->out->BandFmt = VIPS_FORMAT_FLOAT;
  295|       |
  296|    860|	if (vips_image_generate(conversion->out,
  ------------------
  |  Branch (296:6): [True: 0, False: 860]
  ------------------
  297|    860|			vips_start_one, vips_unpremultiply_gen, vips_stop_one,
  298|    860|			in, unpremultiply))
  299|      0|		return -1;
  300|       |
  301|    860|	return 0;
  302|    860|}
unpremultiply.c:vips_unpremultiply_init:
  345|    949|{
  346|    949|	unpremultiply->max_alpha = 255.0;
  347|    949|}
unpremultiply.c:vips_unpremultiply_gen.avx.0:
  187|  1.98k|{
  188|  1.98k|	VipsUnpremultiply *unpremultiply = (VipsUnpremultiply *) b;
  189|  1.98k|	VipsRegion *ir = (VipsRegion *) vseq;
  190|  1.98k|	VipsImage *im = ir->im;
  191|  1.98k|	VipsRect *r = &out_region->valid;
  192|  1.98k|	int width = r->width;
  193|  1.98k|	int bands = im->Bands;
  194|  1.98k|	double max_alpha = unpremultiply->max_alpha;
  195|  1.98k|	int alpha_band = unpremultiply->alpha_band;
  196|       |
  197|  1.98k|	int x, y, i;
  198|       |
  199|  1.98k|	if (vips_region_prepare(ir, r))
  ------------------
  |  Branch (199:6): [True: 56, False: 1.92k]
  ------------------
  200|     56|		return -1;
  201|       |
  202|  25.2k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (202:14): [True: 23.3k, False: 1.92k]
  ------------------
  203|  23.3k|		VipsPel *in = VIPS_REGION_ADDR(ir, r->left, r->top + y);
  ------------------
  |  |  227|  23.3k|	((R)->data + \
  |  |  228|  23.3k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  23.3k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  23.3k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  23.3k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  23.3k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  23.3k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|  23.3k|		VipsPel *out = VIPS_REGION_ADDR(out_region, r->left, r->top + y);
  ------------------
  |  |  227|  23.3k|	((R)->data + \
  |  |  228|  23.3k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  23.3k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  23.3k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  23.3k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  23.3k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  23.3k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|       |
  206|  23.3k|		switch (im->BandFmt) {
  207|  2.98k|		case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (207:3): [True: 2.98k, False: 20.3k]
  ------------------
  208|  2.98k|			UNPRE(unsigned char, float);
  ------------------
  |  |  122|  2.98k|	{ \
  |  |  123|  2.98k|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (123:7): [True: 1.49k, False: 1.48k]
  |  |  ------------------
  |  |  124|  1.49k|			UNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  103|  1.49k|	{ \
  |  |  |  |  104|  1.49k|		IN *restrict p = (IN *) in; \
  |  |  |  |  105|  1.49k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  106|  1.49k|\
  |  |  |  |  107|  46.2k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:15): [True: 44.7k, False: 1.49k]
  |  |  |  |  ------------------
  |  |  |  |  108|  44.7k|			IN alpha = p[3]; \
  |  |  |  |  109|  44.7k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (109:17): [True: 11.7k, False: 32.9k]
  |  |  |  |  ------------------
  |  |  |  |  110|  44.7k|\
  |  |  |  |  111|  44.7k|			q[0] = factor * p[0]; \
  |  |  |  |  112|  44.7k|			q[1] = factor * p[1]; \
  |  |  |  |  113|  44.7k|			q[2] = factor * p[2]; \
  |  |  |  |  114|  44.7k|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  44.7k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  89.4k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 44.7k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 44.7k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 44.7k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  115|  44.7k|\
  |  |  |  |  116|  44.7k|			p += 4; \
  |  |  |  |  117|  44.7k|			q += 4; \
  |  |  |  |  118|  44.7k|		} \
  |  |  |  |  119|  1.49k|	}
  |  |  ------------------
  |  |  125|  1.49k|		} \
  |  |  126|  2.98k|		else { \
  |  |  127|  1.48k|			UNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |   81|  1.48k|	{ \
  |  |  |  |   82|  1.48k|		IN *restrict p = (IN *) in; \
  |  |  |  |   83|  1.48k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |   84|  1.48k|\
  |  |  |  |   85|  53.8k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:15): [True: 52.4k, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |   86|  52.4k|			IN alpha = p[alpha_band]; \
  |  |  |  |   87|  52.4k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:17): [True: 34.6k, False: 17.7k]
  |  |  |  |  ------------------
  |  |  |  |   88|  52.4k|\
  |  |  |  |   89|   127k|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (89:16): [True: 75.0k, False: 52.4k]
  |  |  |  |  ------------------
  |  |  |  |   90|  75.0k|				q[i] = factor * p[i]; \
  |  |  |  |   91|  52.4k|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  52.4k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   104k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 52.4k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 52.4k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 52.4k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  81.8k|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:29): [True: 29.3k, False: 52.4k]
  |  |  |  |  ------------------
  |  |  |  |   93|  52.4k|				q[i] = p[i]; \
  |  |  |  |   94|  52.4k|\
  |  |  |  |   95|  52.4k|			p += bands; \
  |  |  |  |   96|  52.4k|			q += bands; \
  |  |  |  |   97|  52.4k|		} \
  |  |  |  |   98|  1.48k|	}
  |  |  ------------------
  |  |  128|  1.48k|		} \
  |  |  129|  2.98k|	}
  ------------------
  209|  2.98k|			break;
  210|       |
  211|  1.94k|		case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (211:3): [True: 1.94k, False: 21.4k]
  ------------------
  212|  1.94k|			UNPRE(signed char, float);
  ------------------
  |  |  122|  1.94k|	{ \
  |  |  123|  1.94k|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (123:7): [True: 316, False: 1.62k]
  |  |  ------------------
  |  |  124|    316|			UNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  103|    316|	{ \
  |  |  |  |  104|    316|		IN *restrict p = (IN *) in; \
  |  |  |  |  105|    316|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  106|    316|\
  |  |  |  |  107|  2.75k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:15): [True: 2.43k, False: 316]
  |  |  |  |  ------------------
  |  |  |  |  108|  2.43k|			IN alpha = p[3]; \
  |  |  |  |  109|  2.43k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (109:17): [True: 1.69k, False: 738]
  |  |  |  |  ------------------
  |  |  |  |  110|  2.43k|\
  |  |  |  |  111|  2.43k|			q[0] = factor * p[0]; \
  |  |  |  |  112|  2.43k|			q[1] = factor * p[1]; \
  |  |  |  |  113|  2.43k|			q[2] = factor * p[2]; \
  |  |  |  |  114|  2.43k|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  2.43k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  4.86k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 363, False: 2.07k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 2.43k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 2.07k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  115|  2.43k|\
  |  |  |  |  116|  2.43k|			p += 4; \
  |  |  |  |  117|  2.43k|			q += 4; \
  |  |  |  |  118|  2.43k|		} \
  |  |  |  |  119|    316|	}
  |  |  ------------------
  |  |  125|    316|		} \
  |  |  126|  1.94k|		else { \
  |  |  127|  1.62k|			UNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |   81|  1.62k|	{ \
  |  |  |  |   82|  1.62k|		IN *restrict p = (IN *) in; \
  |  |  |  |   83|  1.62k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |   84|  1.62k|\
  |  |  |  |   85|  68.7k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:15): [True: 67.1k, False: 1.62k]
  |  |  |  |  ------------------
  |  |  |  |   86|  67.1k|			IN alpha = p[alpha_band]; \
  |  |  |  |   87|  67.1k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:17): [True: 56.6k, False: 10.4k]
  |  |  |  |  ------------------
  |  |  |  |   88|  67.1k|\
  |  |  |  |   89|   158k|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (89:16): [True: 91.0k, False: 67.1k]
  |  |  |  |  ------------------
  |  |  |  |   90|  91.0k|				q[i] = factor * p[i]; \
  |  |  |  |   91|  67.1k|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  67.1k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   134k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 2.87k, False: 64.2k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 67.1k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 64.2k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|   106k|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:29): [True: 39.3k, False: 67.1k]
  |  |  |  |  ------------------
  |  |  |  |   93|  67.1k|				q[i] = p[i]; \
  |  |  |  |   94|  67.1k|\
  |  |  |  |   95|  67.1k|			p += bands; \
  |  |  |  |   96|  67.1k|			q += bands; \
  |  |  |  |   97|  67.1k|		} \
  |  |  |  |   98|  1.62k|	}
  |  |  ------------------
  |  |  128|  1.62k|		} \
  |  |  129|  1.94k|	}
  ------------------
  213|  1.94k|			break;
  214|       |
  215|  3.29k|		case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (215:3): [True: 3.29k, False: 20.0k]
  ------------------
  216|  3.29k|			UNPRE(unsigned short, float);
  ------------------
  |  |  122|  3.29k|	{ \
  |  |  123|  3.29k|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (123:7): [True: 1.86k, False: 1.43k]
  |  |  ------------------
  |  |  124|  1.86k|			UNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  103|  1.86k|	{ \
  |  |  |  |  104|  1.86k|		IN *restrict p = (IN *) in; \
  |  |  |  |  105|  1.86k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  106|  1.86k|\
  |  |  |  |  107|  32.7k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:15): [True: 30.9k, False: 1.86k]
  |  |  |  |  ------------------
  |  |  |  |  108|  30.9k|			IN alpha = p[3]; \
  |  |  |  |  109|  30.9k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (109:17): [True: 23.0k, False: 7.89k]
  |  |  |  |  ------------------
  |  |  |  |  110|  30.9k|\
  |  |  |  |  111|  30.9k|			q[0] = factor * p[0]; \
  |  |  |  |  112|  30.9k|			q[1] = factor * p[1]; \
  |  |  |  |  113|  30.9k|			q[2] = factor * p[2]; \
  |  |  |  |  114|  30.9k|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  30.9k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  61.8k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 30.9k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 4.56k, False: 26.3k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 4.56k, False: 26.3k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  115|  30.9k|\
  |  |  |  |  116|  30.9k|			p += 4; \
  |  |  |  |  117|  30.9k|			q += 4; \
  |  |  |  |  118|  30.9k|		} \
  |  |  |  |  119|  1.86k|	}
  |  |  ------------------
  |  |  125|  1.86k|		} \
  |  |  126|  3.29k|		else { \
  |  |  127|  1.43k|			UNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |   81|  1.43k|	{ \
  |  |  |  |   82|  1.43k|		IN *restrict p = (IN *) in; \
  |  |  |  |   83|  1.43k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |   84|  1.43k|\
  |  |  |  |   85|  19.8k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:15): [True: 18.4k, False: 1.43k]
  |  |  |  |  ------------------
  |  |  |  |   86|  18.4k|			IN alpha = p[alpha_band]; \
  |  |  |  |   87|  18.4k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:17): [True: 14.2k, False: 4.10k]
  |  |  |  |  ------------------
  |  |  |  |   88|  18.4k|\
  |  |  |  |   89|  40.0k|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (89:16): [True: 21.6k, False: 18.4k]
  |  |  |  |  ------------------
  |  |  |  |   90|  21.6k|				q[i] = factor * p[i]; \
  |  |  |  |   91|  18.4k|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  18.4k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  36.8k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 18.4k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 1.48k, False: 16.9k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 1.48k, False: 16.9k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  28.2k|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:29): [True: 9.80k, False: 18.4k]
  |  |  |  |  ------------------
  |  |  |  |   93|  18.4k|				q[i] = p[i]; \
  |  |  |  |   94|  18.4k|\
  |  |  |  |   95|  18.4k|			p += bands; \
  |  |  |  |   96|  18.4k|			q += bands; \
  |  |  |  |   97|  18.4k|		} \
  |  |  |  |   98|  1.43k|	}
  |  |  ------------------
  |  |  128|  1.43k|		} \
  |  |  129|  3.29k|	}
  ------------------
  217|  3.29k|			break;
  218|       |
  219|  3.38k|		case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (219:3): [True: 3.38k, False: 19.9k]
  ------------------
  220|  3.38k|			UNPRE(signed short, float);
  ------------------
  |  |  122|  3.38k|	{ \
  |  |  123|  3.38k|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (123:7): [True: 2.62k, False: 755]
  |  |  ------------------
  |  |  124|  2.62k|			UNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  103|  2.62k|	{ \
  |  |  |  |  104|  2.62k|		IN *restrict p = (IN *) in; \
  |  |  |  |  105|  2.62k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  106|  2.62k|\
  |  |  |  |  107|  31.3k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:15): [True: 28.7k, False: 2.62k]
  |  |  |  |  ------------------
  |  |  |  |  108|  28.7k|			IN alpha = p[3]; \
  |  |  |  |  109|  28.7k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (109:17): [True: 14.4k, False: 14.2k]
  |  |  |  |  ------------------
  |  |  |  |  110|  28.7k|\
  |  |  |  |  111|  28.7k|			q[0] = factor * p[0]; \
  |  |  |  |  112|  28.7k|			q[1] = factor * p[1]; \
  |  |  |  |  113|  28.7k|			q[2] = factor * p[2]; \
  |  |  |  |  114|  28.7k|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  28.7k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  57.4k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 3.64k, False: 25.0k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 5.54k, False: 23.1k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 5.54k, False: 19.5k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  115|  28.7k|\
  |  |  |  |  116|  28.7k|			p += 4; \
  |  |  |  |  117|  28.7k|			q += 4; \
  |  |  |  |  118|  28.7k|		} \
  |  |  |  |  119|  2.62k|	}
  |  |  ------------------
  |  |  125|  2.62k|		} \
  |  |  126|  3.38k|		else { \
  |  |  127|    755|			UNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |   81|    755|	{ \
  |  |  |  |   82|    755|		IN *restrict p = (IN *) in; \
  |  |  |  |   83|    755|		OUT *restrict q = (OUT *) out; \
  |  |  |  |   84|    755|\
  |  |  |  |   85|  8.76k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:15): [True: 8.00k, False: 755]
  |  |  |  |  ------------------
  |  |  |  |   86|  8.00k|			IN alpha = p[alpha_band]; \
  |  |  |  |   87|  8.00k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:17): [True: 6.03k, False: 1.97k]
  |  |  |  |  ------------------
  |  |  |  |   88|  8.00k|\
  |  |  |  |   89|  17.4k|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (89:16): [True: 9.43k, False: 8.00k]
  |  |  |  |  ------------------
  |  |  |  |   90|  9.43k|				q[i] = factor * p[i]; \
  |  |  |  |   91|  8.00k|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  8.00k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  16.0k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 909, False: 7.10k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 670, False: 7.33k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 670, False: 6.43k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  13.1k|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:29): [True: 5.18k, False: 8.00k]
  |  |  |  |  ------------------
  |  |  |  |   93|  8.00k|				q[i] = p[i]; \
  |  |  |  |   94|  8.00k|\
  |  |  |  |   95|  8.00k|			p += bands; \
  |  |  |  |   96|  8.00k|			q += bands; \
  |  |  |  |   97|  8.00k|		} \
  |  |  |  |   98|    755|	}
  |  |  ------------------
  |  |  128|    755|		} \
  |  |  129|  3.38k|	}
  ------------------
  221|  3.38k|			break;
  222|       |
  223|  2.40k|		case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (223:3): [True: 2.40k, False: 20.9k]
  ------------------
  224|  2.40k|			UNPRE(unsigned int, float);
  ------------------
  |  |  122|  2.40k|	{ \
  |  |  123|  2.40k|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (123:7): [True: 1.36k, False: 1.03k]
  |  |  ------------------
  |  |  124|  1.36k|			UNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  103|  1.36k|	{ \
  |  |  |  |  104|  1.36k|		IN *restrict p = (IN *) in; \
  |  |  |  |  105|  1.36k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  106|  1.36k|\
  |  |  |  |  107|  7.98k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:15): [True: 6.62k, False: 1.36k]
  |  |  |  |  ------------------
  |  |  |  |  108|  6.62k|			IN alpha = p[3]; \
  |  |  |  |  109|  6.62k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (109:17): [True: 2.25k, False: 4.37k]
  |  |  |  |  ------------------
  |  |  |  |  110|  6.62k|\
  |  |  |  |  111|  6.62k|			q[0] = factor * p[0]; \
  |  |  |  |  112|  6.62k|			q[1] = factor * p[1]; \
  |  |  |  |  113|  6.62k|			q[2] = factor * p[2]; \
  |  |  |  |  114|  6.62k|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  6.62k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  13.2k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 6.62k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 4.03k, False: 2.58k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 4.03k, False: 2.58k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  115|  6.62k|\
  |  |  |  |  116|  6.62k|			p += 4; \
  |  |  |  |  117|  6.62k|			q += 4; \
  |  |  |  |  118|  6.62k|		} \
  |  |  |  |  119|  1.36k|	}
  |  |  ------------------
  |  |  125|  1.36k|		} \
  |  |  126|  2.40k|		else { \
  |  |  127|  1.03k|			UNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |   81|  1.03k|	{ \
  |  |  |  |   82|  1.03k|		IN *restrict p = (IN *) in; \
  |  |  |  |   83|  1.03k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |   84|  1.03k|\
  |  |  |  |   85|  12.6k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:15): [True: 11.6k, False: 1.03k]
  |  |  |  |  ------------------
  |  |  |  |   86|  11.6k|			IN alpha = p[alpha_band]; \
  |  |  |  |   87|  11.6k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:17): [True: 5.86k, False: 5.76k]
  |  |  |  |  ------------------
  |  |  |  |   88|  11.6k|\
  |  |  |  |   89|  32.4k|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (89:16): [True: 20.7k, False: 11.6k]
  |  |  |  |  ------------------
  |  |  |  |   90|  20.7k|				q[i] = factor * p[i]; \
  |  |  |  |   91|  11.6k|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  11.6k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  23.2k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 11.6k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 5.54k, False: 6.07k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 5.54k, False: 6.07k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  13.9k|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:29): [True: 2.29k, False: 11.6k]
  |  |  |  |  ------------------
  |  |  |  |   93|  11.6k|				q[i] = p[i]; \
  |  |  |  |   94|  11.6k|\
  |  |  |  |   95|  11.6k|			p += bands; \
  |  |  |  |   96|  11.6k|			q += bands; \
  |  |  |  |   97|  11.6k|		} \
  |  |  |  |   98|  1.03k|	}
  |  |  ------------------
  |  |  128|  1.03k|		} \
  |  |  129|  2.40k|	}
  ------------------
  225|  2.40k|			break;
  226|       |
  227|  3.21k|		case VIPS_FORMAT_INT:
  ------------------
  |  Branch (227:3): [True: 3.21k, False: 20.1k]
  ------------------
  228|  3.21k|			UNPRE(signed int, float);
  ------------------
  |  |  122|  3.21k|	{ \
  |  |  123|  3.21k|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (123:7): [True: 1.74k, False: 1.46k]
  |  |  ------------------
  |  |  124|  1.74k|			UNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  103|  1.74k|	{ \
  |  |  |  |  104|  1.74k|		IN *restrict p = (IN *) in; \
  |  |  |  |  105|  1.74k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  106|  1.74k|\
  |  |  |  |  107|  17.6k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:15): [True: 15.9k, False: 1.74k]
  |  |  |  |  ------------------
  |  |  |  |  108|  15.9k|			IN alpha = p[3]; \
  |  |  |  |  109|  15.9k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (109:17): [True: 8.03k, False: 7.87k]
  |  |  |  |  ------------------
  |  |  |  |  110|  15.9k|\
  |  |  |  |  111|  15.9k|			q[0] = factor * p[0]; \
  |  |  |  |  112|  15.9k|			q[1] = factor * p[1]; \
  |  |  |  |  113|  15.9k|			q[2] = factor * p[2]; \
  |  |  |  |  114|  15.9k|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  15.9k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  31.8k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 3.12k, False: 12.7k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 4.54k, False: 11.3k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 4.54k, False: 8.24k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  115|  15.9k|\
  |  |  |  |  116|  15.9k|			p += 4; \
  |  |  |  |  117|  15.9k|			q += 4; \
  |  |  |  |  118|  15.9k|		} \
  |  |  |  |  119|  1.74k|	}
  |  |  ------------------
  |  |  125|  1.74k|		} \
  |  |  126|  3.21k|		else { \
  |  |  127|  1.46k|			UNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |   81|  1.46k|	{ \
  |  |  |  |   82|  1.46k|		IN *restrict p = (IN *) in; \
  |  |  |  |   83|  1.46k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |   84|  1.46k|\
  |  |  |  |   85|  20.4k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (85:15): [True: 18.9k, False: 1.46k]
  |  |  |  |  ------------------
  |  |  |  |   86|  18.9k|			IN alpha = p[alpha_band]; \
  |  |  |  |   87|  18.9k|			OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (87:17): [True: 11.8k, False: 7.06k]
  |  |  |  |  ------------------
  |  |  |  |   88|  18.9k|\
  |  |  |  |   89|  48.4k|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (89:16): [True: 29.4k, False: 18.9k]
  |  |  |  |  ------------------
  |  |  |  |   90|  29.4k|				q[i] = factor * p[i]; \
  |  |  |  |   91|  18.9k|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  18.9k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  37.9k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 835, False: 18.1k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 5.93k, False: 13.0k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 5.93k, False: 12.1k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   92|  27.3k|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (92:29): [True: 8.41k, False: 18.9k]
  |  |  |  |  ------------------
  |  |  |  |   93|  18.9k|				q[i] = p[i]; \
  |  |  |  |   94|  18.9k|\
  |  |  |  |   95|  18.9k|			p += bands; \
  |  |  |  |   96|  18.9k|			q += bands; \
  |  |  |  |   97|  18.9k|		} \
  |  |  |  |   98|  1.46k|	}
  |  |  ------------------
  |  |  128|  1.46k|		} \
  |  |  129|  3.21k|	}
  ------------------
  229|  3.21k|			break;
  230|       |
  231|  6.14k|		case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (231:3): [True: 6.14k, False: 17.2k]
  ------------------
  232|  6.14k|			FUNPRE(float, float);
  ------------------
  |  |  174|  6.14k|	{ \
  |  |  175|  6.14k|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (175:7): [True: 3.17k, False: 2.96k]
  |  |  ------------------
  |  |  176|  3.17k|			FUNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  155|  3.17k|	{ \
  |  |  |  |  156|  3.17k|		IN *restrict p = (IN *) in; \
  |  |  |  |  157|  3.17k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  158|  3.17k|\
  |  |  |  |  159|  38.0k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (159:15): [True: 34.8k, False: 3.17k]
  |  |  |  |  ------------------
  |  |  |  |  160|  34.8k|			IN alpha = p[3]; \
  |  |  |  |  161|  34.8k|			OUT factor = VIPS_ABS(alpha) < 0.01 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  34.8k|#define VIPS_ABS(X) (((X) >= 0) ? (X) : -(X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 31.8k, False: 2.98k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (161:17): [True: 29.8k, False: 4.98k]
  |  |  |  |  ------------------
  |  |  |  |  162|  34.8k|\
  |  |  |  |  163|  34.8k|			q[0] = factor * p[0]; \
  |  |  |  |  164|  34.8k|			q[1] = factor * p[1]; \
  |  |  |  |  165|  34.8k|			q[2] = factor * p[2]; \
  |  |  |  |  166|  34.8k|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  34.8k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  69.7k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 2.96k, False: 31.8k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 1.15k, False: 33.6k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 1.15k, False: 30.7k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  167|  34.8k|\
  |  |  |  |  168|  34.8k|			p += 4; \
  |  |  |  |  169|  34.8k|			q += 4; \
  |  |  |  |  170|  34.8k|		} \
  |  |  |  |  171|  3.17k|	}
  |  |  ------------------
  |  |  177|  3.17k|		} \
  |  |  178|  6.14k|		else { \
  |  |  179|  2.96k|			FUNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |  135|  2.96k|	{ \
  |  |  |  |  136|  2.96k|		IN *restrict p = (IN *) in; \
  |  |  |  |  137|  2.96k|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  138|  2.96k|\
  |  |  |  |  139|  36.6k|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (139:15): [True: 33.6k, False: 2.96k]
  |  |  |  |  ------------------
  |  |  |  |  140|  33.6k|			IN alpha = p[alpha_band]; \
  |  |  |  |  141|  33.6k|			OUT factor = VIPS_ABS(alpha) < 0.01 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|  33.6k|#define VIPS_ABS(X) (((X) >= 0) ? (X) : -(X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 32.3k, False: 1.33k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (141:17): [True: 26.9k, False: 6.71k]
  |  |  |  |  ------------------
  |  |  |  |  142|  33.6k|\
  |  |  |  |  143|  85.9k|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (143:16): [True: 52.2k, False: 33.6k]
  |  |  |  |  ------------------
  |  |  |  |  144|  52.2k|				q[i] = factor * p[i]; \
  |  |  |  |  145|  33.6k|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  33.6k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  67.3k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 1.33k, False: 32.3k]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 453, False: 33.2k]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 453, False: 31.8k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|  47.0k|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (146:29): [True: 13.3k, False: 33.6k]
  |  |  |  |  ------------------
  |  |  |  |  147|  33.6k|				q[i] = p[i]; \
  |  |  |  |  148|  33.6k|\
  |  |  |  |  149|  33.6k|			p += bands; \
  |  |  |  |  150|  33.6k|			q += bands; \
  |  |  |  |  151|  33.6k|		} \
  |  |  |  |  152|  2.96k|	}
  |  |  ------------------
  |  |  180|  2.96k|		} \
  |  |  181|  6.14k|	}
  ------------------
  233|  6.14k|			break;
  234|       |
  235|      0|		case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (235:3): [True: 0, False: 23.3k]
  ------------------
  236|      0|			FUNPRE(double, double);
  ------------------
  |  |  174|      0|	{ \
  |  |  175|      0|		if (bands == 4) { \
  |  |  ------------------
  |  |  |  Branch (175:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  176|      0|			FUNPRE_RGBA(IN, OUT); \
  |  |  ------------------
  |  |  |  |  155|      0|	{ \
  |  |  |  |  156|      0|		IN *restrict p = (IN *) in; \
  |  |  |  |  157|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  158|      0|\
  |  |  |  |  159|      0|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (159:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  160|      0|			IN alpha = p[3]; \
  |  |  |  |  161|      0|			OUT factor = VIPS_ABS(alpha) < 0.01 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define VIPS_ABS(X) (((X) >= 0) ? (X) : -(X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (161:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  162|      0|\
  |  |  |  |  163|      0|			q[0] = factor * p[0]; \
  |  |  |  |  164|      0|			q[1] = factor * p[1]; \
  |  |  |  |  165|      0|			q[2] = factor * p[2]; \
  |  |  |  |  166|      0|			q[3] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  167|      0|\
  |  |  |  |  168|      0|			p += 4; \
  |  |  |  |  169|      0|			q += 4; \
  |  |  |  |  170|      0|		} \
  |  |  |  |  171|      0|	}
  |  |  ------------------
  |  |  177|      0|		} \
  |  |  178|      0|		else { \
  |  |  179|      0|			FUNPRE_MANY(IN, OUT); \
  |  |  ------------------
  |  |  |  |  135|      0|	{ \
  |  |  |  |  136|      0|		IN *restrict p = (IN *) in; \
  |  |  |  |  137|      0|		OUT *restrict q = (OUT *) out; \
  |  |  |  |  138|      0|\
  |  |  |  |  139|      0|		for (x = 0; x < width; x++) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (139:15): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  140|      0|			IN alpha = p[alpha_band]; \
  |  |  |  |  141|      0|			OUT factor = VIPS_ABS(alpha) < 0.01 ? 0 : max_alpha / alpha; \
  |  |  |  |  ------------------
  |  |  |  |  |  |   62|      0|#define VIPS_ABS(X) (((X) >= 0) ? (X) : -(X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (141:17): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  142|      0|\
  |  |  |  |  143|      0|			for (i = 0; i < alpha_band; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (143:16): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  144|      0|				q[i] = factor * p[i]; \
  |  |  |  |  145|      0|			q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  146|      0|			for (i = alpha_band + 1; i < bands; i++) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (146:29): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  147|      0|				q[i] = p[i]; \
  |  |  |  |  148|      0|\
  |  |  |  |  149|      0|			p += bands; \
  |  |  |  |  150|      0|			q += bands; \
  |  |  |  |  151|      0|		} \
  |  |  |  |  152|      0|	}
  |  |  ------------------
  |  |  180|      0|		} \
  |  |  181|      0|	}
  ------------------
  237|      0|			break;
  238|       |
  239|      0|		case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (239:3): [True: 0, False: 23.3k]
  ------------------
  240|      0|		case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (240:3): [True: 0, False: 23.3k]
  ------------------
  241|      0|		default:
  ------------------
  |  Branch (241:3): [True: 0, False: 23.3k]
  ------------------
  242|      0|			g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|  23.3k|		}
  244|  23.3k|	}
  245|       |
  246|  1.92k|	return 0;
  247|  1.92k|}

wrap.c:vips_wrap_class_init:
  107|      1|{
  108|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  109|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  110|       |
  111|      1|	gobject_class->set_property = vips_object_set_property;
  112|      1|	gobject_class->get_property = vips_object_get_property;
  113|       |
  114|      1|	vobject_class->nickname = "wrap";
  115|      1|	vobject_class->description = _("wrap image origin");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  116|      1|	vobject_class->build = vips_wrap_build;
  117|       |
  118|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  119|      1|		_("Input"),
  120|      1|		_("Input image"),
  121|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  122|      1|		G_STRUCT_OFFSET(VipsWrap, in));
  123|       |
  124|      1|	VIPS_ARG_INT(class, "x", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  125|      1|		_("x"),
  126|      1|		_("Left edge of input in output"),
  127|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  128|      1|		G_STRUCT_OFFSET(VipsWrap, x),
  129|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  130|       |
  131|      1|	VIPS_ARG_INT(class, "y", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  132|      1|		_("y"),
  133|      1|		_("Top edge of input in output"),
  134|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  135|      1|		G_STRUCT_OFFSET(VipsWrap, y),
  136|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
  137|      1|}

zoom.c:vips_zoom_class_init:
  358|      1|{
  359|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  360|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  361|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  362|       |
  363|      1|	gobject_class->set_property = vips_object_set_property;
  364|      1|	gobject_class->get_property = vips_object_get_property;
  365|       |
  366|      1|	vobject_class->nickname = "zoom";
  367|      1|	vobject_class->description = _("zoom an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  368|      1|	vobject_class->build = vips_zoom_build;
  369|       |
  370|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  371|       |
  372|      1|	VIPS_ARG_IMAGE(class, "input", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  373|      1|		_("Input"),
  374|      1|		_("Input image"),
  375|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  376|      1|		G_STRUCT_OFFSET(VipsZoom, in));
  377|       |
  378|      1|	VIPS_ARG_INT(class, "xfac", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  379|      1|		_("Xfac"),
  380|      1|		_("Horizontal zoom factor"),
  381|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  382|      1|		G_STRUCT_OFFSET(VipsZoom, xfac),
  383|      1|		1, VIPS_MAX_COORD, 1);
  384|       |
  385|      1|	VIPS_ARG_INT(class, "yfac", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  386|      1|		_("Yfac"),
  387|      1|		_("Vertical zoom factor"),
  388|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  389|      1|		G_STRUCT_OFFSET(VipsZoom, yfac),
  390|      1|		1, VIPS_MAX_COORD, 1);
  391|      1|}

canny.c:vips_canny_class_init:
  427|      1|{
  428|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  429|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  430|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  431|       |
  432|      1|	gobject_class->set_property = vips_object_set_property;
  433|      1|	gobject_class->get_property = vips_object_get_property;
  434|       |
  435|      1|	object_class->nickname = "canny";
  436|      1|	object_class->description = _("Canny edge detector");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  437|      1|	object_class->build = vips_canny_build;
  438|       |
  439|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  440|       |
  441|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  442|      1|		_("Input"),
  443|      1|		_("Input image"),
  444|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  445|      1|		G_STRUCT_OFFSET(VipsCanny, in));
  446|       |
  447|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  448|      1|		_("Output"),
  449|      1|		_("Output image"),
  450|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  451|      1|		G_STRUCT_OFFSET(VipsCanny, out));
  452|       |
  453|      1|	VIPS_ARG_DOUBLE(class, "sigma", 10,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  454|      1|		_("Sigma"),
  455|      1|		_("Sigma of Gaussian"),
  456|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  457|      1|		G_STRUCT_OFFSET(VipsCanny, sigma),
  458|      1|		0.01, 1000, 1.4);
  459|       |
  460|      1|	VIPS_ARG_ENUM(class, "precision", 103,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  461|      1|		_("Precision"),
  462|      1|		_("Convolve with this precision"),
  463|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  464|      1|		G_STRUCT_OFFSET(VipsCanny, precision),
  465|      1|		VIPS_TYPE_PRECISION, VIPS_PRECISION_FLOAT);
  466|      1|}

compass.c:vips_compass_class_init:
  151|      1|{
  152|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  153|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  154|       |
  155|      1|	gobject_class->set_property = vips_object_set_property;
  156|      1|	gobject_class->get_property = vips_object_get_property;
  157|       |
  158|      1|	object_class->nickname = "compass";
  159|      1|	object_class->description = _("convolve with rotating mask");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  160|      1|	object_class->build = vips_compass_build;
  161|       |
  162|      1|	VIPS_ARG_INT(class, "times", 101,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  163|      1|		_("Times"),
  164|      1|		_("Rotate and convolve this many times"),
  165|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  166|      1|		G_STRUCT_OFFSET(VipsCompass, times),
  167|      1|		1, 1000, 2);
  168|       |
  169|      1|	VIPS_ARG_ENUM(class, "angle", 103,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  170|      1|		_("Angle"),
  171|      1|		_("Rotate mask by this much between convolutions"),
  172|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  173|      1|		G_STRUCT_OFFSET(VipsCompass, angle),
  174|      1|		VIPS_TYPE_ANGLE45, VIPS_ANGLE45_D90);
  175|       |
  176|      1|	VIPS_ARG_ENUM(class, "combine", 104,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  177|      1|		_("Combine"),
  178|      1|		_("Combine convolution results like this"),
  179|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  180|      1|		G_STRUCT_OFFSET(VipsCompass, combine),
  181|      1|		VIPS_TYPE_COMBINE, VIPS_COMBINE_MAX);
  182|       |
  183|      1|	VIPS_ARG_ENUM(class, "precision", 203,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  184|      1|		_("Precision"),
  185|      1|		_("Convolve with this precision"),
  186|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  187|      1|		G_STRUCT_OFFSET(VipsCompass, precision),
  188|      1|		VIPS_TYPE_PRECISION, VIPS_PRECISION_FLOAT);
  189|       |
  190|      1|	VIPS_ARG_INT(class, "layers", 204,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  191|      1|		_("Layers"),
  192|      1|		_("Use this many layers in approximation"),
  193|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  194|      1|		G_STRUCT_OFFSET(VipsCompass, layers),
  195|      1|		1, 1000, 5);
  196|       |
  197|      1|	VIPS_ARG_INT(class, "cluster", 205,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  198|      1|		_("Cluster"),
  199|      1|		_("Cluster lines closer than this in approximation"),
  200|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  201|      1|		G_STRUCT_OFFSET(VipsCompass, cluster),
  202|      1|		1, 100, 1);
  203|      1|}

conv.c:vips_conv_class_init:
  122|      1|{
  123|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  124|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  125|       |
  126|      1|	gobject_class->set_property = vips_object_set_property;
  127|      1|	gobject_class->get_property = vips_object_get_property;
  128|       |
  129|      1|	object_class->nickname = "conv";
  130|      1|	object_class->description = _("convolution operation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  131|      1|	object_class->build = vips_conv_build;
  132|       |
  133|      1|	VIPS_ARG_ENUM(class, "precision", 103,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  134|      1|		_("Precision"),
  135|      1|		_("Convolve with this precision"),
  136|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  137|      1|		G_STRUCT_OFFSET(VipsConv, precision),
  138|      1|		VIPS_TYPE_PRECISION, VIPS_PRECISION_FLOAT);
  139|       |
  140|      1|	VIPS_ARG_INT(class, "layers", 104,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  141|      1|		_("Layers"),
  142|      1|		_("Use this many layers in approximation"),
  143|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  144|      1|		G_STRUCT_OFFSET(VipsConv, layers),
  145|      1|		1, 1000, 5);
  146|       |
  147|      1|	VIPS_ARG_INT(class, "cluster", 105,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  148|      1|		_("Cluster"),
  149|      1|		_("Cluster lines closer than this in approximation"),
  150|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  151|      1|		G_STRUCT_OFFSET(VipsConv, cluster),
  152|      1|		1, 100, 1);
  153|      1|}

conva.c:vips_conva_class_init:
 1311|      1|{
 1312|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1313|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1314|       |
 1315|      1|	gobject_class->set_property = vips_object_set_property;
 1316|      1|	gobject_class->get_property = vips_object_get_property;
 1317|       |
 1318|      1|	object_class->nickname = "conva";
 1319|      1|	object_class->description = _("approximate integer convolution");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1320|      1|	object_class->build = vips_conva_build;
 1321|       |
 1322|      1|	VIPS_ARG_INT(class, "layers", 104,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1323|      1|		_("Layers"),
 1324|      1|		_("Use this many layers in approximation"),
 1325|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1326|      1|		G_STRUCT_OFFSET(VipsConva, layers),
 1327|      1|		1, 1000, 5);
 1328|       |
 1329|      1|	VIPS_ARG_INT(class, "cluster", 105,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1330|      1|		_("Cluster"),
 1331|      1|		_("Cluster lines closer than this in approximation"),
 1332|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1333|      1|		G_STRUCT_OFFSET(VipsConva, cluster),
 1334|      1|		1, 100, 1);
 1335|      1|}

convasep.c:vips_convasep_class_init:
  905|      1|{
  906|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  907|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  908|       |
  909|      1|	gobject_class->set_property = vips_object_set_property;
  910|      1|	gobject_class->get_property = vips_object_get_property;
  911|       |
  912|      1|	object_class->nickname = "convasep";
  913|      1|	object_class->description =
  914|      1|		_("approximate separable integer convolution");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  915|      1|	object_class->build = vips_convasep_build;
  916|       |
  917|      1|	VIPS_ARG_INT(class, "layers", 104,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  918|      1|		_("Layers"),
  919|      1|		_("Use this many layers in approximation"),
  920|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  921|      1|		G_STRUCT_OFFSET(VipsConvasep, layers),
  922|      1|		1, 1000, 5);
  923|      1|}

convf.c:vips_convf_class_init:
  370|      1|{
  371|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  372|       |
  373|      1|	object_class->nickname = "convf";
  374|      1|	object_class->description = _("float convolution operation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  375|      1|	object_class->build = vips_convf_build;
  376|      1|}

convi.c:vips_convi_class_init:
 1234|      1|{
 1235|       |#ifdef HAVE_ORC
 1236|       |	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
 1237|       |#endif /*HAVE_ORC*/
 1238|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1239|       |
 1240|       |#ifdef HAVE_ORC
 1241|       |	gobject_class->finalize = vips_convi_finalize;
 1242|       |#endif /*HAVE_ORC*/
 1243|       |
 1244|      1|	object_class->nickname = "convi";
 1245|      1|	object_class->description = _("int convolution operation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1246|      1|	object_class->build = vips_convi_build;
 1247|      1|}

vips_convolution_operation_init:
  156|      2|{
  157|      2|	extern GType vips_conv_get_type(void);
  158|      2|	extern GType vips_conva_get_type(void);
  159|      2|	extern GType vips_convf_get_type(void);
  160|      2|	extern GType vips_convi_get_type(void);
  161|      2|	extern GType vips_convsep_get_type(void);
  162|      2|	extern GType vips_convasep_get_type(void);
  163|      2|	extern GType vips_compass_get_type(void);
  164|      2|	extern GType vips_fastcor_get_type(void);
  165|      2|	extern GType vips_spcor_get_type(void);
  166|      2|	extern GType vips_sharpen_get_type(void);
  167|      2|	extern GType vips_gaussblur_get_type(void);
  168|      2|	extern GType vips_sobel_get_type(void);
  169|      2|	extern GType vips_scharr_get_type(void);
  170|      2|	extern GType vips_prewitt_get_type(void);
  171|      2|	extern GType vips_canny_get_type(void);
  172|       |
  173|      2|	vips_conv_get_type();
  174|      2|	vips_conva_get_type();
  175|      2|	vips_convf_get_type();
  176|      2|	vips_convi_get_type();
  177|      2|	vips_compass_get_type();
  178|      2|	vips_convsep_get_type();
  179|      2|	vips_convasep_get_type();
  180|      2|	vips_fastcor_get_type();
  181|      2|	vips_spcor_get_type();
  182|      2|	vips_sharpen_get_type();
  183|      2|	vips_gaussblur_get_type();
  184|      2|	vips_sobel_get_type();
  185|      2|	vips_scharr_get_type();
  186|      2|	vips_prewitt_get_type();
  187|      2|	vips_canny_get_type();
  188|      2|}
convolution.c:vips_convolution_class_init:
  110|      1|{
  111|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  112|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  113|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  114|       |
  115|      1|	gobject_class->set_property = vips_object_set_property;
  116|      1|	gobject_class->get_property = vips_object_get_property;
  117|       |
  118|      1|	vobject_class->nickname = "convolution";
  119|      1|	vobject_class->description = _("convolution operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  120|      1|	vobject_class->build = vips_convolution_build;
  121|       |
  122|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  123|       |
  124|       |	/* Inputs set by subclassess.
  125|       |	 */
  126|       |
  127|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  128|      1|		_("Input"),
  129|      1|		_("Input image argument"),
  130|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  131|      1|		G_STRUCT_OFFSET(VipsConvolution, in));
  132|       |
  133|      1|	VIPS_ARG_IMAGE(class, "out", 10,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  134|      1|		_("Output"),
  135|      1|		_("Output image"),
  136|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  137|      1|		G_STRUCT_OFFSET(VipsConvolution, out));
  138|       |
  139|      1|	VIPS_ARG_IMAGE(class, "mask", 20,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  140|      1|		_("Mask"),
  141|      1|		_("Input matrix image"),
  142|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  143|      1|		G_STRUCT_OFFSET(VipsConvolution, mask));
  144|      1|}

convsep.c:vips_convsep_class_init:
  118|      1|{
  119|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  120|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  121|       |
  122|      1|	gobject_class->set_property = vips_object_set_property;
  123|      1|	gobject_class->get_property = vips_object_get_property;
  124|       |
  125|      1|	object_class->nickname = "convsep";
  126|      1|	object_class->description = _("separable convolution operation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  127|      1|	object_class->build = vips_convsep_build;
  128|       |
  129|      1|	VIPS_ARG_ENUM(class, "precision", 203,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  130|      1|		_("Precision"),
  131|      1|		_("Convolve with this precision"),
  132|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  133|      1|		G_STRUCT_OFFSET(VipsConvsep, precision),
  134|      1|		VIPS_TYPE_PRECISION, VIPS_PRECISION_FLOAT);
  135|       |
  136|      1|	VIPS_ARG_INT(class, "layers", 204,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  137|      1|		_("Layers"),
  138|      1|		_("Use this many layers in approximation"),
  139|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  140|      1|		G_STRUCT_OFFSET(VipsConvsep, layers),
  141|      1|		1, 1000, 5);
  142|       |
  143|      1|	VIPS_ARG_INT(class, "cluster", 205,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  144|      1|		_("Cluster"),
  145|      1|		_("Cluster lines closer than this in approximation"),
  146|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  147|      1|		G_STRUCT_OFFSET(VipsConvsep, cluster),
  148|      1|		1, 100, 1);
  149|      1|}

correlation.c:vips_correlation_class_init:
  135|      1|{
  136|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  138|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  139|       |
  140|      1|	gobject_class->set_property = vips_object_set_property;
  141|      1|	gobject_class->get_property = vips_object_get_property;
  142|       |
  143|      1|	object_class->nickname = "correlation";
  144|      1|	object_class->description = _("correlation operation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  145|      1|	object_class->build = vips_correlation_build;
  146|       |
  147|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  148|       |
  149|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  150|      1|		_("Input"),
  151|      1|		_("Input image argument"),
  152|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  153|      1|		G_STRUCT_OFFSET(VipsCorrelation, in));
  154|       |
  155|      1|	VIPS_ARG_IMAGE(class, "ref", 10,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  156|      1|		_("Mask"),
  157|      1|		_("Input reference image"),
  158|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  159|      1|		G_STRUCT_OFFSET(VipsCorrelation, ref));
  160|       |
  161|      1|	VIPS_ARG_IMAGE(class, "out", 20,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  162|      1|		_("Output"),
  163|      1|		_("Output image"),
  164|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  165|      1|		G_STRUCT_OFFSET(VipsCorrelation, out));
  166|      1|}

edge.c:vips_edge_class_init:
  204|      1|{
  205|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  207|       |
  208|      1|	gobject_class->dispose = vips_edge_dispose;
  209|      1|	gobject_class->set_property = vips_object_set_property;
  210|      1|	gobject_class->get_property = vips_object_get_property;
  211|       |
  212|      1|	object_class->nickname = "edge";
  213|      1|	object_class->description = _("Edge detector");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  214|      1|	object_class->build = vips_edge_build;
  215|       |
  216|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  217|      1|		_("Input"),
  218|      1|		_("Input image"),
  219|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  220|      1|		G_STRUCT_OFFSET(VipsEdge, in));
  221|       |
  222|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  223|      1|		_("Output"),
  224|      1|		_("Output image"),
  225|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  226|      1|		G_STRUCT_OFFSET(VipsEdge, out));
  227|      1|}
edge.c:vips_sobel_class_init:
  254|      1|{
  255|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  256|       |
  257|      1|	object_class->nickname = "sobel";
  258|      1|	object_class->description = _("Sobel edge detector");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  259|      1|	object_class->build = vips_sobel_build;
  260|      1|}
edge.c:vips_scharr_class_init:
  287|      1|{
  288|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  289|       |
  290|      1|	object_class->nickname = "scharr";
  291|      1|	object_class->description = _("Scharr edge detector");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  292|      1|	object_class->build = vips_scharr_build;
  293|      1|}
edge.c:vips_prewitt_class_init:
  320|      1|{
  321|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  322|       |
  323|      1|	object_class->nickname = "prewitt";
  324|      1|	object_class->description = _("Prewitt edge detector");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  325|      1|	object_class->build = vips_prewitt_build;
  326|      1|}

fastcor.c:vips_fastcor_class_init:
  213|      1|{
  214|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  215|      1|	VipsCorrelationClass *cclass = VIPS_CORRELATION_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_CORRELATION, VipsCorrelationClass))
  ------------------
  216|       |
  217|      1|	object_class->nickname = "fastcor";
  218|      1|	object_class->description = _("fast correlation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  219|       |
  220|      1|	cclass->format_table = vips_fastcor_format_table;
  221|      1|	cclass->correlation = vips_fastcor_correlation;
  222|      1|}

gaussblur.c:vips_gaussblur_class_init:
  117|      1|{
  118|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  120|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  121|       |
  122|      1|	gobject_class->set_property = vips_object_set_property;
  123|      1|	gobject_class->get_property = vips_object_get_property;
  124|       |
  125|      1|	object_class->nickname = "gaussblur";
  126|      1|	object_class->description = _("gaussian blur");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  127|      1|	object_class->build = vips_gaussblur_build;
  128|       |
  129|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  130|       |
  131|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  132|      1|		_("Input"),
  133|      1|		_("Input image"),
  134|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  135|      1|		G_STRUCT_OFFSET(VipsGaussblur, in));
  136|       |
  137|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  138|      1|		_("Output"),
  139|      1|		_("Output image"),
  140|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  141|      1|		G_STRUCT_OFFSET(VipsGaussblur, out));
  142|       |
  143|      1|	VIPS_ARG_DOUBLE(class, "sigma", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  144|      1|		_("Sigma"),
  145|      1|		_("Sigma of Gaussian"),
  146|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  147|      1|		G_STRUCT_OFFSET(VipsGaussblur, sigma),
  148|      1|		0.0, 1000, 1.5);
  149|       |
  150|      1|	VIPS_ARG_DOUBLE(class, "min_ampl", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  151|      1|		_("Minimum amplitude"),
  152|      1|		_("Minimum amplitude of Gaussian"),
  153|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  154|      1|		G_STRUCT_OFFSET(VipsGaussblur, min_ampl),
  155|      1|		0.001, 1.0, 0.2);
  156|       |
  157|      1|	VIPS_ARG_ENUM(class, "precision", 4,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  158|      1|		_("Precision"),
  159|      1|		_("Convolve with this precision"),
  160|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  161|      1|		G_STRUCT_OFFSET(VipsGaussblur, precision),
  162|      1|		VIPS_TYPE_PRECISION, VIPS_PRECISION_INTEGER);
  163|      1|}

sharpen.c:vips_sharpen_class_init:
  307|      1|{
  308|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  310|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  311|       |
  312|      1|	gobject_class->set_property = vips_object_set_property;
  313|      1|	gobject_class->get_property = vips_object_get_property;
  314|       |
  315|      1|	object_class->nickname = "sharpen";
  316|      1|	object_class->description = _("unsharp masking for print");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  317|      1|	object_class->build = vips_sharpen_build;
  318|       |
  319|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  320|       |
  321|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  322|      1|		_("Input"),
  323|      1|		_("Input image"),
  324|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  325|      1|		G_STRUCT_OFFSET(VipsSharpen, in));
  326|       |
  327|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  328|      1|		_("Output"),
  329|      1|		_("Output image"),
  330|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  331|      1|		G_STRUCT_OFFSET(VipsSharpen, out));
  332|       |
  333|      1|	VIPS_ARG_DOUBLE(class, "sigma", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  334|      1|		_("Sigma"),
  335|      1|		_("Sigma of Gaussian"),
  336|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  337|      1|		G_STRUCT_OFFSET(VipsSharpen, sigma),
  338|      1|		0.000001, 10.0, 0.5);
  339|       |
  340|      1|	VIPS_ARG_DOUBLE(class, "x1", 5,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  341|      1|		_("x1"),
  342|      1|		_("Flat/jaggy threshold"),
  343|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  344|      1|		G_STRUCT_OFFSET(VipsSharpen, x1),
  345|      1|		0, 1000000, 2.0);
  346|       |
  347|      1|	VIPS_ARG_DOUBLE(class, "y2", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  348|      1|		_("y2"),
  349|      1|		_("Maximum brightening"),
  350|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  351|      1|		G_STRUCT_OFFSET(VipsSharpen, y2),
  352|      1|		0, 1000000, 10);
  353|       |
  354|      1|	VIPS_ARG_DOUBLE(class, "y3", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  355|      1|		_("y3"),
  356|      1|		_("Maximum darkening"),
  357|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  358|      1|		G_STRUCT_OFFSET(VipsSharpen, y3),
  359|      1|		0, 1000000, 20);
  360|       |
  361|      1|	VIPS_ARG_DOUBLE(class, "m1", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  362|      1|		_("m1"),
  363|      1|		_("Slope for flat areas"),
  364|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  365|      1|		G_STRUCT_OFFSET(VipsSharpen, m1),
  366|      1|		0, 1000000, 0.0);
  367|       |
  368|      1|	VIPS_ARG_DOUBLE(class, "m2", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  369|      1|		_("m2"),
  370|      1|		_("Slope for jaggy areas"),
  371|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  372|      1|		G_STRUCT_OFFSET(VipsSharpen, m2),
  373|      1|		0, 1000000, 3.0);
  374|       |
  375|       |	/* We used to have a radius control.
  376|       |	 */
  377|      1|	VIPS_ARG_INT(class, "radius", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  378|      1|		_("Radius"),
  379|      1|		_("Radius of Gaussian"),
  380|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  381|      1|		G_STRUCT_OFFSET(VipsSharpen, radius),
  382|      1|		1, 100, 1);
  383|      1|}

spcor.c:vips_spcor_class_init:
  312|      1|{
  313|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  314|      1|	VipsCorrelationClass *cclass = VIPS_CORRELATION_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_CORRELATION, VipsCorrelationClass))
  ------------------
  315|       |
  316|      1|	object_class->nickname = "spcor";
  317|      1|	object_class->description = _("spatial correlation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  318|       |
  319|      1|	cclass->format_table = vips_spcor_format_table;
  320|      1|	cclass->pre_generate = vips_spcor_pre_generate;
  321|      1|	cclass->correlation = vips_spcor_correlation;
  322|      1|}

vips_black:
  186|      2|{
  187|      2|	va_list ap;
  188|      2|	int result;
  189|       |
  190|      2|	va_start(ap, height);
  191|      2|	result = vips_call_split("black", ap, out, width, height);
  192|      2|	va_end(ap);
  193|       |
  194|      2|	return result;
  195|      2|}
black.c:vips_black_class_init:
  126|      1|{
  127|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  128|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  129|       |
  130|      1|	VIPS_DEBUG_MSG("vips_black_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  131|       |
  132|      1|	gobject_class->set_property = vips_object_set_property;
  133|      1|	gobject_class->get_property = vips_object_get_property;
  134|       |
  135|      1|	vobject_class->nickname = "black";
  136|      1|	vobject_class->description = _("make a black image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  137|      1|	vobject_class->build = vips_black_build;
  138|       |
  139|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  140|      1|		_("Width"),
  141|      1|		_("Image width in pixels"),
  142|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  143|      1|		G_STRUCT_OFFSET(VipsBlack, width),
  144|      1|		1, VIPS_MAX_COORD, 1);
  145|       |
  146|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  147|      1|		_("Height"),
  148|      1|		_("Image height in pixels"),
  149|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  150|      1|		G_STRUCT_OFFSET(VipsBlack, height),
  151|      1|		1, VIPS_MAX_COORD, 1);
  152|       |
  153|      1|	VIPS_ARG_INT(class, "bands", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  154|      1|		_("Bands"),
  155|      1|		_("Number of bands in image"),
  156|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  157|      1|		G_STRUCT_OFFSET(VipsBlack, bands),
  158|      1|		1, VIPS_MAX_COORD, 1);
  159|      1|}
black.c:vips_black_build:
  101|      2|{
  102|      2|	VipsCreate *create = VIPS_CREATE(object);
  ------------------
  |  |   40|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|		VIPS_TYPE_CREATE, VipsCreate))
  ------------------
  103|      2|	VipsBlack *black = (VipsBlack *) object;
  104|       |
  105|      2|	if (VIPS_OBJECT_CLASS(vips_black_parent_class)->build(object))
  ------------------
  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (105:6): [True: 0, False: 2]
  ------------------
  106|      0|		return -1;
  107|       |
  108|      2|	vips_image_init_fields(create->out,
  109|      2|		black->width, black->height, black->bands,
  110|      2|		VIPS_FORMAT_UCHAR, VIPS_CODING_NONE,
  111|      2|		VIPS_INTERPRETATION_MULTIBAND,
  112|      2|		1.0, 1.0);
  113|      2|	if (vips_image_pipelinev(create->out,
  ------------------
  |  Branch (113:6): [True: 0, False: 2]
  ------------------
  114|      2|			VIPS_DEMAND_STYLE_ANY, NULL))
  115|      0|		return -1;
  116|       |
  117|      2|	if (vips_image_generate(create->out,
  ------------------
  |  Branch (117:6): [True: 0, False: 2]
  ------------------
  118|      2|			NULL, vips_black_gen, NULL, NULL, NULL))
  119|      0|		return -1;
  120|       |
  121|      2|	return 0;
  122|      2|}
black.c:vips_black_gen:
   85|      2|{
   86|       |	/*
   87|       |	VipsRect *r = &out_region->valid;
   88|       |
   89|       |	printf("vips_black_gen: "
   90|       |		   "left = %d, top = %d, width = %d, height = %d\n",
   91|       |		r->left, r->top, r->width, r->height);
   92|       |	 */
   93|       |
   94|      2|	vips_region_black(out_region);
   95|       |
   96|      2|	return 0;
   97|      2|}
black.c:vips_black_init:
  163|      2|{
  164|      2|	black->bands = 1;
  165|      2|}

buildlut.c:vips_buildlut_class_init:
  250|      1|{
  251|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|       |
  254|      1|	gobject_class->dispose = vips_buildlut_dispose;
  255|      1|	gobject_class->set_property = vips_object_set_property;
  256|      1|	gobject_class->get_property = vips_object_get_property;
  257|       |
  258|      1|	vobject_class->nickname = "buildlut";
  259|      1|	vobject_class->description = _("build a look-up table");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  260|      1|	vobject_class->build = vips_buildlut_build;
  261|       |
  262|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  263|      1|		_("Input"),
  264|      1|		_("Matrix of XY coordinates"),
  265|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  266|      1|		G_STRUCT_OFFSET(VipsBuildlut, in));
  267|      1|}

vips_create_operation_init:
  137|      2|{
  138|      2|	extern GType vips_black_get_type(void);
  139|      2|	extern GType vips_gaussmat_get_type(void);
  140|      2|	extern GType vips_logmat_get_type(void);
  141|      2|	extern GType vips_gaussnoise_get_type(void);
  142|       |#ifdef HAVE_PANGOCAIRO
  143|       |	extern GType vips_text_get_type(void);
  144|       |#endif /*HAVE_PANGOCAIRO*/
  145|      2|	extern GType vips_xyz_get_type(void);
  146|      2|	extern GType vips_sdf_get_type(void);
  147|      2|	extern GType vips_eye_get_type(void);
  148|      2|	extern GType vips_grey_get_type(void);
  149|      2|	extern GType vips_zone_get_type(void);
  150|      2|	extern GType vips_sines_get_type(void);
  151|      2|	extern GType vips_buildlut_get_type(void);
  152|      2|	extern GType vips_invertlut_get_type(void);
  153|      2|	extern GType vips_tonelut_get_type(void);
  154|      2|	extern GType vips_identity_get_type(void);
  155|      2|	extern GType vips_mask_butterworth_get_type(void);
  156|      2|	extern GType vips_mask_butterworth_ring_get_type(void);
  157|      2|	extern GType vips_mask_butterworth_band_get_type(void);
  158|      2|	extern GType vips_mask_gaussian_get_type(void);
  159|      2|	extern GType vips_mask_gaussian_ring_get_type(void);
  160|      2|	extern GType vips_mask_gaussian_band_get_type(void);
  161|      2|	extern GType vips_mask_ideal_get_type(void);
  162|      2|	extern GType vips_mask_ideal_ring_get_type(void);
  163|      2|	extern GType vips_mask_ideal_band_get_type(void);
  164|      2|	extern GType vips_mask_fractal_get_type(void);
  165|      2|	extern GType vips_fractsurf_get_type(void);
  166|      2|	extern GType vips_worley_get_type(void);
  167|      2|	extern GType vips_perlin_get_type(void);
  168|       |
  169|      2|	vips_black_get_type();
  170|      2|	vips_gaussmat_get_type();
  171|      2|	vips_logmat_get_type();
  172|      2|	vips_gaussnoise_get_type();
  173|       |#ifdef HAVE_PANGOCAIRO
  174|       |	vips_text_get_type();
  175|       |#endif /*HAVE_PANGOCAIRO*/
  176|      2|	vips_xyz_get_type();
  177|      2|	vips_sdf_get_type();
  178|      2|	vips_eye_get_type();
  179|      2|	vips_grey_get_type();
  180|      2|	vips_zone_get_type();
  181|      2|	vips_sines_get_type();
  182|      2|	vips_buildlut_get_type();
  183|      2|	vips_invertlut_get_type();
  184|      2|	vips_tonelut_get_type();
  185|      2|	vips_identity_get_type();
  186|      2|	vips_mask_ideal_get_type();
  187|      2|	vips_mask_ideal_ring_get_type();
  188|      2|	vips_mask_ideal_band_get_type();
  189|      2|	vips_mask_butterworth_get_type();
  190|      2|	vips_mask_butterworth_ring_get_type();
  191|      2|	vips_mask_butterworth_band_get_type();
  192|      2|	vips_mask_gaussian_get_type();
  193|      2|	vips_mask_gaussian_ring_get_type();
  194|      2|	vips_mask_gaussian_band_get_type();
  195|      2|	vips_mask_fractal_get_type();
  196|      2|	vips_fractsurf_get_type();
  197|      2|	vips_worley_get_type();
  198|      2|	vips_perlin_get_type();
  199|      2|}
create.c:vips_create_class_init:
  112|      1|{
  113|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  114|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|       |
  116|      1|	gobject_class->set_property = vips_object_set_property;
  117|      1|	gobject_class->get_property = vips_object_get_property;
  118|       |
  119|      1|	vobject_class->nickname = "create";
  120|      1|	vobject_class->description = _("create operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  121|      1|	vobject_class->build = vips_create_build;
  122|       |
  123|      1|	VIPS_ARG_IMAGE(class, "out", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  124|      1|		_("Output"),
  125|      1|		_("Output image"),
  126|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  127|      1|		G_STRUCT_OFFSET(VipsCreate, out));
  128|      1|}
create.c:vips_create_build:
   93|      2|{
   94|      2|	VipsCreate *create = VIPS_CREATE(object);
  ------------------
  |  |   40|      2|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      2|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      2|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|		VIPS_TYPE_CREATE, VipsCreate))
  ------------------
   95|       |
   96|       |#ifdef DEBUG
   97|       |	printf("vips_create_build: ");
   98|       |	vips_object_print_name(object);
   99|       |	printf("\n");
  100|       |#endif /*DEBUG*/
  101|       |
  102|      2|	g_object_set(create, "out", vips_image_new(), NULL);
  103|       |
  104|      2|	if (VIPS_OBJECT_CLASS(vips_create_parent_class)->build(object))
  ------------------
  |  |  435|      2|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      2|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      2|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (104:6): [True: 0, False: 2]
  ------------------
  105|      0|		return -1;
  106|       |
  107|      2|	return 0;
  108|      2|}
create.c:vips_create_init:
  132|      2|{
  133|      2|}

eye.c:vips_eye_class_init:
   93|      1|{
   94|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|      1|	VipsPointClass *point_class = VIPS_POINT_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_POINT, VipsPointClass))
  ------------------
   97|       |
   98|      1|	gobject_class->set_property = vips_object_set_property;
   99|      1|	gobject_class->get_property = vips_object_get_property;
  100|       |
  101|      1|	vobject_class->nickname = "eye";
  102|      1|	vobject_class->description =
  103|      1|		_("make an image showing the eye's spatial response");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  104|       |
  105|      1|	point_class->point = vips_eye_point;
  106|       |
  107|      1|	VIPS_ARG_DOUBLE(class, "factor", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  108|      1|		_("Factor"),
  109|      1|		_("Maximum spatial frequency"),
  110|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  111|      1|		G_STRUCT_OFFSET(VipsEye, factor),
  112|      1|		0.0, 1.0, 0.5);
  113|      1|}

fractsurf.c:vips_fractsurf_class_init:
   92|      1|{
   93|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   94|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|       |
   96|      1|	gobject_class->set_property = vips_object_set_property;
   97|      1|	gobject_class->get_property = vips_object_get_property;
   98|       |
   99|      1|	vobject_class->nickname = "fractsurf";
  100|      1|	vobject_class->description = _("make a fractal surface");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  101|      1|	vobject_class->build = vips_fractsurf_build;
  102|       |
  103|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  104|      1|		_("Width"),
  105|      1|		_("Image width in pixels"),
  106|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  107|      1|		G_STRUCT_OFFSET(VipsFractsurf, width),
  108|      1|		1, VIPS_MAX_COORD, 64);
  109|       |
  110|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  111|      1|		_("Height"),
  112|      1|		_("Image height in pixels"),
  113|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  114|      1|		G_STRUCT_OFFSET(VipsFractsurf, height),
  115|      1|		1, VIPS_MAX_COORD, 64);
  116|       |
  117|      1|	VIPS_ARG_DOUBLE(class, "fractal_dimension", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  118|      1|		_("Fractal dimension"),
  119|      1|		_("Fractal dimension"),
  120|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  121|      1|		G_STRUCT_OFFSET(VipsFractsurf, fractal_dimension),
  122|      1|		2.0, 3.0, 2.5);
  123|      1|}

gaussmat.c:vips_gaussmat_class_init:
  173|      1|{
  174|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  176|       |
  177|      1|	gobject_class->set_property = vips_object_set_property;
  178|      1|	gobject_class->get_property = vips_object_get_property;
  179|       |
  180|      1|	vobject_class->nickname = "gaussmat";
  181|      1|	vobject_class->description = _("make a gaussian image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  182|      1|	vobject_class->build = vips_gaussmat_build;
  183|       |
  184|      1|	VIPS_ARG_DOUBLE(class, "sigma", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  185|      1|		_("Sigma"),
  186|      1|		_("Sigma of Gaussian"),
  187|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  188|      1|		G_STRUCT_OFFSET(VipsGaussmat, sigma),
  189|      1|		0.000001, 10000.0, 1.0);
  190|       |
  191|      1|	VIPS_ARG_DOUBLE(class, "min_ampl", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  192|      1|		_("Minimum amplitude"),
  193|      1|		_("Minimum amplitude of Gaussian"),
  194|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  195|      1|		G_STRUCT_OFFSET(VipsGaussmat, min_ampl),
  196|      1|		0.000001, 10000.0, 0.1);
  197|       |
  198|      1|	VIPS_ARG_BOOL(class, "separable", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  199|      1|		_("Separable"),
  200|      1|		_("Generate separable Gaussian"),
  201|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  202|      1|		G_STRUCT_OFFSET(VipsGaussmat, separable),
  203|      1|		FALSE);
  204|       |
  205|      1|	VIPS_ARG_BOOL(class, "integer", 5,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  206|      1|		_("Integer"),
  207|      1|		_("Generate integer Gaussian"),
  208|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  209|      1|		G_STRUCT_OFFSET(VipsGaussmat, integer),
  210|      1|		FALSE);
  211|       |
  212|      1|	VIPS_ARG_ENUM(class, "precision", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  213|      1|		_("Precision"),
  214|      1|		_("Generate with this precision"),
  215|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  216|      1|		G_STRUCT_OFFSET(VipsGaussmat, precision),
  217|      1|		VIPS_TYPE_PRECISION, VIPS_PRECISION_INTEGER);
  218|      1|}

gaussnoise.c:vips_gaussnoise_class_init:
  150|      1|{
  151|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  152|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  153|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
  154|       |
  155|      1|	gobject_class->set_property = vips_object_set_property;
  156|      1|	gobject_class->get_property = vips_object_get_property;
  157|       |
  158|      1|	vobject_class->nickname = "gaussnoise";
  159|      1|	vobject_class->description = _("make a gaussnoise image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  160|      1|	vobject_class->build = vips_gaussnoise_build;
  161|       |
  162|       |	/* We want a new set of numbers each time.
  163|       |	 */
  164|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  165|       |
  166|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  167|      1|		_("Width"),
  168|      1|		_("Image width in pixels"),
  169|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  170|      1|		G_STRUCT_OFFSET(VipsGaussnoise, width),
  171|      1|		1, VIPS_MAX_COORD, 1);
  172|       |
  173|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  174|      1|		_("Height"),
  175|      1|		_("Image height in pixels"),
  176|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  177|      1|		G_STRUCT_OFFSET(VipsGaussnoise, height),
  178|      1|		1, VIPS_MAX_COORD, 1);
  179|       |
  180|      1|	VIPS_ARG_DOUBLE(class, "mean", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  181|      1|		_("Mean"),
  182|      1|		_("Mean of pixels in generated image"),
  183|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  184|      1|		G_STRUCT_OFFSET(VipsGaussnoise, mean),
  185|      1|		-10000000, 1000000, 128);
  186|       |
  187|      1|	VIPS_ARG_DOUBLE(class, "sigma", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  188|      1|		_("Sigma"),
  189|      1|		_("Standard deviation of pixels in generated image"),
  190|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  191|      1|		G_STRUCT_OFFSET(VipsGaussnoise, sigma),
  192|      1|		0, 100000, 30);
  193|       |
  194|      1|	VIPS_ARG_INT(class, "seed", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  195|      1|		_("Seed"),
  196|      1|		_("Random number seed"),
  197|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  198|      1|		G_STRUCT_OFFSET(VipsGaussnoise, seed),
  199|      1|		INT_MIN, INT_MAX, 0);
  200|      1|}

grey.c:vips_grey_class_init:
   84|      1|{
   85|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   86|      1|	VipsPointClass *point_class = VIPS_POINT_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_POINT, VipsPointClass))
  ------------------
   87|       |
   88|      1|	vobject_class->nickname = "grey";
   89|      1|	vobject_class->description = _("make a grey ramp image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   90|       |
   91|      1|	point_class->point = vips_grey_point;
   92|      1|	point_class->min = 0.0;
   93|      1|	point_class->max = 1.0;
   94|      1|}

identity.c:vips_identity_class_init:
  130|      1|{
  131|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  133|       |
  134|      1|	gobject_class->set_property = vips_object_set_property;
  135|      1|	gobject_class->get_property = vips_object_get_property;
  136|       |
  137|      1|	vobject_class->nickname = "identity";
  138|      1|	vobject_class->description =
  139|      1|		_("make a 1D image where pixel values are indexes");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  140|      1|	vobject_class->build = vips_identity_build;
  141|       |
  142|      1|	VIPS_ARG_INT(class, "bands", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  143|      1|		_("Bands"),
  144|      1|		_("Number of bands in LUT"),
  145|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  146|      1|		G_STRUCT_OFFSET(VipsIdentity, bands),
  147|      1|		1, 100000, 1);
  148|       |
  149|      1|	VIPS_ARG_BOOL(class, "ushort", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  150|      1|		_("Ushort"),
  151|      1|		_("Create a 16-bit LUT"),
  152|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  153|      1|		G_STRUCT_OFFSET(VipsIdentity, ushort),
  154|      1|		FALSE);
  155|       |
  156|      1|	VIPS_ARG_INT(class, "size", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  157|      1|		_("Size"),
  158|      1|		_("Size of 16-bit LUT"),
  159|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  160|      1|		G_STRUCT_OFFSET(VipsIdentity, size),
  161|      1|		1, 65536, 65536);
  162|      1|}

invertlut.c:vips_invertlut_class_init:
  275|      1|{
  276|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  277|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  278|       |
  279|      1|	gobject_class->dispose = vips_invertlut_dispose;
  280|      1|	gobject_class->set_property = vips_object_set_property;
  281|      1|	gobject_class->get_property = vips_object_get_property;
  282|       |
  283|      1|	vobject_class->nickname = "invertlut";
  284|      1|	vobject_class->description = _("build an inverted look-up table");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  285|      1|	vobject_class->build = vips_invertlut_build;
  286|       |
  287|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  288|      1|		_("Input"),
  289|      1|		_("Matrix of XY coordinates"),
  290|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  291|      1|		G_STRUCT_OFFSET(VipsInvertlut, in));
  292|       |
  293|      1|	VIPS_ARG_INT(class, "size", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  294|      1|		_("Size"),
  295|      1|		_("LUT size to generate"),
  296|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  297|      1|		G_STRUCT_OFFSET(VipsInvertlut, size),
  298|      1|		1, 1000000, 256);
  299|      1|}

logmat.c:vips_logmat_class_init:
  189|      1|{
  190|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|       |
  193|      1|	gobject_class->set_property = vips_object_set_property;
  194|      1|	gobject_class->get_property = vips_object_get_property;
  195|       |
  196|      1|	vobject_class->nickname = "logmat";
  197|      1|	vobject_class->description = _("make a Laplacian of Gaussian image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  198|      1|	vobject_class->build = vips_logmat_build;
  199|       |
  200|      1|	VIPS_ARG_DOUBLE(class, "sigma", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  201|      1|		_("Radius"),
  202|      1|		_("Radius of Gaussian"),
  203|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  204|      1|		G_STRUCT_OFFSET(VipsLogmat, sigma),
  205|      1|		0.000001, 10000.0, 1.0);
  206|       |
  207|      1|	VIPS_ARG_DOUBLE(class, "min_ampl", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  208|      1|		_("Width"),
  209|      1|		_("Minimum amplitude of Gaussian"),
  210|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  211|      1|		G_STRUCT_OFFSET(VipsLogmat, min_ampl),
  212|      1|		0.000001, 10000.0, 0.1);
  213|       |
  214|      1|	VIPS_ARG_BOOL(class, "separable", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  215|      1|		_("Separable"),
  216|      1|		_("Generate separable Gaussian"),
  217|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  218|      1|		G_STRUCT_OFFSET(VipsLogmat, separable),
  219|      1|		FALSE);
  220|       |
  221|      1|	VIPS_ARG_BOOL(class, "integer", 5,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  222|      1|		_("Integer"),
  223|      1|		_("Generate integer Gaussian"),
  224|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  225|      1|		G_STRUCT_OFFSET(VipsLogmat, integer),
  226|      1|		FALSE);
  227|       |
  228|      1|	VIPS_ARG_ENUM(class, "precision", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  229|      1|		_("Precision"),
  230|      1|		_("Generate with this precision"),
  231|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  232|      1|		G_STRUCT_OFFSET(VipsLogmat, precision),
  233|      1|		VIPS_TYPE_PRECISION, VIPS_PRECISION_INTEGER);
  234|      1|}

mask.c:vips_mask_class_init:
  105|      1|{
  106|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  108|      1|	VipsPointClass *point_class = VIPS_POINT_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_POINT, VipsPointClass))
  ------------------
  109|       |
  110|      1|	gobject_class->set_property = vips_object_set_property;
  111|      1|	gobject_class->get_property = vips_object_get_property;
  112|       |
  113|      1|	vobject_class->nickname = "mask";
  114|      1|	vobject_class->description = _("base class for frequency filters");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  115|       |
  116|      1|	point_class->point = vips_mask_point;
  117|      1|	point_class->min = 0.0;
  118|      1|	point_class->max = 1.0;
  119|      1|	point_class->interpretation = VIPS_INTERPRETATION_FOURIER;
  120|       |
  121|      1|	VIPS_ARG_BOOL(class, "optical", 5,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  122|      1|		_("Optical"),
  123|      1|		_("Rotate quadrants to optical space"),
  124|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  125|      1|		G_STRUCT_OFFSET(VipsMask, optical),
  126|      1|		FALSE);
  127|       |
  128|      1|	VIPS_ARG_BOOL(class, "reject", 5,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  129|      1|		_("Reject"),
  130|      1|		_("Invert the sense of the filter"),
  131|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  132|      1|		G_STRUCT_OFFSET(VipsMask, reject),
  133|      1|		FALSE);
  134|       |
  135|      1|	VIPS_ARG_BOOL(class, "nodc", 5,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  136|      1|		_("Nodc"),
  137|      1|		_("Remove DC component"),
  138|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  139|      1|		G_STRUCT_OFFSET(VipsMask, nodc),
  140|      1|		FALSE);
  141|      1|}

mask_butterworth.c:vips_mask_butterworth_class_init:
   77|      1|{
   78|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   79|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   81|       |
   82|      1|	gobject_class->set_property = vips_object_set_property;
   83|      1|	gobject_class->get_property = vips_object_get_property;
   84|       |
   85|      1|	vobject_class->nickname = "mask_butterworth";
   86|      1|	vobject_class->description = _("make a butterworth filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   87|       |
   88|      1|	mask_class->point = vips_mask_butterworth_point;
   89|       |
   90|      1|	VIPS_ARG_DOUBLE(class, "order", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   91|      1|		_("Order"),
   92|      1|		_("Filter order"),
   93|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   94|      1|		G_STRUCT_OFFSET(VipsMaskButterworth, order),
   95|      1|		1.0, 1000000.0, 1.0);
   96|       |
   97|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   98|      1|		_("Frequency cutoff"),
   99|      1|		_("Frequency cutoff"),
  100|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  101|      1|		G_STRUCT_OFFSET(VipsMaskButterworth, frequency_cutoff),
  102|      1|		0.0, 1000000.0, 0.5);
  103|       |
  104|      1|	VIPS_ARG_DOUBLE(class, "amplitude_cutoff", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  105|      1|		_("Amplitude cutoff"),
  106|      1|		_("Amplitude cutoff"),
  107|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  108|      1|		G_STRUCT_OFFSET(VipsMaskButterworth, amplitude_cutoff),
  109|      1|		0.0, 1.0, 0.5);
  110|      1|}

mask_butterworth_band.c:vips_mask_butterworth_band_class_init:
  101|      1|{
  102|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  103|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  104|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
  105|       |
  106|      1|	gobject_class->set_property = vips_object_set_property;
  107|      1|	gobject_class->get_property = vips_object_get_property;
  108|       |
  109|      1|	vobject_class->nickname = "mask_butterworth_band";
  110|      1|	vobject_class->description = _("make a butterworth_band filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  111|       |
  112|      1|	mask_class->point = vips_mask_butterworth_band_point;
  113|       |
  114|      1|	VIPS_ARG_DOUBLE(class, "order", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  115|      1|		_("Order"),
  116|      1|		_("Filter order"),
  117|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  118|      1|		G_STRUCT_OFFSET(VipsMaskButterworthBand, order),
  119|      1|		1.0, 1000000.0, 1.0);
  120|       |
  121|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff_x", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  122|      1|		_("Frequency cutoff x"),
  123|      1|		_("Frequency cutoff x"),
  124|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  125|      1|		G_STRUCT_OFFSET(VipsMaskButterworthBand, frequency_cutoff_x),
  126|      1|		0.0, 1000000.0, 0.5);
  127|       |
  128|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff_y", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  129|      1|		_("Frequency cutoff y"),
  130|      1|		_("Frequency cutoff y"),
  131|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  132|      1|		G_STRUCT_OFFSET(VipsMaskButterworthBand, frequency_cutoff_y),
  133|      1|		0.0, 1000000.0, 0.5);
  134|       |
  135|      1|	VIPS_ARG_DOUBLE(class, "radius", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  136|      1|		_("Radius"),
  137|      1|		_("Radius of circle"),
  138|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  139|      1|		G_STRUCT_OFFSET(VipsMaskButterworthBand, radius),
  140|      1|		0.0, 1000000.0, 0.1);
  141|       |
  142|      1|	VIPS_ARG_DOUBLE(class, "amplitude_cutoff", 10,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  143|      1|		_("Amplitude cutoff"),
  144|      1|		_("Amplitude cutoff"),
  145|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  146|      1|		G_STRUCT_OFFSET(VipsMaskButterworthBand, amplitude_cutoff),
  147|      1|		0.0, 1.0, 0.5);
  148|      1|}

mask_butterworth_ring.c:vips_mask_butterworth_ring_class_init:
   92|      1|{
   93|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   94|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   96|       |
   97|      1|	gobject_class->set_property = vips_object_set_property;
   98|      1|	gobject_class->get_property = vips_object_get_property;
   99|       |
  100|      1|	vobject_class->nickname = "mask_butterworth_ring";
  101|      1|	vobject_class->description = _("make a butterworth ring filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  102|       |
  103|      1|	mask_class->point = vips_mask_butterworth_ring_point;
  104|       |
  105|      1|	VIPS_ARG_DOUBLE(class, "ringwidth", 20,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  106|      1|		_("Ringwidth"),
  107|      1|		_("Ringwidth"),
  108|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  109|      1|		G_STRUCT_OFFSET(VipsMaskButterworthRing, ringwidth),
  110|      1|		0.0, 1000000.0, 0.1);
  111|      1|}

mask_fractal.c:vips_mask_fractal_class_init:
   79|      1|{
   80|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   81|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   82|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   83|       |
   84|      1|	gobject_class->set_property = vips_object_set_property;
   85|      1|	gobject_class->get_property = vips_object_get_property;
   86|       |
   87|      1|	vobject_class->nickname = "mask_fractal";
   88|      1|	vobject_class->description = _("make fractal filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   89|       |
   90|      1|	mask_class->point = vips_mask_fractal_point;
   91|       |
   92|      1|	VIPS_ARG_DOUBLE(class, "fractal_dimension", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   93|      1|		_("Fractal dimension"),
   94|      1|		_("Fractal dimension"),
   95|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   96|      1|		G_STRUCT_OFFSET(VipsMaskFractal, fractal_dimension),
   97|      1|		2.0, 3.0, 2.5);
   98|      1|}

mask_gaussian.c:vips_mask_gaussian_class_init:
   72|      1|{
   73|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   74|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   76|       |
   77|      1|	gobject_class->set_property = vips_object_set_property;
   78|      1|	gobject_class->get_property = vips_object_get_property;
   79|       |
   80|      1|	vobject_class->nickname = "mask_gaussian";
   81|      1|	vobject_class->description = _("make a gaussian filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   82|       |
   83|      1|	mask_class->point = vips_mask_gaussian_point;
   84|       |
   85|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   86|      1|		_("Frequency cutoff"),
   87|      1|		_("Frequency cutoff"),
   88|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   89|      1|		G_STRUCT_OFFSET(VipsMaskGaussian, frequency_cutoff),
   90|      1|		0.0, 1000000.0, 0.5);
   91|       |
   92|      1|	VIPS_ARG_DOUBLE(class, "amplitude_cutoff", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   93|      1|		_("Amplitude cutoff"),
   94|      1|		_("Amplitude cutoff"),
   95|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   96|      1|		G_STRUCT_OFFSET(VipsMaskGaussian, amplitude_cutoff),
   97|      1|		0.0, 1.0, 0.5);
   98|      1|}

mask_gaussian_band.c:vips_mask_gaussian_band_class_init:
   93|      1|{
   94|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   97|       |
   98|      1|	gobject_class->set_property = vips_object_set_property;
   99|      1|	gobject_class->get_property = vips_object_get_property;
  100|       |
  101|      1|	vobject_class->nickname = "mask_gaussian_band";
  102|      1|	vobject_class->description = _("make a gaussian filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  103|       |
  104|      1|	mask_class->point = vips_mask_gaussian_band_point;
  105|       |
  106|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff_x", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  107|      1|		_("Frequency cutoff x"),
  108|      1|		_("Frequency cutoff x"),
  109|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  110|      1|		G_STRUCT_OFFSET(VipsMaskGaussianBand, frequency_cutoff_x),
  111|      1|		0.0, 1000000.0, 0.5);
  112|       |
  113|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff_y", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  114|      1|		_("Frequency cutoff y"),
  115|      1|		_("Frequency cutoff y"),
  116|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  117|      1|		G_STRUCT_OFFSET(VipsMaskGaussianBand, frequency_cutoff_y),
  118|      1|		0.0, 1000000.0, 0.5);
  119|       |
  120|      1|	VIPS_ARG_DOUBLE(class, "radius", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  121|      1|		_("Radius"),
  122|      1|		_("Radius of circle"),
  123|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  124|      1|		G_STRUCT_OFFSET(VipsMaskGaussianBand, radius),
  125|      1|		0.0, 1000000.0, 0.1);
  126|       |
  127|      1|	VIPS_ARG_DOUBLE(class, "amplitude_cutoff", 10,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  128|      1|		_("Amplitude cutoff"),
  129|      1|		_("Amplitude cutoff"),
  130|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  131|      1|		G_STRUCT_OFFSET(VipsMaskGaussianBand, amplitude_cutoff),
  132|      1|		0.0, 1.0, 0.5);
  133|      1|}

mask_gaussian_ring.c:vips_mask_gaussian_ring_class_init:
   87|      1|{
   88|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   91|       |
   92|      1|	gobject_class->set_property = vips_object_set_property;
   93|      1|	gobject_class->get_property = vips_object_get_property;
   94|       |
   95|      1|	vobject_class->nickname = "mask_gaussian_ring";
   96|      1|	vobject_class->description = _("make a gaussian ring filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   97|       |
   98|      1|	mask_class->point = vips_mask_gaussian_ring_point;
   99|       |
  100|      1|	VIPS_ARG_DOUBLE(class, "ringwidth", 20,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  101|      1|		_("Ringwidth"),
  102|      1|		_("Ringwidth"),
  103|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  104|      1|		G_STRUCT_OFFSET(VipsMaskGaussianRing, ringwidth),
  105|      1|		0.0, 1000000.0, 0.5);
  106|      1|}

mask_ideal.c:vips_mask_ideal_class_init:
   70|      1|{
   71|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   72|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   74|       |
   75|      1|	gobject_class->set_property = vips_object_set_property;
   76|      1|	gobject_class->get_property = vips_object_get_property;
   77|       |
   78|      1|	vobject_class->nickname = "mask_ideal";
   79|      1|	vobject_class->description = _("make an ideal filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   80|       |
   81|      1|	mask_class->point = vips_mask_ideal_point;
   82|       |
   83|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   84|      1|		_("Frequency cutoff"),
   85|      1|		_("Frequency cutoff"),
   86|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   87|      1|		G_STRUCT_OFFSET(VipsMaskIdeal, frequency_cutoff),
   88|      1|		0.0, 1000000.0, 0.5);
   89|      1|}

mask_ideal_band.c:vips_mask_ideal_band_class_init:
   84|      1|{
   85|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   86|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   87|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   88|       |
   89|      1|	gobject_class->set_property = vips_object_set_property;
   90|      1|	gobject_class->get_property = vips_object_get_property;
   91|       |
   92|      1|	vobject_class->nickname = "mask_ideal_band";
   93|      1|	vobject_class->description = _("make an ideal band filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   94|       |
   95|      1|	mask_class->point = vips_mask_ideal_band_point;
   96|       |
   97|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff_x", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   98|      1|		_("Frequency cutoff x"),
   99|      1|		_("Frequency cutoff x"),
  100|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  101|      1|		G_STRUCT_OFFSET(VipsMaskIdealBand, frequency_cutoff_x),
  102|      1|		0.0, 1000000.0, 0.5);
  103|       |
  104|      1|	VIPS_ARG_DOUBLE(class, "frequency_cutoff_y", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  105|      1|		_("Frequency cutoff y"),
  106|      1|		_("Frequency cutoff y"),
  107|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  108|      1|		G_STRUCT_OFFSET(VipsMaskIdealBand, frequency_cutoff_y),
  109|      1|		0.0, 1000000.0, 0.5);
  110|       |
  111|      1|	VIPS_ARG_DOUBLE(class, "radius", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  112|      1|		_("Radius"),
  113|      1|		_("Radius of circle"),
  114|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  115|      1|		G_STRUCT_OFFSET(VipsMaskIdealBand, radius),
  116|      1|		0.0, 1000000.0, 0.1);
  117|      1|}

mask_ideal_ring.c:vips_mask_ideal_ring_class_init:
   84|      1|{
   85|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   86|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   87|      1|	VipsMaskClass *mask_class = VIPS_MASK_CLASS(class);
  ------------------
  |  |   49|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|      1|		VIPS_TYPE_MASK, VipsMaskClass))
  ------------------
   88|       |
   89|      1|	gobject_class->set_property = vips_object_set_property;
   90|      1|	gobject_class->get_property = vips_object_get_property;
   91|       |
   92|      1|	vobject_class->nickname = "mask_ideal_ring";
   93|      1|	vobject_class->description = _("make an ideal ring filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   94|       |
   95|      1|	mask_class->point = vips_mask_ideal_ring_point;
   96|       |
   97|      1|	VIPS_ARG_DOUBLE(class, "ringwidth", 20,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
   98|      1|		_("Ringwidth"),
   99|      1|		_("Ringwidth"),
  100|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  101|      1|		G_STRUCT_OFFSET(VipsMaskIdealRing, ringwidth),
  102|      1|		0.0, 1000000.0, 0.5);
  103|      1|}

perlin.c:vips_perlin_class_init:
  278|      1|{
  279|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  280|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  281|       |
  282|      1|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|      1|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
  283|       |
  284|      1|	VIPS_ONCE(&once, vips_perlin_make_tables, NULL);
  ------------------
  |  |   93|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|      1|	{ \
  |  |   95|      1|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|      1|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|      1| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      1|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|      1|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|      1|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 1, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|      1|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|      1|   else                                         \
  |  |  |  |  |  |  931|      1|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|      1|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|      1|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|      1|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      1|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  242|      1|   (once)->retval : \
  |  |  |  |  243|      1|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|      1|	} \
  |  |   98|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  285|       |
  286|      1|	gobject_class->set_property = vips_object_set_property;
  287|      1|	gobject_class->get_property = vips_object_get_property;
  288|       |
  289|      1|	vobject_class->nickname = "perlin";
  290|      1|	vobject_class->description = _("make a perlin noise image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  291|      1|	vobject_class->build = vips_perlin_build;
  292|       |
  293|      1|	VIPS_ARG_INT(class, "width", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  294|      1|		_("Width"),
  295|      1|		_("Image width in pixels"),
  296|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  297|      1|		G_STRUCT_OFFSET(VipsPerlin, width),
  298|      1|		1, VIPS_MAX_COORD, 1);
  299|       |
  300|      1|	VIPS_ARG_INT(class, "height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  301|      1|		_("Height"),
  302|      1|		_("Image height in pixels"),
  303|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  304|      1|		G_STRUCT_OFFSET(VipsPerlin, height),
  305|      1|		1, VIPS_MAX_COORD, 1);
  306|       |
  307|      1|	VIPS_ARG_INT(class, "cell_size", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  308|      1|		_("Cell size"),
  309|      1|		_("Size of Perlin cells"),
  310|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  311|      1|		G_STRUCT_OFFSET(VipsPerlin, cell_size),
  312|      1|		1, VIPS_MAX_COORD, 256);
  313|       |
  314|      1|	VIPS_ARG_BOOL(class, "uchar", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  315|      1|		_("Uchar"),
  316|      1|		_("Output an unsigned char image"),
  317|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  318|      1|		G_STRUCT_OFFSET(VipsPerlin, uchar),
  319|      1|		FALSE);
  320|       |
  321|      1|	VIPS_ARG_INT(class, "seed", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  322|      1|		_("Seed"),
  323|      1|		_("Random number seed"),
  324|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  325|      1|		G_STRUCT_OFFSET(VipsPerlin, seed),
  326|      1|		INT_MIN, INT_MAX, 0);
  327|      1|}
perlin.c:vips_perlin_make_tables:
  263|      1|{
  264|      1|	int i;
  265|       |
  266|    257|	for (i = 0; i < 256; i++) {
  ------------------
  |  Branch (266:14): [True: 256, False: 1]
  ------------------
  267|    256|		double angle = 2 * VIPS_PI * i / 256.0;
  ------------------
  |  |   47|    256|#define VIPS_PI (3.14159265358979323846)
  ------------------
  268|       |
  269|    256|		vips_perlin_cos[i] = cos(angle);
  270|    256|		vips_perlin_sin[i] = sin(angle);
  271|    256|	}
  272|       |
  273|      1|	return NULL;
  274|      1|}

point.c:vips_point_class_init:
  124|      1|{
  125|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  126|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  127|       |
  128|      1|	gobject_class->set_property = vips_object_set_property;
  129|      1|	gobject_class->get_property = vips_object_get_property;
  130|       |
  131|      1|	vobject_class->nickname = "point";
  132|      1|	vobject_class->description = _("make a point image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  133|      1|	vobject_class->build = vips_point_build;
  134|       |
  135|      1|	class->point = NULL;
  136|      1|	class->min = -1.0;
  137|      1|	class->max = 1.0;
  138|      1|	class->interpretation = VIPS_INTERPRETATION_MULTIBAND;
  139|       |
  140|      1|	VIPS_ARG_INT(class, "width", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  141|      1|		_("Width"),
  142|      1|		_("Image width in pixels"),
  143|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  144|      1|		G_STRUCT_OFFSET(VipsPoint, width),
  145|      1|		1, VIPS_MAX_COORD, 1);
  146|       |
  147|      1|	VIPS_ARG_INT(class, "height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  148|      1|		_("Height"),
  149|      1|		_("Image height in pixels"),
  150|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  151|      1|		G_STRUCT_OFFSET(VipsPoint, height),
  152|      1|		1, VIPS_MAX_COORD, 1);
  153|       |
  154|      1|	VIPS_ARG_BOOL(class, "uchar", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  155|      1|		_("Uchar"),
  156|      1|		_("Output an unsigned char image"),
  157|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  158|      1|		G_STRUCT_OFFSET(VipsPoint, uchar),
  159|      1|		FALSE);
  160|      1|}

sdf.c:vips_sdf_class_init:
  290|      1|{
  291|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  292|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  293|       |
  294|      1|	VIPS_DEBUG_MSG("vips_sdf_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  295|       |
  296|      1|	gobject_class->set_property = vips_object_set_property;
  297|      1|	gobject_class->get_property = vips_object_get_property;
  298|       |
  299|      1|	vobject_class->nickname = "sdf";
  300|      1|	vobject_class->description = _("create an SDF image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  301|      1|	vobject_class->build = vips_sdf_build;
  302|       |
  303|      1|	VIPS_ARG_INT(class, "width", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  304|      1|		_("Width"),
  305|      1|		_("Image width in pixels"),
  306|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  307|      1|		G_STRUCT_OFFSET(VipsSdf, width),
  308|      1|		1, VIPS_MAX_COORD, 1);
  309|       |
  310|      1|	VIPS_ARG_INT(class, "height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  311|      1|		_("Height"),
  312|      1|		_("Image height in pixels"),
  313|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  314|      1|		G_STRUCT_OFFSET(VipsSdf, height),
  315|      1|		1, VIPS_MAX_COORD, 1);
  316|       |
  317|      1|	VIPS_ARG_ENUM(class, "shape", 8,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  318|      1|		_("Shape"),
  319|      1|		_("SDF shape to create"),
  320|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  321|      1|		G_STRUCT_OFFSET(VipsSdf, shape),
  322|      1|		VIPS_TYPE_SDF_SHAPE, VIPS_SDF_SHAPE_CIRCLE);
  323|       |
  324|      1|	VIPS_ARG_DOUBLE(class, "r", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  325|      1|		_("r"),
  326|      1|		_("Radius"),
  327|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  328|      1|		G_STRUCT_OFFSET(VipsSdf, r),
  329|      1|		0.0, VIPS_MAX_COORD, 50);
  330|       |
  331|      1|	VIPS_ARG_BOXED(class, "a", 13,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  332|      1|		_("a"),
  333|      1|		_("Point a"),
  334|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  335|      1|		G_STRUCT_OFFSET(VipsSdf, a_area),
  336|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  337|       |
  338|      1|	VIPS_ARG_BOXED(class, "b", 14,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  339|      1|		_("b"),
  340|      1|		_("Point b"),
  341|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  342|      1|		G_STRUCT_OFFSET(VipsSdf, b_area),
  343|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  344|       |
  345|      1|	VIPS_ARG_BOXED(class, "corners", 15,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  346|      1|		_("corners"),
  347|      1|		_("Corner radii"),
  348|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  349|      1|		G_STRUCT_OFFSET(VipsSdf, corners_area),
  350|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  351|       |
  352|      1|}

sines.c:vips_sines_class_init:
  113|      1|{
  114|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  116|      1|	VipsPointClass *point_class = VIPS_POINT_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_POINT, VipsPointClass))
  ------------------
  117|       |
  118|      1|	gobject_class->set_property = vips_object_set_property;
  119|      1|	gobject_class->get_property = vips_object_get_property;
  120|       |
  121|      1|	vobject_class->nickname = "sines";
  122|      1|	vobject_class->description = _("make a 2D sine wave");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  123|      1|	vobject_class->build = vips_sines_build;
  124|       |
  125|      1|	point_class->point = vips_sines_point;
  126|       |
  127|      1|	VIPS_ARG_DOUBLE(class, "hfreq", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  128|      1|		_("hfreq"),
  129|      1|		_("Horizontal spatial frequency"),
  130|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  131|      1|		G_STRUCT_OFFSET(VipsSines, hfreq),
  132|      1|		0.0, 10000.0, 0.5);
  133|       |
  134|      1|	VIPS_ARG_DOUBLE(class, "vfreq", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  135|      1|		_("vfreq"),
  136|      1|		_("Vertical spatial frequency"),
  137|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  138|      1|		G_STRUCT_OFFSET(VipsSines, vfreq),
  139|      1|		0.0, 10000.0, 0.5);
  140|      1|}

tonelut.c:vips_tonelut_class_init:
  213|      1|{
  214|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  215|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  216|       |
  217|      1|	gobject_class->set_property = vips_object_set_property;
  218|      1|	gobject_class->get_property = vips_object_get_property;
  219|       |
  220|      1|	vobject_class->nickname = "tonelut";
  221|      1|	vobject_class->description = _("build a look-up table");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  222|      1|	vobject_class->build = vips_tonelut_build;
  223|       |
  224|      1|	VIPS_ARG_INT(class, "in_max", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  225|      1|		_("In-max"),
  226|      1|		_("Size of LUT to build"),
  227|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  228|      1|		G_STRUCT_OFFSET(VipsTonelut, in_max),
  229|      1|		1, 65535, 32767);
  230|       |
  231|      1|	VIPS_ARG_INT(class, "out_max", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  232|      1|		_("Out-max"),
  233|      1|		_("Maximum value in output LUT"),
  234|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  235|      1|		G_STRUCT_OFFSET(VipsTonelut, out_max),
  236|      1|		1, 65535, 32767);
  237|       |
  238|      1|	VIPS_ARG_DOUBLE(class, "Lb", 6,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  239|      1|		_("Black point"),
  240|      1|		_("Lowest value in output"),
  241|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  242|      1|		G_STRUCT_OFFSET(VipsTonelut, Lb),
  243|      1|		0, 100, 0);
  244|       |
  245|      1|	VIPS_ARG_DOUBLE(class, "Lw", 7,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  246|      1|		_("White point"),
  247|      1|		_("Highest value in output"),
  248|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  249|      1|		G_STRUCT_OFFSET(VipsTonelut, Lw),
  250|      1|		0, 100, 100);
  251|       |
  252|      1|	VIPS_ARG_DOUBLE(class, "Ps", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  253|      1|		_("Shadow point"),
  254|      1|		_("Position of shadow"),
  255|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  256|      1|		G_STRUCT_OFFSET(VipsTonelut, Ps),
  257|      1|		0, 1, 0.2);
  258|       |
  259|      1|	VIPS_ARG_DOUBLE(class, "Pm", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  260|      1|		_("Mid-tone point"),
  261|      1|		_("Position of mid-tones"),
  262|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  263|      1|		G_STRUCT_OFFSET(VipsTonelut, Pm),
  264|      1|		0, 1, 0.5);
  265|       |
  266|      1|	VIPS_ARG_DOUBLE(class, "Ph", 10,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  267|      1|		_("Highlight point"),
  268|      1|		_("Position of highlights"),
  269|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  270|      1|		G_STRUCT_OFFSET(VipsTonelut, Ph),
  271|      1|		0, 1, 0.8);
  272|       |
  273|      1|	VIPS_ARG_DOUBLE(class, "S", 11,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  274|      1|		_("Shadow adjust"),
  275|      1|		_("Adjust shadows by this much"),
  276|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  277|      1|		G_STRUCT_OFFSET(VipsTonelut, S),
  278|      1|		-30, 30, 0);
  279|       |
  280|      1|	VIPS_ARG_DOUBLE(class, "M", 12,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  281|      1|		_("Mid-tone adjust"),
  282|      1|		_("Adjust mid-tones by this much"),
  283|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  284|      1|		G_STRUCT_OFFSET(VipsTonelut, M),
  285|      1|		-30, 30, 0);
  286|       |
  287|      1|	VIPS_ARG_DOUBLE(class, "H", 13,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  288|      1|		_("Highlight adjust"),
  289|      1|		_("Adjust highlights by this much"),
  290|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  291|      1|		G_STRUCT_OFFSET(VipsTonelut, H),
  292|      1|		-30, 30, 0);
  293|      1|}

worley.c:vips_worley_class_init:
  295|      1|{
  296|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  298|       |
  299|      1|	gobject_class->set_property = vips_object_set_property;
  300|      1|	gobject_class->get_property = vips_object_get_property;
  301|       |
  302|      1|	vobject_class->nickname = "worley";
  303|      1|	vobject_class->description = _("make a worley noise image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  304|      1|	vobject_class->build = vips_worley_build;
  305|       |
  306|      1|	VIPS_ARG_INT(class, "width", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  307|      1|		_("Width"),
  308|      1|		_("Image width in pixels"),
  309|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  310|      1|		G_STRUCT_OFFSET(VipsWorley, width),
  311|      1|		1, VIPS_MAX_COORD, 1);
  312|       |
  313|      1|	VIPS_ARG_INT(class, "height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  314|      1|		_("Height"),
  315|      1|		_("Image height in pixels"),
  316|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  317|      1|		G_STRUCT_OFFSET(VipsWorley, height),
  318|      1|		1, VIPS_MAX_COORD, 1);
  319|       |
  320|      1|	VIPS_ARG_INT(class, "cell_size", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  321|      1|		_("Cell size"),
  322|      1|		_("Size of Worley cells"),
  323|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  324|      1|		G_STRUCT_OFFSET(VipsWorley, cell_size),
  325|      1|		1, VIPS_MAX_COORD, 256);
  326|       |
  327|      1|	VIPS_ARG_INT(class, "seed", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  328|      1|		_("Seed"),
  329|      1|		_("Random number seed"),
  330|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  331|      1|		G_STRUCT_OFFSET(VipsWorley, seed),
  332|      1|		INT_MIN, INT_MAX, 0);
  333|      1|}

xyz.c:vips_xyz_class_init:
  176|      1|{
  177|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  178|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|       |
  180|      1|	VIPS_DEBUG_MSG("vips_xyz_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  181|       |
  182|      1|	gobject_class->set_property = vips_object_set_property;
  183|      1|	gobject_class->get_property = vips_object_get_property;
  184|       |
  185|      1|	vobject_class->nickname = "xyz";
  186|      1|	vobject_class->description =
  187|      1|		_("make an image where pixel values are coordinates");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  188|      1|	vobject_class->build = vips_xyz_build;
  189|       |
  190|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  191|      1|		_("Width"),
  192|      1|		_("Image width in pixels"),
  193|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  194|      1|		G_STRUCT_OFFSET(VipsXyz, width),
  195|      1|		1, VIPS_MAX_COORD, 64);
  196|       |
  197|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  198|      1|		_("Height"),
  199|      1|		_("Image height in pixels"),
  200|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  201|      1|		G_STRUCT_OFFSET(VipsXyz, height),
  202|      1|		1, VIPS_MAX_COORD, 64);
  203|       |
  204|      1|	VIPS_ARG_INT(class, "csize", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  205|      1|		_("csize"),
  206|      1|		_("Size of third dimension"),
  207|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  208|      1|		G_STRUCT_OFFSET(VipsXyz, csize),
  209|      1|		1, VIPS_MAX_COORD, 1);
  210|       |
  211|      1|	VIPS_ARG_INT(class, "dsize", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  212|      1|		_("dsize"),
  213|      1|		_("Size of fourth dimension"),
  214|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  215|      1|		G_STRUCT_OFFSET(VipsXyz, dsize),
  216|      1|		1, VIPS_MAX_COORD, 1);
  217|       |
  218|      1|	VIPS_ARG_INT(class, "esize", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  219|      1|		_("esize"),
  220|      1|		_("Size of fifth dimension"),
  221|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  222|      1|		G_STRUCT_OFFSET(VipsXyz, esize),
  223|      1|		1, VIPS_MAX_COORD, 1);
  224|      1|}

zone.c:vips_zone_class_init:
   85|      1|{
   86|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   87|      1|	VipsPointClass *point_class = VIPS_POINT_CLASS(class);
  ------------------
  |  |   43|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   44|      1|		VIPS_TYPE_POINT, VipsPointClass))
  ------------------
   88|       |
   89|      1|	vobject_class->nickname = "zone";
   90|      1|	vobject_class->description = _("make a zone plate");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   91|       |
   92|      1|	point_class->point = vips_zone_point;
   93|      1|}

vips_draw_operation_init:
  151|      2|{
  152|      2|	extern GType vips_draw_rect_get_type(void);
  153|      2|	extern GType vips_draw_image_get_type(void);
  154|      2|	extern GType vips_draw_mask_get_type(void);
  155|      2|	extern GType vips_draw_line_get_type(void);
  156|      2|	extern GType vips_draw_circle_get_type(void);
  157|      2|	extern GType vips_draw_flood_get_type(void);
  158|      2|	extern GType vips_draw_smudge_get_type(void);
  159|       |
  160|      2|	vips_draw_rect_get_type();
  161|      2|	vips_draw_image_get_type();
  162|      2|	vips_draw_mask_get_type();
  163|      2|	vips_draw_line_get_type();
  164|      2|	vips_draw_circle_get_type();
  165|      2|	vips_draw_flood_get_type();
  166|      2|	vips_draw_smudge_get_type();
  167|      2|}
draw.c:vips_draw_class_init:
  122|      1|{
  123|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  124|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  125|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  126|       |
  127|      1|	gobject_class->set_property = vips_object_set_property;
  128|      1|	gobject_class->get_property = vips_object_get_property;
  129|       |
  130|      1|	vobject_class->nickname = "draw";
  131|      1|	vobject_class->description = _("draw operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  132|      1|	vobject_class->build = vips_draw_build;
  133|       |
  134|       |	// no draw operation is cached
  135|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  136|       |
  137|      1|	VIPS_ARG_IMAGE(class, "image", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  138|      1|		_("Image"),
  139|      1|		_("Image to draw on"),
  140|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_MODIFY,
  141|      1|		G_STRUCT_OFFSET(VipsDraw, image));
  142|      1|}

draw_circle.c:vips_draw_circle_class_init:
  222|      1|{
  223|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  224|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  225|       |
  226|      1|	gobject_class->set_property = vips_object_set_property;
  227|      1|	gobject_class->get_property = vips_object_get_property;
  228|       |
  229|      1|	vobject_class->nickname = "draw_circle";
  230|      1|	vobject_class->description = _("draw a circle on an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  231|      1|	vobject_class->build = vips_draw_circle_build;
  232|       |
  233|      1|	VIPS_ARG_INT(class, "cx", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  234|      1|		_("cx"),
  235|      1|		_("Centre of draw_circle"),
  236|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  237|      1|		G_STRUCT_OFFSET(VipsDrawCircle, cx),
  238|      1|		-1000000000, 1000000000, 0);
  239|       |
  240|      1|	VIPS_ARG_INT(class, "cy", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  241|      1|		_("cy"),
  242|      1|		_("Centre of draw_circle"),
  243|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  244|      1|		G_STRUCT_OFFSET(VipsDrawCircle, cy),
  245|      1|		-1000000000, 1000000000, 0);
  246|       |
  247|      1|	VIPS_ARG_INT(class, "radius", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  248|      1|		_("Radius"),
  249|      1|		_("Radius in pixels"),
  250|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  251|      1|		G_STRUCT_OFFSET(VipsDrawCircle, radius),
  252|      1|		0, 1000000000, 0);
  253|       |
  254|      1|	VIPS_ARG_BOOL(class, "fill", 6,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  255|      1|		_("Fill"),
  256|      1|		_("Draw a solid object"),
  257|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  258|      1|		G_STRUCT_OFFSET(VipsDrawCircle, fill),
  259|      1|		FALSE);
  260|      1|}

draw_flood.c:vips_draw_flood_class_init:
  554|      1|{
  555|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  556|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  557|       |
  558|      1|	gobject_class->set_property = vips_object_set_property;
  559|      1|	gobject_class->get_property = vips_object_get_property;
  560|       |
  561|      1|	vobject_class->nickname = "draw_flood";
  562|      1|	vobject_class->description = _("flood-fill an area");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  563|      1|	vobject_class->build = vips_draw_flood_build;
  564|       |
  565|      1|	VIPS_ARG_INT(class, "x", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  566|      1|		_("x"),
  567|      1|		_("DrawFlood start point"),
  568|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  569|      1|		G_STRUCT_OFFSET(VipsDrawFlood, x),
  570|      1|		0, 1000000000, 0);
  571|       |
  572|      1|	VIPS_ARG_INT(class, "y", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  573|      1|		_("y"),
  574|      1|		_("DrawFlood start point"),
  575|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  576|      1|		G_STRUCT_OFFSET(VipsDrawFlood, y),
  577|      1|		0, 1000000000, 0);
  578|       |
  579|      1|	VIPS_ARG_IMAGE(class, "test", 5,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  580|      1|		_("Test"),
  581|      1|		_("Test pixels in this image"),
  582|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  583|      1|		G_STRUCT_OFFSET(VipsDrawFlood, test));
  584|       |
  585|      1|	VIPS_ARG_BOOL(class, "equal", 6,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  586|      1|		_("Equal"),
  587|      1|		_("DrawFlood while equal to edge"),
  588|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  589|      1|		G_STRUCT_OFFSET(VipsDrawFlood, equal),
  590|      1|		FALSE);
  591|       |
  592|      1|	VIPS_ARG_INT(class, "left", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  593|      1|		_("Left"),
  594|      1|		_("Left edge of modified area"),
  595|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  596|      1|		G_STRUCT_OFFSET(VipsDrawFlood, left),
  597|      1|		0, 1000000000, 0);
  598|       |
  599|      1|	VIPS_ARG_INT(class, "top", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  600|      1|		_("Top"),
  601|      1|		_("Top edge of modified area"),
  602|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  603|      1|		G_STRUCT_OFFSET(VipsDrawFlood, top),
  604|      1|		0, 1000000000, 0);
  605|       |
  606|      1|	VIPS_ARG_INT(class, "width", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  607|      1|		_("Width"),
  608|      1|		_("Width of modified area"),
  609|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  610|      1|		G_STRUCT_OFFSET(VipsDrawFlood, width),
  611|      1|		0, 1000000000, 0);
  612|       |
  613|      1|	VIPS_ARG_INT(class, "height", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  614|      1|		_("Height"),
  615|      1|		_("Height of modified area"),
  616|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  617|      1|		G_STRUCT_OFFSET(VipsDrawFlood, height),
  618|      1|		0, 1000000000, 0);
  619|      1|}

draw_image.c:vips_draw_image_class_init:
  257|      1|{
  258|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  260|       |
  261|      1|	gobject_class->set_property = vips_object_set_property;
  262|      1|	gobject_class->get_property = vips_object_get_property;
  263|       |
  264|      1|	vobject_class->nickname = "draw_image";
  265|      1|	vobject_class->description = _("paint an image into another image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  266|      1|	vobject_class->build = vips_draw_image_build;
  267|       |
  268|      1|	VIPS_ARG_IMAGE(class, "sub", 5,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  269|      1|		_("Sub-image"),
  270|      1|		_("Sub-image to insert into main image"),
  271|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  272|      1|		G_STRUCT_OFFSET(VipsDrawImage, sub));
  273|       |
  274|      1|	VIPS_ARG_INT(class, "x", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  275|      1|		_("x"),
  276|      1|		_("Draw image here"),
  277|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  278|      1|		G_STRUCT_OFFSET(VipsDrawImage, x),
  279|      1|		-1000000000, 1000000000, 0);
  280|       |
  281|      1|	VIPS_ARG_INT(class, "y", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  282|      1|		_("y"),
  283|      1|		_("Draw image here"),
  284|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  285|      1|		G_STRUCT_OFFSET(VipsDrawImage, y),
  286|      1|		-1000000000, 1000000000, 0);
  287|       |
  288|      1|	VIPS_ARG_ENUM(class, "mode", 8,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  289|      1|		_("Mode"),
  290|      1|		_("Combining mode"),
  291|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  292|      1|		G_STRUCT_OFFSET(VipsDrawImage, mode),
  293|      1|		VIPS_TYPE_COMBINE_MODE, VIPS_COMBINE_MODE_SET);
  294|      1|}

draw_line.c:vips_draw_line_class_init:
  272|      1|{
  273|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  275|       |
  276|      1|	gobject_class->set_property = vips_object_set_property;
  277|      1|	gobject_class->get_property = vips_object_get_property;
  278|       |
  279|      1|	vobject_class->nickname = "draw_line";
  280|      1|	vobject_class->description = _("draw a line on an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  281|      1|	vobject_class->build = vips_draw_line_build;
  282|       |
  283|      1|	VIPS_ARG_INT(class, "x1", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  284|      1|		_("x1"),
  285|      1|		_("Start of draw_line"),
  286|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  287|      1|		G_STRUCT_OFFSET(VipsDrawLine, x1),
  288|      1|		-1000000000, 1000000000, 0);
  289|       |
  290|      1|	VIPS_ARG_INT(class, "y1", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  291|      1|		_("y1"),
  292|      1|		_("Start of draw_line"),
  293|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  294|      1|		G_STRUCT_OFFSET(VipsDrawLine, y1),
  295|      1|		-1000000000, 1000000000, 0);
  296|       |
  297|      1|	VIPS_ARG_INT(class, "x2", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  298|      1|		_("x2"),
  299|      1|		_("End of draw_line"),
  300|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  301|      1|		G_STRUCT_OFFSET(VipsDrawLine, x2),
  302|      1|		-1000000000, 1000000000, 0);
  303|       |
  304|      1|	VIPS_ARG_INT(class, "y2", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  305|      1|		_("y2"),
  306|      1|		_("End of draw_line"),
  307|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  308|      1|		G_STRUCT_OFFSET(VipsDrawLine, y2),
  309|      1|		-1000000000, 1000000000, 0);
  310|      1|}

draw_mask.c:vips_draw_mask_class_init:
  320|      1|{
  321|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  322|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  323|       |
  324|      1|	gobject_class->set_property = vips_object_set_property;
  325|      1|	gobject_class->get_property = vips_object_get_property;
  326|       |
  327|      1|	vobject_class->nickname = "draw_mask";
  328|      1|	vobject_class->description = _("draw a mask on an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  329|      1|	vobject_class->build = vips_draw_mask_build;
  330|       |
  331|      1|	VIPS_ARG_IMAGE(class, "mask", 5,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  332|      1|		_("Mask"),
  333|      1|		_("Mask of pixels to draw"),
  334|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  335|      1|		G_STRUCT_OFFSET(VipsDrawMask, mask));
  336|       |
  337|      1|	VIPS_ARG_INT(class, "x", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  338|      1|		_("x"),
  339|      1|		_("Draw mask here"),
  340|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  341|      1|		G_STRUCT_OFFSET(VipsDrawMask, x),
  342|      1|		-1000000000, 1000000000, 0);
  343|       |
  344|      1|	VIPS_ARG_INT(class, "y", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  345|      1|		_("y"),
  346|      1|		_("Draw mask here"),
  347|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  348|      1|		G_STRUCT_OFFSET(VipsDrawMask, y),
  349|      1|		-1000000000, 1000000000, 0);
  350|      1|}

draw_rect.c:vips_draw_rect_class_init:
  161|      1|{
  162|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  164|       |
  165|      1|	gobject_class->set_property = vips_object_set_property;
  166|      1|	gobject_class->get_property = vips_object_get_property;
  167|       |
  168|      1|	vobject_class->nickname = "draw_rect";
  169|      1|	vobject_class->description = _("paint a rectangle on an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  170|      1|	vobject_class->build = vips_draw_rect_build;
  171|       |
  172|      1|	VIPS_ARG_INT(class, "left", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  173|      1|		_("Left"),
  174|      1|		_("Rect to fill"),
  175|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  176|      1|		G_STRUCT_OFFSET(VipsDrawRect, left),
  177|      1|		-1000000000, 1000000000, 0);
  178|       |
  179|      1|	VIPS_ARG_INT(class, "top", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  180|      1|		_("Top"),
  181|      1|		_("Rect to fill"),
  182|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  183|      1|		G_STRUCT_OFFSET(VipsDrawRect, top),
  184|      1|		-1000000000, 1000000000, 0);
  185|       |
  186|      1|	VIPS_ARG_INT(class, "width", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  187|      1|		_("Width"),
  188|      1|		_("Rect to fill"),
  189|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  190|      1|		G_STRUCT_OFFSET(VipsDrawRect, width),
  191|      1|		-1000000000, 1000000000, 0);
  192|       |
  193|      1|	VIPS_ARG_INT(class, "height", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  194|      1|		_("Height"),
  195|      1|		_("Rect to fill"),
  196|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  197|      1|		G_STRUCT_OFFSET(VipsDrawRect, height),
  198|      1|		-1000000000, 1000000000, 0);
  199|       |
  200|      1|	VIPS_ARG_BOOL(class, "fill", 10,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  201|      1|		_("Fill"),
  202|      1|		_("Draw a solid object"),
  203|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  204|      1|		G_STRUCT_OFFSET(VipsDrawRect, fill),
  205|      1|		FALSE);
  206|      1|}

draw_smudge.c:vips_draw_smudge_class_init:
  203|      1|{
  204|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|       |
  207|      1|	gobject_class->set_property = vips_object_set_property;
  208|      1|	gobject_class->get_property = vips_object_get_property;
  209|       |
  210|      1|	vobject_class->nickname = "draw_smudge";
  211|      1|	vobject_class->description = _("blur a rectangle on an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  212|      1|	vobject_class->build = vips_draw_smudge_build;
  213|       |
  214|      1|	VIPS_ARG_INT(class, "left", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  215|      1|		_("Left"),
  216|      1|		_("Rect to fill"),
  217|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  218|      1|		G_STRUCT_OFFSET(VipsDrawSmudge, left),
  219|      1|		-1000000000, 1000000000, 0);
  220|       |
  221|      1|	VIPS_ARG_INT(class, "top", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  222|      1|		_("Top"),
  223|      1|		_("Rect to fill"),
  224|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  225|      1|		G_STRUCT_OFFSET(VipsDrawSmudge, top),
  226|      1|		-1000000000, 1000000000, 0);
  227|       |
  228|      1|	VIPS_ARG_INT(class, "width", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  229|      1|		_("Width"),
  230|      1|		_("Rect to fill"),
  231|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  232|      1|		G_STRUCT_OFFSET(VipsDrawSmudge, width),
  233|      1|		-1000000000, 1000000000, 0);
  234|       |
  235|      1|	VIPS_ARG_INT(class, "height", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  236|      1|		_("Height"),
  237|      1|		_("Rect to fill"),
  238|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  239|      1|		G_STRUCT_OFFSET(VipsDrawSmudge, height),
  240|      1|		-1000000000, 1000000000, 0);
  241|      1|}

drawink.c:vips_drawink_class_init:
   78|      1|{
   79|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   81|       |
   82|      1|	gobject_class->set_property = vips_object_set_property;
   83|      1|	gobject_class->get_property = vips_object_get_property;
   84|       |
   85|      1|	vobject_class->nickname = "drawink";
   86|      1|	vobject_class->description = _("draw with ink operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   87|      1|	vobject_class->build = vips_drawink_build;
   88|       |
   89|      1|	VIPS_ARG_BOXED(class, "ink", 2,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
   90|      1|		_("Ink"),
   91|      1|		_("Color for pixels"),
   92|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   93|      1|		G_STRUCT_OFFSET(VipsDrawink, ink),
   94|      1|		VIPS_TYPE_ARRAY_DOUBLE);
   95|      1|}

analyzeload.c:vips_foreign_load_analyze_class_init:
  109|      1|{
  110|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  111|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  112|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  113|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  114|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  115|       |
  116|      1|	gobject_class->set_property = vips_object_set_property;
  117|      1|	gobject_class->get_property = vips_object_get_property;
  118|       |
  119|      1|	object_class->nickname = "analyzeload";
  120|      1|	object_class->description = _("load an Analyze6 image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  121|       |
  122|       |	/* This is fuzzed, but you're unlikely to want to use it on
  123|       |	 * untrusted files.
  124|       |	 */
  125|      1|	operation_class->flags |= VIPS_OPERATION_UNTRUSTED;
  126|       |
  127|      1|	foreign_class->suffs = vips_foreign_analyze_suffs;
  128|       |
  129|       |	/* is_a() is not that quick ... lower the priority.
  130|       |	 */
  131|      1|	foreign_class->priority = -50;
  132|       |
  133|      1|	load_class->is_a = vips__isanalyze;
  134|      1|	load_class->get_flags_filename =
  135|      1|		vips_foreign_load_analyze_get_flags_filename;
  136|      1|	load_class->get_flags = vips_foreign_load_analyze_get_flags;
  137|      1|	load_class->header = vips_foreign_load_analyze_header;
  138|      1|	load_class->load = vips_foreign_load_analyze_load;
  139|       |
  140|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  141|      1|		_("Filename"),
  142|      1|		_("Filename to load from"),
  143|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  144|      1|		G_STRUCT_OFFSET(VipsForeignLoadAnalyze, filename),
  145|      1|		NULL);
  146|      1|}

vips__bgra2rgba:
  111|      2|{
  112|      2|	int x;
  113|       |
  114|      4|	for (x = 0; x < n; x++) {
  ------------------
  |  Branch (114:14): [True: 2, False: 2]
  ------------------
  115|      2|		guint32 bgra = GUINT32_FROM_BE(p[x]);
  ------------------
  |  |  392|      2|#define GUINT32_FROM_BE(val)	(GUINT32_TO_BE (val))
  ------------------
  116|       |
  117|      2|		guint rgba;
  118|       |
  119|       |		/* Leave G and A, swap R and B.
  120|       |		 */
  121|      2|		rgba =
  122|      2|			(bgra & 0x00ff00ff) |
  123|      2|			(bgra & 0x0000ff00) << 16 |
  124|      2|			(bgra & 0xff000000) >> 16;
  125|       |
  126|      2|		p[x] = GUINT32_TO_BE(rgba);
  127|      2|	}
  128|      2|}

cgifsave.c:vips_foreign_save_cgif_class_init:
  874|      1|{
  875|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  876|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  877|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  878|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  879|       |
  880|      1|	gobject_class->dispose = vips_foreign_save_cgif_dispose;
  881|      1|	gobject_class->set_property = vips_object_set_property;
  882|      1|	gobject_class->get_property = vips_object_get_property;
  883|       |
  884|      1|	object_class->nickname = "gifsave_base";
  885|      1|	object_class->description = _("save as gif");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  886|      1|	object_class->build = vips_foreign_save_cgif_build;
  887|       |
  888|      1|	foreign_class->suffs = vips__save_cgif_suffs;
  889|       |
  890|      1|	save_class->saveable = VIPS_SAVEABLE_RGBA_ONLY;
  891|      1|	save_class->format_table = bandfmt_gif;
  892|       |
  893|      1|	VIPS_ARG_DOUBLE(class, "dither", 10,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  894|      1|		_("Dithering"),
  895|      1|		_("Amount of dithering"),
  896|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  897|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, dither),
  898|      1|		0.0, 1.0, 1.0);
  899|       |
  900|      1|	VIPS_ARG_INT(class, "effort", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  901|      1|		_("Effort"),
  902|      1|		_("Quantisation effort"),
  903|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  904|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, effort),
  905|      1|		1, 10, 7);
  906|       |
  907|      1|	VIPS_ARG_INT(class, "bitdepth", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  908|      1|		_("Bit depth"),
  909|      1|		_("Number of bits per pixel"),
  910|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  911|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, bitdepth),
  912|      1|		1, 8, 8);
  913|       |
  914|      1|	VIPS_ARG_DOUBLE(class, "interframe_maxerror", 13,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  915|      1|		_("Maximum inter-frame error"),
  916|      1|		_("Maximum inter-frame error for transparency"),
  917|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  918|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, interframe_maxerror),
  919|      1|		0, 32, 0.0);
  920|       |
  921|      1|	VIPS_ARG_BOOL(class, "reuse", 14,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  922|      1|		_("Reuse palette"),
  923|      1|		_("Reuse palette from input"),
  924|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  925|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, reuse),
  926|      1|		FALSE);
  927|       |
  928|      1|	VIPS_ARG_DOUBLE(class, "interpalette_maxerror", 15,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  929|      1|		_("Maximum inter-palette error"),
  930|      1|		_("Maximum inter-palette error for palette reusage"),
  931|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  932|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, interpalette_maxerror),
  933|      1|		0, 256, 3.0);
  934|       |
  935|      1|	VIPS_ARG_BOOL(class, "interlace", 16,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  936|      1|		_("Interlaced"),
  937|      1|		_("Generate an interlaced (progressive) GIF"),
  938|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  939|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, interlace),
  940|      1|		FALSE);
  941|       |
  942|       |	/* Not a good thing to have enabled by default since it can cause very
  943|       |	 * mysterious behaviour that varies with the input image.
  944|       |	 */
  945|      1|	VIPS_ARG_BOOL(class, "reoptimise", 17,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  946|      1|		_("Reoptimise palettes"),
  947|      1|		_("Reoptimise colour palettes"),
  948|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  949|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, reoptimise),
  950|      1|		FALSE);
  951|       |
  952|      1|	VIPS_ARG_BOOL(class, "keep_duplicate_frames", 18,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  953|      1|		_("Keep duplicate frames"),
  954|      1|		_("Keep duplicate frames in the output instead of combining them"),
  955|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  956|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgif, keep_duplicate_frames),
  957|      1|		FALSE);
  958|      1|}
cgifsave.c:vips_foreign_save_cgif_target_class_init:
 1000|      1|{
 1001|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1002|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1003|       |
 1004|      1|	gobject_class->set_property = vips_object_set_property;
 1005|      1|	gobject_class->get_property = vips_object_get_property;
 1006|       |
 1007|      1|	object_class->nickname = "gifsave_target";
 1008|      1|	object_class->build = vips_foreign_save_cgif_target_build;
 1009|       |
 1010|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
 1011|      1|		_("Target"),
 1012|      1|		_("Target to save to"),
 1013|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1014|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgifTarget, target),
 1015|      1|		VIPS_TYPE_TARGET);
 1016|      1|}
cgifsave.c:vips_foreign_save_cgif_file_class_init:
 1048|      1|{
 1049|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1050|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1051|       |
 1052|      1|	gobject_class->set_property = vips_object_set_property;
 1053|      1|	gobject_class->get_property = vips_object_get_property;
 1054|       |
 1055|      1|	object_class->nickname = "gifsave";
 1056|      1|	object_class->build = vips_foreign_save_cgif_file_build;
 1057|       |
 1058|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1059|      1|		_("Filename"),
 1060|      1|		_("Filename to save to"),
 1061|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1062|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgifFile, filename),
 1063|      1|		NULL);
 1064|      1|}
cgifsave.c:vips_foreign_save_cgif_buffer_class_init:
 1107|      1|{
 1108|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1109|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1110|       |
 1111|      1|	gobject_class->set_property = vips_object_set_property;
 1112|      1|	gobject_class->get_property = vips_object_get_property;
 1113|       |
 1114|      1|	object_class->nickname = "gifsave_buffer";
 1115|      1|	object_class->build = vips_foreign_save_cgif_buffer_build;
 1116|       |
 1117|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1118|      1|		_("Buffer"),
 1119|      1|		_("Buffer to save to"),
 1120|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
 1121|      1|		G_STRUCT_OFFSET(VipsForeignSaveCgifBuffer, buf),
 1122|      1|		VIPS_TYPE_BLOB);
 1123|      1|}

csvload.c:vips_foreign_load_csv_class_init:
  468|      1|{
  469|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  471|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  472|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  473|       |
  474|      1|	gobject_class->dispose = vips_foreign_load_csv_dispose;
  475|      1|	gobject_class->set_property = vips_object_set_property;
  476|      1|	gobject_class->get_property = vips_object_get_property;
  477|       |
  478|      1|	object_class->nickname = "csvload_base";
  479|      1|	object_class->description = _("load csv");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  480|      1|	object_class->build = vips_foreign_load_csv_build;
  481|       |
  482|       |	/* This is fuzzed, but you're unlikely to want to use it on
  483|       |	 * untrusted files.
  484|       |	 */
  485|      1|	operation_class->flags |= VIPS_OPERATION_UNTRUSTED;
  486|       |
  487|      1|	load_class->get_flags = vips_foreign_load_csv_get_flags;
  488|      1|	load_class->header = vips_foreign_load_csv_header;
  489|      1|	load_class->load = vips_foreign_load_csv_load;
  490|       |
  491|      1|	VIPS_ARG_INT(class, "skip", 20,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  492|      1|		_("Skip"),
  493|      1|		_("Skip this many lines at the start of the file"),
  494|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  495|      1|		G_STRUCT_OFFSET(VipsForeignLoadCsv, skip),
  496|      1|		0, 10000000, 0);
  497|       |
  498|      1|	VIPS_ARG_INT(class, "lines", 21,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  499|      1|		_("Lines"),
  500|      1|		_("Read this many lines from the file"),
  501|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  502|      1|		G_STRUCT_OFFSET(VipsForeignLoadCsv, lines),
  503|      1|		-1, 10000000, -1);
  504|       |
  505|      1|	VIPS_ARG_STRING(class, "whitespace", 22,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  506|      1|		_("Whitespace"),
  507|      1|		_("Set of whitespace characters"),
  508|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  509|      1|		G_STRUCT_OFFSET(VipsForeignLoadCsv, whitespace),
  510|      1|		" ");
  511|       |
  512|      1|	VIPS_ARG_STRING(class, "separator", 23,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  513|      1|		_("Separator"),
  514|      1|		_("Set of separator characters"),
  515|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  516|      1|		G_STRUCT_OFFSET(VipsForeignLoadCsv, separator),
  517|      1|		";,\t");
  518|      1|}
csvload.c:vips_foreign_load_csv_file_class_init:
  572|      1|{
  573|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  574|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  575|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  576|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  577|       |
  578|      1|	gobject_class->set_property = vips_object_set_property;
  579|      1|	gobject_class->get_property = vips_object_get_property;
  580|       |
  581|      1|	object_class->nickname = "csvload";
  582|      1|	object_class->build = vips_foreign_load_csv_file_build;
  583|       |
  584|      1|	foreign_class->suffs = vips_foreign_load_csv_suffs;
  585|       |
  586|      1|	load_class->get_flags_filename =
  587|      1|		vips_foreign_load_csv_file_get_flags_filename;
  588|       |
  589|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  590|      1|		_("Filename"),
  591|      1|		_("Filename to load from"),
  592|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  593|      1|		G_STRUCT_OFFSET(VipsForeignLoadCsvFile, filename),
  594|      1|		NULL);
  595|      1|}
csvload.c:vips_foreign_load_csv_source_class_init:
  644|      1|{
  645|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  646|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  647|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  648|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  649|       |
  650|      1|	gobject_class->set_property = vips_object_set_property;
  651|      1|	gobject_class->get_property = vips_object_get_property;
  652|       |
  653|      1|	object_class->nickname = "csvload_source";
  654|      1|	object_class->build = vips_foreign_load_csv_source_build;
  655|       |
  656|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  657|       |
  658|      1|	load_class->is_a_source = vips_foreign_load_csv_source_is_a_source;
  659|       |
  660|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  661|      1|		_("Source"),
  662|      1|		_("Source to load from"),
  663|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  664|      1|		G_STRUCT_OFFSET(VipsForeignLoadCsvSource, source),
  665|      1|		VIPS_TYPE_SOURCE);
  666|      1|}

csvsave.c:vips_foreign_save_csv_class_init:
  204|      1|{
  205|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  207|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  208|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  209|       |
  210|      1|	gobject_class->dispose = vips_foreign_save_csv_dispose;
  211|      1|	gobject_class->set_property = vips_object_set_property;
  212|      1|	gobject_class->get_property = vips_object_get_property;
  213|       |
  214|      1|	object_class->nickname = "csvsave_base";
  215|      1|	object_class->description = _("save image to csv");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  216|      1|	object_class->build = vips_foreign_save_csv_build;
  217|       |
  218|      1|	foreign_class->suffs = vips_foreign_save_csv_suffs;
  219|       |
  220|      1|	save_class->saveable = VIPS_SAVEABLE_MONO;
  221|       |
  222|      1|	VIPS_ARG_STRING(class, "separator", 13,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  223|      1|		_("Separator"),
  224|      1|		_("Separator characters"),
  225|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  226|      1|		G_STRUCT_OFFSET(VipsForeignSaveCsv, separator),
  227|      1|		"\t");
  228|      1|}
csvsave.c:vips_foreign_save_csv_file_class_init:
  263|      1|{
  264|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  265|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  266|       |
  267|      1|	gobject_class->set_property = vips_object_set_property;
  268|      1|	gobject_class->get_property = vips_object_get_property;
  269|       |
  270|      1|	object_class->nickname = "csvsave";
  271|      1|	object_class->build = vips_foreign_save_csv_file_build;
  272|       |
  273|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  274|      1|		_("Filename"),
  275|      1|		_("Filename to save to"),
  276|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  277|      1|		G_STRUCT_OFFSET(VipsForeignSaveCsvFile, filename),
  278|      1|		NULL);
  279|      1|}
csvsave.c:vips_foreign_save_csv_target_class_init:
  314|      1|{
  315|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  316|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  317|       |
  318|      1|	gobject_class->set_property = vips_object_set_property;
  319|      1|	gobject_class->get_property = vips_object_get_property;
  320|       |
  321|      1|	object_class->nickname = "csvsave_target";
  322|      1|	object_class->build = vips_foreign_save_csv_target_build;
  323|       |
  324|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  325|      1|		_("Target"),
  326|      1|		_("Target to save to"),
  327|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  328|      1|		G_STRUCT_OFFSET(VipsForeignSaveCsvTarget, target),
  329|      1|		VIPS_TYPE_TARGET);
  330|      1|}

vips__exif_parse:
  522|  23.8k|{
  523|  23.8k|	const void *data;
  524|  23.8k|	size_t size;
  525|  23.8k|	ExifData *ed;
  526|  23.8k|	VipsExifParams params;
  527|  23.8k|	const char *str;
  528|       |
  529|  23.8k|	if (!vips_image_get_typeof(image, VIPS_META_EXIF_NAME))
  ------------------
  |  |   46|  23.8k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (529:6): [True: 0, False: 23.8k]
  ------------------
  530|      0|		return 0;
  531|  23.8k|	if (vips_image_get_blob(image, VIPS_META_EXIF_NAME, &data, &size))
  ------------------
  |  |   46|  23.8k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (531:6): [True: 0, False: 23.8k]
  ------------------
  532|      0|		return -1;
  533|  23.8k|	if (!(ed = vips_exif_load_data_without_fix(data, size)))
  ------------------
  |  Branch (533:6): [True: 0, False: 23.8k]
  ------------------
  534|      0|		return -1;
  535|       |
  536|       |#ifdef DEBUG_VERBOSE
  537|       |	show_tags(ed);
  538|       |	show_values(ed);
  539|       |#endif /*DEBUG_VERBOSE*/
  540|       |
  541|       |	/* Look for resolution fields and use them to set the VIPS xres/yres
  542|       |	 * fields.
  543|       |	 *
  544|       |	 * If the fields are missing, set them from the image, which will have
  545|       |	 * previously had them set from something like JFIF.
  546|       |	 */
  547|  23.8k|	if (vips_image_resolution_from_exif(image, ed) &&
  ------------------
  |  Branch (547:6): [True: 2.18k, False: 21.7k]
  ------------------
  548|  23.8k|		vips_exif_resolution_from_image(ed, image)) {
  ------------------
  |  Branch (548:3): [True: 0, False: 2.18k]
  ------------------
  549|      0|		exif_data_free(ed);
  550|      0|		return -1;
  551|      0|	}
  552|       |
  553|       |	/* Make sure all required fields are there before we attach the vips
  554|       |	 * metadata.
  555|       |	 */
  556|  23.8k|	exif_data_fix(ed);
  557|       |
  558|       |	/* Attach informational fields for what we find.
  559|       |	 */
  560|  23.8k|	params.image = image;
  561|  23.8k|	params.ed = ed;
  562|  23.8k|	exif_data_foreach_content(ed,
  563|  23.8k|		(ExifDataForeachContentFunc) vips_exif_get_content, &params);
  564|       |
  565|  23.8k|	vips_image_set_blob_copy(image,
  566|  23.8k|		"jpeg-thumbnail-data", ed->data, ed->size);
  567|       |
  568|  23.8k|	exif_data_free(ed);
  569|       |
  570|       |	/* Orientation handling. ifd0 has the Orientation tag for the main
  571|       |	 * image.
  572|       |	 */
  573|  23.8k|	if (vips_image_get_typeof(image, "exif-ifd0-Orientation") != 0 &&
  ------------------
  |  Branch (573:6): [True: 22.0k, False: 1.83k]
  ------------------
  574|  23.8k|		!vips_image_get_string(image,
  ------------------
  |  Branch (574:3): [True: 22.0k, False: 0]
  ------------------
  575|  22.0k|			"exif-ifd0-Orientation", &str)) {
  576|  22.0k|		int orientation;
  577|       |
  578|  22.0k|		orientation = atoi(str);
  579|  22.0k|		if (orientation < 1 ||
  ------------------
  |  Branch (579:7): [True: 165, False: 21.8k]
  ------------------
  580|  22.0k|			orientation > 8)
  ------------------
  |  Branch (580:4): [True: 91, False: 21.7k]
  ------------------
  581|    256|			orientation = 1;
  582|  22.0k|		vips_image_set_int(image, VIPS_META_ORIENTATION, orientation);
  ------------------
  |  |  149|  22.0k|#define VIPS_META_ORIENTATION "orientation"
  ------------------
  583|  22.0k|	}
  584|       |
  585|  23.8k|	return 0;
  586|  23.8k|}
vips__exif_update:
 1428|  21.6k|{
 1429|  21.6k|	unsigned char *data;
 1430|  21.6k|	size_t length;
 1431|  21.6k|	unsigned int idl;
 1432|  21.6k|	ExifData *ed;
 1433|       |
 1434|       |	/* Either parse from the embedded EXIF, or if there's none, make
 1435|       |	 * some fresh EXIF we can write the resolution to.
 1436|       |	 */
 1437|  21.6k|	if (vips_image_get_typeof(image, VIPS_META_EXIF_NAME)) {
  ------------------
  |  |   46|  21.6k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (1437:6): [True: 873, False: 20.7k]
  ------------------
 1438|    873|		if (vips_image_get_blob(image, VIPS_META_EXIF_NAME,
  ------------------
  |  |   46|    873|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (1438:7): [True: 0, False: 873]
  ------------------
 1439|    873|				(void *) &data, &length))
 1440|      0|			return -1;
 1441|       |
 1442|    873|		if (!(ed = vips_exif_load_data_without_fix(data, length)))
  ------------------
  |  Branch (1442:7): [True: 0, False: 873]
  ------------------
 1443|      0|			return -1;
 1444|    873|	}
 1445|  20.7k|	else {
 1446|  20.7k|		ed = exif_data_new();
 1447|       |
 1448|  20.7k|		exif_data_set_option(ed,
 1449|  20.7k|			EXIF_DATA_OPTION_FOLLOW_SPECIFICATION);
 1450|  20.7k|		exif_data_set_data_type(ed, EXIF_DATA_TYPE_COMPRESSED);
 1451|  20.7k|		exif_data_set_byte_order(ed, EXIF_BYTE_ORDER_INTEL);
 1452|  20.7k|	}
 1453|       |
 1454|       |	/* Make sure all required fields are there before we attach the vips
 1455|       |	 * metadata.
 1456|       |	 */
 1457|  21.6k|	exif_data_fix(ed);
 1458|       |
 1459|       |	/* Update EXIF tags from the image metadata.
 1460|       |	 */
 1461|  21.6k|	vips_exif_update(ed, image);
 1462|       |
 1463|       |	/* Update EXIF resolution from the vips image header.
 1464|       |	 */
 1465|  21.6k|	if (vips_exif_resolution_from_image(ed, image)) {
  ------------------
  |  Branch (1465:6): [True: 0, False: 21.6k]
  ------------------
 1466|      0|		exif_data_free(ed);
 1467|      0|		return -1;
 1468|      0|	}
 1469|       |
 1470|       |	/* Update EXIF image dimensions from the vips image header.
 1471|       |	 */
 1472|  21.6k|	if (vips_exif_set_dimensions(ed, image)) {
  ------------------
  |  Branch (1472:6): [True: 0, False: 21.6k]
  ------------------
 1473|      0|		exif_data_free(ed);
 1474|      0|		return -1;
 1475|      0|	}
 1476|       |
 1477|       |	/* Update EXIF orientation from the vips image header.
 1478|       |	 */
 1479|  21.6k|	if (vips_exif_set_orientation(ed, image)) {
  ------------------
  |  Branch (1479:6): [True: 0, False: 21.6k]
  ------------------
 1480|      0|		exif_data_free(ed);
 1481|      0|		return -1;
 1482|      0|	}
 1483|       |
 1484|       |	/* Update the thumbnail.
 1485|       |	 */
 1486|  21.6k|	if (vips_exif_set_thumbnail(ed, image)) {
  ------------------
  |  Branch (1486:6): [True: 0, False: 21.6k]
  ------------------
 1487|      0|		exif_data_free(ed);
 1488|      0|		return -1;
 1489|      0|	}
 1490|       |
 1491|       |	/* Reserialise and write. exif_data_save_data() returns an int for some
 1492|       |	 * reason.
 1493|       |	 */
 1494|  21.6k|	exif_data_save_data(ed, &data, &idl);
 1495|  21.6k|	if (!idl) {
  ------------------
  |  Branch (1495:6): [True: 0, False: 21.6k]
  ------------------
 1496|      0|		vips_error("exif", "%s", _("error saving EXIF"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1497|      0|		exif_data_free(ed);
 1498|      0|		return -1;
 1499|      0|	}
 1500|  21.6k|	length = idl;
 1501|       |
 1502|       |#ifdef DEBUG
 1503|       |	printf("vips__exif_update: generated %zd bytes of EXIF\n", length);
 1504|       |#endif /*DEBUG*/
 1505|       |
 1506|  21.6k|	vips_image_set_blob(image, VIPS_META_EXIF_NAME,
  ------------------
  |  |   46|  21.6k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
 1507|  21.6k|		(VipsCallbackFn) vips_area_free_cb, data, length);
 1508|       |
 1509|  21.6k|	exif_data_free(ed);
 1510|       |
 1511|  21.6k|	return 0;
 1512|  21.6k|}
exif.c:vips_exif_load_data_without_fix:
  192|  24.7k|{
  193|  24.7k|	ExifData *ed;
  194|       |
  195|       |	/* exif_data_load_data() only allows uint for length. Limit it to less
  196|       |	 * than that: 2**23 should be enough for anyone.
  197|       |	 */
  198|  24.7k|	if (length < 4) {
  ------------------
  |  Branch (198:6): [True: 0, False: 24.7k]
  ------------------
  199|      0|		vips_error("exif", "%s", _("exif too small"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  200|      0|		return NULL;
  201|      0|	}
  202|  24.7k|	if (length > 1 << 23) {
  ------------------
  |  Branch (202:6): [True: 0, False: 24.7k]
  ------------------
  203|      0|		vips_error("exif", "%s", _("exif too large"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  204|      0|		return NULL;
  205|      0|	}
  206|       |
  207|  24.7k|	if (!(ed = exif_data_new())) {
  ------------------
  |  Branch (207:6): [True: 0, False: 24.7k]
  ------------------
  208|      0|		vips_error("exif", "%s", _("unable to init exif"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  209|      0|		return NULL;
  210|      0|	}
  211|       |
  212|  24.7k|	exif_data_unset_option(ed, EXIF_DATA_OPTION_FOLLOW_SPECIFICATION);
  213|  24.7k|	if (!vips_isprefix("Exif", (char *) data)) {
  ------------------
  |  Branch (213:6): [True: 0, False: 24.7k]
  ------------------
  214|       |		/* Ensure "Exif" prefix as loaders may not provide it.
  215|       |		 */
  216|      0|		void *data_with_prefix;
  217|      0|		data_with_prefix = g_malloc0(length + 6);
  218|      0|		memcpy(data_with_prefix, "Exif\0\0", 6);
  219|      0|		memcpy((char *) data_with_prefix + 6, data, length);
  220|      0|		exif_data_load_data(ed, data_with_prefix, length + 6);
  221|      0|		g_free(data_with_prefix);
  222|      0|	}
  223|  24.7k|	else
  224|  24.7k|		exif_data_load_data(ed, data, length);
  225|       |
  226|  24.7k|	return ed;
  227|  24.7k|}
exif.c:vips_image_resolution_from_exif:
  442|  23.8k|{
  443|  23.8k|	double xres, yres;
  444|  23.8k|	int unit;
  445|       |
  446|       |	/* The main image xres/yres are in ifd0. ifd1 has xres/yres of the
  447|       |	 * image thumbnail, if any.
  448|       |	 *
  449|       |	 * Don't warn about missing res fields, it's very common, especially for
  450|       |	 * things like webp.
  451|       |	 */
  452|  23.8k|	if (vips_exif_entry_get_double(ed, 0, EXIF_TAG_X_RESOLUTION, &xres) ||
  ------------------
  |  Branch (452:6): [True: 2.04k, False: 21.8k]
  ------------------
  453|  23.8k|		vips_exif_entry_get_double(ed,
  ------------------
  |  Branch (453:3): [True: 138, False: 21.7k]
  ------------------
  454|  21.8k|			0, EXIF_TAG_Y_RESOLUTION, &yres))
  455|  2.17k|		return -1;
  456|       |
  457|       |	/* resuint is optional and defaults to inch.
  458|       |	 */
  459|  21.7k|	unit = 2;
  460|  21.7k|	(void) vips_exif_entry_get_int(ed,
  461|  21.7k|		0, EXIF_TAG_RESOLUTION_UNIT, &unit);
  462|       |
  463|       |#ifdef DEBUG
  464|       |	printf("vips_image_resolution_from_exif: seen exif tags "
  465|       |		   "xres = %g, yres = %g, unit = %d\n",
  466|       |		xres, yres, unit);
  467|       |#endif /*DEBUG*/
  468|       |
  469|  21.7k|	switch (unit) {
  470|     11|	case 1:
  ------------------
  |  Branch (470:2): [True: 11, False: 21.6k]
  ------------------
  471|       |		/* No units, instead xres / yres gives the pixel aspect ratio.
  472|       |		 */
  473|     11|		break;
  474|       |
  475|  21.5k|	case 2:
  ------------------
  |  Branch (475:2): [True: 21.5k, False: 183]
  ------------------
  476|       |		/* In inches.
  477|       |		 */
  478|  21.5k|		xres /= 25.4;
  479|  21.5k|		yres /= 25.4;
  480|  21.5k|		vips_image_set_string(image,
  481|  21.5k|			VIPS_META_RESOLUTION_UNIT, "in");
  ------------------
  |  |   93|  21.5k|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
  482|  21.5k|		break;
  483|       |
  484|    167|	case 3:
  ------------------
  |  Branch (484:2): [True: 167, False: 21.5k]
  ------------------
  485|       |		/* In cm.
  486|       |		 */
  487|    167|		xres /= 10.0;
  488|    167|		yres /= 10.0;
  489|    167|		vips_image_set_string(image,
  490|    167|			VIPS_META_RESOLUTION_UNIT, "cm");
  ------------------
  |  |   93|    167|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
  491|    167|		break;
  492|       |
  493|      5|	default:
  ------------------
  |  Branch (493:2): [True: 5, False: 21.7k]
  ------------------
  494|      5|		g_warning("%s", _("unknown EXIF resolution unit"));
  ------------------
  |  |  338|      5|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      5|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      5|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      5|                               __VA_ARGS__)
  ------------------
  495|      5|		return -1;
  496|  21.7k|	}
  497|       |
  498|       |#ifdef DEBUG
  499|       |	printf("vips_image_resolution_from_exif: "
  500|       |		   "seen exif resolution %g, %g p/mm\n",
  501|       |		xres, yres);
  502|       |#endif /*DEBUG*/
  503|       |
  504|       |	/* Don't allow negative resolution.
  505|       |	 */
  506|  21.7k|	image->Xres = VIPS_MAX(0, xres);
  ------------------
  |  |   54|  21.7k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 8, False: 21.6k]
  |  |  ------------------
  ------------------
  507|  21.7k|	image->Yres = VIPS_MAX(0, yres);
  ------------------
  |  |   54|  21.7k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 9, False: 21.6k]
  |  |  ------------------
  ------------------
  508|       |
  509|  21.7k|	return 0;
  510|  21.7k|}
exif.c:vips_exif_entry_get_double:
  416|  45.7k|{
  417|  45.7k|	ExifEntry *entry;
  418|       |
  419|  45.7k|	if (!(entry = exif_content_get_entry(ed->ifd[ifd], tag)) ||
  ------------------
  |  Branch (419:6): [True: 1.97k, False: 43.7k]
  ------------------
  420|  45.7k|		entry->components != 1)
  ------------------
  |  Branch (420:3): [True: 141, False: 43.6k]
  ------------------
  421|  2.11k|		return -1;
  422|       |
  423|  43.6k|	return vips_exif_get_double(ed, entry, 0, out);
  424|  45.7k|}
exif.c:vips_exif_get_double:
  290|  43.6k|{
  291|  43.6k|	ExifRational rv;
  292|  43.6k|	ExifSRational srv;
  293|  43.6k|	double value;
  294|       |
  295|  43.6k|	if (!vips_exif_get_rational(ed, entry, component, &rv)) {
  ------------------
  |  Branch (295:6): [True: 43.4k, False: 131]
  ------------------
  296|  43.4k|		if (rv.denominator == 0)
  ------------------
  |  Branch (296:7): [True: 41, False: 43.4k]
  ------------------
  297|     41|			value = 0;
  298|  43.4k|		else
  299|  43.4k|			value = (double) rv.numerator / rv.denominator;
  300|  43.4k|	}
  301|    131|	else if (!vips_exif_get_srational(ed, entry, component, &srv)) {
  ------------------
  |  Branch (301:11): [True: 66, False: 65]
  ------------------
  302|     66|		if (srv.denominator == 0)
  ------------------
  |  Branch (302:7): [True: 18, False: 48]
  ------------------
  303|     18|			value = 0;
  304|     48|		else
  305|     48|			value = (double) srv.numerator / srv.denominator;
  306|     66|	}
  307|     65|	else
  308|     65|		return -1;
  309|       |
  310|  43.5k|	*out = value;
  311|       |
  312|  43.5k|	return 0;
  313|  43.6k|}
exif.c:vips_exif_get_rational:
  256|   220k|{
  257|   220k|	if (entry->format == EXIF_FORMAT_RATIONAL) {
  ------------------
  |  Branch (257:6): [True: 144k, False: 75.8k]
  ------------------
  258|   144k|		ExifByteOrder bo = exif_data_get_byte_order(ed);
  259|   144k|		size_t sizeof_component = entry->size / entry->components;
  260|   144k|		size_t offset = component * sizeof_component;
  261|       |
  262|   144k|		*out = exif_get_rational(entry->data + offset, bo);
  263|   144k|	}
  264|  75.8k|	else
  265|  75.8k|		return -1;
  266|       |
  267|   144k|	return 0;
  268|   220k|}
exif.c:vips_exif_get_srational:
  273|  78.6k|{
  274|  78.6k|	if (entry->format == EXIF_FORMAT_SRATIONAL) {
  ------------------
  |  Branch (274:6): [True: 4.57k, False: 74.0k]
  ------------------
  275|  4.57k|		ExifByteOrder bo = exif_data_get_byte_order(ed);
  276|  4.57k|		size_t sizeof_component = entry->size / entry->components;
  277|  4.57k|		size_t offset = component * sizeof_component;
  278|       |
  279|  4.57k|		*out = exif_get_srational(entry->data + offset, bo);
  280|  4.57k|	}
  281|  74.0k|	else
  282|  74.0k|		return -1;
  283|       |
  284|  4.57k|	return 0;
  285|  78.6k|}
exif.c:vips_exif_entry_get_int:
  428|  21.7k|{
  429|  21.7k|	ExifEntry *entry;
  430|       |
  431|  21.7k|	if (!(entry = exif_content_get_entry(ed->ifd[ifd], tag)) ||
  ------------------
  |  Branch (431:6): [True: 144, False: 21.5k]
  ------------------
  432|  21.7k|		entry->components != 1)
  ------------------
  |  Branch (432:3): [True: 72, False: 21.4k]
  ------------------
  433|    216|		return -1;
  434|       |
  435|  21.4k|	return vips_exif_get_int(ed, entry, 0, out);
  436|  21.7k|}
exif.c:vips_exif_get_int:
  232|   449k|{
  233|   449k|	ExifByteOrder bo = exif_data_get_byte_order(ed);
  234|   449k|	size_t sizeof_component = entry->size / entry->components;
  235|   449k|	size_t offset = component * sizeof_component;
  236|       |
  237|   449k|	if (entry->format == EXIF_FORMAT_SHORT)
  ------------------
  |  Branch (237:6): [True: 223k, False: 225k]
  ------------------
  238|   223k|		*out = exif_get_short(entry->data + offset, bo);
  239|   225k|	else if (entry->format == EXIF_FORMAT_SSHORT)
  ------------------
  |  Branch (239:11): [True: 1.06k, False: 224k]
  ------------------
  240|  1.06k|		*out = exif_get_sshort(entry->data + offset, bo);
  241|   224k|	else if (entry->format == EXIF_FORMAT_LONG)
  ------------------
  |  Branch (241:11): [True: 92.9k, False: 131k]
  ------------------
  242|       |		/* This won't work for huge values, but who cares.
  243|       |		 */
  244|  92.9k|		*out = (int) exif_get_long(entry->data + offset, bo);
  245|   131k|	else if (entry->format == EXIF_FORMAT_SLONG)
  ------------------
  |  Branch (245:11): [True: 6.04k, False: 125k]
  ------------------
  246|  6.04k|		*out = exif_get_slong(entry->data + offset, bo);
  247|   125k|	else
  248|   125k|		return -1;
  249|       |
  250|   323k|	return 0;
  251|   449k|}
exif.c:vips_exif_get_content:
  409|   119k|{
  410|   119k|	exif_content_foreach_entry(content,
  411|   119k|		(ExifContentForeachEntryFunc) vips_exif_attach_entry, params);
  412|   119k|}
exif.c:vips_exif_attach_entry:
  385|   282k|{
  386|   282k|	const char *tag_name;
  387|   282k|	char vips_name_txt[256];
  388|   282k|	VipsBuf vips_name = VIPS_BUF_STATIC(vips_name_txt);
  ------------------
  |  |   60|   282k|	{ \
  |  |   61|   282k|		&TEXT[0], sizeof(TEXT), 0, FALSE, 0, FALSE \
  |  |  ------------------
  |  |  |  |  794|   282k|#define	FALSE	(0)
  |  |  ------------------
  |  |               		&TEXT[0], sizeof(TEXT), 0, FALSE, 0, FALSE \
  |  |  ------------------
  |  |  |  |  794|   282k|#define	FALSE	(0)
  |  |  ------------------
  |  |   62|   282k|	}
  ------------------
  389|   282k|	VipsDbuf value = { 0 };
  390|       |
  391|   282k|	if (!(tag_name = vips_exif_entry_get_name(entry)))
  ------------------
  |  Branch (391:6): [True: 0, False: 282k]
  ------------------
  392|      0|		return;
  393|       |
  394|   282k|	vips_buf_appendf(&vips_name, "exif-ifd%d-%s",
  395|   282k|		exif_entry_get_ifd(entry), tag_name);
  ------------------
  |  |  182|   282k|#define exif_entry_get_ifd(e) ((e)?exif_content_get_ifd((e)->parent):EXIF_IFD_COUNT)
  |  |  ------------------
  |  |  |  Branch (182:32): [True: 282k, False: 0]
  |  |  ------------------
  ------------------
  396|   282k|	vips_exif_to_s(params->ed, entry, &value);
  397|       |
  398|       |	/* Can't do anything sensible with the error return.
  399|       |	 */
  400|   282k|	(void) vips_image_set_string(params->image,
  401|   282k|		vips_buf_all(&vips_name),
  402|   282k|		(char *) vips_dbuf_string(&value, NULL));
  403|       |
  404|   282k|	vips_dbuf_destroy(&value);
  405|   282k|}
exif.c:vips_exif_entry_get_name:
  375|   299k|{
  376|   299k|	if (!entry->parent)
  ------------------
  |  Branch (376:6): [True: 0, False: 299k]
  ------------------
  377|      0|		return NULL;
  378|       |
  379|   299k|	return exif_tag_get_name_in_ifd(entry->tag,
  380|   299k|		exif_entry_get_ifd(entry));
  ------------------
  |  |  182|   299k|#define exif_entry_get_ifd(e) ((e)?exif_content_get_ifd((e)->parent):EXIF_IFD_COUNT)
  |  |  ------------------
  |  |  |  Branch (182:32): [True: 299k, False: 0]
  |  |  ------------------
  ------------------
  381|   299k|}
exif.c:vips_exif_to_s:
  322|   285k|{
  323|   285k|	char *text = entry_to_s(entry);
  324|       |
  325|   285k|	unsigned long i;
  326|   285k|	int iv;
  327|   285k|	ExifRational rv;
  328|   285k|	ExifSRational srv;
  329|       |
  330|   285k|	if (entry->components < 10 &&
  ------------------
  |  Branch (330:6): [True: 274k, False: 10.2k]
  ------------------
  331|   285k|		!vips_exif_get_int(ed, entry, 0, &iv)) {
  ------------------
  |  Branch (331:3): [True: 149k, False: 125k]
  ------------------
  332|   302k|		for (i = 0; i < entry->components; i++) {
  ------------------
  |  Branch (332:15): [True: 152k, False: 149k]
  ------------------
  333|   152k|			vips_exif_get_int(ed, entry, i, &iv);
  334|   152k|			vips_dbuf_writef(buf, "%d ", iv);
  335|   152k|		}
  336|   149k|	}
  337|   135k|	else if (entry->components < 10 &&
  ------------------
  |  Branch (337:11): [True: 125k, False: 10.2k]
  ------------------
  338|   135k|		!vips_exif_get_rational(ed, entry, 0, &rv)) {
  ------------------
  |  Branch (338:3): [True: 50.0k, False: 75.6k]
  ------------------
  339|   101k|		for (i = 0; i < entry->components; i++) {
  ------------------
  |  Branch (339:15): [True: 51.4k, False: 50.0k]
  ------------------
  340|  51.4k|			vips_exif_get_rational(ed, entry, i, &rv);
  341|  51.4k|			vips_dbuf_writef(buf, "%u/%u ", rv.numerator, rv.denominator);
  342|  51.4k|		}
  343|  50.0k|	}
  344|  85.8k|	else if (entry->components < 10 &&
  ------------------
  |  Branch (344:11): [True: 75.6k, False: 10.2k]
  ------------------
  345|  85.8k|		!vips_exif_get_srational(ed, entry, 0, &srv)) {
  ------------------
  |  Branch (345:3): [True: 1.71k, False: 73.9k]
  ------------------
  346|  4.51k|		for (i = 0; i < entry->components; i++) {
  ------------------
  |  Branch (346:15): [True: 2.79k, False: 1.71k]
  ------------------
  347|  2.79k|			vips_exif_get_srational(ed, entry, i, &srv);
  348|  2.79k|			vips_dbuf_writef(buf, "%d/%d ", srv.numerator, srv.denominator);
  349|  2.79k|		}
  350|  1.71k|	}
  351|  84.1k|	else
  352|  84.1k|		vips_dbuf_writef(buf, "%s ", text);
  353|       |
  354|   285k|	vips_dbuf_writef(buf, "(%s, %s, %lu components, %d bytes)",
  355|   285k|		text,
  356|   285k|		exif_format_get_name(entry->format),
  357|   285k|		entry->components,
  358|   285k|		entry->size);
  359|       |
  360|   285k|	g_free(text);
  361|   285k|}
exif.c:entry_to_s:
   84|   285k|{
   85|       |	/* Some extra space for conversion to string ... this can be quite a bit
   86|       |	 * for formats like float. Ban crazy size values.
   87|       |	 */
   88|   285k|	int size = VIPS_MIN(entry->size, 10000);
  ------------------
  |  |   55|   285k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 283k, False: 1.35k]
  |  |  ------------------
  ------------------
   89|   285k|	int max_size = size * 3 + 32;
   90|   285k|	char *text = VIPS_MALLOC(NULL, max_size + 1);
  ------------------
  |  |   68|   285k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  ------------------
  |  |  |  |  433|   285k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|   285k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|   285k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   91|       |
   92|       |	// this renders floats as eg. "12.2345", enums as "Inch", etc.
   93|   285k|	exif_entry_get_value(entry, text, max_size);
   94|       |
   95|       |	// libexif does not null-terminate ASCII strings, we must add the \0
   96|       |	// ourselves
   97|   285k|	if (entry->format == EXIF_FORMAT_ASCII)
  ------------------
  |  Branch (97:6): [True: 7.27k, False: 277k]
  ------------------
   98|  7.27k|		text[size] = '\0';
   99|       |
  100|   285k|	char *utf8 = g_utf8_make_valid(text, -1);
  101|       |
  102|   285k|	g_free(text);
  103|       |
  104|   285k|	return utf8;
  105|   285k|}
exif.c:vips_exif_resolution_from_image:
 1032|  23.8k|{
 1033|  23.8k|	double xres, yres;
 1034|  23.8k|	const char *p;
 1035|  23.8k|	int unit;
 1036|       |
 1037|  23.8k|	VIPS_DEBUG_MSG("vips_exif_resolution_from_image: vips res of %g, %g\n",
  ------------------
  |  |   47|  23.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  23.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  23.8k|	{ \
  |  |   49|  23.8k|		; \
  |  |   50|  23.8k|	} \
  |  |   51|  23.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  23.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1038|  23.8k|		image->Xres, image->Yres);
 1039|       |
 1040|       |	/* Default to inches, more progs support it.
 1041|       |	 */
 1042|  23.8k|	unit = 2;
 1043|  23.8k|	if (vips_image_get_typeof(image, VIPS_META_RESOLUTION_UNIT) &&
  ------------------
  |  |   93|  23.8k|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
  |  Branch (1043:6): [True: 480, False: 23.3k]
  ------------------
 1044|  23.8k|		!vips_image_get_string(image,
  ------------------
  |  Branch (1044:3): [True: 480, False: 0]
  ------------------
 1045|    480|			VIPS_META_RESOLUTION_UNIT, &p)) {
  ------------------
  |  |   93|    480|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
 1046|    480|		if (vips_isprefix("cm", p))
  ------------------
  |  Branch (1046:7): [True: 205, False: 275]
  ------------------
 1047|    205|			unit = 3;
 1048|    275|		else if (vips_isprefix("none", p))
  ------------------
  |  Branch (1048:12): [True: 0, False: 275]
  ------------------
 1049|      0|			unit = 1;
 1050|    480|	}
 1051|       |
 1052|  23.8k|	switch (unit) {
 1053|      0|	case 1:
  ------------------
  |  Branch (1053:2): [True: 0, False: 23.8k]
  ------------------
 1054|      0|		xres = image->Xres;
 1055|      0|		yres = image->Yres;
 1056|      0|		break;
 1057|       |
 1058|  23.6k|	case 2:
  ------------------
  |  Branch (1058:2): [True: 23.6k, False: 205]
  ------------------
 1059|  23.6k|		xres = image->Xres * 25.4;
 1060|  23.6k|		yres = image->Yres * 25.4;
 1061|  23.6k|		break;
 1062|       |
 1063|    205|	case 3:
  ------------------
  |  Branch (1063:2): [True: 205, False: 23.6k]
  ------------------
 1064|    205|		xres = image->Xres * 10.0;
 1065|    205|		yres = image->Yres * 10.0;
 1066|    205|		break;
 1067|       |
 1068|      0|	default:
  ------------------
  |  Branch (1068:2): [True: 0, False: 23.8k]
  ------------------
 1069|      0|		g_warning("%s", _("unknown EXIF resolution unit"));
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1070|      0|		return 0;
 1071|  23.8k|	}
 1072|       |
 1073|       |	/* Main image xres/yres/unit are in ifd0. ifd1 has the thumbnail
 1074|       |	 * xres/yres/unit.
 1075|       |	 */
 1076|  23.8k|	vips_exif_set_tag(ed, 0, EXIF_TAG_X_RESOLUTION,
 1077|  23.8k|		vips_exif_set_double, (void *) &xres);
 1078|  23.8k|	vips_exif_set_tag(ed, 0, EXIF_TAG_Y_RESOLUTION,
 1079|  23.8k|		vips_exif_set_double, (void *) &yres);
 1080|  23.8k|	vips_exif_set_tag(ed, 0, EXIF_TAG_RESOLUTION_UNIT,
 1081|  23.8k|		vips_exif_set_int, (void *) &unit);
 1082|       |
 1083|  23.8k|	return 0;
 1084|  23.8k|}
exif.c:vips_exif_set_tag:
  997|   152k|{
  998|   152k|	ExifEntry *entry;
  999|       |
 1000|   152k|	if ((entry = exif_content_get_entry(ed->ifd[ifd], tag))) {
  ------------------
  |  Branch (1000:6): [True: 123k, False: 28.8k]
  ------------------
 1001|   123k|		fn(ed, entry, 0, data);
 1002|   123k|	}
 1003|  28.8k|	else {
 1004|  28.8k|		entry = exif_entry_new();
 1005|       |
 1006|       |		/* tag must be set before calling exif_content_add_entry.
 1007|       |		 */
 1008|  28.8k|		entry->tag = tag;
 1009|  28.8k|		exif_content_add_entry(ed->ifd[ifd], entry);
 1010|  28.8k|		exif_entry_unref(entry);
 1011|       |
 1012|       |		/* libexif makes us have a special path for string-valued
 1013|       |		 * fields :(
 1014|       |		 */
 1015|  28.8k|		if (tag_is_encoding(tag))
  ------------------
  |  Branch (1015:7): [True: 0, False: 28.8k]
  ------------------
 1016|      0|			vips_exif_set_string_encoding(ed, entry, 0, data);
 1017|  28.8k|		else if (tag_is_ascii(tag))
  ------------------
  |  Branch (1017:12): [True: 0, False: 28.8k]
  ------------------
 1018|      0|			vips_exif_set_string_ascii(ed, entry, 0, data);
 1019|  28.8k|		else if (tag_is_utf16(tag))
  ------------------
  |  Branch (1019:12): [True: 0, False: 28.8k]
  ------------------
 1020|      0|			vips_exif_set_string_utf16(ed, entry, 0, data);
 1021|  28.8k|		else {
 1022|  28.8k|			exif_entry_initialize(entry, tag);
 1023|  28.8k|			fn(ed, entry, 0, data);
 1024|  28.8k|		}
 1025|  28.8k|	}
 1026|   152k|}
exif.c:tag_is_encoding:
  796|  45.0k|{
  797|  45.0k|	return tag == EXIF_TAG_USER_COMMENT;
  798|  45.0k|}
exif.c:tag_is_ascii:
  802|  44.9k|{
  803|  44.9k|	return tag == EXIF_TAG_MAKE ||
  ------------------
  |  Branch (803:9): [True: 148, False: 44.8k]
  ------------------
  804|  44.9k|		tag == EXIF_TAG_MODEL ||
  ------------------
  |  Branch (804:3): [True: 158, False: 44.6k]
  ------------------
  805|  44.9k|		tag == EXIF_TAG_IMAGE_DESCRIPTION ||
  ------------------
  |  Branch (805:3): [True: 3, False: 44.6k]
  ------------------
  806|  44.9k|		tag == EXIF_TAG_ARTIST ||
  ------------------
  |  Branch (806:3): [True: 254, False: 44.4k]
  ------------------
  807|  44.9k|		tag == EXIF_TAG_SOFTWARE ||
  ------------------
  |  Branch (807:3): [True: 244, False: 44.1k]
  ------------------
  808|  44.9k|		tag == EXIF_TAG_COPYRIGHT ||
  ------------------
  |  Branch (808:3): [True: 120, False: 44.0k]
  ------------------
  809|  44.9k|		tag == EXIF_TAG_DATE_TIME ||
  ------------------
  |  Branch (809:3): [True: 160, False: 43.9k]
  ------------------
  810|  44.9k|		tag == EXIF_TAG_DATE_TIME_ORIGINAL ||
  ------------------
  |  Branch (810:3): [True: 96, False: 43.8k]
  ------------------
  811|  44.9k|		tag == EXIF_TAG_DATE_TIME_DIGITIZED ||
  ------------------
  |  Branch (811:3): [True: 28, False: 43.7k]
  ------------------
  812|  44.9k|		tag == EXIF_TAG_SUB_SEC_TIME ||
  ------------------
  |  Branch (812:3): [True: 1, False: 43.7k]
  ------------------
  813|  44.9k|		tag == EXIF_TAG_SUB_SEC_TIME_ORIGINAL ||
  ------------------
  |  Branch (813:3): [True: 99, False: 43.6k]
  ------------------
  814|  44.9k|		tag == EXIF_TAG_SUB_SEC_TIME_DIGITIZED
  ------------------
  |  Branch (814:3): [True: 100, False: 43.5k]
  ------------------
  815|  44.9k|#ifdef HAVE_EXIF_0_6_22
  816|  44.9k|		|| tag == EXIF_TAG_CAMERA_OWNER_NAME ||
  ------------------
  |  Branch (816:6): [True: 7, False: 43.5k]
  ------------------
  817|  44.9k|		tag == EXIF_TAG_BODY_SERIAL_NUMBER ||
  ------------------
  |  Branch (817:3): [True: 64, False: 43.5k]
  ------------------
  818|  44.9k|		tag == EXIF_TAG_LENS_MAKE ||
  ------------------
  |  Branch (818:3): [True: 17, False: 43.4k]
  ------------------
  819|  44.9k|		tag == EXIF_TAG_LENS_MODEL ||
  ------------------
  |  Branch (819:3): [True: 1, False: 43.4k]
  ------------------
  820|  44.9k|		tag == EXIF_TAG_LENS_SERIAL_NUMBER
  ------------------
  |  Branch (820:3): [True: 1, False: 43.4k]
  ------------------
  821|  44.9k|#endif
  822|  44.9k|#ifdef HAVE_EXIF_0_6_23
  823|  44.9k|		|| tag == EXIF_TAG_OFFSET_TIME ||
  ------------------
  |  Branch (823:6): [True: 1, False: 43.4k]
  ------------------
  824|  44.9k|		tag == EXIF_TAG_OFFSET_TIME_ORIGINAL ||
  ------------------
  |  Branch (824:3): [True: 1, False: 43.4k]
  ------------------
  825|  44.9k|		tag == EXIF_TAG_OFFSET_TIME_DIGITIZED ||
  ------------------
  |  Branch (825:3): [True: 0, False: 43.4k]
  ------------------
  826|  44.9k|		tag == EXIF_TAG_GPS_LATITUDE_REF ||
  ------------------
  |  |  177|  88.4k|#define EXIF_TAG_GPS_LATITUDE_REF      0x0001 /* INTEROPERABILITY_INDEX   */
  ------------------
  |  Branch (826:3): [True: 148, False: 43.3k]
  ------------------
  827|  44.9k|		tag == EXIF_TAG_GPS_LONGITUDE_REF ||
  ------------------
  |  |  179|  88.3k|#define EXIF_TAG_GPS_LONGITUDE_REF     0x0003
  ------------------
  |  Branch (827:3): [True: 32, False: 43.3k]
  ------------------
  828|  44.9k|		tag == EXIF_TAG_GPS_SATELLITES ||
  ------------------
  |  |  184|  88.3k|#define EXIF_TAG_GPS_SATELLITES        0x0008
  ------------------
  |  Branch (828:3): [True: 72, False: 43.2k]
  ------------------
  829|  44.9k|		tag == EXIF_TAG_GPS_STATUS ||
  ------------------
  |  |  185|  88.2k|#define EXIF_TAG_GPS_STATUS            0x0009
  ------------------
  |  Branch (829:3): [True: 2, False: 43.2k]
  ------------------
  830|  44.9k|		tag == EXIF_TAG_GPS_MEASURE_MODE ||
  ------------------
  |  |  186|  88.2k|#define EXIF_TAG_GPS_MEASURE_MODE      0x000a
  ------------------
  |  Branch (830:3): [True: 1, False: 43.2k]
  ------------------
  831|  44.9k|		tag == EXIF_TAG_GPS_SPEED_REF ||
  ------------------
  |  |  188|  88.2k|#define EXIF_TAG_GPS_SPEED_REF         0x000c
  ------------------
  |  Branch (831:3): [True: 89, False: 43.1k]
  ------------------
  832|  44.9k|		tag == EXIF_TAG_GPS_TRACK_REF ||
  ------------------
  |  |  190|  88.1k|#define EXIF_TAG_GPS_TRACK_REF         0x000e
  ------------------
  |  Branch (832:3): [True: 7, False: 43.1k]
  ------------------
  833|  44.9k|		tag == EXIF_TAG_GPS_IMG_DIRECTION_REF ||
  ------------------
  |  |  192|  88.1k|#define EXIF_TAG_GPS_IMG_DIRECTION_REF 0x0010
  ------------------
  |  Branch (833:3): [True: 72, False: 43.0k]
  ------------------
  834|  44.9k|		tag == EXIF_TAG_GPS_MAP_DATUM ||
  ------------------
  |  |  194|  88.0k|#define EXIF_TAG_GPS_MAP_DATUM         0x0012
  ------------------
  |  Branch (834:3): [True: 2, False: 43.0k]
  ------------------
  835|  44.9k|		tag == EXIF_TAG_GPS_DEST_LATITUDE_REF ||
  ------------------
  |  |  195|  88.0k|#define EXIF_TAG_GPS_DEST_LATITUDE_REF 0x0013
  ------------------
  |  Branch (835:3): [True: 7, False: 43.0k]
  ------------------
  836|  44.9k|		tag == EXIF_TAG_GPS_DEST_LONGITUDE_REF ||
  ------------------
  |  |  197|  88.0k|#define EXIF_TAG_GPS_DEST_LONGITUDE_REF 0x0015
  ------------------
  |  Branch (836:3): [True: 1, False: 43.0k]
  ------------------
  837|  44.9k|		tag == EXIF_TAG_GPS_DEST_BEARING_REF ||
  ------------------
  |  |  199|  88.0k|#define EXIF_TAG_GPS_DEST_BEARING_REF   0x0017
  ------------------
  |  Branch (837:3): [True: 74, False: 42.9k]
  ------------------
  838|  44.9k|		tag == EXIF_TAG_GPS_DEST_DISTANCE_REF ||
  ------------------
  |  |  201|  87.9k|#define EXIF_TAG_GPS_DEST_DISTANCE_REF  0x0019
  ------------------
  |  Branch (838:3): [True: 73, False: 42.9k]
  ------------------
  839|  44.9k|		tag == EXIF_TAG_GPS_DATE_STAMP
  ------------------
  |  |  205|  42.9k|#define EXIF_TAG_GPS_DATE_STAMP         0x001d
  ------------------
  |  Branch (839:3): [True: 0, False: 42.9k]
  ------------------
  840|  44.9k|#endif
  841|  44.9k|		;
  842|  44.9k|}
exif.c:tag_is_utf16:
  846|  42.9k|{
  847|  42.9k|	return tag == EXIF_TAG_XP_TITLE ||
  ------------------
  |  Branch (847:9): [True: 0, False: 42.9k]
  ------------------
  848|  42.9k|		tag == EXIF_TAG_XP_COMMENT ||
  ------------------
  |  Branch (848:3): [True: 10, False: 42.9k]
  ------------------
  849|  42.9k|		tag == EXIF_TAG_XP_AUTHOR ||
  ------------------
  |  Branch (849:3): [True: 3, False: 42.9k]
  ------------------
  850|  42.9k|		tag == EXIF_TAG_XP_KEYWORDS ||
  ------------------
  |  Branch (850:3): [True: 1, False: 42.8k]
  ------------------
  851|  42.9k|		tag == EXIF_TAG_XP_SUBJECT;
  ------------------
  |  Branch (851:3): [True: 1, False: 42.8k]
  ------------------
  852|  42.9k|}
exif.c:vips_exif_set_double:
  720|  47.6k|{
  721|  47.6k|	double value = *((double *) data);
  722|       |
  723|  47.6k|	ExifByteOrder bo;
  724|  47.6k|	size_t sizeof_component;
  725|  47.6k|	size_t offset;
  726|  47.6k|	double old_value;
  727|       |
  728|  47.6k|	if (entry->components <= component) {
  ------------------
  |  Branch (728:6): [True: 0, False: 47.6k]
  ------------------
  729|      0|		VIPS_DEBUG_MSG("vips_exif_set_double: too few components\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  730|      0|		return;
  731|      0|	}
  732|       |
  733|       |	/* Wait until after the component check to make sure we can't get /0.
  734|       |	 */
  735|  47.6k|	bo = exif_data_get_byte_order(ed);
  736|  47.6k|	sizeof_component = entry->size / entry->components;
  737|  47.6k|	offset = component * sizeof_component;
  738|       |
  739|  47.6k|	VIPS_DEBUG_MSG("vips_exif_set_double: %s = %g\n",
  ------------------
  |  |   47|  47.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  47.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  47.6k|	{ \
  |  |   49|  47.6k|		; \
  |  |   50|  47.6k|	} \
  |  |   51|  47.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  47.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  740|  47.6k|		vips_exif_entry_get_name(entry), value);
  741|       |
  742|  47.6k|	if (entry->format == EXIF_FORMAT_RATIONAL) {
  ------------------
  |  Branch (742:6): [True: 47.4k, False: 189]
  ------------------
  743|  47.4k|		ExifRational rv;
  744|       |
  745|  47.4k|		rv = exif_get_rational(entry->data + offset, bo);
  746|  47.4k|		if (rv.denominator == 0)
  ------------------
  |  Branch (746:7): [True: 66, False: 47.3k]
  ------------------
  747|     66|			old_value = 0;
  748|  47.3k|		else
  749|  47.3k|			old_value = (double) rv.numerator / rv.denominator;
  750|       |
  751|  47.4k|		if (VIPS_FABS(old_value - value) > 0.0001) {
  ------------------
  |  |   76|  47.4k|#define VIPS_FABS(V) __builtin_fabs(V)
  ------------------
  |  Branch (751:7): [True: 33.4k, False: 14.0k]
  ------------------
  752|  33.4k|			vips_exif_double_to_rational(value, &rv);
  753|       |
  754|  33.4k|			VIPS_DEBUG_MSG("vips_exif_set_double: %u / %u\n",
  ------------------
  |  |   47|  33.4k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  33.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  33.4k|	{ \
  |  |   49|  33.4k|		; \
  |  |   50|  33.4k|	} \
  |  |   51|  33.4k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  33.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  755|  33.4k|				rv.numerator,
  756|  33.4k|				rv.denominator);
  757|       |
  758|  33.4k|			exif_set_rational(entry->data + offset, bo, rv);
  759|  33.4k|		}
  760|  47.4k|	}
  761|    189|	else if (entry->format == EXIF_FORMAT_SRATIONAL) {
  ------------------
  |  Branch (761:11): [True: 83, False: 106]
  ------------------
  762|     83|		ExifSRational srv;
  763|       |
  764|     83|		srv = exif_get_srational(entry->data + offset, bo);
  765|     83|		if (srv.denominator == 0)
  ------------------
  |  Branch (765:7): [True: 22, False: 61]
  ------------------
  766|     22|			old_value = 0;
  767|     61|		else
  768|     61|			old_value = (double) srv.numerator / srv.denominator;
  769|       |
  770|     83|		if (VIPS_FABS(old_value - value) > 0.0001) {
  ------------------
  |  |   76|     83|#define VIPS_FABS(V) __builtin_fabs(V)
  ------------------
  |  Branch (770:7): [True: 49, False: 34]
  ------------------
  771|     49|			vips_exif_double_to_srational(value, &srv);
  772|       |
  773|     49|			VIPS_DEBUG_MSG("vips_exif_set_double: %d / %d\n",
  ------------------
  |  |   47|     49|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|     49|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|     49|	{ \
  |  |   49|     49|		; \
  |  |   50|     49|	} \
  |  |   51|     49|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     49|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  774|     49|				srv.numerator, srv.denominator);
  775|       |
  776|     49|			exif_set_srational(entry->data + offset, bo, srv);
  777|     49|		}
  778|     83|	}
  779|  47.6k|}
exif.c:vips_exif_double_to_rational:
  624|  33.4k|{
  625|       |	/* We will usually set factors of 10, so use 1000 as the denominator
  626|       |	 * and it'll probably be OK.
  627|       |	 */
  628|  33.4k|	rv->numerator = value * 1000;
  629|  33.4k|	rv->denominator = 1000;
  630|  33.4k|}
exif.c:vips_exif_double_to_srational:
  634|     49|{
  635|       |	/* We will usually set factors of 10, so use 1000 as the denominator
  636|       |	 * and it'll probably be OK.
  637|       |	 */
  638|     49|	srv->numerator = value * 1000;
  639|     49|	srv->denominator = 1000;
  640|     49|}
exif.c:vips_exif_set_int:
  591|  96.8k|{
  592|  96.8k|	int value = *((int *) data);
  593|       |
  594|  96.8k|	ExifByteOrder bo;
  595|  96.8k|	size_t sizeof_component;
  596|  96.8k|	size_t offset = component;
  597|       |
  598|  96.8k|	if (entry->components <= component) {
  ------------------
  |  Branch (598:6): [True: 0, False: 96.8k]
  ------------------
  599|      0|		VIPS_DEBUG_MSG("vips_exif_set_int: too few components\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  600|      0|		return;
  601|      0|	}
  602|       |
  603|       |	/* Wait until after the component check to make sure we can't get /0.
  604|       |	 */
  605|  96.8k|	bo = exif_data_get_byte_order(ed);
  606|  96.8k|	sizeof_component = entry->size / entry->components;
  607|  96.8k|	offset = component * sizeof_component;
  608|       |
  609|  96.8k|	VIPS_DEBUG_MSG("vips_exif_set_int: %s = %d\n",
  ------------------
  |  |   47|  96.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  96.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  96.8k|	{ \
  |  |   49|  96.8k|		; \
  |  |   50|  96.8k|	} \
  |  |   51|  96.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  96.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  610|  96.8k|		vips_exif_entry_get_name(entry), value);
  611|       |
  612|  96.8k|	if (entry->format == EXIF_FORMAT_SHORT)
  ------------------
  |  Branch (612:6): [True: 51.1k, False: 45.6k]
  ------------------
  613|  51.1k|		exif_set_short(entry->data + offset, bo, value);
  614|  45.6k|	else if (entry->format == EXIF_FORMAT_SSHORT)
  ------------------
  |  Branch (614:11): [True: 185, False: 45.5k]
  ------------------
  615|    185|		exif_set_sshort(entry->data + offset, bo, value);
  616|  45.5k|	else if (entry->format == EXIF_FORMAT_LONG)
  ------------------
  |  Branch (616:11): [True: 44.4k, False: 1.05k]
  ------------------
  617|  44.4k|		exif_set_long(entry->data + offset, bo, value);
  618|  1.05k|	else if (entry->format == EXIF_FORMAT_SLONG)
  ------------------
  |  Branch (618:11): [True: 1.03k, False: 20]
  ------------------
  619|  1.03k|		exif_set_slong(entry->data + offset, bo, value);
  620|  96.8k|}
exif.c:vips_exif_update:
 1394|  21.6k|{
 1395|  21.6k|	VipsExifRemove ve;
 1396|       |
 1397|  21.6k|	VIPS_DEBUG_MSG("vips_exif_update: \n");
  ------------------
  |  |   47|  21.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  21.6k|	{ \
  |  |   49|  21.6k|		; \
  |  |   50|  21.6k|	} \
  |  |   51|  21.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1398|       |
 1399|       |	/* If this exif came from the image (rather than being an exif block we
 1400|       |	 * have made afresh), then any fields which are in the block but not on
 1401|       |	 * the image must have been deliberately removed. Remove them from the
 1402|       |	 * block as well.
 1403|       |	 *
 1404|       |	 * Any string-valued fields (eg. comment etc.) which exist as libvips
 1405|       |	 * metadata tags with changed  whose values have changed must also be
 1406|       |	 * removed.
 1407|       |	 *
 1408|       |	 * libexif does not allow you to change string lengths (you must make
 1409|       |	 * new tags) so we have to remove ready to re-add.
 1410|       |	 */
 1411|  21.6k|	if (vips_image_get_typeof(image, VIPS_META_EXIF_NAME)) {
  ------------------
  |  |   46|  21.6k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (1411:6): [True: 873, False: 20.7k]
  ------------------
 1412|    873|		ve.image = image;
 1413|    873|		ve.ed = ed;
 1414|    873|		exif_data_foreach_content(ed,
 1415|    873|			(ExifDataForeachContentFunc) vips_exif_exif_content,
 1416|    873|			&ve);
 1417|    873|	}
 1418|       |
 1419|       |	/* Walk the image and add any exif- that's set in image metadata.
 1420|       |	 */
 1421|  21.6k|	vips_image_map(image, vips_exif_image_field, ed);
 1422|  21.6k|}
exif.c:vips_exif_exif_content:
 1382|  4.36k|{
 1383|  4.36k|	ve->content = content;
 1384|  4.36k|	ve->to_remove = NULL;
 1385|  4.36k|	exif_content_foreach_entry(content,
 1386|  4.36k|		(ExifContentForeachEntryFunc) vips_exif_exif_entry, ve);
 1387|  4.36k|	vips_slist_map2(ve->to_remove,
 1388|  4.36k|		(VipsSListMap2Fn) vips_exif_exif_remove, ve, NULL);
 1389|  4.36k|	VIPS_FREEF(g_slist_free, ve->to_remove);
  ------------------
  |  |   41|  4.36k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  4.36k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  4.36k|	{ \
  |  |   43|  4.36k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 215, False: 4.15k]
  |  |  ------------------
  |  |   44|    215|			(void) F((S)); \
  |  |   45|    215|			(S) = 0; \
  |  |   46|    215|		} \
  |  |   47|  4.36k|	} \
  |  |   48|  4.36k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  4.36k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1390|  4.36k|}
exif.c:vips_exif_exif_entry:
 1297|  16.2k|{
 1298|  16.2k|	const char *tag_name;
 1299|  16.2k|	char vips_name_txt[256];
 1300|  16.2k|	VipsBuf vips_name_buf = VIPS_BUF_STATIC(vips_name_txt);
  ------------------
  |  |   60|  16.2k|	{ \
  |  |   61|  16.2k|		&TEXT[0], sizeof(TEXT), 0, FALSE, 0, FALSE \
  |  |  ------------------
  |  |  |  |  794|  16.2k|#define	FALSE	(0)
  |  |  ------------------
  |  |               		&TEXT[0], sizeof(TEXT), 0, FALSE, 0, FALSE \
  |  |  ------------------
  |  |  |  |  794|  16.2k|#define	FALSE	(0)
  |  |  ------------------
  |  |   62|  16.2k|	}
  ------------------
 1301|       |
 1302|  16.2k|	const char *vips_name;
 1303|  16.2k|	const char *vips_value;
 1304|       |
 1305|  16.2k|	if (!(tag_name = vips_exif_entry_get_name(entry)))
  ------------------
  |  Branch (1305:6): [True: 0, False: 16.2k]
  ------------------
 1306|      0|		return;
 1307|       |
 1308|  16.2k|	vips_buf_appendf(&vips_name_buf, "exif-ifd%d-%s",
 1309|  16.2k|		exif_entry_get_ifd(entry), tag_name);
  ------------------
  |  |  182|  16.2k|#define exif_entry_get_ifd(e) ((e)?exif_content_get_ifd((e)->parent):EXIF_IFD_COUNT)
  |  |  ------------------
  |  |  |  Branch (182:32): [True: 16.2k, False: 0]
  |  |  ------------------
  ------------------
 1310|  16.2k|	vips_name = vips_buf_all(&vips_name_buf);
 1311|       |
 1312|       |	/* Is there a image metadata item for this tag?
 1313|       |	 */
 1314|  16.2k|	vips_value = NULL;
 1315|  16.2k|	if (vips_image_get_typeof(ve->image, vips_name)) {
  ------------------
  |  Branch (1315:6): [True: 16.2k, False: 0]
  ------------------
 1316|       |		/* No easy way to return an error code from here, sadly.
 1317|       |		 */
 1318|  16.2k|		if (vips_image_get_string(ve->image, vips_name, &vips_value))
  ------------------
  |  Branch (1318:7): [True: 0, False: 16.2k]
  ------------------
 1319|      0|			g_warning(_("bad exif meta \"%s\""), vips_name);
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1320|  16.2k|	}
 1321|       |
 1322|       |	/* Does this field exist on the image? If not, schedule it for
 1323|       |	 * removal.
 1324|       |	 */
 1325|  16.2k|	if (!vips_value)
  ------------------
  |  Branch (1325:6): [True: 0, False: 16.2k]
  ------------------
 1326|      0|		ve->to_remove = g_slist_prepend(ve->to_remove, entry);
 1327|       |
 1328|       |	/* Orientation is really set from the vips
 1329|       |	 * VIPS_META_ORIENTATION tag. If that's been deleted, we must delete
 1330|       |	 * any matching EXIF tags too.
 1331|       |	 */
 1332|  16.2k|	if (strcmp(tag_name, "Orientation") == 0 &&
  ------------------
  |  Branch (1332:6): [True: 215, False: 16.0k]
  ------------------
 1333|  16.2k|		vips_value)
  ------------------
  |  Branch (1333:3): [True: 215, False: 0]
  ------------------
 1334|    215|		ve->to_remove = g_slist_prepend(ve->to_remove, entry);
 1335|       |
 1336|       |	/* If this is a string tag with a new value, we must also remove it
 1337|       |	 * ready for recreation, see the comment below.
 1338|       |	 */
 1339|  16.2k|	if (vips_value &&
  ------------------
  |  Branch (1339:6): [True: 16.2k, False: 0]
  ------------------
 1340|  16.2k|		(tag_is_encoding(entry->tag) ||
  ------------------
  |  Branch (1340:4): [True: 45, False: 16.1k]
  ------------------
 1341|  16.2k|			tag_is_ascii(entry->tag) ||
  ------------------
  |  Branch (1341:4): [True: 2.08k, False: 14.0k]
  ------------------
 1342|  16.2k|			tag_is_utf16(entry->tag))) {
  ------------------
  |  Branch (1342:4): [True: 15, False: 14.0k]
  ------------------
 1343|  2.14k|		VipsDbuf value = { 0 };
 1344|       |
 1345|       |		/* Render the original exif-data value to a string and see
 1346|       |		 * if the user has changed it. If they have, remove it ready
 1347|       |		 * for re-adding.
 1348|       |		 *
 1349|       |		 * Leaving it there prevents it being recreated.
 1350|       |		 */
 1351|  2.14k|		vips_exif_to_s(ve->ed, entry, &value);
 1352|  2.14k|		if (strcmp((char *) vips_dbuf_string(&value, NULL), vips_value) != 0)
  ------------------
  |  Branch (1352:7): [True: 0, False: 2.14k]
  ------------------
 1353|      0|			ve->to_remove = g_slist_prepend(ve->to_remove, entry);
 1354|  2.14k|		vips_dbuf_destroy(&value);
 1355|  2.14k|	}
 1356|  16.2k|}
exif.c:vips_exif_exif_remove:
 1360|    215|{
 1361|       |#ifdef DEBUG
 1362|       |	{
 1363|       |		const char *tag_name;
 1364|       |		char vips_name_txt[256];
 1365|       |		VipsBuf vips_name = VIPS_BUF_STATIC(vips_name_txt);
 1366|       |
 1367|       |		tag_name = vips_exif_entry_get_name(entry);
 1368|       |		vips_buf_appendf(&vips_name, "exif-ifd%d-%s",
 1369|       |			exif_entry_get_ifd(entry), tag_name);
 1370|       |
 1371|       |		printf("vips_exif_exif_remove: %s\n", vips_buf_all(&vips_name));
 1372|       |	}
 1373|       |#endif /*DEBUG*/
 1374|       |
 1375|    215|	exif_content_remove_entry(ve->content, entry);
 1376|       |
 1377|    215|	return NULL;
 1378|    215|}
exif.c:vips_exif_image_field:
 1246|   347k|{
 1247|   347k|	ExifData *ed = (ExifData *) data;
 1248|       |
 1249|   347k|	const char *string;
 1250|   347k|	int ifd;
 1251|   347k|	const char *p;
 1252|   347k|	ExifTag tag;
 1253|       |
 1254|   347k|	if (!vips_isprefix("exif-ifd", field))
  ------------------
  |  Branch (1254:6): [True: 331k, False: 16.2k]
  ------------------
 1255|   331k|		return NULL;
 1256|       |
 1257|       |	/* value must be a string.
 1258|       |	 */
 1259|  16.2k|	if (vips_image_get_string(image, field, &string)) {
  ------------------
  |  Branch (1259:6): [True: 0, False: 16.2k]
  ------------------
 1260|      0|		g_warning(_("bad exif meta \"%s\""), field);
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1261|      0|		return NULL;
 1262|      0|	}
 1263|       |
 1264|  16.2k|	p = field + strlen("exif-ifd");
 1265|  16.2k|	ifd = atoi(p);
 1266|       |
 1267|  32.4k|	for (; g_ascii_isdigit(*p); p++)
  ------------------
  |  |   66|  32.4k|  ((g_ascii_table[(guchar) (c)] & G_ASCII_DIGIT) != 0)
  |  |  ------------------
  |  |  |  Branch (66:3): [True: 16.2k, False: 16.2k]
  |  |  ------------------
  ------------------
 1268|  16.2k|		;
 1269|  16.2k|	if (*p != '-') {
  ------------------
  |  Branch (1269:6): [True: 0, False: 16.2k]
  ------------------
 1270|      0|		g_warning(_("bad exif meta \"%s\""), field);
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1271|      0|		return NULL;
 1272|      0|	}
 1273|       |
 1274|       |	/* GPSVersionID is tag 0 (the error return) so we have to
 1275|       |	 * test the name too.
 1276|       |	 */
 1277|  16.2k|	if (!(tag = exif_tag_from_name(p + 1)) &&
  ------------------
  |  Branch (1277:6): [True: 148, False: 16.0k]
  ------------------
 1278|  16.2k|		strcmp(p + 1, "GPSVersionID") != 0) {
  ------------------
  |  Branch (1278:3): [True: 0, False: 148]
  ------------------
 1279|      0|		g_warning(_("bad exif meta \"%s\""), field);
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1280|      0|		return NULL;
 1281|      0|	}
 1282|       |
 1283|  16.2k|	vips_exif_set_tag(ed, ifd, tag, vips_exif_set_entry, (void *) string);
 1284|       |
 1285|  16.2k|	return NULL;
 1286|  16.2k|}
exif.c:vips_exif_set_entry:
 1237|  16.2k|{
 1238|  16.2k|	const char *string = (const char *) data;
 1239|       |
 1240|  16.2k|	vips_exif_from_s(ed, entry, string);
 1241|  16.2k|}
exif.c:vips_exif_from_s:
 1194|  16.2k|{
 1195|  16.2k|	unsigned long i;
 1196|  16.2k|	const char *p;
 1197|  16.2k|	int v;
 1198|       |
 1199|  16.2k|	if (entry->format == EXIF_FORMAT_SHORT ||
  ------------------
  |  Branch (1199:6): [True: 5.02k, False: 11.2k]
  ------------------
 1200|  16.2k|		entry->format == EXIF_FORMAT_SSHORT ||
  ------------------
  |  Branch (1200:3): [True: 345, False: 10.8k]
  ------------------
 1201|  16.2k|		entry->format == EXIF_FORMAT_LONG ||
  ------------------
  |  Branch (1201:3): [True: 1.30k, False: 9.54k]
  ------------------
 1202|  16.2k|		entry->format == EXIF_FORMAT_SLONG) {
  ------------------
  |  Branch (1202:3): [True: 964, False: 8.58k]
  ------------------
 1203|  7.63k|		if (entry->components >= 10)
  ------------------
  |  Branch (1203:7): [True: 704, False: 6.93k]
  ------------------
 1204|    704|			return;
 1205|       |
 1206|  6.93k|		p = value;
 1207|  15.0k|		for (i = 0; i < entry->components; i++) {
  ------------------
  |  Branch (1207:15): [True: 8.09k, False: 6.93k]
  ------------------
 1208|  8.09k|			if (!(p = skip_space(p)))
  ------------------
  |  Branch (1208:8): [True: 0, False: 8.09k]
  ------------------
 1209|      0|				break;
 1210|       |
 1211|  8.09k|			v = atof(p);
 1212|  8.09k|			vips_exif_set_int(ed, entry, i, &v);
 1213|       |
 1214|  8.09k|			p = skip_nonspace(p);
 1215|  8.09k|		}
 1216|  6.93k|	}
 1217|  8.58k|	else if (entry->format == EXIF_FORMAT_RATIONAL ||
  ------------------
  |  Branch (1217:11): [True: 2.56k, False: 6.02k]
  ------------------
 1218|  8.58k|		entry->format == EXIF_FORMAT_SRATIONAL) {
  ------------------
  |  Branch (1218:3): [True: 654, False: 5.37k]
  ------------------
 1219|  3.21k|		if (entry->components >= 10)
  ------------------
  |  Branch (1219:7): [True: 212, False: 3.00k]
  ------------------
 1220|    212|			return;
 1221|       |
 1222|  3.00k|		p = value;
 1223|  6.74k|		for (i = 0; i < entry->components; i++) {
  ------------------
  |  Branch (1223:15): [True: 3.74k, False: 3.00k]
  ------------------
 1224|  3.74k|			if (!(p = skip_space(p)))
  ------------------
  |  Branch (1224:8): [True: 0, False: 3.74k]
  ------------------
 1225|      0|				break;
 1226|       |
 1227|  3.74k|			vips_exif_set_rational(ed, entry, i, (void *) p);
 1228|       |
 1229|  3.74k|			p = skip_nonspace(p);
 1230|  3.74k|		}
 1231|  3.00k|	}
 1232|  16.2k|}
exif.c:skip_space:
 1170|  11.8k|{
 1171|  13.8k|	while (p && *p == ' ')
  ------------------
  |  Branch (1171:9): [True: 13.8k, False: 0]
  |  Branch (1171:14): [True: 1.98k, False: 11.8k]
  ------------------
 1172|  1.98k|		p += 1;
 1173|       |
 1174|  11.8k|	return p;
 1175|  11.8k|}
exif.c:skip_nonspace:
 1181|  11.8k|{
 1182|  72.0k|	while (p && *p && *p != ' ')
  ------------------
  |  Branch (1182:9): [True: 72.0k, False: 0]
  |  Branch (1182:14): [True: 72.0k, False: 0]
  |  Branch (1182:20): [True: 60.2k, False: 11.8k]
  ------------------
 1183|  60.2k|		p += 1;
 1184|       |
 1185|  11.8k|	return p;
 1186|  11.8k|}
exif.c:vips_exif_set_rational:
  668|  3.74k|{
  669|  3.74k|	char *value = (char *) data;
  670|       |
  671|  3.74k|	ExifByteOrder bo;
  672|  3.74k|	size_t sizeof_component;
  673|  3.74k|	size_t offset;
  674|       |
  675|  3.74k|	if (entry->components <= component) {
  ------------------
  |  Branch (675:6): [True: 0, False: 3.74k]
  ------------------
  676|      0|		VIPS_DEBUG_MSG("vips_exif_set_rational: too few components\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  677|      0|		return;
  678|      0|	}
  679|       |
  680|       |	/* Wait until after the component check to make sure we can't get /0.
  681|       |	 */
  682|  3.74k|	bo = exif_data_get_byte_order(ed);
  683|  3.74k|	sizeof_component = entry->size / entry->components;
  684|  3.74k|	offset = component * sizeof_component;
  685|       |
  686|  3.74k|	VIPS_DEBUG_MSG("vips_exif_set_rational: %s = \"%s\"\n",
  ------------------
  |  |   47|  3.74k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  3.74k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  3.74k|	{ \
  |  |   49|  3.74k|		; \
  |  |   50|  3.74k|	} \
  |  |   51|  3.74k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  3.74k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  687|  3.74k|		vips_exif_entry_get_name(entry), value);
  688|       |
  689|  3.74k|	if (entry->format == EXIF_FORMAT_RATIONAL) {
  ------------------
  |  Branch (689:6): [True: 2.91k, False: 834]
  ------------------
  690|  2.91k|		ExifRational rv;
  691|       |
  692|  2.91k|		vips_exif_parse_rational(value, &rv);
  693|       |
  694|  2.91k|		VIPS_DEBUG_MSG("vips_exif_set_rational: %u / %u\n",
  ------------------
  |  |   47|  2.91k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  2.91k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  2.91k|	{ \
  |  |   49|  2.91k|		; \
  |  |   50|  2.91k|	} \
  |  |   51|  2.91k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.91k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  695|  2.91k|			rv.numerator,
  696|  2.91k|			rv.denominator);
  697|       |
  698|  2.91k|		exif_set_rational(entry->data + offset, bo, rv);
  699|  2.91k|	}
  700|    834|	else if (entry->format == EXIF_FORMAT_SRATIONAL) {
  ------------------
  |  Branch (700:11): [True: 834, False: 0]
  ------------------
  701|    834|		ExifSRational srv;
  702|       |
  703|    834|		vips_exif_parse_srational(value, &srv);
  704|       |
  705|    834|		VIPS_DEBUG_MSG("vips_exif_set_rational: %d / %d\n",
  ------------------
  |  |   47|    834|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    834|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    834|	{ \
  |  |   49|    834|		; \
  |  |   50|    834|	} \
  |  |   51|    834|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    834|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  706|    834|			srv.numerator, srv.denominator);
  707|       |
  708|    834|		exif_set_srational(entry->data + offset, bo, srv);
  709|    834|	}
  710|  3.74k|}
exif.c:vips_exif_parse_rational:
  646|  2.91k|{
  647|  2.91k|	if (sscanf(str, " %u / %u ", &rv->numerator, &rv->denominator) == 2)
  ------------------
  |  Branch (647:6): [True: 2.91k, False: 0]
  ------------------
  648|  2.91k|		return;
  649|      0|	vips_exif_double_to_rational(g_ascii_strtod(str, NULL), rv);
  650|      0|}
exif.c:vips_exif_parse_srational:
  656|    834|{
  657|    834|	if (sscanf(str, " %d / %d ",
  ------------------
  |  Branch (657:6): [True: 834, False: 0]
  ------------------
  658|    834|			&srv->numerator, &srv->denominator) == 2)
  659|    834|		return;
  660|      0|	vips_exif_double_to_srational(g_ascii_strtod(str, NULL), srv);
  661|      0|}
exif.c:vips_exif_set_dimensions:
 1090|  21.6k|{
 1091|  21.6k|	VIPS_DEBUG_MSG("vips_exif_set_dimensions: vips size of %d, %d\n",
  ------------------
  |  |   47|  21.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  21.6k|	{ \
  |  |   49|  21.6k|		; \
  |  |   50|  21.6k|	} \
  |  |   51|  21.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1092|  21.6k|		im->Xsize, im->Ysize);
 1093|       |
 1094|  21.6k|	vips_exif_set_tag(ed, 2, EXIF_TAG_PIXEL_X_DIMENSION,
 1095|  21.6k|		vips_exif_set_int, (void *) &im->Xsize);
 1096|  21.6k|	vips_exif_set_tag(ed, 2, EXIF_TAG_PIXEL_Y_DIMENSION,
 1097|  21.6k|		vips_exif_set_int, (void *) &im->Ysize);
 1098|       |
 1099|  21.6k|	return 0;
 1100|  21.6k|}
exif.c:vips_exif_set_orientation:
 1106|  21.6k|{
 1107|  21.6k|	int orientation;
 1108|       |
 1109|       |	/* We set the tag, even if it's been deleted, since it's a required
 1110|       |	 * field.
 1111|       |	 */
 1112|  21.6k|	if (!vips_image_get_typeof(im, VIPS_META_ORIENTATION) ||
  ------------------
  |  |  149|  21.6k|#define VIPS_META_ORIENTATION "orientation"
  ------------------
  |  Branch (1112:6): [True: 14.7k, False: 6.91k]
  ------------------
 1113|  21.6k|		vips_image_get_int(im, VIPS_META_ORIENTATION, &orientation))
  ------------------
  |  |  149|  6.91k|#define VIPS_META_ORIENTATION "orientation"
  ------------------
  |  Branch (1113:3): [True: 0, False: 6.91k]
  ------------------
 1114|  14.7k|		orientation = 1;
 1115|       |
 1116|  21.6k|	VIPS_DEBUG_MSG("set_exif_orientation: %d\n", orientation);
  ------------------
  |  |   47|  21.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  21.6k|	{ \
  |  |   49|  21.6k|		; \
  |  |   50|  21.6k|	} \
  |  |   51|  21.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1117|       |
 1118|  21.6k|	vips_exif_set_tag(ed, 0, EXIF_TAG_ORIENTATION,
 1119|  21.6k|		vips_exif_set_int, (void *) &orientation);
 1120|       |
 1121|  21.6k|	return 0;
 1122|  21.6k|}
exif.c:vips_exif_set_thumbnail:
 1128|  21.6k|{
 1129|       |	/* Delete any old thumbnail data. We should use the exif free func,
 1130|       |	 * but the memory allocator is not exposed by libexif! Hopefully they
 1131|       |	 * are just using free().
 1132|       |	 *
 1133|       |	 * exif.c makes this assumption too when it tries to update a
 1134|       |	 * thumbnail.
 1135|       |	 */
 1136|  21.6k|	if (ed->data) {
  ------------------
  |  Branch (1136:6): [True: 99, False: 21.5k]
  ------------------
 1137|     99|		free(ed->data);
 1138|     99|		ed->data = NULL;
 1139|     99|	}
 1140|  21.6k|	ed->size = 0;
 1141|       |
 1142|       |	/* Update EXIF thumbnail from metadata, if any.
 1143|       |	 */
 1144|  21.6k|	if (vips_image_get_typeof(im, "jpeg-thumbnail-data")) {
  ------------------
  |  Branch (1144:6): [True: 99, False: 21.5k]
  ------------------
 1145|     99|		const void *data;
 1146|     99|		size_t size;
 1147|       |
 1148|     99|		if (vips_image_get_blob(im, "jpeg-thumbnail-data",
  ------------------
  |  Branch (1148:7): [True: 0, False: 99]
  ------------------
 1149|     99|				&data, &size))
 1150|      0|			return -1;
 1151|       |
 1152|       |		/* Again, we should use the exif allocator attached to this
 1153|       |		 * entry, but it is not exposed!
 1154|       |		 */
 1155|     99|		if (size > 0 &&
  ------------------
  |  Branch (1155:7): [True: 99, False: 0]
  ------------------
 1156|     99|			data) {
  ------------------
  |  Branch (1156:4): [True: 99, False: 0]
  ------------------
 1157|     99|			ed->data = malloc(size);
 1158|     99|			memcpy(ed->data, data, size);
 1159|     99|			ed->size = size;
 1160|     99|		}
 1161|     99|	}
 1162|       |
 1163|  21.6k|	return 0;
 1164|  21.6k|}

vips_foreign_map:
  468|  58.0k|{
  469|  58.0k|	GSList *files;
  470|  58.0k|	void *result;
  471|       |
  472|  58.0k|	files = NULL;
  473|  58.0k|	(void) vips_class_map_all(g_type_from_name(base),
  474|  58.0k|		(VipsClassMapFn) file_add_class, (void *) &files);
  475|       |
  476|  58.0k|	files = g_slist_sort(files, (GCompareFunc) file_compare);
  477|       |#ifdef DEBUG
  478|       |	{
  479|       |		GSList *p;
  480|       |
  481|       |		printf("vips_foreign_map: search order\n");
  482|       |		for (p = files; p; p = p->next) {
  483|       |			VipsForeignClass *class = (VipsForeignClass *) p->data;
  484|       |
  485|       |			printf("\t%s\n", VIPS_OBJECT_CLASS(class)->nickname);
  486|       |		}
  487|       |	}
  488|       |#endif /*DEBUG*/
  489|  58.0k|	result = vips_slist_map2(files, fn, a, b);
  490|       |
  491|  58.0k|	g_slist_free(files);
  492|       |
  493|  58.0k|	return result;
  494|  58.0k|}
vips_foreign_find_load_buffer:
  700|  36.4k|{
  701|  36.4k|	VipsForeignLoadClass *load_class;
  702|       |
  703|  36.4k|	if (!(load_class = (VipsForeignLoadClass *) vips_foreign_map(
  ------------------
  |  Branch (703:6): [True: 6.41k, False: 30.0k]
  ------------------
  704|  36.4k|			  "VipsForeignLoad",
  705|  36.4k|			  (VipsSListMap2Fn) vips_foreign_find_load_buffer_sub,
  706|  36.4k|			  &data, &size))) {
  707|  6.41k|		vips_error("VipsForeignLoad",
  708|  6.41k|			"%s", _("buffer is not in a known format"));
  ------------------
  |  |   30|  6.41k|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|  6.41k|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  709|  6.41k|		return NULL;
  710|  6.41k|	}
  711|       |
  712|  30.0k|	return G_OBJECT_CLASS_NAME(load_class);
  ------------------
  |  |  124|  30.0k|#define G_OBJECT_CLASS_NAME(class)  (g_type_name (G_OBJECT_CLASS_TYPE (class)))
  |  |  ------------------
  |  |  |  |  114|  30.0k|#define G_OBJECT_CLASS_TYPE(class)  (G_TYPE_FROM_CLASS (class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|  30.0k|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  713|  36.4k|}
vips_foreign_load_invalidate:
 1306|  1.13k|{
 1307|  1.13k|	VipsOperation *operation;
 1308|       |
 1309|       |#ifdef DEBUG
 1310|       |	printf("vips_foreign_load_invalidate: %p\n", image);
 1311|       |#endif /*DEBUG*/
 1312|       |
 1313|  1.13k|	if ((operation = g_object_get_qdata(G_OBJECT(image),
  ------------------
  |  |   51|  1.13k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  1.13k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.13k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1313:6): [True: 1.13k, False: 0]
  ------------------
 1314|  1.13k|			 vips__foreign_load_operation))) {
 1315|  1.13k|		vips_operation_invalidate(operation);
 1316|  1.13k|	}
 1317|  1.13k|}
vips__foreign_convert_saveable:
 1372|  21.6k|{
 1373|       |	/* in holds a reference to the output of our chain as we build it.
 1374|       |	 */
 1375|  21.6k|	g_object_ref(in);
 1376|       |
 1377|       |	/* For coded images, can this class save the coding we are in now?
 1378|       |	 * Nothing to do.
 1379|       |	 */
 1380|  21.6k|	if (in->Coding != VIPS_CODING_NONE &&
  ------------------
  |  Branch (1380:6): [True: 283, False: 21.3k]
  ------------------
 1381|  21.6k|		coding[in->Coding]) {
  ------------------
  |  Branch (1381:3): [True: 0, False: 283]
  ------------------
 1382|      0|		*ready = in;
 1383|      0|		return 0;
 1384|      0|	}
 1385|       |
 1386|       |	/* For uncoded images, if this saver supports ANY bands and this
 1387|       |	 * format we have nothing to do.
 1388|       |	 */
 1389|  21.6k|	if (in->Coding == VIPS_CODING_NONE &&
  ------------------
  |  Branch (1389:6): [True: 21.3k, False: 283]
  ------------------
 1390|  21.6k|		saveable == VIPS_SAVEABLE_ANY &&
  ------------------
  |  Branch (1390:3): [True: 0, False: 21.3k]
  ------------------
 1391|  21.6k|		format[in->BandFmt] == in->BandFmt) {
  ------------------
  |  Branch (1391:3): [True: 0, False: 0]
  ------------------
 1392|      0|		*ready = in;
 1393|      0|		return 0;
 1394|      0|	}
 1395|       |
 1396|       |	/* Otherwise ... we need to decode and then (possibly) recode at the
 1397|       |	 * end.
 1398|       |	 */
 1399|       |
 1400|       |	/* If this is an VIPS_CODING_LABQ, we can go straight to RGB.
 1401|       |	 */
 1402|  21.6k|	if (in->Coding == VIPS_CODING_LABQ) {
  ------------------
  |  Branch (1402:6): [True: 37, False: 21.6k]
  ------------------
 1403|     37|		VipsImage *out;
 1404|       |
 1405|     37|		if (vips_LabQ2sRGB(in, &out, NULL)) {
  ------------------
  |  Branch (1405:7): [True: 0, False: 37]
  ------------------
 1406|      0|			g_object_unref(in);
 1407|      0|			return -1;
 1408|      0|		}
 1409|     37|		g_object_unref(in);
 1410|       |
 1411|     37|		in = out;
 1412|     37|	}
 1413|       |
 1414|       |	/* If this is an VIPS_CODING_RAD, we unpack to float. This could be
 1415|       |	 * scRGB or XYZ.
 1416|       |	 */
 1417|  21.6k|	if (in->Coding == VIPS_CODING_RAD) {
  ------------------
  |  Branch (1417:6): [True: 246, False: 21.3k]
  ------------------
 1418|    246|		VipsImage *out;
 1419|       |
 1420|    246|		if (vips_rad2float(in, &out, NULL)) {
  ------------------
  |  Branch (1420:7): [True: 0, False: 246]
  ------------------
 1421|      0|			g_object_unref(in);
 1422|      0|			return -1;
 1423|      0|		}
 1424|    246|		g_object_unref(in);
 1425|       |
 1426|    246|		in = out;
 1427|    246|	}
 1428|       |
 1429|       |	/* If the saver supports RAD, we need to go to scRGB or XYZ.
 1430|       |	 */
 1431|  21.6k|	if (coding[VIPS_CODING_RAD]) {
  ------------------
  |  Branch (1431:6): [True: 0, False: 21.6k]
  ------------------
 1432|      0|		if (in->Type != VIPS_INTERPRETATION_scRGB &&
  ------------------
  |  Branch (1432:7): [True: 0, False: 0]
  ------------------
 1433|      0|			in->Type != VIPS_INTERPRETATION_XYZ) {
  ------------------
  |  Branch (1433:4): [True: 0, False: 0]
  ------------------
 1434|      0|			VipsImage *out;
 1435|       |
 1436|      0|			if (vips_colourspace(in, &out, VIPS_INTERPRETATION_scRGB, NULL)) {
  ------------------
  |  Branch (1436:8): [True: 0, False: 0]
  ------------------
 1437|      0|				g_object_unref(in);
 1438|      0|				return -1;
 1439|      0|			}
 1440|      0|			g_object_unref(in);
 1441|       |
 1442|      0|			in = out;
 1443|      0|		}
 1444|      0|	}
 1445|       |
 1446|       |	/* If this image is CMYK and the saver is RGB-only, use lcms to try to
 1447|       |	 * import to XYZ.
 1448|       |	 */
 1449|  21.6k|	if (in->Type == VIPS_INTERPRETATION_CMYK &&
  ------------------
  |  Branch (1449:6): [True: 909, False: 20.7k]
  ------------------
 1450|  21.6k|		in->Bands >= 4 &&
  ------------------
  |  Branch (1450:3): [True: 909, False: 0]
  ------------------
 1451|  21.6k|		(saveable == VIPS_SAVEABLE_RGB ||
  ------------------
  |  Branch (1451:4): [True: 0, False: 909]
  ------------------
 1452|    909|			saveable == VIPS_SAVEABLE_RGBA ||
  ------------------
  |  Branch (1452:4): [True: 909, False: 0]
  ------------------
 1453|    909|			saveable == VIPS_SAVEABLE_RGBA_ONLY)) {
  ------------------
  |  Branch (1453:4): [True: 0, False: 0]
  ------------------
 1454|    909|		VipsImage *out;
 1455|       |
 1456|    909|		if (vips_icc_import(in, &out,
  ------------------
  |  Branch (1456:7): [True: 0, False: 909]
  ------------------
 1457|    909|				"pcs", VIPS_PCS_XYZ,
 1458|    909|				"embedded", TRUE,
  ------------------
  |  |  798|    909|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    909|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1459|    909|				"input_profile", "cmyk",
 1460|    909|				NULL)) {
 1461|      0|			g_object_unref(in);
 1462|      0|			return -1;
 1463|      0|		}
 1464|    909|		g_object_unref(in);
 1465|       |
 1466|    909|		in = out;
 1467|    909|	}
 1468|       |
 1469|       |	/* If this is something other than CMYK or RAD, and it's not already
 1470|       |	 * an RGB image, eg. maybe a LAB image, we need to transform
 1471|       |	 * to RGB.
 1472|       |	 */
 1473|  21.6k|	if (!coding[VIPS_CODING_RAD] &&
  ------------------
  |  Branch (1473:6): [True: 21.6k, False: 0]
  ------------------
 1474|  21.6k|		in->Bands >= 3 &&
  ------------------
  |  Branch (1474:3): [True: 16.4k, False: 5.17k]
  ------------------
 1475|  21.6k|		in->Type != VIPS_INTERPRETATION_CMYK &&
  ------------------
  |  Branch (1475:3): [True: 16.4k, False: 0]
  ------------------
 1476|  21.6k|		in->Type != VIPS_INTERPRETATION_sRGB &&
  ------------------
  |  Branch (1476:3): [True: 3.86k, False: 12.6k]
  ------------------
 1477|  21.6k|		in->Type != VIPS_INTERPRETATION_RGB16 &&
  ------------------
  |  Branch (1477:3): [True: 2.26k, False: 1.60k]
  ------------------
 1478|  21.6k|		vips_colourspace_issupported(in) &&
  ------------------
  |  Branch (1478:3): [True: 2.22k, False: 33]
  ------------------
 1479|  21.6k|		(saveable == VIPS_SAVEABLE_RGB ||
  ------------------
  |  Branch (1479:4): [True: 0, False: 2.22k]
  ------------------
 1480|  2.22k|			saveable == VIPS_SAVEABLE_RGBA ||
  ------------------
  |  Branch (1480:4): [True: 2.22k, False: 0]
  ------------------
 1481|  2.22k|			saveable == VIPS_SAVEABLE_RGBA_ONLY ||
  ------------------
  |  Branch (1481:4): [True: 0, False: 0]
  ------------------
 1482|  2.22k|			saveable == VIPS_SAVEABLE_RGB_CMYK)) {
  ------------------
  |  Branch (1482:4): [True: 0, False: 0]
  ------------------
 1483|  2.22k|		VipsImage *out;
 1484|  2.22k|		VipsInterpretation interpretation;
 1485|       |
 1486|       |		/* Do we make RGB or RGB16? We don't want to squash a 16-bit
 1487|       |		 * RGB down to 8 bits if the saver supports 16.
 1488|       |		 */
 1489|  2.22k|		if (vips_band_format_is8bit(format[in->BandFmt]))
  ------------------
  |  Branch (1489:7): [True: 183, False: 2.04k]
  ------------------
 1490|    183|			interpretation = VIPS_INTERPRETATION_sRGB;
 1491|  2.04k|		else
 1492|  2.04k|			interpretation = VIPS_INTERPRETATION_RGB16;
 1493|       |
 1494|  2.22k|		if (vips_colourspace(in, &out, interpretation, NULL)) {
  ------------------
  |  Branch (1494:7): [True: 0, False: 2.22k]
  ------------------
 1495|      0|			g_object_unref(in);
 1496|      0|			return -1;
 1497|      0|		}
 1498|  2.22k|		g_object_unref(in);
 1499|       |
 1500|  2.22k|		in = out;
 1501|  2.22k|	}
 1502|       |
 1503|       |	/* VIPS_SAVEABLE_RGBA_ONLY does not support mono types ... convert
 1504|       |	 * to sRGB.
 1505|       |	 */
 1506|  21.6k|	if (!coding[VIPS_CODING_RAD] &&
  ------------------
  |  Branch (1506:6): [True: 21.6k, False: 0]
  ------------------
 1507|  21.6k|		in->Bands < 3 &&
  ------------------
  |  Branch (1507:3): [True: 5.17k, False: 16.4k]
  ------------------
 1508|  21.6k|		saveable == VIPS_SAVEABLE_RGBA_ONLY) {
  ------------------
  |  Branch (1508:3): [True: 0, False: 5.17k]
  ------------------
 1509|      0|		VipsImage *out;
 1510|      0|		VipsInterpretation interpretation;
 1511|       |
 1512|       |		/* Do we make RGB or RGB16? We don't want to squash a 16-bit
 1513|       |		 * RGB down to 8 bits if the saver supports 16.
 1514|       |		 */
 1515|      0|		if (vips_band_format_is8bit(format[in->BandFmt]))
  ------------------
  |  Branch (1515:7): [True: 0, False: 0]
  ------------------
 1516|      0|			interpretation = VIPS_INTERPRETATION_sRGB;
 1517|      0|		else
 1518|      0|			interpretation = VIPS_INTERPRETATION_RGB16;
 1519|       |
 1520|      0|		if (vips_colourspace(in, &out, interpretation, NULL)) {
  ------------------
  |  Branch (1520:7): [True: 0, False: 0]
  ------------------
 1521|      0|			g_object_unref(in);
 1522|      0|			return -1;
 1523|      0|		}
 1524|      0|		g_object_unref(in);
 1525|       |
 1526|      0|		in = out;
 1527|      0|	}
 1528|       |
 1529|       |	/* Get the bands right. We must do this after all colourspace
 1530|       |	 * transforms, since they can change the number of bands.
 1531|       |	 */
 1532|  21.6k|	if (in->Coding == VIPS_CODING_NONE) {
  ------------------
  |  Branch (1532:6): [True: 21.6k, False: 0]
  ------------------
 1533|       |		/* Do we need to flatten out an alpha channel? There needs to
 1534|       |		 * be an alpha there now, and this writer needs to not support
 1535|       |		 * alpha.
 1536|       |		 */
 1537|  21.6k|		if ((in->Bands == 2 ||
  ------------------
  |  Branch (1537:8): [True: 292, False: 21.3k]
  ------------------
 1538|  21.6k|				(in->Bands == 4 &&
  ------------------
  |  Branch (1538:6): [True: 2.78k, False: 18.5k]
  ------------------
 1539|  21.3k|					in->Type != VIPS_INTERPRETATION_CMYK)) &&
  ------------------
  |  Branch (1539:6): [True: 2.78k, False: 0]
  ------------------
 1540|  21.6k|			(saveable == VIPS_SAVEABLE_MONO ||
  ------------------
  |  Branch (1540:5): [True: 0, False: 3.07k]
  ------------------
 1541|  3.07k|				saveable == VIPS_SAVEABLE_RGB ||
  ------------------
  |  Branch (1541:5): [True: 0, False: 3.07k]
  ------------------
 1542|  3.07k|				saveable == VIPS_SAVEABLE_RGB_CMYK)) {
  ------------------
  |  Branch (1542:5): [True: 0, False: 3.07k]
  ------------------
 1543|      0|			VipsImage *out;
 1544|       |
 1545|      0|			if (vips_flatten(in, &out,
  ------------------
  |  Branch (1545:8): [True: 0, False: 0]
  ------------------
 1546|      0|					"background", background,
 1547|      0|					NULL)) {
 1548|      0|				g_object_unref(in);
 1549|      0|				return -1;
 1550|      0|			}
 1551|      0|			g_object_unref(in);
 1552|       |
 1553|      0|			in = out;
 1554|      0|		}
 1555|       |
 1556|       |		/* Other alpha removal strategies ... just drop the extra
 1557|       |		 * bands.
 1558|       |		 */
 1559|       |
 1560|  21.6k|		else if (in->Bands > 3 &&
  ------------------
  |  Branch (1560:12): [True: 3.24k, False: 18.3k]
  ------------------
 1561|  21.6k|			(saveable == VIPS_SAVEABLE_RGB ||
  ------------------
  |  Branch (1561:5): [True: 0, False: 3.24k]
  ------------------
 1562|  3.24k|				(saveable == VIPS_SAVEABLE_RGB_CMYK &&
  ------------------
  |  Branch (1562:6): [True: 0, False: 3.24k]
  ------------------
 1563|  3.24k|					in->Type != VIPS_INTERPRETATION_CMYK))) {
  ------------------
  |  Branch (1563:6): [True: 0, False: 0]
  ------------------
 1564|      0|			VipsImage *out;
 1565|       |
 1566|       |			/* Don't let 4 bands though unless the image really is
 1567|       |			 * a CMYK.
 1568|       |			 *
 1569|       |			 * Consider a RGBA png being saved as JPG. We can
 1570|       |			 * write CMYK jpg, but we mustn't do that for RGBA
 1571|       |			 * images.
 1572|       |			 */
 1573|      0|			if (vips_extract_band(in, &out, 0,
  ------------------
  |  Branch (1573:8): [True: 0, False: 0]
  ------------------
 1574|      0|					"n", 3,
 1575|      0|					NULL)) {
 1576|      0|				g_object_unref(in);
 1577|      0|				return -1;
 1578|      0|			}
 1579|      0|			g_object_unref(in);
 1580|       |
 1581|      0|			in = out;
 1582|      0|		}
 1583|  21.6k|		else if (in->Bands > 4 &&
  ------------------
  |  Branch (1583:12): [True: 460, False: 21.1k]
  ------------------
 1584|  21.6k|			((saveable == VIPS_SAVEABLE_RGB_CMYK &&
  ------------------
  |  Branch (1584:6): [True: 0, False: 460]
  ------------------
 1585|    460|				 in->Type == VIPS_INTERPRETATION_CMYK) ||
  ------------------
  |  Branch (1585:6): [True: 0, False: 0]
  ------------------
 1586|    460|				saveable == VIPS_SAVEABLE_RGBA ||
  ------------------
  |  Branch (1586:5): [True: 460, False: 0]
  ------------------
 1587|    460|				saveable == VIPS_SAVEABLE_RGBA_ONLY)) {
  ------------------
  |  Branch (1587:5): [True: 0, False: 0]
  ------------------
 1588|    460|			VipsImage *out;
 1589|       |
 1590|    460|			if (vips_extract_band(in, &out, 0,
  ------------------
  |  Branch (1590:8): [True: 0, False: 460]
  ------------------
 1591|    460|					"n", 4,
 1592|    460|					NULL)) {
 1593|      0|				g_object_unref(in);
 1594|      0|				return -1;
 1595|      0|			}
 1596|    460|			g_object_unref(in);
 1597|       |
 1598|    460|			in = out;
 1599|    460|		}
 1600|  21.1k|		else if (in->Bands > 1 &&
  ------------------
  |  Branch (1600:12): [True: 16.3k, False: 4.87k]
  ------------------
 1601|  21.1k|			saveable == VIPS_SAVEABLE_MONO) {
  ------------------
  |  Branch (1601:4): [True: 0, False: 16.3k]
  ------------------
 1602|      0|			VipsImage *out;
 1603|       |
 1604|      0|			if (vips_extract_band(in, &out, 0, NULL)) {
  ------------------
  |  Branch (1604:8): [True: 0, False: 0]
  ------------------
 1605|      0|				g_object_unref(in);
 1606|      0|				return -1;
 1607|      0|			}
 1608|      0|			g_object_unref(in);
 1609|       |
 1610|      0|			in = out;
 1611|      0|		}
 1612|       |
 1613|       |		/* Else we have VIPS_SAVEABLE_ANY and we don't chop bands down.
 1614|       |		 */
 1615|  21.6k|	}
 1616|       |
 1617|       |	/* Handle the ushort interpretations.
 1618|       |	 *
 1619|       |	 * RGB16 and GREY16 use 0-65535 for black-white. If we have an image
 1620|       |	 * tagged like this, and it has more than 8 bits (we leave crazy uchar
 1621|       |	 * images tagged as RGB16 alone), we'll need to get it ready for the
 1622|       |	 * saver.
 1623|       |	 */
 1624|  21.6k|	if ((in->Type == VIPS_INTERPRETATION_RGB16 ||
  ------------------
  |  Branch (1624:7): [True: 3.58k, False: 18.0k]
  ------------------
 1625|  21.6k|			in->Type == VIPS_INTERPRETATION_GREY16) &&
  ------------------
  |  Branch (1625:4): [True: 284, False: 17.7k]
  ------------------
 1626|  21.6k|		!vips_band_format_is8bit(in->BandFmt)) {
  ------------------
  |  Branch (1626:3): [True: 3.86k, False: 0]
  ------------------
 1627|       |		/* If the saver supports ushort, cast to ushort. It may be
 1628|       |		 * float at the moment, for example.
 1629|       |		 *
 1630|       |		 * If the saver does not support ushort, automatically shift
 1631|       |		 * it down. This is the behaviour we want for saving an RGB16
 1632|       |		 * image as JPG, for example.
 1633|       |		 */
 1634|  3.86k|		if (format[VIPS_FORMAT_USHORT] == VIPS_FORMAT_USHORT) {
  ------------------
  |  Branch (1634:7): [True: 3.86k, False: 0]
  ------------------
 1635|  3.86k|			VipsImage *out;
 1636|       |
 1637|  3.86k|			if (vips_cast(in, &out, VIPS_FORMAT_USHORT, NULL)) {
  ------------------
  |  Branch (1637:8): [True: 0, False: 3.86k]
  ------------------
 1638|      0|				g_object_unref(in);
 1639|      0|				return -1;
 1640|      0|			}
 1641|  3.86k|			g_object_unref(in);
 1642|       |
 1643|  3.86k|			in = out;
 1644|  3.86k|		}
 1645|      0|		else {
 1646|      0|			VipsImage *out;
 1647|       |
 1648|      0|			if (vips_rshift_const1(in, &out, 8, NULL)) {
  ------------------
  |  Branch (1648:8): [True: 0, False: 0]
  ------------------
 1649|      0|				g_object_unref(in);
 1650|      0|				return -1;
 1651|      0|			}
 1652|      0|			g_object_unref(in);
 1653|       |
 1654|      0|			in = out;
 1655|       |
 1656|       |			/* That could have produced an int image ... make sure
 1657|       |			 * we are now uchar.
 1658|       |			 */
 1659|      0|			if (vips_cast(in, &out, VIPS_FORMAT_UCHAR, NULL)) {
  ------------------
  |  Branch (1659:8): [True: 0, False: 0]
  ------------------
 1660|      0|				g_object_unref(in);
 1661|      0|				return -1;
 1662|      0|			}
 1663|      0|			g_object_unref(in);
 1664|       |
 1665|      0|			in = out;
 1666|      0|		}
 1667|  3.86k|	}
 1668|       |
 1669|       |	/* Cast to the output format.
 1670|       |	 */
 1671|  21.6k|	{
 1672|  21.6k|		VipsImage *out;
 1673|       |
 1674|  21.6k|		if (vips_cast(in, &out, format[in->BandFmt], NULL)) {
  ------------------
  |  Branch (1674:7): [True: 0, False: 21.6k]
  ------------------
 1675|      0|			g_object_unref(in);
 1676|      0|			return -1;
 1677|      0|		}
 1678|  21.6k|		g_object_unref(in);
 1679|       |
 1680|  21.6k|		in = out;
 1681|  21.6k|	}
 1682|       |
 1683|       |	/* Does this class want a coded image? Search the coding table for the
 1684|       |	 * first one.
 1685|       |	 */
 1686|  21.6k|	if (coding[VIPS_CODING_NONE]) {
  ------------------
  |  Branch (1686:6): [True: 21.6k, False: 0]
  ------------------
 1687|       |		/* Already NONE, nothing to do.
 1688|       |		 */
 1689|  21.6k|	}
 1690|      0|	else if (coding[VIPS_CODING_LABQ]) {
  ------------------
  |  Branch (1690:11): [True: 0, False: 0]
  ------------------
 1691|      0|		VipsImage *out;
 1692|       |
 1693|      0|		if (vips_Lab2LabQ(in, &out, NULL)) {
  ------------------
  |  Branch (1693:7): [True: 0, False: 0]
  ------------------
 1694|      0|			g_object_unref(in);
 1695|      0|			return -1;
 1696|      0|		}
 1697|      0|		g_object_unref(in);
 1698|       |
 1699|      0|		in = out;
 1700|      0|	}
 1701|      0|	else if (coding[VIPS_CODING_RAD]) {
  ------------------
  |  Branch (1701:11): [True: 0, False: 0]
  ------------------
 1702|      0|		VipsImage *out;
 1703|       |
 1704|      0|		if (vips_float2rad(in, &out, NULL)) {
  ------------------
  |  Branch (1704:7): [True: 0, False: 0]
  ------------------
 1705|      0|			g_object_unref(in);
 1706|      0|			return -1;
 1707|      0|		}
 1708|      0|		g_object_unref(in);
 1709|       |
 1710|      0|		in = out;
 1711|      0|	}
 1712|       |
 1713|  21.6k|	*ready = in;
 1714|       |
 1715|  21.6k|	return 0;
 1716|  21.6k|}
vips__foreign_update_metadata:
 1751|  21.6k|{
 1752|       |	/* Rebuild exif from tags, if we'll be saving it.
 1753|       |	 */
 1754|  21.6k|	if ((keep & VIPS_FOREIGN_KEEP_EXIF) &&
  ------------------
  |  Branch (1754:6): [True: 21.6k, False: 0]
  ------------------
 1755|  21.6k|		vips__exif_update(in))
  ------------------
  |  Branch (1755:3): [True: 0, False: 21.6k]
  ------------------
 1756|      0|		return -1;
 1757|       |
 1758|       |	/* Remove metadata, if any.
 1759|       |	 */
 1760|  21.6k|	if (keep != VIPS_FOREIGN_KEEP_ALL &&
  ------------------
  |  Branch (1760:6): [True: 0, False: 21.6k]
  ------------------
 1761|  21.6k|		vips_image_map(in, vips_foreign_save_remove_metadata, &keep))
  ------------------
  |  Branch (1761:3): [True: 0, False: 0]
  ------------------
 1762|      0|		return -1;
 1763|       |
 1764|       |	/* Some format libraries, like libpng, will throw a hard error if the
 1765|       |	 * profile is inappropriate for this image type. With profiles inherited
 1766|       |	 * from a source image, this can happen all the time, so we
 1767|       |	 * want to silently drop the profile in this case.
 1768|       |	 */
 1769|  21.6k|	if ((keep & VIPS_FOREIGN_KEEP_ICC) &&
  ------------------
  |  Branch (1769:6): [True: 21.6k, False: 0]
  ------------------
 1770|  21.6k|		vips_image_get_typeof(in, VIPS_META_ICC_NAME)) {
  ------------------
  |  |   78|  21.6k|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  |  Branch (1770:3): [True: 107, False: 21.5k]
  ------------------
 1771|    107|		const void *data;
 1772|    107|		size_t length;
 1773|       |
 1774|    107|		if (!vips_image_get_blob(in, VIPS_META_ICC_NAME, &data, &length) &&
  ------------------
  |  |   78|    107|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  |  Branch (1774:7): [True: 107, False: 0]
  ------------------
 1775|    107|			!vips_icc_is_compatible_profile(in, data, length) &&
  ------------------
  |  Branch (1775:4): [True: 88, False: 19]
  ------------------
 1776|    107|			!vips_image_remove(in, VIPS_META_ICC_NAME))
  ------------------
  |  |   78|     88|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  |  Branch (1776:4): [True: 0, False: 88]
  ------------------
 1777|      0|			return -1;
 1778|    107|	}
 1779|       |
 1780|  21.6k|	return 0;
 1781|  21.6k|}
vips_foreign_find_save_target:
 2148|  21.6k|{
 2149|  21.6k|	char suffix[VIPS_PATH_MAX];
 2150|  21.6k|	char option_string[VIPS_PATH_MAX];
 2151|  21.6k|	VipsForeignSaveClass *save_class;
 2152|       |
 2153|  21.6k|	vips__filename_split8(name, suffix, option_string);
 2154|       |
 2155|  21.6k|	if (!(save_class = (VipsForeignSaveClass *) vips_foreign_map(
  ------------------
  |  Branch (2155:6): [True: 0, False: 21.6k]
  ------------------
 2156|  21.6k|			  "VipsForeignSave",
 2157|  21.6k|			  (VipsSListMap2Fn) vips_foreign_find_save_target_sub,
 2158|  21.6k|			  (void *) suffix, NULL))) {
 2159|      0|		vips_error("VipsForeignSave",
 2160|      0|			_("\"%s\" is not a known target format"), name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2161|       |
 2162|      0|		return NULL;
 2163|      0|	}
 2164|       |
 2165|  21.6k|	return G_OBJECT_CLASS_NAME(save_class);
  ------------------
  |  |  124|  21.6k|#define G_OBJECT_CLASS_NAME(class)  (g_type_name (G_OBJECT_CLASS_TYPE (class)))
  |  |  ------------------
  |  |  |  |  114|  21.6k|#define G_OBJECT_CLASS_TYPE(class)  (G_TYPE_FROM_CLASS (class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|  21.6k|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2166|  21.6k|}
vips_foreign_operation_init:
 2939|      2|{
 2940|      2|	extern GType vips_foreign_load_rad_file_get_type(void);
 2941|      2|	extern GType vips_foreign_load_rad_buffer_get_type(void);
 2942|      2|	extern GType vips_foreign_load_rad_source_get_type(void);
 2943|      2|	extern GType vips_foreign_save_rad_file_get_type(void);
 2944|      2|	extern GType vips_foreign_save_rad_buffer_get_type(void);
 2945|      2|	extern GType vips_foreign_save_rad_target_get_type(void);
 2946|       |
 2947|      2|	extern GType vips_foreign_load_mat_get_type(void);
 2948|       |
 2949|      2|	extern GType vips_foreign_load_ppm_file_get_type(void);
 2950|      2|	extern GType vips_foreign_load_ppm_source_get_type(void);
 2951|      2|	extern GType vips_foreign_save_ppm_file_get_type(void);
 2952|      2|	extern GType vips_foreign_save_pbm_target_get_type(void);
 2953|      2|	extern GType vips_foreign_save_pgm_target_get_type(void);
 2954|      2|	extern GType vips_foreign_save_ppm_target_get_type(void);
 2955|      2|	extern GType vips_foreign_save_pfm_target_get_type(void);
 2956|      2|	extern GType vips_foreign_save_pnm_target_get_type(void);
 2957|       |
 2958|      2|	extern GType vips_foreign_load_png_file_get_type(void);
 2959|      2|	extern GType vips_foreign_load_png_buffer_get_type(void);
 2960|      2|	extern GType vips_foreign_load_png_source_get_type(void);
 2961|      2|	extern GType vips_foreign_save_png_file_get_type(void);
 2962|      2|	extern GType vips_foreign_save_png_buffer_get_type(void);
 2963|      2|	extern GType vips_foreign_save_png_target_get_type(void);
 2964|       |
 2965|      2|	extern GType vips_foreign_save_spng_file_get_type(void);
 2966|      2|	extern GType vips_foreign_save_spng_buffer_get_type(void);
 2967|      2|	extern GType vips_foreign_save_spng_target_get_type(void);
 2968|       |
 2969|      2|	extern GType vips_foreign_load_csv_file_get_type(void);
 2970|      2|	extern GType vips_foreign_load_csv_source_get_type(void);
 2971|      2|	extern GType vips_foreign_save_csv_file_get_type(void);
 2972|      2|	extern GType vips_foreign_save_csv_target_get_type(void);
 2973|       |
 2974|      2|	extern GType vips_foreign_load_matrix_file_get_type(void);
 2975|      2|	extern GType vips_foreign_load_matrix_source_get_type(void);
 2976|      2|	extern GType vips_foreign_save_matrix_file_get_type(void);
 2977|      2|	extern GType vips_foreign_save_matrix_target_get_type(void);
 2978|      2|	extern GType vips_foreign_print_matrix_get_type(void);
 2979|       |
 2980|      2|	extern GType vips_foreign_load_fits_file_get_type(void);
 2981|      2|	extern GType vips_foreign_load_fits_source_get_type(void);
 2982|      2|	extern GType vips_foreign_save_fits_get_type(void);
 2983|       |
 2984|      2|	extern GType vips_foreign_load_analyze_get_type(void);
 2985|       |
 2986|      2|	extern GType vips_foreign_load_openexr_get_type(void);
 2987|       |
 2988|      2|	extern GType vips_foreign_load_openslide_file_get_type(void);
 2989|      2|	extern GType vips_foreign_load_openslide_source_get_type(void);
 2990|       |
 2991|      2|	extern GType vips_foreign_load_vips_file_get_type(void);
 2992|      2|	extern GType vips_foreign_load_vips_source_get_type(void);
 2993|      2|	extern GType vips_foreign_save_vips_file_get_type(void);
 2994|      2|	extern GType vips_foreign_save_vips_target_get_type(void);
 2995|       |
 2996|      2|	extern GType vips_foreign_load_jpeg_file_get_type(void);
 2997|      2|	extern GType vips_foreign_load_jpeg_buffer_get_type(void);
 2998|      2|	extern GType vips_foreign_load_jpeg_source_get_type(void);
 2999|      2|	extern GType vips_foreign_save_jpeg_file_get_type(void);
 3000|      2|	extern GType vips_foreign_save_jpeg_buffer_get_type(void);
 3001|      2|	extern GType vips_foreign_save_jpeg_target_get_type(void);
 3002|      2|	extern GType vips_foreign_save_jpeg_mime_get_type(void);
 3003|       |
 3004|      2|	extern GType vips_foreign_load_tiff_file_get_type(void);
 3005|      2|	extern GType vips_foreign_load_tiff_buffer_get_type(void);
 3006|      2|	extern GType vips_foreign_load_tiff_source_get_type(void);
 3007|      2|	extern GType vips_foreign_save_tiff_file_get_type(void);
 3008|      2|	extern GType vips_foreign_save_tiff_buffer_get_type(void);
 3009|      2|	extern GType vips_foreign_save_tiff_target_get_type(void);
 3010|       |
 3011|      2|	extern GType vips_foreign_load_raw_get_type(void);
 3012|      2|	extern GType vips_foreign_save_raw_file_get_type(void);
 3013|      2|	extern GType vips_foreign_save_raw_buffer_get_type(void);
 3014|      2|	extern GType vips_foreign_save_raw_target_get_type(void);
 3015|       |
 3016|      2|	extern GType vips_foreign_load_magick_file_get_type(void);
 3017|      2|	extern GType vips_foreign_load_magick_buffer_get_type(void);
 3018|      2|	extern GType vips_foreign_load_magick7_file_get_type(void);
 3019|      2|	extern GType vips_foreign_load_magick7_buffer_get_type(void);
 3020|       |
 3021|      2|	extern GType vips_foreign_save_magick_file_get_type(void);
 3022|      2|	extern GType vips_foreign_save_magick_buffer_get_type(void);
 3023|      2|	extern GType vips_foreign_save_magick_bmp_file_get_type(void);
 3024|      2|	extern GType vips_foreign_save_magick_bmp_buffer_get_type(void);
 3025|      2|	extern GType vips_foreign_save_magick_gif_file_get_type(void);
 3026|      2|	extern GType vips_foreign_save_magick_gif_buffer_get_type(void);
 3027|       |
 3028|      2|	extern GType vips_foreign_save_dz_file_get_type(void);
 3029|      2|	extern GType vips_foreign_save_dz_buffer_get_type(void);
 3030|      2|	extern GType vips_foreign_save_dz_target_get_type(void);
 3031|       |
 3032|      2|	extern GType vips_foreign_load_webp_file_get_type(void);
 3033|      2|	extern GType vips_foreign_load_webp_buffer_get_type(void);
 3034|      2|	extern GType vips_foreign_load_webp_source_get_type(void);
 3035|      2|	extern GType vips_foreign_save_webp_file_get_type(void);
 3036|      2|	extern GType vips_foreign_save_webp_buffer_get_type(void);
 3037|      2|	extern GType vips_foreign_save_webp_target_get_type(void);
 3038|      2|	extern GType vips_foreign_save_webp_mime_get_type(void);
 3039|       |
 3040|      2|	extern GType vips_foreign_load_pdf_file_get_type(void);
 3041|      2|	extern GType vips_foreign_load_pdf_buffer_get_type(void);
 3042|      2|	extern GType vips_foreign_load_pdf_source_get_type(void);
 3043|       |
 3044|      2|	extern GType vips_foreign_load_svg_file_get_type(void);
 3045|      2|	extern GType vips_foreign_load_svg_buffer_get_type(void);
 3046|      2|	extern GType vips_foreign_load_svg_source_get_type(void);
 3047|       |
 3048|      2|	extern GType vips_foreign_load_jp2k_file_get_type(void);
 3049|      2|	extern GType vips_foreign_load_jp2k_buffer_get_type(void);
 3050|      2|	extern GType vips_foreign_load_jp2k_source_get_type(void);
 3051|      2|	extern GType vips_foreign_save_jp2k_file_get_type(void);
 3052|      2|	extern GType vips_foreign_save_jp2k_buffer_get_type(void);
 3053|      2|	extern GType vips_foreign_save_jp2k_target_get_type(void);
 3054|       |
 3055|      2|	extern GType vips_foreign_load_jxl_file_get_type(void);
 3056|      2|	extern GType vips_foreign_load_jxl_buffer_get_type(void);
 3057|      2|	extern GType vips_foreign_load_jxl_source_get_type(void);
 3058|      2|	extern GType vips_foreign_save_jxl_file_get_type(void);
 3059|      2|	extern GType vips_foreign_save_jxl_buffer_get_type(void);
 3060|      2|	extern GType vips_foreign_save_jxl_target_get_type(void);
 3061|       |
 3062|      2|	extern GType vips_foreign_load_heif_file_get_type(void);
 3063|      2|	extern GType vips_foreign_load_heif_buffer_get_type(void);
 3064|      2|	extern GType vips_foreign_load_heif_source_get_type(void);
 3065|      2|	extern GType vips_foreign_save_heif_file_get_type(void);
 3066|      2|	extern GType vips_foreign_save_heif_buffer_get_type(void);
 3067|      2|	extern GType vips_foreign_save_heif_target_get_type(void);
 3068|      2|	extern GType vips_foreign_save_avif_target_get_type(void);
 3069|       |
 3070|      2|	extern GType vips_foreign_load_nifti_file_get_type(void);
 3071|      2|	extern GType vips_foreign_load_nifti_source_get_type(void);
 3072|      2|	extern GType vips_foreign_save_nifti_get_type(void);
 3073|       |
 3074|      2|	extern GType vips_foreign_load_nsgif_file_get_type(void);
 3075|      2|	extern GType vips_foreign_load_nsgif_buffer_get_type(void);
 3076|      2|	extern GType vips_foreign_load_nsgif_source_get_type(void);
 3077|       |
 3078|      2|	extern GType vips_foreign_save_cgif_file_get_type(void);
 3079|      2|	extern GType vips_foreign_save_cgif_buffer_get_type(void);
 3080|      2|	extern GType vips_foreign_save_cgif_target_get_type(void);
 3081|       |
 3082|      2|	vips_foreign_load_csv_file_get_type();
 3083|      2|	vips_foreign_load_csv_source_get_type();
 3084|      2|	vips_foreign_save_csv_file_get_type();
 3085|      2|	vips_foreign_save_csv_target_get_type();
 3086|       |
 3087|      2|	vips_foreign_load_matrix_file_get_type();
 3088|      2|	vips_foreign_load_matrix_source_get_type();
 3089|      2|	vips_foreign_save_matrix_file_get_type();
 3090|      2|	vips_foreign_save_matrix_target_get_type();
 3091|      2|	vips_foreign_print_matrix_get_type();
 3092|       |
 3093|      2|	vips_foreign_load_raw_get_type();
 3094|      2|	vips_foreign_save_raw_file_get_type();
 3095|      2|	vips_foreign_save_raw_buffer_get_type();
 3096|      2|	vips_foreign_save_raw_target_get_type();
 3097|       |
 3098|      2|	vips_foreign_load_vips_file_get_type();
 3099|      2|	vips_foreign_load_vips_source_get_type();
 3100|      2|	vips_foreign_save_vips_file_get_type();
 3101|      2|	vips_foreign_save_vips_target_get_type();
 3102|       |
 3103|      2|#ifdef HAVE_ANALYZE
 3104|      2|	vips_foreign_load_analyze_get_type();
 3105|      2|#endif /*HAVE_ANALYZE*/
 3106|       |
 3107|      2|#ifdef HAVE_PPM
 3108|      2|	vips_foreign_load_ppm_file_get_type();
 3109|      2|	vips_foreign_load_ppm_source_get_type();
 3110|      2|	vips_foreign_save_ppm_file_get_type();
 3111|      2|	vips_foreign_save_pbm_target_get_type();
 3112|      2|	vips_foreign_save_pgm_target_get_type();
 3113|      2|	vips_foreign_save_ppm_target_get_type();
 3114|      2|	vips_foreign_save_pfm_target_get_type();
 3115|      2|	vips_foreign_save_pnm_target_get_type();
 3116|      2|#endif /*HAVE_PPM*/
 3117|       |
 3118|      2|#ifdef HAVE_RADIANCE
 3119|      2|	vips_foreign_load_rad_file_get_type();
 3120|      2|	vips_foreign_load_rad_buffer_get_type();
 3121|      2|	vips_foreign_load_rad_source_get_type();
 3122|      2|	vips_foreign_save_rad_file_get_type();
 3123|      2|	vips_foreign_save_rad_buffer_get_type();
 3124|      2|	vips_foreign_save_rad_target_get_type();
 3125|      2|#endif /*HAVE_RADIANCE*/
 3126|       |
 3127|       |#if defined(HAVE_POPPLER) && !defined(POPPLER_MODULE)
 3128|       |	vips_foreign_load_pdf_file_get_type();
 3129|       |	vips_foreign_load_pdf_buffer_get_type();
 3130|       |	vips_foreign_load_pdf_source_get_type();
 3131|       |#endif /*defined(HAVE_POPPLER) && !defined(POPPLER_MODULE)*/
 3132|       |
 3133|      2|#ifdef HAVE_PDFIUM
 3134|      2|	vips_foreign_load_pdf_file_get_type();
 3135|      2|	vips_foreign_load_pdf_buffer_get_type();
 3136|      2|	vips_foreign_load_pdf_source_get_type();
 3137|      2|#endif /*HAVE_PDFIUM*/
 3138|       |
 3139|       |#ifdef HAVE_RSVG
 3140|       |	vips_foreign_load_svg_file_get_type();
 3141|       |	vips_foreign_load_svg_buffer_get_type();
 3142|       |	vips_foreign_load_svg_source_get_type();
 3143|       |#endif /*HAVE_RSVG*/
 3144|       |
 3145|       |#if defined(HAVE_LIBJXL) && !defined(LIBJXL_MODULE)
 3146|       |	vips_foreign_load_jxl_file_get_type();
 3147|       |	vips_foreign_load_jxl_buffer_get_type();
 3148|       |	vips_foreign_load_jxl_source_get_type();
 3149|       |	vips_foreign_save_jxl_file_get_type();
 3150|       |	vips_foreign_save_jxl_buffer_get_type();
 3151|       |	vips_foreign_save_jxl_target_get_type();
 3152|       |#endif /*defined(HAVE_LIBJXL) && !defined(LIBJXL_MODULE)*/
 3153|       |
 3154|       |#ifdef HAVE_LIBOPENJP2
 3155|       |	vips_foreign_load_jp2k_file_get_type();
 3156|       |	vips_foreign_load_jp2k_buffer_get_type();
 3157|       |	vips_foreign_load_jp2k_source_get_type();
 3158|       |	vips_foreign_save_jp2k_file_get_type();
 3159|       |	vips_foreign_save_jp2k_buffer_get_type();
 3160|       |	vips_foreign_save_jp2k_target_get_type();
 3161|       |#endif /*HAVE_LIBOPENJP2*/
 3162|       |
 3163|      2|#ifdef HAVE_NSGIF
 3164|      2|	vips_foreign_load_nsgif_file_get_type();
 3165|      2|	vips_foreign_load_nsgif_buffer_get_type();
 3166|      2|	vips_foreign_load_nsgif_source_get_type();
 3167|      2|#endif /*HAVE_NSGIF*/
 3168|       |
 3169|      2|#ifdef HAVE_CGIF
 3170|      2|	vips_foreign_save_cgif_file_get_type();
 3171|      2|	vips_foreign_save_cgif_buffer_get_type();
 3172|      2|	vips_foreign_save_cgif_target_get_type();
 3173|      2|#endif /*HAVE_CGIF*/
 3174|       |
 3175|       |#ifdef HAVE_LIBARCHIVE
 3176|       |	vips_foreign_save_dz_file_get_type();
 3177|       |	vips_foreign_save_dz_buffer_get_type();
 3178|       |	vips_foreign_save_dz_target_get_type();
 3179|       |#endif /*HAVE_LIBARCHIVE*/
 3180|       |
 3181|       |#ifdef HAVE_PNG
 3182|       |	vips_foreign_load_png_file_get_type();
 3183|       |	vips_foreign_load_png_buffer_get_type();
 3184|       |	vips_foreign_load_png_source_get_type();
 3185|       |	vips_foreign_save_png_file_get_type();
 3186|       |	vips_foreign_save_png_buffer_get_type();
 3187|       |	vips_foreign_save_png_target_get_type();
 3188|       |#endif /*HAVE_PNG*/
 3189|       |
 3190|      2|#ifdef HAVE_SPNG
 3191|      2|	vips_foreign_load_png_file_get_type();
 3192|      2|	vips_foreign_load_png_buffer_get_type();
 3193|      2|	vips_foreign_load_png_source_get_type();
 3194|      2|	vips_foreign_save_spng_file_get_type();
 3195|      2|	vips_foreign_save_spng_buffer_get_type();
 3196|      2|	vips_foreign_save_spng_target_get_type();
 3197|      2|#endif /*HAVE_SPNG*/
 3198|       |
 3199|       |#ifdef HAVE_MATIO
 3200|       |	vips_foreign_load_mat_get_type();
 3201|       |#endif /*HAVE_MATIO*/
 3202|       |
 3203|      2|#ifdef HAVE_JPEG
 3204|      2|	vips_foreign_load_jpeg_file_get_type();
 3205|      2|	vips_foreign_load_jpeg_buffer_get_type();
 3206|      2|	vips_foreign_load_jpeg_source_get_type();
 3207|      2|	vips_foreign_save_jpeg_file_get_type();
 3208|      2|	vips_foreign_save_jpeg_buffer_get_type();
 3209|      2|	vips_foreign_save_jpeg_target_get_type();
 3210|      2|	vips_foreign_save_jpeg_mime_get_type();
 3211|      2|#endif /*HAVE_JPEG*/
 3212|       |
 3213|      2|#ifdef HAVE_LIBWEBP
 3214|      2|	vips_foreign_load_webp_file_get_type();
 3215|      2|	vips_foreign_load_webp_buffer_get_type();
 3216|      2|	vips_foreign_load_webp_source_get_type();
 3217|      2|	vips_foreign_save_webp_file_get_type();
 3218|      2|	vips_foreign_save_webp_buffer_get_type();
 3219|      2|	vips_foreign_save_webp_target_get_type();
 3220|      2|	vips_foreign_save_webp_mime_get_type();
 3221|      2|#endif /*HAVE_LIBWEBP*/
 3222|       |
 3223|      2|#ifdef HAVE_TIFF
 3224|      2|	vips_foreign_load_tiff_file_get_type();
 3225|      2|	vips_foreign_load_tiff_buffer_get_type();
 3226|      2|	vips_foreign_load_tiff_source_get_type();
 3227|      2|	vips_foreign_save_tiff_file_get_type();
 3228|      2|	vips_foreign_save_tiff_buffer_get_type();
 3229|      2|	vips_foreign_save_tiff_target_get_type();
 3230|      2|#endif /*HAVE_TIFF*/
 3231|       |
 3232|       |#if defined(HAVE_OPENSLIDE) && !defined(OPENSLIDE_MODULE)
 3233|       |	vips_foreign_load_openslide_file_get_type();
 3234|       |	vips_foreign_load_openslide_source_get_type();
 3235|       |#endif /*defined(HAVE_OPENSLIDE) && !defined(OPENSLIDE_MODULE)*/
 3236|       |
 3237|       |#if defined(ENABLE_MAGICKLOAD) && !defined(MAGICK_MODULE)
 3238|       |#ifdef HAVE_MAGICK6
 3239|       |	vips_foreign_load_magick_file_get_type();
 3240|       |	vips_foreign_load_magick_buffer_get_type();
 3241|       |#endif /*HAVE_MAGICK6*/
 3242|       |
 3243|       |#ifdef HAVE_MAGICK7
 3244|       |	vips_foreign_load_magick7_file_get_type();
 3245|       |	vips_foreign_load_magick7_buffer_get_type();
 3246|       |#endif /*HAVE_MAGICK7*/
 3247|       |#endif /*defined(ENABLE_MAGICKLOAD) && !defined(MAGICK_MODULE)*/
 3248|       |
 3249|       |#if defined(ENABLE_MAGICKSAVE) && !defined(MAGICK_MODULE)
 3250|       |	vips_foreign_save_magick_file_get_type();
 3251|       |	vips_foreign_save_magick_buffer_get_type();
 3252|       |	vips_foreign_save_magick_bmp_file_get_type();
 3253|       |	vips_foreign_save_magick_bmp_buffer_get_type();
 3254|       |	vips_foreign_save_magick_gif_file_get_type();
 3255|       |	vips_foreign_save_magick_gif_buffer_get_type();
 3256|       |#endif /*defined(ENABLE_MAGICKSAVE) && !defined(MAGICK_MODULE)*/
 3257|       |
 3258|       |#ifdef HAVE_CFITSIO
 3259|       |	vips_foreign_load_fits_file_get_type();
 3260|       |	vips_foreign_load_fits_source_get_type();
 3261|       |	vips_foreign_save_fits_get_type();
 3262|       |#endif /*HAVE_CFITSIO*/
 3263|       |
 3264|       |#ifdef HAVE_OPENEXR
 3265|       |	vips_foreign_load_openexr_get_type();
 3266|       |#endif /*HAVE_OPENEXR*/
 3267|       |
 3268|       |#ifdef HAVE_NIFTI
 3269|       |	vips_foreign_load_nifti_file_get_type();
 3270|       |	vips_foreign_load_nifti_source_get_type();
 3271|       |	vips_foreign_save_nifti_get_type();
 3272|       |#endif /*HAVE_NIFTI*/
 3273|       |
 3274|      2|#if defined(HAVE_HEIF) && !defined(HEIF_MODULE)
 3275|      2|	vips_foreign_load_heif_file_get_type();
 3276|      2|	vips_foreign_load_heif_buffer_get_type();
 3277|      2|	vips_foreign_load_heif_source_get_type();
 3278|      2|	vips_foreign_save_heif_file_get_type();
 3279|      2|	vips_foreign_save_heif_buffer_get_type();
 3280|      2|	vips_foreign_save_heif_target_get_type();
 3281|      2|	vips_foreign_save_avif_target_get_type();
 3282|      2|#endif /*defined(HAVE_HEIF) && !defined(HEIF_MODULE)*/
 3283|       |
 3284|      2|	vips__foreign_load_operation =
 3285|      2|		g_quark_from_static_string("vips-foreign-load-operation");
 3286|      2|}
foreign.c:vips_foreign_class_init:
  400|      1|{
  401|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  402|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  403|       |
  404|      1|	gobject_class->set_property = vips_object_set_property;
  405|      1|	gobject_class->get_property = vips_object_get_property;
  406|       |
  407|      1|	object_class->nickname = "foreign";
  408|      1|	object_class->description = _("load and save image files");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  409|      1|	object_class->summary_class = vips_foreign_summary_class;
  410|      1|}
foreign.c:vips_foreign_init:
  414|  51.6k|{
  415|  51.6k|}
foreign.c:file_add_class:
  423|  2.10M|{
  424|  2.10M|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|  2.10M|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|  2.10M|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  2.10M|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|  2.10M|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  425|       |
  426|       |	// don't consider blocked classes ... we don't want eg. sniffers to run
  427|  2.10M|	if (operation_class->flags & VIPS_OPERATION_BLOCKED)
  ------------------
  |  Branch (427:6): [True: 0, False: 2.10M]
  ------------------
  428|      0|		return NULL;
  429|       |
  430|       |	// exclude "rawload" as it has a different API.
  431|  2.10M|	if (vips_isprefix("rawload", VIPS_OBJECT_CLASS(class)->nickname))
  ------------------
  |  |  435|  2.10M|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  2.10M|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  2.10M|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (431:6): [True: 36.4k, False: 2.06M]
  ------------------
  432|  36.4k|		return NULL;
  433|       |
  434|       |	/* Append so we don't reverse the list of files. Sort will
  435|       |	 * not reorder items of equal priority.
  436|       |	 */
  437|  2.06M|	*files = g_slist_append(*files, class);
  438|       |
  439|  2.06M|	return NULL;
  440|  2.10M|}
foreign.c:file_compare:
  444|  6.09M|{
  445|  6.09M|	return b->priority - a->priority;
  446|  6.09M|}
foreign.c:vips_foreign_load_class_init:
 1199|      1|{
 1200|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1201|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1202|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
 1203|       |
 1204|      1|	gobject_class->dispose = vips_foreign_load_dispose;
 1205|      1|	gobject_class->set_property = vips_object_set_property;
 1206|      1|	gobject_class->get_property = vips_object_get_property;
 1207|       |
 1208|      1|	object_class->build = vips_foreign_load_build;
 1209|      1|	object_class->summary_class = vips_foreign_load_summary_class;
 1210|      1|	object_class->new_from_string = vips_foreign_load_new_from_string;
 1211|      1|	object_class->nickname = "load";
 1212|      1|	object_class->description = _("loaders");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1213|       |
 1214|      1|	operation_class->get_flags = vips_foreign_load_operation_get_flags;
 1215|       |
 1216|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
 1217|      1|		_("Output"),
 1218|      1|		_("Output image"),
 1219|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
 1220|      1|		G_STRUCT_OFFSET(VipsForeignLoad, out));
 1221|       |
 1222|      1|	VIPS_ARG_FLAGS(class, "flags", 106,
  ------------------
  |  |  226|      1|	{ \
  |  |  227|      1|		GParamSpec *pspec; \
  |  |  228|      1|\
  |  |  229|      1|		pspec = g_param_spec_flags((NAME), (LONG), (DESC), \
  |  |  230|      1|			(TYPE), (VALUE), \
  |  |  231|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  232|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  233|      1|			vips_argument_get_id(), pspec); \
  |  |  234|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  235|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  236|      1|	}
  ------------------
 1223|      1|		_("Flags"),
 1224|      1|		_("Flags for this file"),
 1225|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
 1226|      1|		G_STRUCT_OFFSET(VipsForeignLoad, flags),
 1227|      1|		VIPS_TYPE_FOREIGN_FLAGS, VIPS_FOREIGN_NONE);
 1228|       |
 1229|      1|	VIPS_ARG_BOOL(class, "memory", 107,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1230|      1|		_("Memory"),
 1231|      1|		_("Force open via memory"),
 1232|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1233|      1|		G_STRUCT_OFFSET(VipsForeignLoad, memory),
 1234|      1|		FALSE);
 1235|       |
 1236|      1|	VIPS_ARG_ENUM(class, "access", 108,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1237|      1|		_("Access"),
 1238|      1|		_("Required access pattern for this file"),
 1239|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1240|      1|		G_STRUCT_OFFSET(VipsForeignLoad, access),
 1241|      1|		VIPS_TYPE_ACCESS, VIPS_ACCESS_RANDOM);
 1242|       |
 1243|      1|	VIPS_ARG_ENUM(class, "fail_on", 109,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1244|      1|		_("Fail on"),
 1245|      1|		_("Error level to fail on"),
 1246|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1247|      1|		G_STRUCT_OFFSET(VipsForeignLoad, fail_on),
 1248|      1|		VIPS_TYPE_FAIL_ON, VIPS_FAIL_ON_NONE);
 1249|       |
 1250|      1|	VIPS_ARG_BOOL(class, "revalidate", 110,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1251|      1|		_("Revalidate"),
 1252|      1|		_("Don't use a cached result for this operation"),
 1253|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_NON_HASHABLE,
 1254|      1|		G_STRUCT_OFFSET(VipsForeignLoad, revalidate),
 1255|      1|		FALSE);
 1256|       |
 1257|      1|	VIPS_ARG_BOOL(class, "sequential", 111,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1258|      1|		_("Sequential"),
 1259|      1|		_("Sequential read only"),
 1260|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1261|      1|		G_STRUCT_OFFSET(VipsForeignLoad, sequential),
 1262|      1|		FALSE);
 1263|       |
 1264|      1|	VIPS_ARG_BOOL(class, "fail", 112,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1265|      1|		_("Fail"),
 1266|      1|		_("Fail on first warning"),
 1267|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1268|      1|		G_STRUCT_OFFSET(VipsForeignLoad, fail),
 1269|      1|		FALSE);
 1270|       |
 1271|      1|	VIPS_ARG_BOOL(class, "disc", 113,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1272|      1|		_("Disc"),
 1273|      1|		_("Open to disc"),
 1274|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1275|      1|		G_STRUCT_OFFSET(VipsForeignLoad, disc),
 1276|      1|		TRUE);
 1277|      1|}
foreign.c:vips_foreign_load_dispose:
  503|  29.9k|{
  504|  29.9k|	VipsForeignLoad *load = VIPS_FOREIGN_LOAD(gobject);
  ------------------
  |  |  133|  29.9k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  29.9k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  29.9k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|  29.9k|		VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoad))
  ------------------
  505|       |
  506|  29.9k|	VIPS_UNREF(load->real);
  ------------------
  |  |   57|  29.9k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  29.9k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  29.9k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  29.9k|	{ \
  |  |  |  |   43|  29.9k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 21.6k, False: 8.36k]
  |  |  |  |  ------------------
  |  |  |  |   44|  21.6k|			(void) F((S)); \
  |  |  |  |   45|  21.6k|			(S) = 0; \
  |  |  |  |   46|  21.6k|		} \
  |  |  |  |   47|  29.9k|	} \
  |  |  |  |   48|  29.9k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  29.9k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  507|       |
  508|  29.9k|	G_OBJECT_CLASS(vips_foreign_load_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  29.9k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  29.9k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  29.9k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  509|  29.9k|}
foreign.c:vips_foreign_load_build:
 1079|  28.6k|{
 1080|  28.6k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  28.6k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  28.6k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  28.6k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1081|  28.6k|	VipsForeignLoad *load = VIPS_FOREIGN_LOAD(object);
  ------------------
  |  |  133|  28.6k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  28.6k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  28.6k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|  28.6k|		VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoad))
  ------------------
 1082|  28.6k|	VipsForeignLoadClass *fclass = VIPS_FOREIGN_LOAD_GET_CLASS(object);
  ------------------
  |  |  143|  28.6k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  28.6k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  28.6k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|  28.6k|		VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoadClass))
  ------------------
 1083|       |
 1084|  28.6k|	VipsForeignFlags flags;
 1085|       |
 1086|       |#ifdef DEBUG
 1087|       |	printf("vips_foreign_load_build:\n");
 1088|       |#endif /*DEBUG*/
 1089|       |
 1090|  28.6k|	flags = 0;
 1091|  28.6k|	if (fclass->get_flags)
  ------------------
  |  Branch (1091:6): [True: 28.6k, False: 0]
  ------------------
 1092|  28.6k|		flags |= fclass->get_flags(load);
 1093|       |
 1094|  28.6k|	if ((flags & VIPS_FOREIGN_PARTIAL) &&
  ------------------
  |  Branch (1094:6): [True: 2.66k, False: 25.9k]
  ------------------
 1095|  28.6k|		(flags & VIPS_FOREIGN_SEQUENTIAL)) {
  ------------------
  |  Branch (1095:3): [True: 0, False: 2.66k]
  ------------------
 1096|      0|		g_warning("%s",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1097|      0|			_("VIPS_FOREIGN_PARTIAL and VIPS_FOREIGN_SEQUENTIAL "
 1098|      0|			  "both set -- using SEQUENTIAL"));
 1099|      0|		flags ^= VIPS_FOREIGN_PARTIAL;
 1100|      0|	}
 1101|       |
 1102|  28.6k|	g_object_set(load, "flags", flags, NULL);
 1103|       |
 1104|       |	/* We must block caching of seq loaders running in seq mode. A seq
 1105|       |	 * loader in random mode is fine, since we'll read to ram or a temp
 1106|       |	 * file.
 1107|       |	 */
 1108|  28.6k|	if ((load->flags & VIPS_FOREIGN_SEQUENTIAL) &&
  ------------------
  |  Branch (1108:6): [True: 23.9k, False: 4.70k]
  ------------------
 1109|  28.6k|		load->access != VIPS_ACCESS_RANDOM)
  ------------------
  |  Branch (1109:3): [True: 0, False: 23.9k]
  ------------------
 1110|      0|		load->nocache = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1111|       |
 1112|       |	/* The deprecated "fail" field sets fail_on warning.
 1113|       |	 */
 1114|  28.6k|	if (vips_object_argument_isset(object, "fail") &&
  ------------------
  |  Branch (1114:6): [True: 0, False: 28.6k]
  ------------------
 1115|  28.6k|		!vips_object_argument_isset(object, "fail_on"))
  ------------------
  |  Branch (1115:3): [True: 0, False: 0]
  ------------------
 1116|      0|		load->fail_on = load->fail
  ------------------
  |  Branch (1116:19): [True: 0, False: 0]
  ------------------
 1117|      0|			? VIPS_FAIL_ON_WARNING
 1118|      0|			: VIPS_FAIL_ON_NONE;
 1119|       |
 1120|  28.6k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_parent_class)->build(object))
  ------------------
  |  |  435|  28.6k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  28.6k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  28.6k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1120:6): [True: 0, False: 28.6k]
  ------------------
 1121|      0|		return -1;
 1122|       |
 1123|  28.6k|	if (load->sequential)
  ------------------
  |  Branch (1123:6): [True: 0, False: 28.6k]
  ------------------
 1124|      0|		g_warning("%s",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1125|  28.6k|			_("ignoring deprecated \"sequential\" mode -- "
 1126|  28.6k|			  "please use \"access\" instead"));
 1127|       |
 1128|  28.6k|	g_object_set(object, "out", vips_image_new(), NULL);
 1129|       |
 1130|  28.6k|	vips_image_set_string(load->out,
 1131|  28.6k|		VIPS_META_LOADER, class->nickname);
  ------------------
  |  |  115|  28.6k|#define VIPS_META_LOADER "vips-loader"
  ------------------
 1132|       |
 1133|       |#ifdef DEBUG
 1134|       |	printf("vips_foreign_load_build: triggering ->header()\n");
 1135|       |#endif /*DEBUG*/
 1136|       |
 1137|       |	/* Read the header into @out.
 1138|       |	 */
 1139|  28.6k|	if (fclass->header &&
  ------------------
  |  Branch (1139:6): [True: 28.6k, False: 0]
  ------------------
 1140|  28.6k|		fclass->header(load))
  ------------------
  |  Branch (1140:3): [True: 5.76k, False: 22.8k]
  ------------------
 1141|  5.76k|		return -1;
 1142|       |
 1143|       |	/* If there's no ->load() method then the header read has done
 1144|       |	 * everything. Otherwise, it's just set fields and we must also
 1145|       |	 * load pixels.
 1146|       |	 *
 1147|       |	 * Delay the load until the first pixel is requested by doing the work
 1148|       |	 * in the start function of the copy.
 1149|       |	 */
 1150|  22.8k|	if (fclass->load) {
  ------------------
  |  Branch (1150:6): [True: 22.8k, False: 0]
  ------------------
 1151|       |#ifdef DEBUG
 1152|       |		printf("vips_foreign_load_build: delaying read ...\n");
 1153|       |#endif /*DEBUG*/
 1154|       |
 1155|       |		/* ->header() should set the dhint. It'll default to the safe
 1156|       |		 * SMALLTILE if header() did not set it.
 1157|       |		 */
 1158|  22.8k|		if (vips_image_pipelinev(load->out, load->out->dhint, NULL))
  ------------------
  |  Branch (1158:7): [True: 0, False: 22.8k]
  ------------------
 1159|      0|			return -1;
 1160|       |
 1161|       |		/* Then 'start' creates the real image and 'gen' fetches
 1162|       |		 * pixels for @out from @real on demand.
 1163|       |		 */
 1164|  22.8k|		if (vips_image_generate(load->out,
  ------------------
  |  Branch (1164:7): [True: 0, False: 22.8k]
  ------------------
 1165|  22.8k|				vips_foreign_load_start,
 1166|  22.8k|				vips_foreign_load_generate,
 1167|  22.8k|				vips_stop_one,
 1168|  22.8k|				NULL, load))
 1169|      0|			return -1;
 1170|  22.8k|	}
 1171|       |
 1172|       |	/* Tell downstream if seq mode was requested.
 1173|       |	 */
 1174|  22.8k|	if (load->access != VIPS_ACCESS_RANDOM)
  ------------------
  |  Branch (1174:6): [True: 0, False: 22.8k]
  ------------------
 1175|      0|		vips_image_set_int(load->out, VIPS_META_SEQUENTIAL, 1);
  ------------------
  |  |  124|      0|#define VIPS_META_SEQUENTIAL "vips-sequential"
  ------------------
 1176|       |
 1177|  22.8k|	return 0;
 1178|  22.8k|}
foreign.c:vips_foreign_load_start:
  991|  22.1k|{
  992|  22.1k|	VipsForeignLoad *load = VIPS_FOREIGN_LOAD(b);
  ------------------
  |  |  133|  22.1k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  22.1k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  22.1k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|  22.1k|		VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoad))
  ------------------
  993|  22.1k|	VipsForeignLoadClass *class = VIPS_FOREIGN_LOAD_GET_CLASS(load);
  ------------------
  |  |  143|  22.1k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  22.1k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  22.1k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  144|  22.1k|		VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoadClass))
  ------------------
  994|       |
  995|       |	/* If this start has failed before in another thread, we can fail now.
  996|       |	 */
  997|  22.1k|	if (load->error)
  ------------------
  |  Branch (997:6): [True: 0, False: 22.1k]
  ------------------
  998|      0|		return NULL;
  999|       |
 1000|  22.1k|	if (!load->real) {
  ------------------
  |  Branch (1000:6): [True: 21.6k, False: 510]
  ------------------
 1001|  21.6k|		if (!(load->real = vips_foreign_load_temp(load)))
  ------------------
  |  Branch (1001:7): [True: 0, False: 21.6k]
  ------------------
 1002|      0|			return NULL;
 1003|       |
 1004|       |#ifdef DEBUG
 1005|       |		printf("vips_foreign_load_start: triggering ->load()\n");
 1006|       |#endif /*DEBUG*/
 1007|       |
 1008|       |		/* Read the image in. This may involve a long computation and
 1009|       |		 * will finish with load->real holding the decompressed image.
 1010|       |		 *
 1011|       |		 * We want our caller to be able to see this computation on
 1012|       |		 * @out, so eval signals on ->real need to appear on ->out.
 1013|       |		 */
 1014|  21.6k|		load->real->progress_signal = load->out;
 1015|       |
 1016|       |		/* Note the load object on the image. Loaders can use
 1017|       |		 * this to signal invalidate if they hit a load error. See
 1018|       |		 * vips_foreign_load_invalidate() below.
 1019|       |		 */
 1020|  21.6k|		g_object_set_qdata(G_OBJECT(load->real),
  ------------------
  |  |   51|  21.6k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  21.6k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  21.6k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1021|  21.6k|			vips__foreign_load_operation, load);
 1022|       |
 1023|       |		/* Load the image and check the result.
 1024|       |		 *
 1025|       |		 * ->header() read the header into @out, load will read the
 1026|       |		 * image into @real. They must match exactly in size, bands,
 1027|       |		 * format and coding for the copy to work.
 1028|       |		 *
 1029|       |		 * Some versions of ImageMagick give different results between
 1030|       |		 * Ping and Load for some formats, for example.
 1031|       |		 *
 1032|       |		 * If the load fails, we need to stop.
 1033|       |		 */
 1034|  21.6k|		if (class->load(load) ||
  ------------------
  |  Branch (1034:7): [True: 13.1k, False: 8.50k]
  ------------------
 1035|  21.6k|			vips_image_pio_input(load->real) ||
  ------------------
  |  Branch (1035:4): [True: 0, False: 8.50k]
  ------------------
 1036|  21.6k|			!vips_foreign_load_iscompat(load->real, out)) {
  ------------------
  |  Branch (1036:4): [True: 8, False: 8.49k]
  ------------------
 1037|  13.1k|			vips_operation_invalidate(VIPS_OPERATION(load));
  ------------------
  |  |   57|  13.1k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  13.1k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  13.1k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  13.1k|		VIPS_TYPE_OPERATION, VipsOperation))
  ------------------
 1038|  13.1k|			load->error = TRUE;
  ------------------
  |  |  798|  13.1k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  13.1k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1039|       |
 1040|  13.1k|			return NULL;
 1041|  13.1k|		}
 1042|       |
 1043|       |		/* We have to tell vips that out depends on real. We've set
 1044|       |		 * the demand hint below, but not given an input there.
 1045|       |		 */
 1046|  8.49k|		if (vips_image_pipelinev(load->out, load->out->dhint,
  ------------------
  |  Branch (1046:7): [True: 0, False: 8.49k]
  ------------------
 1047|  8.49k|				load->real, NULL))
 1048|      0|			return NULL;
 1049|  8.49k|	}
 1050|       |
 1051|  9.00k|	return vips_region_new(load->real);
 1052|  22.1k|}
foreign.c:vips_foreign_load_temp:
  908|  21.6k|{
  909|  21.6k|	const guint64 disc_threshold = vips_get_disc_threshold();
  910|  21.6k|	const guint64 image_size = VIPS_IMAGE_SIZEOF_IMAGE(load->out);
  ------------------
  |  |  388|  21.6k|	(VIPS_IMAGE_SIZEOF_LINE(I) * (I)->Ysize)
  |  |  ------------------
  |  |  |  |  386|  21.6k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  21.6k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  21.6k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  911|       |
  912|       |	/* ->memory used to be called ->disc and default TRUE. If it's been
  913|       |	 * forced FALSE, set memory TRUE.
  914|       |	 */
  915|  21.6k|	if (!load->disc)
  ------------------
  |  Branch (915:6): [True: 0, False: 21.6k]
  ------------------
  916|      0|		load->memory = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  917|       |
  918|  21.6k|	if (load->memory) {
  ------------------
  |  Branch (918:6): [True: 0, False: 21.6k]
  ------------------
  919|       |#ifdef DEBUG
  920|       |		printf("vips_foreign_load_temp: forced memory temp\n");
  921|       |#endif /*DEBUG*/
  922|       |
  923|      0|		return vips_image_new_memory();
  924|      0|	}
  925|       |
  926|       |	/* If this is a partial operation, we can open directly.
  927|       |	 */
  928|  21.6k|	if (load->flags & VIPS_FOREIGN_PARTIAL) {
  ------------------
  |  Branch (928:6): [True: 1.57k, False: 20.0k]
  ------------------
  929|       |#ifdef DEBUG
  930|       |		printf("vips_foreign_load_temp: partial temp\n");
  931|       |#endif /*DEBUG*/
  932|       |
  933|  1.57k|		return vips_image_new();
  934|  1.57k|	}
  935|       |
  936|       |	/* If it can do sequential access and it's been requested, we can open
  937|       |	 * directly.
  938|       |	 */
  939|  20.0k|	if ((load->flags & VIPS_FOREIGN_SEQUENTIAL) &&
  ------------------
  |  Branch (939:6): [True: 18.5k, False: 1.55k]
  ------------------
  940|  20.0k|		load->access != VIPS_ACCESS_RANDOM) {
  ------------------
  |  Branch (940:3): [True: 0, False: 18.5k]
  ------------------
  941|       |#ifdef DEBUG
  942|       |		printf("vips_foreign_load_temp: partial sequential temp\n");
  943|       |#endif /*DEBUG*/
  944|       |
  945|      0|		return vips_image_new();
  946|      0|	}
  947|       |
  948|       |	/* We open via disc if the uncompressed image will be larger than
  949|       |	 * vips_get_disc_threshold()
  950|       |	 */
  951|  20.0k|	if (image_size > disc_threshold) {
  ------------------
  |  Branch (951:6): [True: 0, False: 20.0k]
  ------------------
  952|       |#ifdef DEBUG
  953|       |		printf("vips_foreign_load_temp: disc temp\n");
  954|       |#endif /*DEBUG*/
  955|       |
  956|      0|		return vips_image_new_temp_file("%s.v");
  957|      0|	}
  958|       |
  959|       |#ifdef DEBUG
  960|       |	printf("vips_foreign_load_temp: fallback memory temp\n");
  961|       |#endif /*DEBUG*/
  962|       |
  963|       |	/* Otherwise, fall back to a memory buffer.
  964|       |	 */
  965|  20.0k|	return vips_image_new_memory();
  966|  20.0k|}
foreign.c:vips_foreign_load_iscompat:
  972|  8.50k|{
  973|  8.50k|	if (a->Xsize != b->Xsize ||
  ------------------
  |  Branch (973:6): [True: 0, False: 8.50k]
  ------------------
  974|  8.50k|		a->Ysize != b->Ysize ||
  ------------------
  |  Branch (974:3): [True: 0, False: 8.50k]
  ------------------
  975|  8.50k|		a->Bands != b->Bands ||
  ------------------
  |  Branch (975:3): [True: 8, False: 8.49k]
  ------------------
  976|  8.50k|		a->Coding != b->Coding ||
  ------------------
  |  Branch (976:3): [True: 0, False: 8.49k]
  ------------------
  977|  8.50k|		a->BandFmt != b->BandFmt) {
  ------------------
  |  Branch (977:3): [True: 0, False: 8.49k]
  ------------------
  978|      8|		vips_error("VipsForeignLoad", "%s",
  979|      8|			_("images do not match between header and load"));
  ------------------
  |  |   30|      8|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      8|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  980|      8|		return FALSE;
  ------------------
  |  |  794|      8|#define	FALSE	(0)
  ------------------
  981|      8|	}
  982|       |
  983|  8.49k|	return TRUE;
  ------------------
  |  |  798|  8.49k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  8.49k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  984|  8.50k|}
foreign.c:vips_foreign_load_generate:
 1059|  28.8k|{
 1060|  28.8k|	VipsRegion *ir = (VipsRegion *) seq;
 1061|       |
 1062|  28.8k|	VipsRect *r = &out_region->valid;
 1063|       |
 1064|       |	/* Ask for input we need.
 1065|       |	 */
 1066|  28.8k|	if (vips_region_prepare(ir, r))
  ------------------
  |  Branch (1066:6): [True: 108, False: 28.7k]
  ------------------
 1067|    108|		return -1;
 1068|       |
 1069|       |	/* Attach output region to that.
 1070|       |	 */
 1071|  28.7k|	if (vips_region_region(out_region, ir, r, r->left, r->top))
  ------------------
  |  Branch (1071:6): [True: 0, False: 28.7k]
  ------------------
 1072|      0|		return -1;
 1073|       |
 1074|  28.7k|	return 0;
 1075|  28.7k|}
foreign.c:vips_foreign_load_operation_get_flags:
 1182|  52.8k|{
 1183|  52.8k|	VipsForeignLoad *load = VIPS_FOREIGN_LOAD(operation);
  ------------------
  |  |  133|  52.8k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  52.8k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  52.8k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|  52.8k|		VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoad))
  ------------------
 1184|       |
 1185|  52.8k|	VipsOperationFlags flags;
 1186|       |
 1187|  52.8k|	flags = VIPS_OPERATION_CLASS(vips_foreign_load_parent_class)
  ------------------
  |  |   60|  52.8k|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|  52.8k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  52.8k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|  52.8k|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
 1188|  52.8k|				->get_flags(operation);
 1189|  52.8k|	if (load->nocache)
  ------------------
  |  Branch (1189:6): [True: 0, False: 52.8k]
  ------------------
 1190|      0|		flags |= VIPS_OPERATION_NOCACHE;
 1191|  52.8k|	if (load->revalidate)
  ------------------
  |  Branch (1191:6): [True: 0, False: 52.8k]
  ------------------
 1192|      0|		flags |= VIPS_OPERATION_REVALIDATE;
 1193|       |
 1194|  52.8k|	return flags;
 1195|  52.8k|}
foreign.c:vips_foreign_load_init:
 1281|  30.0k|{
 1282|  30.0k|	load->disc = TRUE;
  ------------------
  |  |  798|  30.0k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  30.0k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1283|  30.0k|	load->access = VIPS_ACCESS_RANDOM;
 1284|  30.0k|	load->fail_on = VIPS_FAIL_ON_NONE;
 1285|  30.0k|}
foreign.c:vips_foreign_find_load_buffer_sub:
  663|   776k|{
  664|   776k|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(load_class);
  ------------------
  |  |  435|   776k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|   776k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   776k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  665|       |
  666|       |	/* Skip non-buffer loaders.
  667|       |	 */
  668|   776k|	if (!g_str_has_suffix(object_class->nickname, "_buffer"))
  ------------------
  |  Branch (668:6): [True: 579k, False: 196k]
  ------------------
  669|   579k|		return NULL;
  670|       |
  671|   196k|	if (load_class->is_a_buffer) {
  ------------------
  |  Branch (671:6): [True: 196k, False: 0]
  ------------------
  672|   196k|		if (load_class->is_a_buffer(*buf, *len))
  ------------------
  |  Branch (672:7): [True: 30.0k, False: 166k]
  ------------------
  673|  30.0k|			return load_class;
  674|   196k|	}
  675|      0|	else
  676|      0|		g_warning("loader %s has no is_a_buffer method",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  677|   196k|			object_class->nickname);
  678|       |
  679|   166k|	return NULL;
  680|   196k|}
foreign.c:vips_foreign_save_class_init:
 1858|      1|{
 1859|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1860|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1861|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
 1862|       |
 1863|      1|	int i;
 1864|       |
 1865|      1|	gobject_class->dispose = vips_foreign_save_dispose;
 1866|      1|	gobject_class->set_property = vips_object_set_property;
 1867|      1|	gobject_class->get_property = vips_object_get_property;
 1868|       |
 1869|      1|	object_class->build = vips_foreign_save_build;
 1870|      1|	object_class->summary_class = vips_foreign_save_summary_class;
 1871|      1|	object_class->new_from_string = vips_foreign_save_new_from_string;
 1872|      1|	object_class->nickname = "save";
 1873|      1|	object_class->description = _("savers");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1874|       |
 1875|       |	/* All savers are sequential by definition. Things like tiled tiff
 1876|       |	 * write and interlaced png write, which are not, add extra caches
 1877|       |	 * on their input.
 1878|       |	 */
 1879|      1|	operation_class->flags |= VIPS_OPERATION_SEQUENTIAL;
 1880|       |
 1881|       |	/* Must not cache savers.
 1882|       |	 */
 1883|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
 1884|       |
 1885|       |	/* Default to no coding allowed.
 1886|       |	 */
 1887|      8|	for (i = 0; i < VIPS_CODING_LAST; i++)
  ------------------
  |  Branch (1887:14): [True: 7, False: 1]
  ------------------
 1888|      7|		class->coding[i] = FALSE;
  ------------------
  |  |  794|      7|#define	FALSE	(0)
  ------------------
 1889|      1|	class->coding[VIPS_CODING_NONE] = TRUE;
  ------------------
  |  |  798|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1890|       |
 1891|       |	/* Default to no cast on save.
 1892|       |	 */
 1893|      1|	class->format_table = vips_foreign_save_format_table;
 1894|       |
 1895|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
 1896|      1|		_("Input"),
 1897|      1|		_("Image to save"),
 1898|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1899|      1|		G_STRUCT_OFFSET(VipsForeignSave, in));
 1900|       |
 1901|      1|	VIPS_ARG_FLAGS(class, "keep", 100,
  ------------------
  |  |  226|      1|	{ \
  |  |  227|      1|		GParamSpec *pspec; \
  |  |  228|      1|\
  |  |  229|      1|		pspec = g_param_spec_flags((NAME), (LONG), (DESC), \
  |  |  230|      1|			(TYPE), (VALUE), \
  |  |  231|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  232|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  233|      1|			vips_argument_get_id(), pspec); \
  |  |  234|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  235|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  236|      1|	}
  ------------------
 1902|      1|		_("Keep"),
 1903|      1|		_("Which metadata to retain"),
 1904|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1905|      1|		G_STRUCT_OFFSET(VipsForeignSave, keep),
 1906|      1|		VIPS_TYPE_FOREIGN_KEEP,
 1907|      1|		VIPS_FOREIGN_KEEP_ALL);
 1908|       |
 1909|      1|	VIPS_ARG_BOXED(class, "background", 101,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1910|      1|		_("Background"),
 1911|      1|		_("Background value"),
 1912|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1913|      1|		G_STRUCT_OFFSET(VipsForeignSave, background),
 1914|      1|		VIPS_TYPE_ARRAY_DOUBLE);
 1915|       |
 1916|      1|	VIPS_ARG_INT(class, "page_height", 102,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1917|      1|		_("Page height"),
 1918|      1|		_("Set page height for multipage save"),
 1919|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1920|      1|		G_STRUCT_OFFSET(VipsForeignSave, page_height),
 1921|      1|		0, VIPS_MAX_COORD, 0);
 1922|       |
 1923|      1|	VIPS_ARG_STRING(class, "profile", 103,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1924|      1|		_("Profile"),
 1925|      1|		_("Filename of ICC profile to embed"),
 1926|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1927|      1|		G_STRUCT_OFFSET(VipsForeignSave, profile),
 1928|      1|		NULL);
 1929|       |
 1930|      1|	VIPS_ARG_BOOL(class, "strip", 104,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1931|      1|		_("Strip"),
 1932|      1|		_("Strip all metadata from image"),
 1933|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1934|      1|		G_STRUCT_OFFSET(VipsForeignSave, strip),
 1935|      1|		FALSE);
 1936|      1|}
foreign.c:vips_foreign_save_dispose:
 1326|  21.6k|{
 1327|  21.6k|	VipsForeignSave *save = VIPS_FOREIGN_SAVE(gobject);
  ------------------
  |  |  299|  21.6k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  21.6k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  21.6k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  300|  21.6k|		VIPS_TYPE_FOREIGN_SAVE, VipsForeignSave))
  ------------------
 1328|       |
 1329|  21.6k|	VIPS_UNREF(save->ready);
  ------------------
  |  |   57|  21.6k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  21.6k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  21.6k|	{ \
  |  |  |  |   43|  21.6k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 21.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  21.6k|			(void) F((S)); \
  |  |  |  |   45|  21.6k|			(S) = 0; \
  |  |  |  |   46|  21.6k|		} \
  |  |  |  |   47|  21.6k|	} \
  |  |  |  |   48|  21.6k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1330|       |
 1331|  21.6k|	G_OBJECT_CLASS(vips_foreign_save_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  21.6k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  21.6k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  21.6k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1332|  21.6k|}
foreign.c:vips_foreign_save_build:
 1785|  21.6k|{
 1786|  21.6k|	VipsForeignSave *save = VIPS_FOREIGN_SAVE(object);
  ------------------
  |  |  299|  21.6k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  21.6k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  21.6k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  300|  21.6k|		VIPS_TYPE_FOREIGN_SAVE, VipsForeignSave))
  ------------------
 1787|       |
 1788|       |	/* The deprecated "strip" field sets "keep" to none.
 1789|       |	 */
 1790|  21.6k|	if (vips_object_argument_isset(object, "strip") &&
  ------------------
  |  Branch (1790:6): [True: 0, False: 21.6k]
  ------------------
 1791|  21.6k|		!vips_object_argument_isset(object, "keep"))
  ------------------
  |  Branch (1791:3): [True: 0, False: 0]
  ------------------
 1792|      0|		save->keep = save->strip
  ------------------
  |  Branch (1792:16): [True: 0, False: 0]
  ------------------
 1793|      0|			? VIPS_FOREIGN_KEEP_NONE
 1794|      0|			: VIPS_FOREIGN_KEEP_ALL;
 1795|       |
 1796|       |	/* Keep ICC profile by default when a user profile has been set.
 1797|       |	 */
 1798|  21.6k|	if ((save->keep & VIPS_FOREIGN_KEEP_ICC) == 0 &&
  ------------------
  |  Branch (1798:6): [True: 0, False: 21.6k]
  ------------------
 1799|  21.6k|		vips_object_argument_isset(object, "profile"))
  ------------------
  |  Branch (1799:3): [True: 0, False: 0]
  ------------------
 1800|      0|		save->keep |= VIPS_FOREIGN_KEEP_ICC;
 1801|       |
 1802|  21.6k|	if (save->in) {
  ------------------
  |  Branch (1802:6): [True: 21.6k, False: 0]
  ------------------
 1803|  21.6k|		VipsForeignSaveClass *class = VIPS_FOREIGN_SAVE_GET_CLASS(save);
  ------------------
  |  |  309|  21.6k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  21.6k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  21.6k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  310|  21.6k|		VIPS_TYPE_FOREIGN_SAVE, VipsForeignSaveClass))
  ------------------
 1804|  21.6k|		VipsImage *ready;
 1805|  21.6k|		VipsImage *x;
 1806|       |
 1807|  21.6k|		if (vips__foreign_convert_saveable(save->in, &ready,
  ------------------
  |  Branch (1807:7): [True: 0, False: 21.6k]
  ------------------
 1808|  21.6k|				class->saveable, class->format_table, class->coding,
 1809|  21.6k|				save->background))
 1810|      0|			return -1;
 1811|       |
 1812|       |		/* Updating metadata, need to copy the image.
 1813|       |		 */
 1814|  21.6k|		if (vips_copy(ready, &x, NULL)) {
  ------------------
  |  Branch (1814:7): [True: 0, False: 21.6k]
  ------------------
 1815|      0|			VIPS_UNREF(ready);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1816|      0|			return -1;
 1817|      0|		}
 1818|  21.6k|		VIPS_UNREF(ready);
  ------------------
  |  |   57|  21.6k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  21.6k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  21.6k|	{ \
  |  |  |  |   43|  21.6k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 21.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  21.6k|			(void) F((S)); \
  |  |  |  |   45|  21.6k|			(S) = 0; \
  |  |  |  |   46|  21.6k|		} \
  |  |  |  |   47|  21.6k|	} \
  |  |  |  |   48|  21.6k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1819|  21.6k|		ready = x;
 1820|       |
 1821|  21.6k|		if (vips__foreign_update_metadata(ready, save->keep)) {
  ------------------
  |  Branch (1821:7): [True: 0, False: 21.6k]
  ------------------
 1822|      0|			VIPS_UNREF(ready);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1823|      0|			return -1;
 1824|      0|		}
 1825|       |
 1826|  21.6k|		if (save->page_height)
  ------------------
  |  Branch (1826:7): [True: 0, False: 21.6k]
  ------------------
 1827|      0|			vips_image_set_int(ready, VIPS_META_PAGE_HEIGHT,
  ------------------
  |  |  158|      0|#define VIPS_META_PAGE_HEIGHT "page-height"
  ------------------
 1828|      0|				save->page_height);
 1829|       |
 1830|  21.6k|		VIPS_UNREF(save->ready);
  ------------------
  |  |   57|  21.6k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  21.6k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  21.6k|	{ \
  |  |  |  |   43|  21.6k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 21.6k]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|  21.6k|	} \
  |  |  |  |   48|  21.6k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1831|  21.6k|		save->ready = ready;
 1832|  21.6k|	}
 1833|       |
 1834|  21.6k|	if (VIPS_OBJECT_CLASS(vips_foreign_save_parent_class)->build(object))
  ------------------
  |  |  435|  21.6k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  21.6k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  21.6k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1834:6): [True: 0, False: 21.6k]
  ------------------
 1835|      0|		return -1;
 1836|       |
 1837|  21.6k|	return 0;
 1838|  21.6k|}
foreign.c:vips_foreign_save_init:
 1940|  21.6k|{
 1941|  21.6k|	save->keep = VIPS_FOREIGN_KEEP_ALL;
 1942|  21.6k|	save->background = vips_array_double_newv(1, 0.0);
 1943|  21.6k|}
foreign.c:vips_foreign_find_save_target_sub:
 2115|   541k|{
 2116|   541k|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(save_class);
  ------------------
  |  |  435|   541k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|   541k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   541k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2117|   541k|	VipsForeignClass *class = VIPS_FOREIGN_CLASS(save_class);
  ------------------
  |  |   49|   541k|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|   541k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   541k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   50|   541k|		VIPS_TYPE_FOREIGN, VipsForeignClass))
  ------------------
 2118|       |
 2119|       |	/* All concrete savers needs suffs, since we use the suff to pick the
 2120|       |	 * saver.
 2121|       |	 */
 2122|   541k|	if (!G_TYPE_IS_ABSTRACT(G_TYPE_FROM_CLASS(class)) &&
  ------------------
  |  |  343|  1.08M|#define G_TYPE_IS_ABSTRACT(type)                (g_type_test_flags ((type), G_TYPE_FLAG_ABSTRACT))
  ------------------
  |  Branch (2122:6): [True: 541k, False: 0]
  ------------------
 2123|   541k|		!class->suffs)
  ------------------
  |  Branch (2123:3): [True: 0, False: 541k]
  ------------------
 2124|      0|		g_warning("no suffix defined for %s", object_class->nickname);
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 2125|       |
 2126|   541k|	if (!G_TYPE_IS_ABSTRACT(G_TYPE_FROM_CLASS(class)) &&
  ------------------
  |  |  343|  1.08M|#define G_TYPE_IS_ABSTRACT(type)                (g_type_test_flags ((type), G_TYPE_FLAG_ABSTRACT))
  ------------------
  |  Branch (2126:6): [True: 541k, False: 0]
  ------------------
 2127|   541k|		class->suffs &&
  ------------------
  |  Branch (2127:3): [True: 541k, False: 0]
  ------------------
 2128|   541k|		g_str_has_suffix(object_class->nickname, "_target") &&
  ------------------
  |  Branch (2128:3): [True: 259k, False: 281k]
  ------------------
 2129|   541k|		vips_filename_suffix_match(suffix, class->suffs))
  ------------------
  |  Branch (2129:3): [True: 21.6k, False: 238k]
  ------------------
 2130|  21.6k|		return save_class;
 2131|       |
 2132|   519k|	return NULL;
 2133|   541k|}

vips__heif_init:
  232|      2|{
  233|      2|#ifdef HAVE_HEIF_INIT
  234|      2|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|      2|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
  235|       |
  236|      2|	VIPS_ONCE(&once, vips__heif_init_once, NULL);
  ------------------
  |  |   93|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|      2|	{ \
  |  |   95|      2|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|      2|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 1, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|      2|   else                                         \
  |  |  |  |  |  |  931|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 1, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|      2|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      1|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  242|      1|   (once)->retval : \
  |  |  |  |  243|      1|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|      2|	} \
  |  |   98|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  237|      2|#endif /*HAVE_HEIF_INIT*/
  238|      2|}
vips__heif_error:
  242|  8.58k|{
  243|  8.58k|	if (error->code)
  ------------------
  |  Branch (243:6): [True: 8.58k, False: 0]
  ------------------
  244|  8.58k|		vips_error("heif", "%s (%d.%d)",
  245|  8.58k|			error->message ? error->message : "(null)",
  ------------------
  |  Branch (245:4): [True: 8.58k, False: 0]
  ------------------
  246|  8.58k|			error->code, error->subcode);
  247|  8.58k|}
vips__heif_chroma:
  297|  7.40k|{
  298|  7.40k|	if (bits_per_pixel == 8) {
  ------------------
  |  Branch (298:6): [True: 6.09k, False: 1.30k]
  ------------------
  299|  6.09k|		if (has_alpha)
  ------------------
  |  Branch (299:7): [True: 0, False: 6.09k]
  ------------------
  300|      0|			return heif_chroma_interleaved_RGBA;
  301|  6.09k|		else
  302|  6.09k|			return heif_chroma_interleaved_RGB;
  303|  6.09k|	}
  304|  1.30k|	else {
  305|  1.30k|		if (has_alpha)
  ------------------
  |  Branch (305:7): [True: 0, False: 1.30k]
  ------------------
  306|      0|			return heif_chroma_interleaved_RRGGBBAA_BE;
  307|  1.30k|		else
  308|  1.30k|			return heif_chroma_interleaved_RRGGBB_BE;
  309|  1.30k|	}
  310|  7.40k|}
heifload.c:vips__heif_init_once:
  217|      1|{
  218|      1|	struct heif_error error;
  219|       |
  220|      1|	error = heif_init(NULL);
  221|      1|	if (error.code)
  ------------------
  |  Branch (221:6): [True: 0, False: 1]
  ------------------
  222|      0|		g_warning("heif_init: %s (%d.%d)\n",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  |  |  ------------------
  |  |  |  Branch (340:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  223|      1|			error.message ? error.message : "(null)",
  224|      1|			error.code, error.subcode);
  225|       |
  226|      1|	return NULL;
  227|      1|}
heifload.c:vips_foreign_load_heif_class_init:
 1063|      1|{
 1064|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1065|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1066|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
 1067|       |
 1068|      1|	vips__heif_init();
 1069|       |
 1070|      1|	gobject_class->dispose = vips_foreign_load_heif_dispose;
 1071|      1|	gobject_class->set_property = vips_object_set_property;
 1072|      1|	gobject_class->get_property = vips_object_get_property;
 1073|       |
 1074|      1|	object_class->nickname = "heifload_base";
 1075|      1|	object_class->description = _("load a HEIF image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1076|      1|	object_class->build = vips_foreign_load_heif_build;
 1077|       |
 1078|      1|	load_class->get_flags = vips_foreign_load_heif_get_flags;
 1079|      1|	load_class->header = vips_foreign_load_heif_header;
 1080|      1|	load_class->load = vips_foreign_load_heif_load;
 1081|       |
 1082|      1|	VIPS_ARG_INT(class, "page", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1083|      1|		_("Page"),
 1084|      1|		_("First page to load"),
 1085|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1086|      1|		G_STRUCT_OFFSET(VipsForeignLoadHeif, page),
 1087|      1|		0, 100000, 0);
 1088|       |
 1089|      1|	VIPS_ARG_INT(class, "n", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1090|      1|		_("n"),
 1091|      1|		_("Number of pages to load, -1 for all"),
 1092|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1093|      1|		G_STRUCT_OFFSET(VipsForeignLoadHeif, n),
 1094|      1|		-1, 100000, 1);
 1095|       |
 1096|      1|	VIPS_ARG_BOOL(class, "thumbnail", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1097|      1|		_("Thumbnail"),
 1098|      1|		_("Fetch thumbnail image"),
 1099|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1100|      1|		G_STRUCT_OFFSET(VipsForeignLoadHeif, thumbnail),
 1101|      1|		FALSE);
 1102|       |
 1103|      1|	VIPS_ARG_BOOL(class, "autorotate", 21,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1104|      1|		_("Autorotate"),
 1105|      1|		_("Rotate image using exif orientation"),
 1106|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1107|      1|		G_STRUCT_OFFSET(VipsForeignLoadHeif, autorotate),
 1108|      1|		FALSE);
 1109|       |
 1110|       |#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
 1111|       |	VIPS_ARG_BOOL(class, "unlimited", 22,
 1112|       |		_("Unlimited"),
 1113|       |		_("Remove all denial of service limits"),
 1114|       |		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1115|       |		G_STRUCT_OFFSET(VipsForeignLoadHeif, unlimited),
 1116|       |		FALSE);
 1117|       |#endif
 1118|      1|}
heifload.c:vips_foreign_load_heif_dispose:
  322|  8.81k|{
  323|  8.81k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) gobject;
  324|       |
  325|  8.81k|	heif->data = NULL;
  326|  8.81k|	VIPS_FREEF(heif_image_release, heif->img);
  ------------------
  |  |   41|  8.81k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  8.81k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  8.81k|	{ \
  |  |   43|  8.81k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 165, False: 8.64k]
  |  |  ------------------
  |  |   44|    165|			(void) F((S)); \
  |  |   45|    165|			(S) = 0; \
  |  |   46|    165|		} \
  |  |   47|  8.81k|	} \
  |  |   48|  8.81k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.81k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  327|  8.81k|	VIPS_FREEF(heif_image_handle_release, heif->handle);
  ------------------
  |  |   41|  8.81k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  8.81k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  8.81k|	{ \
  |  |   43|  8.81k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 7.46k, False: 1.34k]
  |  |  ------------------
  |  |   44|  7.46k|			(void) F((S)); \
  |  |   45|  7.46k|			(S) = 0; \
  |  |   46|  7.46k|		} \
  |  |   47|  8.81k|	} \
  |  |   48|  8.81k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.81k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  328|  8.81k|	VIPS_FREEF(heif_context_free, heif->ctx);
  ------------------
  |  |   41|  8.81k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  8.81k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  8.81k|	{ \
  |  |   43|  8.81k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 8.81k, False: 0]
  |  |  ------------------
  |  |   44|  8.81k|			(void) F((S)); \
  |  |   45|  8.81k|			(S) = 0; \
  |  |   46|  8.81k|		} \
  |  |   47|  8.81k|	} \
  |  |   48|  8.81k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.81k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|  8.81k|	VIPS_FREE(heif->id);
  ------------------
  |  |   50|  8.81k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  8.81k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  8.81k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  8.81k|	{ \
  |  |  |  |   43|  8.81k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 7.46k, False: 1.34k]
  |  |  |  |  ------------------
  |  |  |  |   44|  7.46k|			(void) F((S)); \
  |  |  |  |   45|  7.46k|			(S) = 0; \
  |  |  |  |   46|  7.46k|		} \
  |  |  |  |   47|  8.81k|	} \
  |  |  |  |   48|  8.81k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  8.81k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|  8.81k|	VIPS_FREE(heif->reader);
  ------------------
  |  |   50|  8.81k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  8.81k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  8.81k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  8.81k|	{ \
  |  |  |  |   43|  8.81k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 8.81k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  8.81k|			(void) F((S)); \
  |  |  |  |   45|  8.81k|			(S) = 0; \
  |  |  |  |   46|  8.81k|		} \
  |  |  |  |   47|  8.81k|	} \
  |  |  |  |   48|  8.81k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  8.81k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  331|  8.81k|	VIPS_UNREF(heif->source);
  ------------------
  |  |   57|  8.81k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  8.81k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  8.81k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  8.81k|	{ \
  |  |  |  |   43|  8.81k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 8.81k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  8.81k|			(void) F((S)); \
  |  |  |  |   45|  8.81k|			(S) = 0; \
  |  |  |  |   46|  8.81k|		} \
  |  |  |  |   47|  8.81k|	} \
  |  |  |  |   48|  8.81k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  8.81k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|       |
  333|  8.81k|	G_OBJECT_CLASS(vips_foreign_load_heif_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  8.81k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  8.81k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  8.81k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  334|  8.81k|}
heifload.c:vips_foreign_load_heif_build:
  338|  8.81k|{
  339|  8.81k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) object;
  340|       |
  341|       |#ifdef DEBUG
  342|       |	printf("vips_foreign_load_heif_build:\n");
  343|       |#endif /*DEBUG*/
  344|       |
  345|  8.81k|	if (heif->source &&
  ------------------
  |  Branch (345:6): [True: 8.81k, False: 0]
  ------------------
  346|  8.81k|		vips_source_rewind(heif->source))
  ------------------
  |  Branch (346:3): [True: 0, False: 8.81k]
  ------------------
  347|      0|		return -1;
  348|       |
  349|  8.81k|	if (!heif->ctx) {
  ------------------
  |  Branch (349:6): [True: 8.81k, False: 0]
  ------------------
  350|  8.81k|		struct heif_error error;
  351|       |
  352|  8.81k|		heif->ctx = heif_context_alloc();
  353|  8.81k|#ifdef HAVE_HEIF_SET_MAX_IMAGE_SIZE_LIMIT
  354|  8.81k|		heif_context_set_maximum_image_size_limit(heif->ctx,
  355|  8.81k|			heif->unlimited ? USHRT_MAX : 0x4000);
  ------------------
  |  Branch (355:4): [True: 0, False: 8.81k]
  ------------------
  356|  8.81k|#endif /* HAVE_HEIF_SET_MAX_IMAGE_SIZE_LIMIT */
  357|  8.81k|		error = heif_context_read_from_reader(heif->ctx,
  358|  8.81k|			heif->reader, heif, NULL);
  359|  8.81k|		if (error.code) {
  ------------------
  |  Branch (359:7): [True: 1.34k, False: 7.46k]
  ------------------
  360|  1.34k|			vips__heif_error(&error);
  361|  1.34k|			return -1;
  362|  1.34k|		}
  363|  8.81k|	}
  364|       |
  365|  7.46k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_heif_parent_class)->build(object))
  ------------------
  |  |  435|  7.46k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  7.46k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  7.46k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (365:6): [True: 47, False: 7.42k]
  ------------------
  366|     47|		return -1;
  367|       |
  368|  7.42k|	return 0;
  369|  7.46k|}
heifload.c:vips_foreign_load_heif_get_flags:
  420|  7.46k|{
  421|       |	/* FIXME .. could support random access for grid images.
  422|       |	 */
  423|  7.46k|	return VIPS_FOREIGN_SEQUENTIAL;
  424|  7.46k|}
heifload.c:vips_foreign_load_heif_header:
  780|  7.46k|{
  781|  7.46k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load);
  ------------------
  |  |  441|  7.46k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  7.46k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  7.46k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  782|  7.46k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) load;
  783|       |
  784|  7.46k|	struct heif_error error;
  785|  7.46k|	heif_item_id primary_id;
  786|  7.46k|	int i;
  787|       |
  788|       |#ifdef DEBUG
  789|       |	printf("vips_foreign_load_heif_header:\n");
  790|       |#endif /*DEBUG*/
  791|       |
  792|  7.46k|	heif->n_top = heif_context_get_number_of_top_level_images(heif->ctx);
  793|  7.46k|	heif->id = VIPS_ARRAY(NULL, heif->n_top, heif_item_id);
  ------------------
  |  |   72|  7.46k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  7.46k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  7.46k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  7.46k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  7.46k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  794|  7.46k|	heif_context_get_list_of_top_level_image_IDs(heif->ctx,
  795|  7.46k|		heif->id, heif->n_top);
  796|       |
  797|       |	/* Note page number of primary image.
  798|       |	 */
  799|  7.46k|	error = heif_context_get_primary_image_ID(heif->ctx, &primary_id);
  800|  7.46k|	if (error.code) {
  ------------------
  |  Branch (800:6): [True: 0, False: 7.46k]
  ------------------
  801|      0|		vips__heif_error(&error);
  802|      0|		return -1;
  803|      0|	}
  804|  14.9k|	for (i = 0; i < heif->n_top; i++)
  ------------------
  |  Branch (804:14): [True: 7.46k, False: 7.46k]
  ------------------
  805|  7.46k|		if (heif->id[i] == primary_id)
  ------------------
  |  Branch (805:7): [True: 7.46k, False: 0]
  ------------------
  806|  7.46k|			heif->primary_page = i;
  807|       |
  808|       |	/* If @n and @page have not been set, @page defaults to the primary
  809|       |	 * page.
  810|       |	 */
  811|  7.46k|	if (!vips_object_argument_isset(VIPS_OBJECT(load), "page") &&
  ------------------
  |  |  433|  7.46k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  7.46k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  7.46k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (811:6): [True: 7.46k, False: 0]
  ------------------
  812|  7.46k|		!vips_object_argument_isset(VIPS_OBJECT(load), "n"))
  ------------------
  |  |  433|  7.46k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  7.46k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  7.46k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (812:3): [True: 7.46k, False: 0]
  ------------------
  813|  7.46k|		heif->page = heif->primary_page; // FIXME: Invalidates operation cache
  814|       |
  815|  7.46k|	if (heif->n == -1)
  ------------------
  |  Branch (815:6): [True: 0, False: 7.46k]
  ------------------
  816|      0|		heif->n = heif->n_top - heif->page; // FIXME: Invalidates operation cache
  817|  7.46k|	if (heif->page < 0 ||
  ------------------
  |  Branch (817:6): [True: 0, False: 7.46k]
  ------------------
  818|  7.46k|		heif->n <= 0 ||
  ------------------
  |  Branch (818:3): [True: 0, False: 7.46k]
  ------------------
  819|  7.46k|		heif->page + heif->n > heif->n_top) {
  ------------------
  |  Branch (819:3): [True: 0, False: 7.46k]
  ------------------
  820|      0|		vips_error(class->nickname, "%s", _("bad page number"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  821|      0|		return -1;
  822|      0|	}
  823|       |
  824|       |#ifdef DEBUG
  825|       |	for (i = heif->page; i < heif->page + heif->n; i++) {
  826|       |		heif_item_id thumb_ids[1];
  827|       |		int n_items;
  828|       |		int n_thumbs;
  829|       |		int j;
  830|       |
  831|       |		if (vips_foreign_load_heif_set_page(heif, i, FALSE))
  832|       |			return -1;
  833|       |
  834|       |		n_thumbs = heif_image_handle_get_number_of_thumbnails(heif->handle);
  835|       |		n_items = heif_image_handle_get_list_of_thumbnail_IDs(heif->handle,
  836|       |			thumb_ids, 1);
  837|       |
  838|       |		printf("page = %d\n", i);
  839|       |		printf("n_thumbs = %d\n", n_thumbs);
  840|       |		printf("n_items = %d\n", n_items);
  841|       |
  842|       |		for (j = 0; j < n_items; j++) {
  843|       |			struct heif_image_handle *thumb_handle;
  844|       |
  845|       |			error = heif_image_handle_get_thumbnail(heif->handle,
  846|       |				thumb_ids[j], &thumb_handle);
  847|       |			if (error.code) {
  848|       |				vips__heif_error(&error);
  849|       |				return -1;
  850|       |			}
  851|       |
  852|       |			printf("  thumb %d\n", j);
  853|       |			printf("    width = %d\n",
  854|       |				heif_image_handle_get_width(thumb_handle));
  855|       |			printf("    height = %d\n",
  856|       |				heif_image_handle_get_height(thumb_handle));
  857|       |			printf("    bits_per_pixel = %d\n",
  858|       |				heif_image_handle_get_luma_bits_per_pixel(thumb_handle));
  859|       |		}
  860|       |	}
  861|       |#endif /*DEBUG*/
  862|       |
  863|       |	/* All pages must be the same size for libvips toilet roll images.
  864|       |	 */
  865|  7.46k|	if (vips_foreign_load_heif_set_page(heif, heif->page, heif->thumbnail))
  ------------------
  |  Branch (865:6): [True: 0, False: 7.46k]
  ------------------
  866|      0|		return -1;
  867|  7.46k|	heif->page_width = heif_image_handle_get_width(heif->handle);
  868|  7.46k|	heif->page_height = heif_image_handle_get_height(heif->handle);
  869|  7.46k|	heif->bits_per_pixel =
  870|  7.46k|		heif_image_handle_get_luma_bits_per_pixel(heif->handle);
  871|  7.46k|	if (heif->bits_per_pixel < 0) {
  ------------------
  |  Branch (871:6): [True: 38, False: 7.43k]
  ------------------
  872|     38|		vips_error(class->nickname, "%s", _("undefined bits per pixel"));
  ------------------
  |  |   30|     38|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     38|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  873|     38|		return -1;
  874|     38|	}
  875|       |
  876|  7.43k|	for (i = heif->page + 1; i < heif->page + heif->n; i++) {
  ------------------
  |  Branch (876:27): [True: 0, False: 7.43k]
  ------------------
  877|      0|		if (vips_foreign_load_heif_set_page(heif, i, heif->thumbnail))
  ------------------
  |  Branch (877:7): [True: 0, False: 0]
  ------------------
  878|      0|			return -1;
  879|      0|		if (heif_image_handle_get_width(heif->handle) != heif->page_width ||
  ------------------
  |  Branch (879:7): [True: 0, False: 0]
  ------------------
  880|      0|			heif_image_handle_get_height(heif->handle) != heif->page_height ||
  ------------------
  |  Branch (880:4): [True: 0, False: 0]
  ------------------
  881|      0|			heif_image_handle_get_luma_bits_per_pixel(heif->handle) !=
  ------------------
  |  Branch (881:4): [True: 0, False: 0]
  ------------------
  882|      0|				heif->bits_per_pixel) {
  883|      0|			vips_error(class->nickname, "%s",
  884|      0|				_("not all pages are the same size"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  885|      0|			return -1;
  886|      0|		}
  887|      0|	}
  888|       |
  889|       |#ifdef DEBUG
  890|       |	printf("page_width = %d\n", heif->page_width);
  891|       |	printf("page_height = %d\n", heif->page_height);
  892|       |	printf("bits_per_pixel = %d\n", heif->bits_per_pixel);
  893|       |
  894|       |	printf("n_top = %d\n", heif->n_top);
  895|       |	for (i = 0; i < heif->n_top; i++) {
  896|       |		printf("  id[%d] = %d\n", i, heif->id[i]);
  897|       |		if (vips_foreign_load_heif_set_page(heif, i, FALSE))
  898|       |			return -1;
  899|       |		printf("    width = %d\n",
  900|       |			heif_image_handle_get_width(heif->handle));
  901|       |		printf("    height = %d\n",
  902|       |			heif_image_handle_get_height(heif->handle));
  903|       |		printf("    bits_per_pixel = %d\n",
  904|       |			heif_image_handle_get_luma_bits_per_pixel(heif->handle));
  905|       |		printf("    has_depth = %d\n",
  906|       |			heif_image_handle_has_depth_image(heif->handle));
  907|       |		printf("    has_alpha = %d\n",
  908|       |			heif_image_handle_has_alpha_channel(heif->handle));
  909|       |		printf("    n_metadata = %d\n",
  910|       |			heif_image_handle_get_number_of_metadata_blocks(
  911|       |				heif->handle, NULL));
  912|       |#ifdef HAVE_HEIF_COLOR_PROFILE
  913|       |		printf("    colour profile type = 0x%xd\n",
  914|       |			heif_image_handle_get_color_profile_type(heif->handle));
  915|       |#endif /*HAVE_HEIF_COLOR_PROFILE*/
  916|       |	}
  917|       |#endif /*DEBUG*/
  918|       |
  919|  7.43k|	if (vips_foreign_load_heif_set_header(heif, load->out))
  ------------------
  |  Branch (919:6): [True: 9, False: 7.42k]
  ------------------
  920|      9|		return -1;
  921|       |
  922|  7.42k|	vips_source_minimise(heif->source);
  923|       |
  924|  7.42k|	return 0;
  925|  7.43k|}
heifload.c:vips_foreign_load_heif_set_page:
  501|  29.7k|{
  502|  29.7k|	if (!heif->handle ||
  ------------------
  |  Branch (502:6): [True: 7.46k, False: 22.2k]
  ------------------
  503|  29.7k|		page_no != heif->page_no ||
  ------------------
  |  Branch (503:3): [True: 0, False: 22.2k]
  ------------------
  504|  29.7k|		thumbnail != heif->thumbnail_set) {
  ------------------
  |  Branch (504:3): [True: 0, False: 22.2k]
  ------------------
  505|  7.46k|		struct heif_error error;
  506|       |
  507|       |#ifdef DEBUG
  508|       |		printf("vips_foreign_load_heif_set_page: %d, thumbnail = %d\n",
  509|       |			page_no, thumbnail);
  510|       |#endif /*DEBUG*/
  511|       |
  512|  7.46k|		VIPS_FREEF(heif_image_handle_release, heif->handle);
  ------------------
  |  |   41|  7.46k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  7.46k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  7.46k|	{ \
  |  |   43|  7.46k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 7.46k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|  7.46k|	} \
  |  |   48|  7.46k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.46k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  513|  7.46k|		VIPS_FREEF(heif_image_release, heif->img);
  ------------------
  |  |   41|  7.46k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  7.46k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  7.46k|	{ \
  |  |   43|  7.46k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 7.46k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|  7.46k|	} \
  |  |   48|  7.46k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.46k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  514|  7.46k|		heif->data = NULL;
  515|  7.46k|		heif->thumbnail_set = FALSE;
  ------------------
  |  |  794|  7.46k|#define	FALSE	(0)
  ------------------
  516|       |
  517|  7.46k|		error = heif_context_get_image_handle(heif->ctx,
  518|  7.46k|			heif->id[page_no], &heif->handle);
  519|  7.46k|		if (error.code) {
  ------------------
  |  Branch (519:7): [True: 0, False: 7.46k]
  ------------------
  520|      0|			vips__heif_error(&error);
  521|      0|			return -1;
  522|      0|		}
  523|       |
  524|  7.46k|		if (thumbnail) {
  ------------------
  |  Branch (524:7): [True: 0, False: 7.46k]
  ------------------
  525|      0|			if (vips_foreign_load_heif_set_thumbnail(heif))
  ------------------
  |  Branch (525:8): [True: 0, False: 0]
  ------------------
  526|      0|				return -1;
  527|       |
  528|       |			/* If we were asked to select the thumbnail, say we
  529|       |			 * did, even if there are no thumbnails and we just
  530|       |			 * selected the main image.
  531|       |			 *
  532|       |			 * If we don't do this, next time around in _generate
  533|       |			 * we'll try to select the thumbnail again, which will
  534|       |			 * be horribly slow.
  535|       |			 */
  536|      0|			heif->thumbnail_set = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  537|      0|		}
  538|       |
  539|  7.46k|		heif->page_no = page_no;
  540|  7.46k|	}
  541|       |
  542|  29.7k|	return 0;
  543|  29.7k|}
heifload.c:vips_foreign_load_heif_set_header:
  547|  14.8k|{
  548|  14.8k|	VipsForeignLoad *load = (VipsForeignLoad *) heif;
  549|       |
  550|  14.8k|	int bands;
  551|  14.8k|	int i;
  552|       |	/* Surely, 16 metadata items will be enough for anyone.
  553|       |	 */
  554|  14.8k|	heif_item_id id[16];
  555|  14.8k|	int n_metadata;
  556|  14.8k|	struct heif_error error;
  557|  14.8k|	VipsForeignHeifCompression compression;
  558|  14.8k|	VipsInterpretation interpretation;
  559|  14.8k|	VipsBandFormat format;
  560|       |
  561|       |	/* We take the metadata from the non-thumbnail first page. HEIC
  562|       |	 * thumbnails don't have metadata.
  563|       |	 */
  564|  14.8k|	if (vips_foreign_load_heif_set_page(heif, heif->page, FALSE))
  ------------------
  |  |  794|  14.8k|#define	FALSE	(0)
  ------------------
  |  Branch (564:6): [True: 0, False: 14.8k]
  ------------------
  565|      0|		return -1;
  566|       |
  567|       |	/* Verify dimensions
  568|       |	 */
  569|  14.8k|	if (heif->page_width < 1 ||
  ------------------
  |  Branch (569:6): [True: 9, False: 14.8k]
  ------------------
  570|  14.8k|		heif->page_height < 1) {
  ------------------
  |  Branch (570:3): [True: 0, False: 14.8k]
  ------------------
  571|      9|		vips_error("heifload", "%s", _("bad dimensions"));
  ------------------
  |  |   30|      9|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      9|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  572|      9|		return -1;
  573|      9|	}
  574|       |
  575|  14.8k|	heif->has_alpha = heif_image_handle_has_alpha_channel(heif->handle);
  576|       |#ifdef DEBUG
  577|       |	printf("heif_image_handle_has_alpha_channel() = %d\n", heif->has_alpha);
  578|       |#endif /*DEBUG*/
  579|  14.8k|	bands = heif->has_alpha ? 4 : 3;
  ------------------
  |  Branch (579:10): [True: 0, False: 14.8k]
  ------------------
  580|       |
  581|       |#ifdef DEBUG
  582|       |	printf("heif_image_handle_get_luma_bits_per_pixel() = %d\n",
  583|       |		heif_image_handle_get_luma_bits_per_pixel(heif->handle));
  584|       |#endif /*DEBUG*/
  585|       |
  586|       |	/* FIXME .. IPTC as well?
  587|       |	 */
  588|  14.8k|	n_metadata = heif_image_handle_get_list_of_metadata_block_IDs(
  589|  14.8k|		heif->handle, NULL, id, VIPS_NUMBER(id));
  ------------------
  |  |   60|  14.8k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  590|  14.8k|	for (i = 0; i < n_metadata; i++) {
  ------------------
  |  Branch (590:14): [True: 0, False: 14.8k]
  ------------------
  591|      0|		size_t length =
  592|      0|			heif_image_handle_get_metadata_size(heif->handle, id[i]);
  593|      0|		const char *type =
  594|      0|			heif_image_handle_get_metadata_type(heif->handle, id[i]);
  595|      0|		const char *content_type =
  596|      0|			heif_image_handle_get_metadata_content_type(heif->handle, id[i]);
  597|       |
  598|      0|		unsigned char *data;
  599|      0|		char name[256];
  600|       |
  601|       |#ifdef DEBUG
  602|       |		printf("metadata type = %s, length = %zu\n", type, length);
  603|       |#endif /*DEBUG*/
  604|       |
  605|      0|		if (!length)
  ------------------
  |  Branch (605:7): [True: 0, False: 0]
  ------------------
  606|      0|			continue;
  607|      0|		if (!(data = VIPS_ARRAY(NULL, length, unsigned char)))
  ------------------
  |  |   72|      0|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|      0|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (607:7): [True: 0, False: 0]
  ------------------
  608|      0|			return -1;
  609|      0|		error = heif_image_handle_get_metadata(heif->handle, id[i], data);
  610|      0|		if (error.code) {
  ------------------
  |  Branch (610:7): [True: 0, False: 0]
  ------------------
  611|      0|			VIPS_FREE(data);
  ------------------
  |  |   50|      0|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  612|      0|			vips__heif_error(&error);
  613|      0|			return -1;
  614|      0|		}
  615|       |
  616|       |		/* We need to skip the first four bytes of EXIF, they just
  617|       |		 * contain the offset.
  618|       |		 */
  619|      0|		if (length > 4 &&
  ------------------
  |  Branch (619:7): [True: 0, False: 0]
  ------------------
  620|      0|			g_ascii_strcasecmp(type, "exif") == 0) {
  ------------------
  |  Branch (620:4): [True: 0, False: 0]
  ------------------
  621|      0|			length -= 4;
  622|      0|			memmove(data, data + 4, length);
  623|      0|		}
  624|       |
  625|       |		/* Exif data will have the type string "exif".
  626|       |		 *
  627|       |		 * For XMP, the content type is "application/rdf+xml".
  628|       |		 */
  629|      0|		if (g_ascii_strcasecmp(type, "exif") == 0)
  ------------------
  |  Branch (629:7): [True: 0, False: 0]
  ------------------
  630|      0|			g_snprintf(name, 256, VIPS_META_EXIF_NAME);
  ------------------
  |  |   46|      0|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  631|      0|		else if (g_ascii_strcasecmp(content_type, "application/rdf+xml") == 0)
  ------------------
  |  Branch (631:12): [True: 0, False: 0]
  ------------------
  632|      0|			g_snprintf(name, 256, VIPS_META_XMP_NAME);
  ------------------
  |  |   53|      0|#define VIPS_META_XMP_NAME "xmp-data"
  ------------------
  633|      0|		else
  634|      0|			g_snprintf(name, 256, "heif-%s-%d", type, i);
  635|       |
  636|      0|		vips_image_set_blob(out, name,
  637|      0|			(VipsCallbackFn) vips_area_free_cb, data, length);
  638|       |
  639|       |		/* image_set will automatically parse EXIF, if necessary.
  640|       |		 */
  641|      0|	}
  642|       |
  643|       |	/* We use libheif's autorotate, so we need to remove any EXIF
  644|       |	 * orientation tags.
  645|       |	 *
  646|       |	 * According to the HEIF standard, EXIF orientation tags are only
  647|       |	 * informational and images should not be rotated because of them.
  648|       |	 * Unless we strip these tags, there's a danger downstream processing
  649|       |	 * could double-rotate.
  650|       |	 */
  651|  14.8k|	vips_autorot_remove_angle(out);
  652|       |
  653|  14.8k|#ifdef HAVE_HEIF_COLOR_PROFILE
  654|  14.8k|	enum heif_color_profile_type profile_type =
  655|  14.8k|		heif_image_handle_get_color_profile_type(heif->handle);
  656|       |
  657|       |#ifdef DEBUG
  658|       |	{
  659|       |		printf("profile type = ");
  660|       |		switch (profile_type) {
  661|       |		case heif_color_profile_type_not_present:
  662|       |			printf("none");
  663|       |			break;
  664|       |
  665|       |		case heif_color_profile_type_nclx:
  666|       |			printf("nclx");
  667|       |			break;
  668|       |
  669|       |		case heif_color_profile_type_rICC:
  670|       |			printf("rICC");
  671|       |			break;
  672|       |
  673|       |		case heif_color_profile_type_prof:
  674|       |			printf("prof");
  675|       |			break;
  676|       |
  677|       |		default:
  678|       |			printf("unknown");
  679|       |			break;
  680|       |		}
  681|       |		printf("\n");
  682|       |	}
  683|       |#endif /*DEBUG*/
  684|       |
  685|       |	/* lcms can load standard (prof) and reduced (rICC) profiles
  686|       |	 */
  687|  14.8k|	if (profile_type == heif_color_profile_type_prof ||
  ------------------
  |  Branch (687:6): [True: 0, False: 14.8k]
  ------------------
  688|  14.8k|		profile_type == heif_color_profile_type_rICC) {
  ------------------
  |  Branch (688:3): [True: 0, False: 14.8k]
  ------------------
  689|      0|		size_t length = heif_image_handle_get_raw_color_profile_size(
  690|      0|			heif->handle);
  691|       |
  692|      0|		unsigned char *data;
  693|       |
  694|      0|		if (!(data = VIPS_ARRAY(NULL, length, unsigned char)))
  ------------------
  |  |   72|      0|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|      0|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (694:7): [True: 0, False: 0]
  ------------------
  695|      0|			return -1;
  696|      0|		error = heif_image_handle_get_raw_color_profile(heif->handle, data);
  697|      0|		if (error.code) {
  ------------------
  |  Branch (697:7): [True: 0, False: 0]
  ------------------
  698|      0|			VIPS_FREE(data);
  ------------------
  |  |   50|      0|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  699|      0|			vips__heif_error(&error);
  700|      0|			return -1;
  701|      0|		}
  702|       |
  703|       |#ifdef DEBUG
  704|       |		printf("profile data, length = %zd\n", length);
  705|       |#endif /*DEBUG*/
  706|       |
  707|      0|		vips_image_set_blob(out, VIPS_META_ICC_NAME,
  ------------------
  |  |   78|      0|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  708|      0|			(VipsCallbackFn) vips_area_free_cb, data, length);
  709|      0|	}
  710|  14.8k|	else if (profile_type == heif_color_profile_type_nclx) {
  ------------------
  |  Branch (710:11): [True: 0, False: 14.8k]
  ------------------
  711|      0|		g_info("heifload: ignoring nclx profile");
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
  712|      0|	}
  713|  14.8k|#endif /*HAVE_HEIF_COLOR_PROFILE*/
  714|       |
  715|  14.8k|	vips_image_set_int(out, "heif-primary", heif->primary_page);
  716|  14.8k|	vips_image_set_int(out, VIPS_META_N_PAGES, heif->n_top);
  ------------------
  |  |  165|  14.8k|#define VIPS_META_N_PAGES "n-pages"
  ------------------
  717|       |
  718|       |	/* Only set page-height if we have more than one page, or this could
  719|       |	 * accidentally turn into an animated image later.
  720|       |	 */
  721|  14.8k|	if (heif->n > 1)
  ------------------
  |  Branch (721:6): [True: 0, False: 14.8k]
  ------------------
  722|      0|		vips_image_set_int(out, VIPS_META_PAGE_HEIGHT, heif->page_height);
  ------------------
  |  |  158|      0|#define VIPS_META_PAGE_HEIGHT "page-height"
  ------------------
  723|       |
  724|       |	/* Determine compression from HEIF "brand". heif_avif and heif_avis
  725|       |	 * were added in v1.7.
  726|       |	 */
  727|  14.8k|	compression = VIPS_FOREIGN_HEIF_COMPRESSION_HEVC;
  728|       |
  729|  14.8k|#ifdef HAVE_HEIF_AVIF
  730|  14.8k|	{
  731|  14.8k|		const unsigned char *brand_data;
  732|       |
  733|  14.8k|		if ((brand_data = vips_source_sniff(heif->source, 12))) {
  ------------------
  |  Branch (733:7): [True: 14.8k, False: 0]
  ------------------
  734|  14.8k|			enum heif_brand brand;
  735|  14.8k|			brand = heif_main_brand(brand_data, 12);
  736|  14.8k|			if (brand == heif_avif ||
  ------------------
  |  Branch (736:8): [True: 9.88k, False: 4.94k]
  ------------------
  737|  14.8k|				brand == heif_avis)
  ------------------
  |  Branch (737:5): [True: 0, False: 4.94k]
  ------------------
  738|  9.88k|				compression = VIPS_FOREIGN_HEIF_COMPRESSION_AV1;
  739|  14.8k|		}
  740|  14.8k|	}
  741|  14.8k|#endif /*HAVE_HEIF_AVIF*/
  742|       |
  743|  14.8k|	vips_image_set_string(out, "heif-compression",
  744|  14.8k|		vips_enum_nick(VIPS_TYPE_FOREIGN_HEIF_COMPRESSION,
  ------------------
  |  |  129|  14.8k|#define VIPS_TYPE_FOREIGN_HEIF_COMPRESSION (vips_foreign_heif_compression_get_type())
  ------------------
  745|  14.8k|			compression));
  746|       |
  747|  14.8k|	vips_image_set_int(out, VIPS_META_BITS_PER_SAMPLE, heif->bits_per_pixel);
  ------------------
  |  |  100|  14.8k|#define VIPS_META_BITS_PER_SAMPLE "bits-per-sample"
  ------------------
  748|       |
  749|       |	/* Deprecated "heif-bitdepth" use "bits-per-sample" instead.
  750|       |	 */
  751|  14.8k|	vips_image_set_int(out, "heif-bitdepth", heif->bits_per_pixel);
  752|       |
  753|  14.8k|	if (heif->bits_per_pixel > 8) {
  ------------------
  |  Branch (753:6): [True: 2.62k, False: 12.1k]
  ------------------
  754|  2.62k|		interpretation = VIPS_INTERPRETATION_RGB16;
  755|  2.62k|		format = VIPS_FORMAT_USHORT;
  756|  2.62k|	}
  757|  12.1k|	else {
  758|  12.1k|		interpretation = VIPS_INTERPRETATION_sRGB;
  759|  12.1k|		format = VIPS_FORMAT_UCHAR;
  760|  12.1k|	}
  761|       |
  762|       |	/* FIXME .. we always decode to RGB in generate. We should check for
  763|       |	 * all grey images, perhaps.
  764|       |	 */
  765|  14.8k|	if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, NULL))
  ------------------
  |  Branch (765:6): [True: 0, False: 14.8k]
  ------------------
  766|      0|		return -1;
  767|  14.8k|	vips_image_init_fields(out,
  768|  14.8k|		heif->page_width, heif->page_height * heif->n, bands,
  769|  14.8k|		format, VIPS_CODING_NONE, interpretation,
  770|  14.8k|		1.0, 1.0);
  771|       |
  772|  14.8k|	VIPS_SETSTR(load->out->filename,
  ------------------
  |  |   53|  14.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  14.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|  14.8k|	{ \
  |  |   55|  14.8k|		const char *sst = (V); \
  |  |   56|  14.8k|		\
  |  |   57|  14.8k|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 7.42k, False: 7.40k]
  |  |  ------------------
  |  |   58|  7.42k|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 0, False: 7.42k]
  |  |  |  Branch (58:16): [True: 7.42k, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|  7.42k|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|  7.42k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  7.42k|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|  7.42k|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  7.42k|	{ \
  |  |  |  |  |  |   43|  7.42k|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 7.42k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  7.42k|			(void) F((S)); \
  |  |  |  |  |  |   45|  7.42k|			(S) = 0; \
  |  |  |  |  |  |   46|  7.42k|		} \
  |  |  |  |  |  |   47|  7.42k|	} \
  |  |  |  |  |  |   48|  7.42k|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|  7.42k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  7.42k|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 0, False: 7.42k]
  |  |  ------------------
  |  |   61|  7.42k|					(S) = g_strdup(sst); \
  |  |   62|  7.42k|			} \
  |  |   63|  7.42k|		} \
  |  |   64|  14.8k|	} \
  |  |   65|  14.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  773|  14.8k|		vips_connection_filename(VIPS_CONNECTION(heif->source)));
  774|       |
  775|  14.8k|	return 0;
  776|  14.8k|}
heifload.c:vips_foreign_load_heif_load:
 1030|  7.40k|{
 1031|  7.40k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) load;
 1032|       |
 1033|  7.40k|	VipsImage **t = (VipsImage **)
 1034|  7.40k|		vips_object_local_array(VIPS_OBJECT(load), 3);
  ------------------
  |  |  433|  7.40k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  7.40k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  7.40k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1035|       |
 1036|       |#ifdef DEBUG
 1037|       |	printf("vips_foreign_load_heif_load: loading image\n");
 1038|       |#endif /*DEBUG*/
 1039|       |
 1040|  7.40k|	t[0] = vips_image_new();
 1041|  7.40k|	if (vips_foreign_load_heif_set_header(heif, t[0]))
  ------------------
  |  Branch (1041:6): [True: 0, False: 7.40k]
  ------------------
 1042|      0|		return -1;
 1043|       |
 1044|       |	/* Close input immediately at end of read.
 1045|       |	 */
 1046|  7.40k|	g_signal_connect(t[0], "minimise",
  ------------------
  |  |  491|  7.40k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
 1047|  7.40k|		G_CALLBACK(vips_foreign_load_heif_minimise), heif);
 1048|       |
 1049|  7.40k|	if (vips_image_generate(t[0],
  ------------------
  |  Branch (1049:6): [True: 0, False: 7.40k]
  ------------------
 1050|  7.40k|			NULL, vips_foreign_load_heif_generate, NULL, heif, NULL) ||
 1051|  7.40k|		vips_sequential(t[0], &t[1], NULL) ||
  ------------------
  |  Branch (1051:3): [True: 0, False: 7.40k]
  ------------------
 1052|  7.40k|		vips_image_write(t[1], load->real))
  ------------------
  |  Branch (1052:3): [True: 7.40k, False: 0]
  ------------------
 1053|  7.40k|		return -1;
 1054|       |
 1055|      0|	if (vips_source_decode(heif->source))
  ------------------
  |  Branch (1055:6): [True: 0, False: 0]
  ------------------
 1056|      0|		return -1;
 1057|       |
 1058|      0|	return 0;
 1059|      0|}
heifload.c:vips_foreign_load_heif_minimise:
 1024|  14.8k|{
 1025|  14.8k|	vips_source_minimise(heif->source);
 1026|  14.8k|}
heifload.c:vips_foreign_load_heif_generate:
  930|  7.40k|{
  931|  7.40k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) a;
  932|  7.40k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(heif);
  ------------------
  |  |  441|  7.40k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  7.40k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  7.40k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  933|  7.40k|	VipsRect *r = &out_region->valid;
  934|       |
  935|  7.40k|	int page = r->top / heif->page_height + heif->page;
  936|  7.40k|	int line = r->top % heif->page_height;
  937|       |
  938|       |#ifdef DEBUG_VERBOSE
  939|       |	printf("vips_foreign_load_heif_generate: line %d\n", r->top);
  940|       |#endif /*DEBUG_VERBOSE*/
  941|       |
  942|  7.40k|	g_assert(r->height == 1);
  ------------------
  |  |  166|  7.40k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  7.40k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.40k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  943|       |
  944|  7.40k|	if (vips_foreign_load_heif_set_page(heif, page, heif->thumbnail))
  ------------------
  |  Branch (944:6): [True: 0, False: 7.40k]
  ------------------
  945|      0|		return -1;
  946|       |
  947|  7.40k|	if (!heif->img) {
  ------------------
  |  Branch (947:6): [True: 7.40k, False: 0]
  ------------------
  948|  7.40k|		enum heif_chroma chroma =
  949|  7.40k|			vips__heif_chroma(heif->bits_per_pixel, heif->has_alpha);
  950|       |
  951|  7.40k|		struct heif_error error;
  952|  7.40k|		struct heif_decoding_options *options;
  953|       |
  954|  7.40k|		options = heif_decoding_options_alloc();
  955|  7.40k|		error = heif_decode_image(heif->handle, &heif->img,
  956|  7.40k|			heif_colorspace_RGB,
  957|  7.40k|			chroma,
  958|  7.40k|			options);
  959|  7.40k|		heif_decoding_options_free(options);
  960|  7.40k|		if (error.code) {
  ------------------
  |  Branch (960:7): [True: 7.23k, False: 165]
  ------------------
  961|  7.23k|			vips__heif_error(&error);
  962|  7.23k|			return -1;
  963|  7.23k|		}
  964|       |
  965|       |#ifdef DEBUG
  966|       |		vips__heif_image_print(heif->img);
  967|       |#endif /*DEBUG*/
  968|  7.40k|	}
  969|       |
  970|    165|	if (!heif->data) {
  ------------------
  |  Branch (970:6): [True: 165, False: 0]
  ------------------
  971|    165|		int image_width = heif_image_get_width(heif->img,
  972|    165|			heif_channel_interleaved);
  973|    165|		int image_height = heif_image_get_height(heif->img,
  974|    165|			heif_channel_interleaved);
  975|       |
  976|       |		/* We can sometimes get inconsistency between the dimensions
  977|       |		 * reported on the handle, and the final image we fetch. Error
  978|       |		 * out to prevent a segv.
  979|       |		 */
  980|    165|		if (image_width != heif->page_width ||
  ------------------
  |  Branch (980:7): [True: 164, False: 1]
  ------------------
  981|    165|			image_height != heif->page_height) {
  ------------------
  |  Branch (981:4): [True: 1, False: 0]
  ------------------
  982|    165|			vips_error(class->nickname,
  983|    165|				"%s", _("bad image dimensions on decode"));
  ------------------
  |  |   30|    165|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    165|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  984|    165|			return -1;
  985|    165|		}
  986|       |
  987|      0|		if (!(heif->data = heif_image_get_plane_readonly(heif->img,
  ------------------
  |  Branch (987:7): [True: 0, False: 0]
  ------------------
  988|      0|				  heif_channel_interleaved, &heif->stride))) {
  989|      0|			vips_error(class->nickname,
  990|      0|				"%s", _("unable to get image data"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  991|      0|			return -1;
  992|      0|		}
  993|      0|	}
  994|       |
  995|      0|	memcpy(VIPS_REGION_ADDR(out_region, 0, r->top),
  ------------------
  |  |  227|      0|	((R)->data + \
  |  |  228|      0|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|      0|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|      0|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|      0|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  996|      0|		heif->data + heif->stride * line,
  997|      0|		VIPS_IMAGE_SIZEOF_LINE(out_region->im));
  ------------------
  |  |  386|      0|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  998|       |
  999|       |	/* We may need to swap bytes and shift to fill 16 bits.
 1000|       |	 */
 1001|      0|	if (heif->bits_per_pixel > 8) {
  ------------------
  |  Branch (1001:6): [True: 0, False: 0]
  ------------------
 1002|      0|		int shift = 16 - heif->bits_per_pixel;
 1003|      0|		int ne = VIPS_REGION_N_ELEMENTS(out_region);
  ------------------
  |  |  197|      0|	((size_t) ((R)->valid.width * (R)->im->Bands))
  ------------------
 1004|       |
 1005|      0|		int i;
 1006|      0|		VipsPel *p;
 1007|       |
 1008|      0|		p = VIPS_REGION_ADDR(out_region, 0, r->top);
  ------------------
  |  |  227|      0|	((R)->data + \
  |  |  228|      0|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|      0|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|      0|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|      0|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1009|      0|		for (i = 0; i < ne; i++) {
  ------------------
  |  Branch (1009:15): [True: 0, False: 0]
  ------------------
 1010|       |			/* We've asked for big endian, we must write native.
 1011|       |			 */
 1012|      0|			guint16 v = ((p[0] << 8) | p[1]) << shift;
 1013|       |
 1014|      0|			*((guint16 *) p) = v;
 1015|      0|			p += 2;
 1016|      0|		}
 1017|      0|	}
 1018|       |
 1019|      0|	return 0;
 1020|    165|}
heifload.c:vips_foreign_load_heif_init:
 1195|  8.81k|{
 1196|  8.81k|	heif->n = 1;
 1197|       |
 1198|  8.81k|	heif->reader = VIPS_ARRAY(NULL, 1, struct heif_reader);
  ------------------
  |  |   72|  8.81k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  8.81k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  8.81k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  8.81k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  8.81k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1199|       |
 1200|       |	/* The first version to support heif_reader.
 1201|       |	 */
 1202|  8.81k|	heif->reader->reader_api_version = 1;
 1203|  8.81k|	heif->reader->get_position = vips_foreign_load_heif_get_position;
 1204|  8.81k|	heif->reader->read = vips_foreign_load_heif_read;
 1205|  8.81k|	heif->reader->seek = vips_foreign_load_heif_seek;
 1206|  8.81k|	heif->reader->wait_for_file_size =
 1207|  8.81k|		vips_foreign_load_heif_wait_for_file_size;
 1208|  8.81k|}
heifload.c:vips_foreign_load_heif_get_position:
 1122|   255k|{
 1123|   255k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) userdata;
 1124|       |
 1125|   255k|	return vips_source_seek(heif->source, 0L, SEEK_CUR);
 1126|   255k|}
heifload.c:vips_foreign_load_heif_read:
 1135|   678k|{
 1136|   678k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) userdata;
 1137|       |
 1138|  1.34M|	while (size > 0) {
  ------------------
  |  Branch (1138:9): [True: 668k, False: 678k]
  ------------------
 1139|   668k|		gint64 bytes_read;
 1140|       |
 1141|   668k|		bytes_read = vips_source_read(heif->source, data, size);
 1142|   668k|		if (bytes_read <= 0)
  ------------------
  |  Branch (1142:7): [True: 20, False: 668k]
  ------------------
 1143|     20|			return -1;
 1144|       |
 1145|   668k|		size -= bytes_read;
 1146|   668k|		data = (char *) data + bytes_read;
 1147|   668k|	}
 1148|       |
 1149|   678k|	return 0;
 1150|   678k|}
heifload.c:vips_foreign_load_heif_seek:
 1154|  46.3k|{
 1155|  46.3k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) userdata;
 1156|       |
 1157|       |	/* Return 0 on success.
 1158|       |	 */
 1159|  46.3k|	return vips_source_seek(heif->source, position, SEEK_SET) == -1;
 1160|  46.3k|}
heifload.c:vips_foreign_load_heif_wait_for_file_size:
 1167|   260k|{
 1168|   260k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) userdata;
 1169|       |
 1170|   260k|	gint64 old_position;
 1171|   260k|	gint64 result;
 1172|   260k|	enum heif_reader_grow_status status;
 1173|       |
 1174|       |	/* We seek the VipsSource to the position and check for errors.
 1175|       |	 */
 1176|   260k|	old_position = vips_source_seek(heif->source, 0L, SEEK_CUR);
 1177|   260k|	result = vips_source_seek(heif->source, target_size, SEEK_SET);
 1178|   260k|	vips_source_seek(heif->source, old_position, SEEK_SET);
 1179|       |
 1180|   260k|	if (result < 0)
  ------------------
  |  Branch (1180:6): [True: 826, False: 259k]
  ------------------
 1181|       |		/* Unable to seek to this point, so it's beyond EOF.
 1182|       |		 */
 1183|    826|		status = heif_reader_grow_status_size_beyond_eof;
 1184|   259k|	else
 1185|       |		/* Successfully read to the requested point, but the requested
 1186|       |		 * point is not necessarily EOF.
 1187|       |		 */
 1188|   259k|		status = heif_reader_grow_status_size_reached;
 1189|       |
 1190|   260k|	return status;
 1191|   260k|}
heifload.c:vips_foreign_load_heif_file_class_init:
 1254|      1|{
 1255|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1256|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1257|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
 1258|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
 1259|       |
 1260|      1|	gobject_class->set_property = vips_object_set_property;
 1261|      1|	gobject_class->get_property = vips_object_get_property;
 1262|       |
 1263|      1|	object_class->nickname = "heifload";
 1264|      1|	object_class->build = vips_foreign_load_heif_file_build;
 1265|       |
 1266|      1|	foreign_class->suffs = vips__heif_suffs;
 1267|       |
 1268|      1|	load_class->is_a = vips_foreign_load_heif_file_is_a;
 1269|       |
 1270|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1271|      1|		_("Filename"),
 1272|      1|		_("Filename to load from"),
 1273|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1274|      1|		G_STRUCT_OFFSET(VipsForeignLoadHeifFile, filename),
 1275|      1|		NULL);
 1276|      1|}
heifload.c:vips_foreign_load_heif_is_a:
  393|  15.7k|{
  394|  15.7k|	if (len >= 12) {
  ------------------
  |  Branch (394:6): [True: 15.4k, False: 296]
  ------------------
  395|  15.4k|		unsigned char *p = (unsigned char *) buf;
  396|  15.4k|		guint32 chunk_len =
  397|  15.4k|			VIPS_LSHIFT_INT(p[0], 24) |
  ------------------
  |  |   87|  15.4k|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  ------------------
  398|  15.4k|			VIPS_LSHIFT_INT(p[1], 16) |
  ------------------
  |  |   87|  15.4k|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  ------------------
  399|  15.4k|			VIPS_LSHIFT_INT(p[2], 8) |
  ------------------
  |  |   87|  15.4k|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  ------------------
  400|  15.4k|			VIPS_LSHIFT_INT(p[3], 0);
  ------------------
  |  |   87|  15.4k|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  ------------------
  401|       |
  402|  15.4k|		int i;
  403|       |
  404|       |		/* chunk_len can be pretty big for eg. animated AVIF.
  405|       |		 */
  406|  15.4k|		if (chunk_len > 2048 ||
  ------------------
  |  Branch (406:7): [True: 6.60k, False: 8.87k]
  ------------------
  407|  15.4k|			chunk_len % 4 != 0)
  ------------------
  |  Branch (407:4): [True: 4, False: 8.86k]
  ------------------
  408|  6.60k|			return 0;
  409|       |
  410|  75.6k|		for (i = 0; i < VIPS_NUMBER(heif_magic); i++)
  ------------------
  |  |   60|  75.6k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (410:15): [True: 75.5k, False: 51]
  ------------------
  411|  75.5k|			if (strncmp(buf + 4, heif_magic[i], 8) == 0)
  ------------------
  |  Branch (411:8): [True: 8.81k, False: 66.7k]
  ------------------
  412|  8.81k|				return 1;
  413|  8.86k|	}
  414|       |
  415|    347|	return 0;
  416|  15.7k|}
heifload.c:vips_foreign_load_heif_buffer_class_init:
 1326|      1|{
 1327|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1328|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1329|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
 1330|       |
 1331|      1|	gobject_class->set_property = vips_object_set_property;
 1332|      1|	gobject_class->get_property = vips_object_get_property;
 1333|       |
 1334|      1|	object_class->nickname = "heifload_buffer";
 1335|      1|	object_class->build = vips_foreign_load_heif_buffer_build;
 1336|       |
 1337|      1|	load_class->is_a_buffer = vips_foreign_load_heif_buffer_is_a;
 1338|       |
 1339|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1340|      1|		_("Buffer"),
 1341|      1|		_("Buffer to load from"),
 1342|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1343|      1|		G_STRUCT_OFFSET(VipsForeignLoadHeifBuffer, buf),
 1344|      1|		VIPS_TYPE_BLOB);
 1345|      1|}
heifload.c:vips_foreign_load_heif_buffer_build:
 1299|  8.81k|{
 1300|  8.81k|	VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) object;
 1301|  8.81k|	VipsForeignLoadHeifBuffer *buffer =
 1302|  8.81k|		(VipsForeignLoadHeifBuffer *) object;
 1303|       |
 1304|  8.81k|	if (buffer->buf &&
  ------------------
  |  Branch (1304:6): [True: 8.81k, False: 0]
  ------------------
 1305|  8.81k|		!(heif->source = vips_source_new_from_memory(
  ------------------
  |  Branch (1305:3): [True: 0, False: 8.81k]
  ------------------
 1306|  8.81k|			VIPS_AREA(buffer->buf)->data,
  ------------------
  |  |  137|  8.81k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 1307|  8.81k|			VIPS_AREA(buffer->buf)->length)))
  ------------------
  |  |  137|  8.81k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 1308|      0|		return -1;
 1309|       |
 1310|  8.81k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_heif_file_parent_class)
  ------------------
  |  |  435|  8.81k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  8.81k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  8.81k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1310:6): [True: 1.39k, False: 7.42k]
  ------------------
 1311|  8.81k|			->build(object))
 1312|  1.39k|		return -1;
 1313|       |
 1314|  7.42k|	return 0;
 1315|  8.81k|}
heifload.c:vips_foreign_load_heif_buffer_is_a:
 1319|  15.7k|{
 1320|  15.7k|	return vips_foreign_load_heif_is_a(buf, len);
 1321|  15.7k|}
heifload.c:vips_foreign_load_heif_buffer_init:
 1349|  8.81k|{
 1350|  8.81k|}
heifload.c:vips_foreign_load_heif_source_class_init:
 1397|      1|{
 1398|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1399|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1400|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
 1401|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
 1402|       |
 1403|      1|	gobject_class->set_property = vips_object_set_property;
 1404|      1|	gobject_class->get_property = vips_object_get_property;
 1405|       |
 1406|      1|	object_class->nickname = "heifload_source";
 1407|      1|	object_class->build = vips_foreign_load_heif_source_build;
 1408|       |
 1409|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
 1410|       |
 1411|      1|	load_class->is_a_source = vips_foreign_load_heif_source_is_a_source;
 1412|       |
 1413|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
 1414|      1|		_("Source"),
 1415|      1|		_("Source to load from"),
 1416|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1417|      1|		G_STRUCT_OFFSET(VipsForeignLoadHeifSource, source),
 1418|      1|		VIPS_TYPE_SOURCE);
 1419|      1|}

heifsave.c:vips_foreign_save_heif_class_init:
  755|      1|{
  756|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  757|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  758|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  759|       |
  760|      1|	vips__heif_init();
  761|       |
  762|      1|	gobject_class->dispose = vips_foreign_save_heif_dispose;
  763|      1|	gobject_class->set_property = vips_object_set_property;
  764|      1|	gobject_class->get_property = vips_object_get_property;
  765|       |
  766|      1|	object_class->nickname = "heifsave_base";
  767|      1|	object_class->description = _("save image in HEIF format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  768|      1|	object_class->build = vips_foreign_save_heif_build;
  769|       |
  770|      1|	save_class->saveable = VIPS_SAVEABLE_RGBA_ONLY;
  771|      1|	save_class->format_table = vips_heif_bandfmt;
  772|       |
  773|      1|	VIPS_ARG_INT(class, "Q", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  774|      1|		_("Q"),
  775|      1|		_("Q factor"),
  776|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  777|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, Q),
  778|      1|		1, 100, 50);
  779|       |
  780|      1|	VIPS_ARG_INT(class, "bitdepth", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  781|      1|		_("Bit depth"),
  782|      1|		_("Number of bits per pixel"),
  783|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  784|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, bitdepth),
  785|      1|		8, 12, 12);
  786|       |
  787|      1|	VIPS_ARG_BOOL(class, "lossless", 13,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  788|      1|		_("Lossless"),
  789|      1|		_("Enable lossless compression"),
  790|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  791|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, lossless),
  792|      1|		FALSE);
  793|       |
  794|      1|	VIPS_ARG_ENUM(class, "compression", 14,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  795|      1|		_("Compression"),
  796|      1|		_("Compression format"),
  797|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  798|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, compression),
  799|      1|		VIPS_TYPE_FOREIGN_HEIF_COMPRESSION,
  800|      1|		VIPS_FOREIGN_HEIF_COMPRESSION_HEVC);
  801|       |
  802|      1|	VIPS_ARG_INT(class, "effort", 15,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  803|      1|		_("Effort"),
  804|      1|		_("CPU effort"),
  805|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  806|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, effort),
  807|      1|		0, 9, 4);
  808|       |
  809|      1|	VIPS_ARG_ENUM(class, "subsample_mode", 16,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  810|      1|		_("Subsample mode"),
  811|      1|		_("Select chroma subsample operation mode"),
  812|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  813|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, subsample_mode),
  814|      1|		VIPS_TYPE_FOREIGN_SUBSAMPLE,
  815|      1|		VIPS_FOREIGN_SUBSAMPLE_AUTO);
  816|       |
  817|      1|	VIPS_ARG_INT(class, "speed", 17,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  818|      1|		_("Speed"),
  819|      1|		_("CPU effort"),
  820|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  821|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, speed),
  822|      1|		0, 9, 5);
  823|       |
  824|      1|	VIPS_ARG_ENUM(class, "encoder", 18,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  825|      1|		_("Encoder"),
  826|      1|		_("Select encoder to use"),
  827|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  828|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeif, selected_encoder),
  829|      1|		VIPS_TYPE_FOREIGN_HEIF_ENCODER,
  830|      1|		VIPS_FOREIGN_HEIF_ENCODER_AUTO);
  831|      1|}
heifsave.c:vips_foreign_save_heif_file_class_init:
  883|      1|{
  884|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  885|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  886|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  887|       |
  888|      1|	gobject_class->set_property = vips_object_set_property;
  889|      1|	gobject_class->get_property = vips_object_get_property;
  890|       |
  891|      1|	object_class->nickname = "heifsave";
  892|      1|	object_class->build = vips_foreign_save_heif_file_build;
  893|       |
  894|      1|	foreign_class->suffs = vips__heif_suffs;
  895|       |
  896|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  897|      1|		_("Filename"),
  898|      1|		_("Filename to save to"),
  899|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  900|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeifFile, filename),
  901|      1|		NULL);
  902|      1|}
heifsave.c:vips_foreign_save_heif_buffer_class_init:
  948|      1|{
  949|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  950|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  951|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  952|       |
  953|      1|	gobject_class->set_property = vips_object_set_property;
  954|      1|	gobject_class->get_property = vips_object_get_property;
  955|       |
  956|      1|	object_class->nickname = "heifsave_buffer";
  957|      1|	object_class->build = vips_foreign_save_heif_buffer_build;
  958|       |
  959|      1|	foreign_class->suffs = vips__heic_suffs;
  960|       |
  961|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  962|      1|		_("Buffer"),
  963|      1|		_("Buffer to save to"),
  964|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  965|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeifBuffer, buf),
  966|      1|		VIPS_TYPE_BLOB);
  967|      1|}
heifsave.c:vips_foreign_save_heif_target_class_init:
 1006|      1|{
 1007|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1008|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1009|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
 1010|       |
 1011|      1|	gobject_class->set_property = vips_object_set_property;
 1012|      1|	gobject_class->get_property = vips_object_get_property;
 1013|       |
 1014|      1|	object_class->nickname = "heifsave_target";
 1015|      1|	object_class->build = vips_foreign_save_heif_target_build;
 1016|       |
 1017|      1|	foreign_class->suffs = vips__heic_suffs;
 1018|       |
 1019|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
 1020|      1|		_("Target"),
 1021|      1|		_("Target to save to"),
 1022|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1023|      1|		G_STRUCT_OFFSET(VipsForeignSaveHeifTarget, target),
 1024|      1|		VIPS_TYPE_TARGET);
 1025|      1|}
heifsave.c:vips_foreign_save_avif_target_class_init:
 1041|      1|{
 1042|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1043|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
 1044|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
 1045|       |
 1046|      1|	object_class->nickname = "avifsave_target";
 1047|      1|	object_class->description = _("save image in AVIF format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1048|       |
 1049|      1|	foreign_class->suffs = vips__avif_suffs;
 1050|       |
 1051|       |	/* Hide from UI.
 1052|       |	 */
 1053|      1|	operation_class->flags |= VIPS_OPERATION_DEPRECATED;
 1054|      1|}

vips__jpeg_read_source:
 1054|  10.8k|{
 1055|  10.8k|	ReadJpeg *jpeg;
 1056|       |
 1057|  10.8k|	if (!(jpeg = readjpeg_new(source, out, shrink, fail_on,
  ------------------
  |  Branch (1057:6): [True: 0, False: 10.8k]
  ------------------
 1058|  10.8k|			  autorotate, unlimited)))
 1059|      0|		return -1;
 1060|       |
 1061|       |	/* Here for longjmp() from vips__new_error_exit() during
 1062|       |	 * cinfo->mem->alloc_small() or jpeg_read_header().
 1063|       |	 */
 1064|  10.8k|	if (setjmp(jpeg->eman.jmp))
 1065|  1.01k|		return -1;
 1066|       |
 1067|  9.87k|	if (readjpeg_open_input(jpeg) ||
  ------------------
  |  Branch (1067:6): [True: 18.4E, False: 10.8k]
  ------------------
 1068|  10.8k|		vips__jpeg_read(jpeg, out, header_only))
  ------------------
  |  Branch (1068:3): [True: 4.04k, False: 6.84k]
  ------------------
 1069|  3.02k|		return -1;
 1070|       |
 1071|  6.84k|	if (header_only)
  ------------------
  |  Branch (1071:6): [True: 5.22k, False: 1.61k]
  ------------------
 1072|  5.22k|		vips_source_minimise(source);
 1073|       |
 1074|  6.84k|	return 0;
 1075|  9.87k|}
vips__isjpeg_source:
 1079|  31.2k|{
 1080|  31.2k|	const unsigned char *p;
 1081|       |
 1082|  31.2k|	if ((p = vips_source_sniff(source, 2)) &&
  ------------------
  |  Branch (1082:6): [True: 31.2k, False: 14]
  ------------------
 1083|  31.2k|		p[0] == 0xff &&
  ------------------
  |  Branch (1083:3): [True: 6.30k, False: 24.9k]
  ------------------
 1084|  31.2k|		p[1] == 0xd8)
  ------------------
  |  Branch (1084:3): [True: 6.24k, False: 55]
  ------------------
 1085|  6.24k|		return 1;
 1086|       |
 1087|  24.9k|	return 0;
 1088|  31.2k|}
jpeg2vips.c:readjpeg_new:
  454|  10.8k|{
  455|  10.8k|	ReadJpeg *jpeg;
  456|       |
  457|  10.8k|	if (!(jpeg = VIPS_NEW(out, ReadJpeg)))
  ------------------
  |  |   70|  10.8k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  10.8k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  10.8k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  10.8k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  10.8k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (457:6): [True: 0, False: 10.8k]
  ------------------
  458|      0|		return NULL;
  459|       |
  460|  10.8k|	jpeg->out = out;
  461|  10.8k|	jpeg->source = source;
  462|  10.8k|	g_object_ref(source);
  463|  10.8k|	jpeg->shrink = shrink;
  464|  10.8k|	jpeg->fail_on = fail_on;
  465|  10.8k|	jpeg->cinfo.err = jpeg_std_error(&jpeg->eman.pub);
  466|  10.8k|	jpeg->cinfo.err->addon_message_table = vips__jpeg_message_table;
  467|  10.8k|	jpeg->cinfo.err->first_addon_message = 1000;
  468|  10.8k|	jpeg->cinfo.err->last_addon_message = 1001;
  469|  10.8k|	jpeg->eman.pub.error_exit = vips__new_error_exit;
  470|  10.8k|	jpeg->eman.pub.emit_message = readjpeg_emit_message;
  471|  10.8k|	jpeg->eman.pub.output_message = vips__new_output_message;
  472|  10.8k|	jpeg->eman.fp = NULL;
  473|  10.8k|	jpeg->autorotate = autorotate;
  474|  10.8k|	jpeg->unlimited = unlimited;
  475|  10.8k|	jpeg->cinfo.client_data = jpeg;
  476|       |
  477|       |	/* jpeg_create_decompress() can fail on some sanity checks. Don't
  478|       |	 * readjpeg_free() since we don't want to jpeg_destroy_decompress().
  479|       |	 */
  480|  10.8k|	if (setjmp(jpeg->eman.jmp))
  481|      0|		return NULL;
  482|       |
  483|  10.8k|	jpeg_create_decompress(&jpeg->cinfo);
  ------------------
  |  |  972|  10.8k|  jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
  |  |  ------------------
  |  |  |  |    4|  10.8k|#define JPEG_LIB_VERSION  62
  |  |  ------------------
  |  |  973|  10.8k|                        (size_t)sizeof(struct jpeg_decompress_struct))
  ------------------
  484|       |
  485|  10.8k|	g_signal_connect(out, "close",
  ------------------
  |  |  491|  10.8k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  486|  10.8k|		G_CALLBACK(readjpeg_close_cb), jpeg);
  487|  10.8k|	g_signal_connect(out, "minimise",
  ------------------
  |  |  491|  10.8k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  488|  10.8k|		G_CALLBACK(readjpeg_minimise_cb), jpeg);
  489|       |
  490|  10.8k|	return jpeg;
  491|  10.8k|}
jpeg2vips.c:readjpeg_emit_message:
  383|   258k|{
  384|   258k|	ReadJpeg *jpeg = (ReadJpeg *) cinfo->client_data;
  385|       |
  386|   258k|	long num_warnings;
  387|       |
  388|   258k|	if (msg_level < 0) {
  ------------------
  |  Branch (388:6): [True: 85.3k, False: 172k]
  ------------------
  389|       |		/* Always count warnings in num_warnings.
  390|       |		 */
  391|  85.3k|		num_warnings = ++cinfo->err->num_warnings;
  392|       |
  393|       |		/* Corrupt files may give many warnings, the policy here is to
  394|       |		 * show only the first warning and treat many warnings as fatal,
  395|       |		 * unless unlimited is set.
  396|       |		 */
  397|  85.3k|		if (num_warnings == 1)
  ------------------
  |  Branch (397:7): [True: 10.2k, False: 75.0k]
  ------------------
  398|  10.2k|			(*cinfo->err->output_message)(cinfo);
  399|  75.0k|		else if (!jpeg ||
  ------------------
  |  Branch (399:12): [True: 0, False: 75.0k]
  ------------------
  400|  75.0k|			(!jpeg->unlimited && num_warnings >= 100))
  ------------------
  |  Branch (400:5): [True: 75.0k, False: 0]
  |  Branch (400:25): [True: 131, False: 74.9k]
  ------------------
  401|    131|			cinfo->err->error_exit(cinfo);
  402|  85.3k|	}
  403|   172k|	else if (cinfo->err->trace_level >= msg_level)
  ------------------
  |  Branch (403:11): [True: 0, False: 172k]
  ------------------
  404|       |		/* It's a trace message. Show it if trace_level >= msg_level.
  405|       |		 */
  406|      0|		(*cinfo->err->output_message)(cinfo);
  407|   258k|}
jpeg2vips.c:readjpeg_close_cb:
  440|  10.8k|{
  441|  10.8k|	(void) readjpeg_free(jpeg);
  442|  10.8k|}
jpeg2vips.c:readjpeg_free:
  413|  10.8k|{
  414|  10.8k|	if (jpeg->eman.pub.num_warnings != 0) {
  ------------------
  |  Branch (414:6): [True: 10.2k, False: 608]
  ------------------
  415|  10.2k|		g_warning(_("read gave %ld warnings"),
  ------------------
  |  |  338|  10.2k|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|  10.2k|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|  10.2k|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|  10.2k|                               __VA_ARGS__)
  ------------------
  416|  10.2k|			jpeg->eman.pub.num_warnings);
  417|  10.2k|		g_warning("%s", vips_error_buffer());
  ------------------
  |  |  338|  10.2k|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|  10.2k|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|  10.2k|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|  10.2k|                               __VA_ARGS__)
  ------------------
  418|       |
  419|       |		/* Make the message only appear once.
  420|       |		 */
  421|  10.2k|		jpeg->eman.pub.num_warnings = 0;
  422|  10.2k|	}
  423|       |
  424|       |	/* Don't call jpeg_finish_decompress(). It just checks the tail of the
  425|       |	 * file and who cares about that. All mem is freed in
  426|       |	 * jpeg_destroy_decompress().
  427|       |	 */
  428|       |
  429|       |	/* I don't think this can fail. It's harmless to call many times.
  430|       |	 */
  431|  10.8k|	jpeg_destroy_decompress(&jpeg->cinfo);
  432|       |
  433|  10.8k|	VIPS_UNREF(jpeg->source);
  ------------------
  |  |   57|  10.8k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  10.8k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  10.8k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  10.8k|	{ \
  |  |  |  |   43|  10.8k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 10.8k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  10.8k|			(void) F((S)); \
  |  |  |  |   45|  10.8k|			(S) = 0; \
  |  |  |  |   46|  10.8k|		} \
  |  |  |  |   47|  10.8k|	} \
  |  |  |  |   48|  10.8k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  10.8k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  434|       |
  435|  10.8k|	return 0;
  436|  10.8k|}
jpeg2vips.c:readjpeg_minimise_cb:
  446|  17.6k|{
  447|  17.6k|	vips_source_minimise(jpeg->source);
  448|  17.6k|}
jpeg2vips.c:readjpeg_open_input:
  328|  10.8k|{
  329|  10.8k|	j_decompress_ptr cinfo = &jpeg->cinfo;
  330|       |
  331|  10.8k|	if (jpeg->source &&
  ------------------
  |  Branch (331:6): [True: 10.8k, False: 0]
  ------------------
  332|  10.8k|		!cinfo->src) {
  ------------------
  |  Branch (332:3): [True: 10.8k, False: 0]
  ------------------
  333|  10.8k|		Source *src;
  334|       |
  335|  10.8k|		if (vips_source_rewind(jpeg->source))
  ------------------
  |  Branch (335:7): [True: 0, False: 10.8k]
  ------------------
  336|      0|			return -1;
  337|       |
  338|  10.8k|		cinfo->src =
  339|  10.8k|			(struct jpeg_source_mgr *) (*cinfo->mem->alloc_small)(
  340|  10.8k|				(j_common_ptr) cinfo,
  341|  10.8k|				JPOOL_PERMANENT,
  ------------------
  |  |  888|  10.8k|#define JPOOL_PERMANENT  0      /* lasts until master record is destroyed */
  ------------------
  342|  10.8k|				sizeof(Source));
  343|       |
  344|  10.8k|		src = (Source *) cinfo->src;
  345|  10.8k|		src->jpeg = jpeg;
  346|  10.8k|		src->source = jpeg->source;
  347|  10.8k|		src->pub.init_source = source_init_source;
  348|       |
  349|       |		/* Use default method.
  350|       |		 */
  351|  10.8k|		src->pub.resync_to_restart = jpeg_resync_to_restart;
  352|       |
  353|  10.8k|		if (vips_source_is_mappable(jpeg->source)) {
  ------------------
  |  Branch (353:7): [True: 10.8k, False: 0]
  ------------------
  354|  10.8k|			size_t src_len;
  355|  10.8k|			const unsigned char *src_data = vips_source_map(
  356|  10.8k|				jpeg->source, &src_len);
  357|       |
  358|  10.8k|			src->pub.fill_input_buffer =
  359|  10.8k|				source_fill_input_buffer_mappable;
  360|  10.8k|			src->pub.skip_input_data = skip_input_data_mappable;
  361|  10.8k|			src->pub.bytes_in_buffer = src_len;
  362|  10.8k|			src->pub.next_input_byte = src_data;
  363|  10.8k|		}
  364|      0|		else {
  365|      0|			src->pub.fill_input_buffer = source_fill_input_buffer;
  366|      0|			src->pub.skip_input_data = skip_input_data;
  367|       |
  368|       |			/* Forces fill_input_buffer on first read.
  369|       |			 */
  370|      0|			src->pub.bytes_in_buffer = 0;
  371|       |
  372|       |			/* Until buffer loaded.
  373|       |			 */
  374|      0|			src->pub.next_input_byte = NULL;
  375|      0|		}
  376|  10.8k|	}
  377|       |
  378|  10.8k|	return 0;
  379|  10.8k|}
jpeg2vips.c:source_init_source:
  228|  10.8k|{
  229|       |	/* No work necessary here.
  230|       |	 */
  231|  10.8k|}
jpeg2vips.c:source_fill_input_buffer_mappable:
  268|  19.5k|{
  269|  19.5k|	Source *src = (Source *) cinfo->src;
  270|       |
  271|  19.5k|	if (src->jpeg->fail_on >= VIPS_FAIL_ON_TRUNCATED) {
  ------------------
  |  Branch (271:6): [True: 0, False: 19.5k]
  ------------------
  272|       |		/* Knock the output out of cache.
  273|       |		 */
  274|      0|		vips_foreign_load_invalidate(src->jpeg->out);
  275|      0|		ERREXIT(cinfo, JERR_VIPS_IMAGE_EOF);
  ------------------
  |  |  240|      0|  ((cinfo)->err->msg_code = (code), \
  |  |  241|      0|   (*(cinfo)->err->error_exit) ((j_common_ptr)(cinfo)))
  ------------------
  276|      0|	}
  277|  19.5k|	else
  278|  19.5k|		WARNMS(cinfo, JWRN_VIPS_IMAGE_EOF);
  ------------------
  |  |  283|  19.5k|  ((cinfo)->err->msg_code = (code), \
  |  |  284|  19.5k|   (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), -1))
  ------------------
  279|       |
  280|       |	/* Insert a fake EOI marker.
  281|       |	 */
  282|  19.5k|	src->buf[0] = (JOCTET) 0xFF;
  283|  19.5k|	src->buf[1] = (JOCTET) JPEG_EOI;
  ------------------
  |  | 1167|  19.5k|#define JPEG_EOI        0xD9    /* EOI marker code */
  ------------------
  284|       |
  285|  19.5k|	src->pub.next_input_byte = src->buf;
  286|  19.5k|	src->pub.bytes_in_buffer = 2;
  287|       |
  288|  19.5k|	return TRUE;
  ------------------
  |  |  209|  19.5k|#define TRUE    1
  ------------------
  289|  19.5k|}
jpeg2vips.c:skip_input_data_mappable:
  313|  1.47k|{
  314|  1.47k|	Source *src = (Source *) cinfo->src;
  315|       |
  316|  1.47k|	if (num_bytes > (long) src->pub.bytes_in_buffer) {
  ------------------
  |  Branch (316:6): [True: 202, False: 1.27k]
  ------------------
  317|    202|		src->pub.next_input_byte += src->pub.bytes_in_buffer;
  318|    202|		src->pub.bytes_in_buffer = 0;
  319|    202|	}
  320|  1.27k|	else {
  321|  1.27k|		src->pub.next_input_byte += (size_t) num_bytes;
  322|  1.27k|		src->pub.bytes_in_buffer -= (size_t) num_bytes;
  323|  1.27k|	}
  324|  1.47k|}
jpeg2vips.c:vips__jpeg_read:
 1002|  10.8k|{
 1003|       |	/* Need to read in APP1 (EXIF metadata), APP2 (ICC profile), APP13
 1004|       |	 * (photoshop IPTC) and APP14 (Adobe flags).
 1005|       |	 */
 1006|  10.8k|	jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + 1, 0xffff);
  ------------------
  |  | 1168|  10.8k|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
 1007|  10.8k|	jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + 2, 0xffff);
  ------------------
  |  | 1168|  10.8k|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
 1008|  10.8k|	jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + 13, 0xffff);
  ------------------
  |  | 1168|  10.8k|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
 1009|  10.8k|	jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + 14, 0xffff);
  ------------------
  |  | 1168|  10.8k|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
 1010|       |
 1011|       |#ifdef DEBUG
 1012|       |	{
 1013|       |		int i;
 1014|       |
 1015|       |		/* Handy for debugging ... spot any extra  markers.
 1016|       |		 */
 1017|       |		for (i = 0; i < 16; i++)
 1018|       |			jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + i, 0xffff);
 1019|       |	}
 1020|       |#endif /*DEBUG*/
 1021|       |
 1022|       |	/* Convert!
 1023|       |	 */
 1024|  10.8k|	if (header_only) {
  ------------------
  |  Branch (1024:6): [True: 6.24k, False: 4.64k]
  ------------------
 1025|  6.24k|		if (read_jpeg_header(jpeg, out))
  ------------------
  |  Branch (1025:7): [True: 0, False: 6.24k]
  ------------------
 1026|      0|			return -1;
 1027|       |
 1028|       |		/* Patch in the correct size.
 1029|       |		 */
 1030|  6.24k|		out->Xsize = jpeg->output_width;
 1031|  6.24k|		out->Ysize = jpeg->output_height;
 1032|       |
 1033|       |		/* Swap width and height if we're going to rotate this image.
 1034|       |		 */
 1035|  6.24k|		if (jpeg->autorotate) {
  ------------------
  |  Branch (1035:7): [True: 0, False: 6.24k]
  ------------------
 1036|      0|			if (vips_image_get_orientation_swap(out))
  ------------------
  |  Branch (1036:8): [True: 0, False: 0]
  ------------------
 1037|      0|				VIPS_SWAP(int, out->Xsize, out->Ysize);
  ------------------
  |  |  114|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  115|      0|	{ \
  |  |  116|      0|		TYPE t = (A); \
  |  |  117|      0|		(A) = (B); \
  |  |  118|      0|		(B) = t; \
  |  |  119|      0|	} \
  |  |  120|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1038|       |
 1039|      0|			vips_autorot_remove_angle(out);
 1040|      0|		}
 1041|  6.24k|	}
 1042|  4.64k|	else {
 1043|  4.64k|		if (read_jpeg_image(jpeg, out))
  ------------------
  |  Branch (1043:7): [True: 3.02k, False: 1.61k]
  ------------------
 1044|  3.02k|			return -1;
 1045|  4.64k|	}
 1046|       |
 1047|  7.86k|	return 0;
 1048|  10.8k|}
jpeg2vips.c:read_jpeg_header:
  571|  10.8k|{
  572|  10.8k|	struct jpeg_decompress_struct *cinfo = &jpeg->cinfo;
  573|       |
  574|  10.8k|	jpeg_saved_marker_ptr p;
  575|  10.8k|	VipsInterpretation interpretation;
  576|  10.8k|	double xres, yres;
  577|       |
  578|       |	/* Capture app2 sections here for assembly.
  579|       |	 */
  580|  10.8k|	void *app2_data[MAX_APP2_SECTIONS] = { 0 };
  581|  10.8k|	size_t app2_data_length[MAX_APP2_SECTIONS] = { 0 };
  582|  10.8k|	size_t data_length;
  583|  10.8k|	int i;
  584|       |
  585|       |	/* Read JPEG header. libjpeg will set out_color_space sanely for us
  586|       |	 * for YUV YCCK etc.
  587|       |	 */
  588|  10.8k|	jpeg_read_header(cinfo, TRUE);
  ------------------
  |  |  209|  10.8k|#define TRUE    1
  ------------------
  589|  10.8k|	cinfo->scale_denom = jpeg->shrink;
  590|  10.8k|	cinfo->scale_num = 1;
  591|  10.8k|	jpeg_calc_output_dimensions(cinfo);
  592|       |
  593|  10.8k|	jpeg->invert_pels = FALSE;
  ------------------
  |  |  206|  10.8k|#define FALSE   0               /* values of boolean */
  ------------------
  594|  10.8k|	switch (cinfo->out_color_space) {
  595|  3.50k|	case JCS_GRAYSCALE:
  ------------------
  |  Branch (595:2): [True: 3.50k, False: 7.39k]
  ------------------
  596|  3.50k|		interpretation = VIPS_INTERPRETATION_B_W;
  597|  3.50k|		break;
  598|       |
  599|  1.42k|	case JCS_CMYK:
  ------------------
  |  Branch (599:2): [True: 1.42k, False: 9.46k]
  ------------------
  600|  1.42k|		interpretation = VIPS_INTERPRETATION_CMYK;
  601|       |
  602|       |		/* CMYKs are almost always returned inverted, but see below.
  603|       |		 */
  604|  1.42k|		jpeg->invert_pels = TRUE;
  ------------------
  |  |  209|  1.42k|#define TRUE    1
  ------------------
  605|  1.42k|		break;
  606|       |
  607|  4.74k|	case JCS_RGB:
  ------------------
  |  Branch (607:2): [True: 4.74k, False: 6.14k]
  ------------------
  608|  4.94k|	default:
  ------------------
  |  Branch (608:2): [True: 198, False: 10.6k]
  ------------------
  609|  4.94k|		interpretation = VIPS_INTERPRETATION_sRGB;
  610|  4.94k|		break;
  611|  10.8k|	}
  612|       |
  613|       |#ifdef DEBUG
  614|       |	if (cinfo->saw_JFIF_marker)
  615|       |		printf("read_jpeg_header: jfif _density %d, %d, unit %d\n",
  616|       |			cinfo->X_density, cinfo->Y_density,
  617|       |			cinfo->density_unit);
  618|       |#endif /*DEBUG*/
  619|       |
  620|       |	/* Get the jfif resolution. exif may overwrite this later. Default to
  621|       |	 * 72dpi (as EXIF does).
  622|       |	 */
  623|  9.87k|	xres = 72.0 / 25.4;
  624|  9.87k|	yres = 72.0 / 25.4;
  625|  9.87k|	if (cinfo->saw_JFIF_marker &&
  ------------------
  |  Branch (625:6): [True: 399, False: 9.47k]
  ------------------
  626|  9.87k|		cinfo->X_density != 1U &&
  ------------------
  |  Branch (626:3): [True: 396, False: 3]
  ------------------
  627|  9.87k|		cinfo->Y_density != 1U) {
  ------------------
  |  Branch (627:3): [True: 389, False: 7]
  ------------------
  628|    389|		switch (cinfo->density_unit) {
  629|     11|		case 0:
  ------------------
  |  Branch (629:3): [True: 11, False: 378]
  ------------------
  630|       |			/* X_density / Y_density gives the pixel aspect ratio.
  631|       |			 * Leave xres, but adjust yres.
  632|       |			 */
  633|     11|			if (cinfo->Y_density > 0)
  ------------------
  |  Branch (633:8): [True: 8, False: 3]
  ------------------
  634|      8|				yres = xres * cinfo->X_density /
  635|      8|					cinfo->Y_density;
  636|     11|			break;
  637|       |
  638|     10|		case 1:
  ------------------
  |  Branch (638:3): [True: 10, False: 379]
  ------------------
  639|       |			/* Pixels per inch.
  640|       |			 */
  641|     10|			xres = cinfo->X_density / 25.4;
  642|     10|			yres = cinfo->Y_density / 25.4;
  643|     10|			vips_image_set_string(out,
  644|     10|				VIPS_META_RESOLUTION_UNIT, "in");
  ------------------
  |  |   93|     10|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
  645|     10|			break;
  646|       |
  647|    298|		case 2:
  ------------------
  |  Branch (647:3): [True: 298, False: 91]
  ------------------
  648|       |			/* Pixels per cm.
  649|       |			 */
  650|    298|			xres = cinfo->X_density / 10.0;
  651|    298|			yres = cinfo->Y_density / 10.0;
  652|    298|			vips_image_set_string(out,
  653|    298|				VIPS_META_RESOLUTION_UNIT, "cm");
  ------------------
  |  |   93|    298|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
  654|    298|			break;
  655|       |
  656|     70|		default:
  ------------------
  |  Branch (656:3): [True: 70, False: 319]
  ------------------
  657|     70|			g_warning("%s", _("unknown JFIF resolution unit"));
  ------------------
  |  |  338|     70|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|     70|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|     70|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|     70|                               __VA_ARGS__)
  ------------------
  658|     70|			break;
  659|    389|		}
  660|       |
  661|       |#ifdef DEBUG
  662|       |		printf("read_jpeg_header: seen jfif resolution %g, %g p/mm\n",
  663|       |			xres, yres);
  664|       |#endif /*DEBUG*/
  665|    389|	}
  666|       |
  667|       |	/* Set VIPS header.
  668|       |	 */
  669|  9.87k|	vips_image_init_fields(out,
  670|  9.87k|		cinfo->output_width, cinfo->output_height,
  671|  9.87k|		cinfo->output_components,
  672|  9.87k|		VIPS_FORMAT_UCHAR, VIPS_CODING_NONE,
  673|  9.87k|		interpretation,
  674|  9.87k|		xres, yres);
  675|       |
  676|  9.87k|	VIPS_SETSTR(out->filename,
  ------------------
  |  |   53|  9.87k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  9.87k|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|  9.87k|	{ \
  |  |   55|  9.87k|		const char *sst = (V); \
  |  |   56|  9.87k|		\
  |  |   57|  9.87k|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 9.87k, False: 0]
  |  |  ------------------
  |  |   58|  9.87k|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 0, False: 9.87k]
  |  |  |  Branch (58:16): [True: 9.87k, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|  9.87k|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|  9.87k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  9.87k|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|  9.87k|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  9.87k|	{ \
  |  |  |  |  |  |   43|  9.87k|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 9.87k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  9.87k|			(void) F((S)); \
  |  |  |  |  |  |   45|  9.87k|			(S) = 0; \
  |  |  |  |  |  |   46|  9.87k|		} \
  |  |  |  |  |  |   47|  9.87k|	} \
  |  |  |  |  |  |   48|  9.87k|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|  9.87k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  9.87k|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 0, False: 9.87k]
  |  |  ------------------
  |  |   61|  9.87k|					(S) = g_strdup(sst); \
  |  |   62|  9.87k|			} \
  |  |   63|  9.87k|		} \
  |  |   64|  9.87k|	} \
  |  |   65|  9.87k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  9.87k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  677|  9.87k|		vips_connection_filename(VIPS_CONNECTION(jpeg->source)));
  678|       |
  679|  9.87k|	if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_FATSTRIP, NULL))
  ------------------
  |  Branch (679:6): [True: 0, False: 9.87k]
  ------------------
  680|      0|		return -1;
  681|       |
  682|       |	/* cinfo->output_width and cinfo->output_height round up with
  683|       |	 * shrink-on-load. For example, if the image is 1801 pixels across and
  684|       |	 * we shrink by 4, the output will be 450.25 pixels across,
  685|       |	 * cinfo->output_width with be 451, and libjpeg will write a black
  686|       |	 * column of pixels down the right.
  687|       |	 *
  688|       |	 * We must strictly round down, since we don't want fractional pixels
  689|       |	 * along the bottom and right.
  690|       |	 */
  691|  9.87k|	jpeg->output_width = cinfo->image_width / jpeg->shrink;
  692|  9.87k|	jpeg->output_height = cinfo->image_height / jpeg->shrink;
  693|       |
  694|       |	/* Interlaced jpegs need lots of memory to read, so our caller needs
  695|       |	 * to know.
  696|       |	 */
  697|  9.87k|	(void) vips_image_set_int(out, "jpeg-multiscan",
  698|  9.87k|		jpeg_has_multiple_scans(cinfo));
  699|       |
  700|       |	/* 8.7 adds this for PNG as well, so we have a new format-neutral name.
  701|       |	 */
  702|  9.87k|	if (jpeg_has_multiple_scans(cinfo))
  ------------------
  |  Branch (702:6): [True: 8.70k, False: 1.17k]
  ------------------
  703|  8.70k|		vips_image_set_int(out, "interlaced", 1);
  704|       |
  705|  9.87k|	(void) vips_image_set_string(out, "jpeg-chroma-subsample",
  706|  9.87k|		find_chroma_subsample(cinfo));
  707|       |
  708|       |	/* Look for EXIF and ICC profile.
  709|       |	 */
  710|  15.4k|	for (p = cinfo->marker_list; p; p = p->next) {
  ------------------
  |  Branch (710:31): [True: 5.54k, False: 9.87k]
  ------------------
  711|       |#ifdef DEBUG
  712|       |		{
  713|       |			printf("read_jpeg_header: seen %u bytes of APP%d\n",
  714|       |				p->data_length,
  715|       |				p->marker - JPEG_APP0);
  716|       |
  717|       |			for (i = 0; i < 10; i++)
  718|       |				printf("\t%d) '%c' (%d)\n",
  719|       |					i, p->data[i], p->data[i]);
  720|       |		}
  721|       |#endif /*DEBUG*/
  722|       |
  723|  5.54k|		switch (p->marker) {
  724|  2.99k|		case JPEG_APP0 + 1:
  ------------------
  |  | 1168|  2.99k|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
  |  Branch (724:3): [True: 2.99k, False: 2.55k]
  ------------------
  725|       |			/* Possible EXIF or XMP data.
  726|       |			 */
  727|  2.99k|			if (p->data_length > 4 &&
  ------------------
  |  Branch (727:8): [True: 2.84k, False: 147]
  ------------------
  728|  2.99k|				vips_isprefix("Exif", (char *) p->data) &&
  ------------------
  |  Branch (728:5): [True: 2.28k, False: 567]
  ------------------
  729|  2.99k|				attach_blob(out, VIPS_META_EXIF_NAME,
  ------------------
  |  |   46|  2.28k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (729:5): [True: 0, False: 2.28k]
  ------------------
  730|  2.28k|					p->data, p->data_length))
  731|      0|				return -1;
  732|       |
  733|  2.99k|			if (p->data_length > 4 &&
  ------------------
  |  Branch (733:8): [True: 2.84k, False: 147]
  ------------------
  734|  2.99k|				vips_isprefix("http", (char *) p->data) &&
  ------------------
  |  Branch (734:5): [True: 480, False: 2.36k]
  ------------------
  735|  2.99k|				attach_xmp_blob(out,
  ------------------
  |  Branch (735:5): [True: 0, False: 480]
  ------------------
  736|    480|					p->data, p->data_length))
  737|      0|				return -1;
  738|       |
  739|  2.99k|			break;
  740|       |
  741|  2.99k|		case JPEG_APP0 + 2:
  ------------------
  |  | 1168|    632|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
  |  Branch (741:3): [True: 632, False: 4.91k]
  ------------------
  742|       |			/* Possible ICC profile.
  743|       |			 */
  744|    632|			if (p->data_length > 14 &&
  ------------------
  |  Branch (744:8): [True: 566, False: 66]
  ------------------
  745|    632|				vips_isprefix("ICC_PROFILE",
  ------------------
  |  Branch (745:5): [True: 455, False: 111]
  ------------------
  746|    566|					(char *) p->data)) {
  747|       |				/* cur_marker numbers from 1, according to
  748|       |				 * spec.
  749|       |				 */
  750|    455|				int cur_marker = p->data[12] - 1;
  751|       |
  752|    455|				if (cur_marker >= 0 &&
  ------------------
  |  Branch (752:9): [True: 268, False: 187]
  ------------------
  753|    455|					cur_marker < MAX_APP2_SECTIONS) {
  ------------------
  |  |  564|    268|#define MAX_APP2_SECTIONS (100)
  ------------------
  |  Branch (753:6): [True: 175, False: 93]
  ------------------
  754|    175|					app2_data[cur_marker] = p->data + 14;
  755|    175|					app2_data_length[cur_marker] =
  756|    175|						p->data_length - 14;
  757|    175|				}
  758|    455|			}
  759|    632|			break;
  760|       |
  761|    772|		case JPEG_APP0 + 13:
  ------------------
  |  | 1168|    772|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
  |  Branch (761:3): [True: 772, False: 4.77k]
  ------------------
  762|       |			/* Possible IPTC data block.
  763|       |			 */
  764|    772|			if (p->data_length > 5 &&
  ------------------
  |  Branch (764:8): [True: 702, False: 70]
  ------------------
  765|    772|				vips_isprefix("Photo", (char *) p->data)) {
  ------------------
  |  Branch (765:5): [True: 249, False: 453]
  ------------------
  766|    249|				if (attach_blob(out, VIPS_META_IPTC_NAME,
  ------------------
  |  |   60|    249|#define VIPS_META_IPTC_NAME "iptc-data"
  ------------------
  |  Branch (766:9): [True: 0, False: 249]
  ------------------
  767|    249|						p->data, p->data_length))
  768|      0|					return -1;
  769|       |
  770|       |				/* Older versions of libvips used this misspelt
  771|       |				 * name :-( attach under this name too for
  772|       |				 * compatibility.
  773|       |				 */
  774|    249|				if (attach_blob(out, "ipct-data",
  ------------------
  |  Branch (774:9): [True: 0, False: 249]
  ------------------
  775|    249|						p->data, p->data_length))
  776|      0|					return -1;
  777|    249|			}
  778|    772|			break;
  779|       |
  780|  1.14k|		case JPEG_APP0 + 14:
  ------------------
  |  | 1168|  1.14k|#define JPEG_APP0       0xE0    /* APP0 marker code */
  ------------------
  |  Branch (780:3): [True: 1.14k, False: 4.40k]
  ------------------
  781|       |			/* Adobe block. There's a lot of confusion about
  782|       |			 * whether or not CMYK jpg images are inverted. For
  783|       |			 * the images we have, it seems they should always
  784|       |			 * invert.
  785|       |			 *
  786|       |			 * See: https://sno.phy.queensu.ca/~phil/exiftool/\
  787|       |			 * 	TagNames/JPEG.html#Adobe
  788|       |			 *
  789|       |			 * data[11] == 0 - unknown
  790|       |			 * data[11] == 1 - YCbCr
  791|       |			 * data[11] == 2 - YCCK
  792|       |			 *
  793|       |			 * Leave this code here in case we come up with a
  794|       |			 * better rule.
  795|       |			 */
  796|  1.14k|			if (p->data_length >= 12 &&
  ------------------
  |  Branch (796:8): [True: 1.02k, False: 120]
  ------------------
  797|  1.14k|				vips_isprefix("Adobe", (char *) p->data)) {
  ------------------
  |  Branch (797:5): [True: 235, False: 791]
  ------------------
  798|    235|				if (p->data[11] == 0) {
  ------------------
  |  Branch (798:9): [True: 21, False: 214]
  ------------------
  799|       |#ifdef DEBUG
  800|       |					printf("complete Adobe block, not YCCK image\n");
  801|       |#endif				/*DEBUG*/
  802|       |					// jpeg->invert_pels = FALSE;
  803|     21|				}
  804|    235|			}
  805|  1.14k|			break;
  806|       |
  807|      0|		default:
  ------------------
  |  Branch (807:3): [True: 0, False: 5.54k]
  ------------------
  808|       |#ifdef DEBUG
  809|       |			printf("read_jpeg_header: "
  810|       |				   "ignoring %u byte APP%d block\n",
  811|       |				p->data_length, p->marker - JPEG_APP0);
  812|       |#endif /*DEBUG*/
  813|      0|			break;
  814|  5.54k|		}
  815|  5.54k|	}
  816|       |
  817|       |	/* Assemble ICC sections.
  818|       |	 */
  819|  9.87k|	data_length = 0;
  820|  9.99k|	for (i = 0; i < MAX_APP2_SECTIONS && app2_data[i]; i++)
  ------------------
  |  |  564|  19.9k|#define MAX_APP2_SECTIONS (100)
  ------------------
  |  Branch (820:14): [True: 9.99k, False: 0]
  |  Branch (820:39): [True: 125, False: 9.87k]
  ------------------
  821|    125|		data_length += app2_data_length[i];
  822|  9.87k|	if (data_length) {
  ------------------
  |  Branch (822:6): [True: 125, False: 9.74k]
  ------------------
  823|    125|		unsigned char *data;
  824|    125|		int p;
  825|       |
  826|       |#ifdef DEBUG
  827|       |		printf("read_jpeg_header: assembled %zd byte ICC profile\n",
  828|       |			data_length);
  829|       |#endif /*DEBUG*/
  830|       |
  831|    125|		if (!(data = vips_malloc(NULL, data_length)))
  ------------------
  |  Branch (831:7): [True: 0, False: 125]
  ------------------
  832|      0|			return -1;
  833|       |
  834|    125|		p = 0;
  835|    250|		for (i = 0; i < MAX_APP2_SECTIONS && app2_data[i]; i++) {
  ------------------
  |  |  564|    500|#define MAX_APP2_SECTIONS (100)
  ------------------
  |  Branch (835:15): [True: 250, False: 0]
  |  Branch (835:40): [True: 125, False: 125]
  ------------------
  836|    125|			memcpy(data + p, app2_data[i], app2_data_length[i]);
  837|    125|			p += app2_data_length[i];
  838|    125|		}
  839|       |
  840|    125|		vips_image_set_blob(out, VIPS_META_ICC_NAME,
  ------------------
  |  |   78|    125|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  841|    125|			(VipsCallbackFn) vips_area_free_cb, data, data_length);
  842|    125|	}
  843|       |
  844|  9.87k|	return 0;
  845|  9.87k|}
jpeg2vips.c:find_chroma_subsample:
  495|  9.87k|{
  496|       |	/* libjpeg only uses 4:4:4 and 4:2:0, confusingly.
  497|       |	 *
  498|       |	 * http://poynton.ca/PDFs/Chroma_subsampling_notation.pdf
  499|       |	 */
  500|  9.87k|	gboolean has_subsample = cinfo->max_h_samp_factor > 1 ||
  ------------------
  |  Branch (500:27): [True: 6.24k, False: 3.62k]
  ------------------
  501|  9.87k|		cinfo->max_v_samp_factor > 1;
  ------------------
  |  Branch (501:3): [True: 2.16k, False: 1.45k]
  ------------------
  502|  9.87k|	gboolean is_cmyk = cinfo->num_components > 3;
  503|       |
  504|  9.87k|	return is_cmyk
  ------------------
  |  Branch (504:9): [True: 1.42k, False: 8.44k]
  ------------------
  505|  9.87k|		? (has_subsample ? "4:2:0:4" : "4:4:4:4")
  ------------------
  |  Branch (505:6): [True: 1.08k, False: 344]
  ------------------
  506|  9.87k|		: (has_subsample ? "4:2:0" : "4:4:4");
  ------------------
  |  Branch (506:6): [True: 7.33k, False: 1.11k]
  ------------------
  507|  9.87k|}
jpeg2vips.c:attach_blob:
  511|  3.10k|{
  512|       |	/* Only use the first one.
  513|       |	 */
  514|  3.10k|	if (vips_image_get_typeof(im, field)) {
  ------------------
  |  Branch (514:6): [True: 720, False: 2.38k]
  ------------------
  515|       |#ifdef DEBUG
  516|       |		printf("attach_blob: second %s block, ignoring\n", field);
  517|       |#endif /*DEBUG*/
  518|       |
  519|    720|		return 0;
  520|    720|	}
  521|       |
  522|       |#ifdef DEBUG
  523|       |	printf("attach_blob: attaching %zd bytes of %s\n",
  524|       |		data_length, field);
  525|       |#endif /*DEBUG*/
  526|       |
  527|  2.38k|	vips_image_set_blob_copy(im, field, data, data_length);
  528|       |
  529|  2.38k|	return 0;
  530|  3.10k|}
jpeg2vips.c:attach_xmp_blob:
  538|    480|{
  539|    480|	char *p = (char *) data;
  540|    480|	int i;
  541|       |
  542|    480|	if (data_length < 4 ||
  ------------------
  |  Branch (542:6): [True: 0, False: 480]
  ------------------
  543|    480|		!vips_isprefix("http", p))
  ------------------
  |  Branch (543:3): [True: 0, False: 480]
  ------------------
  544|      0|		return 0;
  545|       |
  546|       |	/* Search for a null char within the first few characters. 80
  547|       |	 * should be plenty for a basic URL.
  548|       |	 *
  549|       |	 * -2 for the extra null.
  550|       |	 */
  551|  3.92k|	for (i = 0; i < VIPS_MIN(80, data_length - 2); i++)
  ------------------
  |  |   55|  3.92k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 3.92k]
  |  |  ------------------
  ------------------
  |  Branch (551:14): [True: 3.65k, False: 270]
  ------------------
  552|  3.65k|		if (!p[i])
  ------------------
  |  Branch (552:7): [True: 210, False: 3.44k]
  ------------------
  553|    210|			break;
  554|    480|	if (p[i])
  ------------------
  |  Branch (554:6): [True: 152, False: 328]
  ------------------
  555|    152|		return 0;
  556|       |
  557|    328|	return attach_blob(im, VIPS_META_XMP_NAME,
  ------------------
  |  |   53|    328|#define VIPS_META_XMP_NAME "xmp-data"
  ------------------
  558|    328|		p + i + 1, data_length - i - 1);
  559|    480|}
jpeg2vips.c:read_jpeg_image:
  941|  4.64k|{
  942|  4.64k|	struct jpeg_decompress_struct *cinfo = &jpeg->cinfo;
  943|  4.64k|	VipsImage **t = (VipsImage **)
  944|  4.64k|		vips_object_local_array(VIPS_OBJECT(out), 5);
  ------------------
  |  |  433|  4.64k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  4.64k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  4.64k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  945|       |
  946|  4.64k|	VipsImage *im;
  947|       |
  948|       |	/* Here for longjmp() from vips__new_error_exit() during
  949|       |	 * jpeg_read_header() or jpeg_start_decompress().
  950|       |	 */
  951|  4.64k|	if (setjmp(jpeg->eman.jmp))
  952|  2.07k|		return -1;
  953|       |
  954|  2.57k|	t[0] = vips_image_new();
  955|  2.57k|	if (read_jpeg_header(jpeg, t[0]))
  ------------------
  |  Branch (955:6): [True: 0, False: 2.57k]
  ------------------
  956|      0|		return -1;
  957|       |
  958|       |	/* Switch to pixel decode.
  959|       |	 */
  960|  2.57k|	if (vips_source_decode(jpeg->source))
  ------------------
  |  Branch (960:6): [True: 0, False: 2.57k]
  ------------------
  961|      0|		return -1;
  962|       |
  963|  2.57k|	jpeg_start_decompress(cinfo);
  964|       |
  965|       |#ifdef DEBUG
  966|       |	printf("read_jpeg_image: starting decompress\n");
  967|       |#endif /*DEBUG*/
  968|       |
  969|       |	/* We must crop after the seq, or our generate may not be asked for
  970|       |	 * full lines of pixels and will attempt to write beyond the buffer.
  971|       |	 */
  972|  2.57k|	if (vips_image_generate(t[0],
  ------------------
  |  Branch (972:6): [True: 0, False: 2.57k]
  ------------------
  973|  2.57k|			NULL, read_jpeg_generate, NULL,
  974|  2.57k|			jpeg, NULL) ||
  975|  2.57k|		vips_sequential(t[0], &t[1],
  ------------------
  |  Branch (975:3): [True: 0, False: 2.57k]
  ------------------
  976|  2.57k|			"tile_height", 8,
  977|  2.57k|			NULL) ||
  978|  2.57k|		vips_extract_area(t[1], &t[2],
  ------------------
  |  Branch (978:3): [True: 0, False: 2.57k]
  ------------------
  979|  2.57k|			0, 0, jpeg->output_width, jpeg->output_height, NULL))
  980|      0|		return -1;
  981|  2.57k|	im = t[2];
  982|       |
  983|  2.57k|	if (jpeg->autorotate &&
  ------------------
  |  Branch (983:6): [True: 0, False: 2.57k]
  ------------------
  984|  2.57k|		vips_image_get_orientation(im) != 1) {
  ------------------
  |  Branch (984:3): [True: 0, False: 0]
  ------------------
  985|       |		/* We have to copy to memory before calling autorot, since it
  986|       |		 * needs random access.
  987|       |		 */
  988|      0|		if (!(t[3] = vips_image_copy_memory(im)) ||
  ------------------
  |  Branch (988:7): [True: 0, False: 0]
  ------------------
  989|      0|			vips_autorot(t[3], &t[4], NULL))
  ------------------
  |  Branch (989:4): [True: 0, False: 0]
  ------------------
  990|      0|			return -1;
  991|      0|		im = t[4];
  992|      0|	}
  993|       |
  994|  2.57k|	if (vips_image_write(im, out))
  ------------------
  |  Branch (994:6): [True: 954, False: 1.61k]
  ------------------
  995|    954|		return -1;
  996|       |
  997|  1.61k|	return 0;
  998|  2.57k|}
jpeg2vips.c:read_jpeg_generate:
  850|  14.6k|{
  851|  14.6k|	VipsRect *r = &out_region->valid;
  852|  14.6k|	ReadJpeg *jpeg = (ReadJpeg *) a;
  853|  14.6k|	struct jpeg_decompress_struct *cinfo = &jpeg->cinfo;
  854|  14.6k|	int sz = cinfo->output_width * cinfo->output_components;
  855|       |
  856|  14.6k|	int y;
  857|       |
  858|       |#ifdef DEBUG_VERBOSE
  859|       |	printf("read_jpeg_generate: %p line %d, %d rows\n",
  860|       |		g_thread_self(), r->top, r->height);
  861|       |#endif /*DEBUG_VERBOSE*/
  862|       |
  863|  14.6k|	VIPS_GATE_START("read_jpeg_generate: work");
  ------------------
  |  |   41|  14.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  14.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  14.6k|	{ \
  |  |   43|  14.6k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 14.6k]
  |  |  ------------------
  |  |   44|  14.6k|			vips__thread_gate_start(NAME); \
  |  |   45|  14.6k|	} \
  |  |   46|  14.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  864|       |
  865|       |	/* We're inside a tilecache where tiles are the full image width, so
  866|       |	 * this should always be true.
  867|       |	 */
  868|  14.6k|	g_assert(r->left == 0);
  ------------------
  |  |  166|  14.6k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  14.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  869|  14.6k|	g_assert(r->width == out_region->im->Xsize);
  ------------------
  |  |  166|  14.6k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  14.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  870|  14.6k|	g_assert(VIPS_RECT_BOTTOM(r) <= out_region->im->Ysize);
  ------------------
  |  |  166|  14.6k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  14.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  871|       |
  872|       |	/* Tiles should always be on a 8-pixel boundary.
  873|       |	 */
  874|  14.6k|	g_assert(r->top % 8 == 0);
  ------------------
  |  |  166|  14.6k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  14.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  875|       |
  876|       |	/* Tiles should always be a strip in height, unless it's the final
  877|       |	 * strip.
  878|       |	 */
  879|  14.6k|	g_assert(r->height == VIPS_MIN(8, out_region->im->Ysize - r->top));
  ------------------
  |  |  166|  14.6k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  14.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  880|       |
  881|       |	/* And check that the y position is correct. It should be, since we are
  882|       |	 * inside a vips_sequential().
  883|       |	 */
  884|  14.6k|	if (r->top != cinfo->output_scanline) {
  ------------------
  |  Branch (884:6): [True: 0, False: 14.6k]
  ------------------
  885|      0|		VIPS_GATE_STOP("read_jpeg_generate: work");
  ------------------
  |  |   49|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|      0|	{ \
  |  |   51|      0|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   52|      0|			vips__thread_gate_stop(NAME); \
  |  |   53|      0|	} \
  |  |   54|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  886|      0|		vips_error("VipsJpeg", _("out of order read at line %d"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  887|      0|			cinfo->output_scanline);
  888|       |
  889|      0|		return -1;
  890|      0|	}
  891|       |
  892|       |	/* Here for longjmp() from vips__new_error_exit() during
  893|       |	 * jpeg_read_scanlines().
  894|       |	 */
  895|  14.6k|	if (setjmp(jpeg->eman.jmp)) {
  896|    954|		VIPS_GATE_STOP("read_jpeg_generate: work");
  ------------------
  |  |   49|    954|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    954|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|    954|	{ \
  |  |   51|    954|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 954]
  |  |  ------------------
  |  |   52|    954|			vips__thread_gate_stop(NAME); \
  |  |   53|    954|	} \
  |  |   54|    954|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    954|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  897|       |
  898|       |#ifdef DEBUG
  899|       |		printf("read_jpeg_generate: longjmp() exit\n");
  900|       |#endif /*DEBUG*/
  901|       |
  902|    954|		return -1;
  903|    954|	}
  904|       |
  905|  13.7k|	if (jpeg->eman.pub.num_warnings > 0 &&
  ------------------
  |  Branch (905:6): [True: 14.5k, False: 18.4E]
  ------------------
  906|  14.5k|		jpeg->fail_on >= VIPS_FAIL_ON_WARNING) {
  ------------------
  |  Branch (906:3): [True: 0, False: 14.5k]
  ------------------
  907|      0|		VIPS_GATE_STOP("read_jpeg_generate: work");
  ------------------
  |  |   49|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|      0|	{ \
  |  |   51|      0|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   52|      0|			vips__thread_gate_stop(NAME); \
  |  |   53|      0|	} \
  |  |   54|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  908|       |
  909|       |		/* Only fail once.
  910|       |		 */
  911|      0|		jpeg->eman.pub.num_warnings = 0;
  912|       |
  913|      0|		return -1;
  914|      0|	}
  915|       |
  916|   118k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (916:14): [True: 104k, False: 13.7k]
  ------------------
  917|   104k|		JSAMPROW row_pointer[1];
  918|       |
  919|   104k|		row_pointer[0] = (JSAMPLE *)
  920|   104k|			VIPS_REGION_ADDR(out_region, 0, r->top + y);
  ------------------
  |  |  227|   104k|	((R)->data + \
  |  |  228|   104k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   104k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   104k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   104k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   104k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   104k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  921|       |
  922|   104k|		jpeg_read_scanlines(cinfo, &row_pointer[0], 1);
  923|       |
  924|   104k|		if (jpeg->invert_pels) {
  ------------------
  |  Branch (924:7): [True: 33.2k, False: 71.3k]
  ------------------
  925|  33.2k|			int x;
  926|       |
  927|  12.6M|			for (x = 0; x < sz; x++)
  ------------------
  |  Branch (927:16): [True: 12.5M, False: 33.2k]
  ------------------
  928|  12.5M|				row_pointer[0][x] = 255 - row_pointer[0][x];
  929|  33.2k|		}
  930|   104k|	}
  931|       |
  932|  13.7k|	VIPS_GATE_STOP("read_jpeg_generate: work");
  ------------------
  |  |   49|  13.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  13.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  13.7k|	{ \
  |  |   51|  13.7k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 13.7k]
  |  |  ------------------
  |  |   52|  13.7k|			vips__thread_gate_stop(NAME); \
  |  |   53|  13.7k|	} \
  |  |   54|  13.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  933|       |
  934|  13.7k|	return 0;
  935|  13.7k|}

jpegload.c:vips_foreign_load_jpeg_class_init:
  166|      1|{
  167|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  169|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  170|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  171|       |
  172|      1|	gobject_class->dispose = vips_foreign_load_jpeg_dispose;
  173|      1|	gobject_class->set_property = vips_object_set_property;
  174|      1|	gobject_class->get_property = vips_object_get_property;
  175|       |
  176|      1|	object_class->nickname = "jpegload_base";
  177|      1|	object_class->description = _("load jpeg");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  178|      1|	object_class->build = vips_foreign_load_jpeg_build;
  179|       |
  180|       |	/* We are fast at is_a(), so high priority.
  181|       |	 */
  182|      1|	foreign_class->priority = 50;
  183|       |
  184|      1|	load_class->get_flags_filename =
  185|      1|		vips_foreign_load_jpeg_get_flags_filename;
  186|      1|	load_class->get_flags = vips_foreign_load_jpeg_get_flags;
  187|      1|	load_class->header = vips_foreign_load_jpeg_header;
  188|      1|	load_class->load = vips_foreign_load_jpeg_load;
  189|       |
  190|      1|	VIPS_ARG_INT(class, "shrink", 20,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  191|      1|		_("Shrink"),
  192|      1|		_("Shrink factor on load"),
  193|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  194|      1|		G_STRUCT_OFFSET(VipsForeignLoadJpeg, shrink),
  195|      1|		1, 8, 1);
  196|       |
  197|      1|	VIPS_ARG_BOOL(class, "autorotate", 21,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  198|      1|		_("Autorotate"),
  199|      1|		_("Rotate image using exif orientation"),
  200|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  201|      1|		G_STRUCT_OFFSET(VipsForeignLoadJpeg, autorotate),
  202|      1|		FALSE);
  203|       |
  204|       |#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
  205|       |	VIPS_ARG_BOOL(class, "unlimited", 22,
  206|       |		_("Unlimited"),
  207|       |		_("Remove all denial of service limits"),
  208|       |		VIPS_ARGUMENT_OPTIONAL_INPUT,
  209|       |		G_STRUCT_OFFSET(VipsForeignLoadJpeg, unlimited),
  210|       |		FALSE);
  211|       |#endif
  212|      1|}
jpegload.c:vips_foreign_load_jpeg_dispose:
   98|  6.24k|{
   99|  6.24k|	VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) gobject;
  100|       |
  101|  6.24k|	VIPS_UNREF(jpeg->source);
  ------------------
  |  |   57|  6.24k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  6.24k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  6.24k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  6.24k|	{ \
  |  |  |  |   43|  6.24k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 6.24k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  6.24k|			(void) F((S)); \
  |  |  |  |   45|  6.24k|			(S) = 0; \
  |  |  |  |   46|  6.24k|		} \
  |  |  |  |   47|  6.24k|	} \
  |  |  |  |   48|  6.24k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  6.24k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  102|       |
  103|  6.24k|	G_OBJECT_CLASS(vips_foreign_load_jpeg_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  6.24k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  6.24k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  6.24k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  104|  6.24k|}
jpegload.c:vips_foreign_load_jpeg_build:
  108|  6.24k|{
  109|  6.24k|	VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) object;
  110|       |
  111|  6.24k|	if (jpeg->shrink != 1 &&
  ------------------
  |  Branch (111:6): [True: 0, False: 6.24k]
  ------------------
  112|  6.24k|		jpeg->shrink != 2 &&
  ------------------
  |  Branch (112:3): [True: 0, False: 0]
  ------------------
  113|  6.24k|		jpeg->shrink != 4 &&
  ------------------
  |  Branch (113:3): [True: 0, False: 0]
  ------------------
  114|  6.24k|		jpeg->shrink != 8) {
  ------------------
  |  Branch (114:3): [True: 0, False: 0]
  ------------------
  115|      0|		vips_error("VipsFormatLoadJpeg",
  116|      0|			_("bad shrink factor %d"), jpeg->shrink);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  117|      0|		return -1;
  118|      0|	}
  119|       |
  120|  6.24k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_jpeg_parent_class)->build(object))
  ------------------
  |  |  435|  6.24k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  6.24k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  6.24k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (120:6): [True: 1.01k, False: 5.22k]
  ------------------
  121|  1.01k|		return -1;
  122|       |
  123|  5.22k|	return 0;
  124|  6.24k|}
jpegload.c:vips_foreign_load_jpeg_get_flags:
  128|  6.24k|{
  129|  6.24k|	return VIPS_FOREIGN_SEQUENTIAL;
  130|  6.24k|}
jpegload.c:vips_foreign_load_jpeg_header:
  140|  6.24k|{
  141|  6.24k|	VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) load;
  142|       |
  143|  6.24k|	if (vips__jpeg_read_source(jpeg->source,
  ------------------
  |  Branch (143:6): [True: 1.01k, False: 5.22k]
  ------------------
  144|  6.24k|			load->out, TRUE, jpeg->shrink, load->fail_on,
  ------------------
  |  |  798|  6.24k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  6.24k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  145|  6.24k|			jpeg->autorotate, jpeg->unlimited))
  146|  1.01k|		return -1;
  147|       |
  148|  5.22k|	return 0;
  149|  6.24k|}
jpegload.c:vips_foreign_load_jpeg_load:
  153|  4.64k|{
  154|  4.64k|	VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) load;
  155|       |
  156|  4.64k|	if (vips__jpeg_read_source(jpeg->source,
  ------------------
  |  Branch (156:6): [True: 3.02k, False: 1.61k]
  ------------------
  157|  4.64k|			load->real, FALSE, jpeg->shrink, load->fail_on,
  ------------------
  |  |  794|  4.64k|#define	FALSE	(0)
  ------------------
  158|  4.64k|			jpeg->autorotate, jpeg->unlimited))
  159|  3.02k|		return -1;
  160|       |
  161|  1.61k|	return 0;
  162|  4.64k|}
jpegload.c:vips_foreign_load_jpeg_init:
  216|  6.24k|{
  217|  6.24k|	jpeg->shrink = 1;
  218|  6.24k|}
jpegload.c:vips_foreign_load_jpeg_source_class_init:
  260|      1|{
  261|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  262|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  263|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  264|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  265|       |
  266|      1|	gobject_class->set_property = vips_object_set_property;
  267|      1|	gobject_class->get_property = vips_object_get_property;
  268|       |
  269|      1|	object_class->nickname = "jpegload_source";
  270|      1|	object_class->description = _("load image from jpeg source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  271|      1|	object_class->build = vips_foreign_load_jpeg_source_build;
  272|       |
  273|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  274|       |
  275|      1|	load_class->is_a_source = vips_foreign_load_jpeg_source_is_a_source;
  276|       |
  277|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  278|      1|		_("Source"),
  279|      1|		_("Source to load from"),
  280|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  281|      1|		G_STRUCT_OFFSET(VipsForeignLoadJpegSource, source),
  282|      1|		VIPS_TYPE_SOURCE);
  283|      1|}
jpegload.c:vips_foreign_load_jpeg_source_is_a_source:
  253|  31.2k|{
  254|  31.2k|	return vips__isjpeg_source(source);
  255|  31.2k|}
jpegload.c:vips_foreign_load_jpeg_file_class_init:
  336|      1|{
  337|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  338|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  339|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  340|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  341|       |
  342|      1|	gobject_class->set_property = vips_object_set_property;
  343|      1|	gobject_class->get_property = vips_object_get_property;
  344|       |
  345|      1|	object_class->nickname = "jpegload";
  346|      1|	object_class->description = _("load jpeg from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  347|      1|	object_class->build = vips_foreign_load_jpeg_file_build;
  348|       |
  349|      1|	foreign_class->suffs = vips__jpeg_suffs;
  350|       |
  351|      1|	load_class->is_a = vips_foreign_load_jpeg_file_is_a;
  352|       |
  353|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  354|      1|		_("Filename"),
  355|      1|		_("Filename to load from"),
  356|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  357|      1|		G_STRUCT_OFFSET(VipsForeignLoadJpegFile, filename),
  358|      1|		NULL);
  359|      1|}
jpegload.c:vips_foreign_load_jpeg_buffer_class_init:
  415|      1|{
  416|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  417|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  418|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  419|       |
  420|      1|	gobject_class->set_property = vips_object_set_property;
  421|      1|	gobject_class->get_property = vips_object_get_property;
  422|       |
  423|      1|	object_class->nickname = "jpegload_buffer";
  424|      1|	object_class->description = _("load jpeg from buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  425|      1|	object_class->build = vips_foreign_load_jpeg_buffer_build;
  426|       |
  427|      1|	load_class->is_a_buffer = vips_foreign_load_jpeg_buffer_is_a_buffer;
  428|       |
  429|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  430|      1|		_("Buffer"),
  431|      1|		_("Buffer to load from"),
  432|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  433|      1|		G_STRUCT_OFFSET(VipsForeignLoadJpegBuffer, blob),
  434|      1|		VIPS_TYPE_BLOB);
  435|      1|}
jpegload.c:vips_foreign_load_jpeg_buffer_build:
  380|  6.24k|{
  381|  6.24k|	VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) object;
  382|  6.24k|	VipsForeignLoadJpegBuffer *buffer =
  383|  6.24k|		(VipsForeignLoadJpegBuffer *) object;
  384|       |
  385|  6.24k|	if (buffer->blob &&
  ------------------
  |  Branch (385:6): [True: 6.24k, False: 0]
  ------------------
  386|  6.24k|		!(jpeg->source = vips_source_new_from_memory(
  ------------------
  |  Branch (386:3): [True: 0, False: 6.24k]
  ------------------
  387|  6.24k|			  VIPS_AREA(buffer->blob)->data,
  ------------------
  |  |  137|  6.24k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  388|  6.24k|			  VIPS_AREA(buffer->blob)->length)))
  ------------------
  |  |  137|  6.24k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  389|      0|		return -1;
  390|       |
  391|  6.24k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_jpeg_buffer_parent_class)
  ------------------
  |  |  435|  6.24k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  6.24k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  6.24k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (391:6): [True: 1.01k, False: 5.22k]
  ------------------
  392|  6.24k|			->build(object))
  393|  1.01k|		return -1;
  394|       |
  395|  5.22k|	return 0;
  396|  6.24k|}
jpegload.c:vips_foreign_load_jpeg_buffer_is_a_buffer:
  400|  31.2k|{
  401|  31.2k|	VipsSource *source;
  402|  31.2k|	gboolean result;
  403|       |
  404|  31.2k|	if (!(source = vips_source_new_from_memory(buf, len)))
  ------------------
  |  Branch (404:6): [True: 0, False: 31.2k]
  ------------------
  405|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  406|  31.2k|	result = vips_foreign_load_jpeg_source_is_a_source(source);
  407|  31.2k|	VIPS_UNREF(source);
  ------------------
  |  |   57|  31.2k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  31.2k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  31.2k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  31.2k|	{ \
  |  |  |  |   43|  31.2k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 31.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  31.2k|			(void) F((S)); \
  |  |  |  |   45|  31.2k|			(S) = 0; \
  |  |  |  |   46|  31.2k|		} \
  |  |  |  |   47|  31.2k|	} \
  |  |  |  |   48|  31.2k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  31.2k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|       |
  409|  31.2k|	return result;
  410|  31.2k|}
jpegload.c:vips_foreign_load_jpeg_buffer_init:
  439|  6.24k|{
  440|  6.24k|}

jpegsave.c:vips_foreign_save_jpeg_class_init:
  143|      1|{
  144|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  145|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  146|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  147|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  148|       |
  149|      1|	gobject_class->set_property = vips_object_set_property;
  150|      1|	gobject_class->get_property = vips_object_get_property;
  151|       |
  152|      1|	object_class->nickname = "jpegsave_base";
  153|      1|	object_class->description = _("save jpeg");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  154|      1|	object_class->build = vips_foreign_save_jpeg_build;
  155|       |
  156|      1|	foreign_class->suffs = vips__jpeg_suffs;
  157|       |
  158|       |	/* See also vips_foreign_save_tiff_build() when saving JPEG in TIFF.
  159|       |	 */
  160|      1|	save_class->saveable = VIPS_SAVEABLE_RGB_CMYK;
  161|      1|	save_class->format_table = bandfmt_jpeg;
  162|       |
  163|      1|	VIPS_ARG_INT(class, "Q", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  164|      1|		_("Q"),
  165|      1|		_("Q factor"),
  166|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  167|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, Q),
  168|      1|		1, 100, 75);
  169|       |
  170|      1|	VIPS_ARG_BOOL(class, "optimize_coding", 12,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  171|      1|		_("Optimize coding"),
  172|      1|		_("Compute optimal Huffman coding tables"),
  173|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  174|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, optimize_coding),
  175|      1|		FALSE);
  176|       |
  177|      1|	VIPS_ARG_BOOL(class, "interlace", 13,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  178|      1|		_("Interlace"),
  179|      1|		_("Generate an interlaced (progressive) jpeg"),
  180|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  181|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, interlace),
  182|      1|		FALSE);
  183|       |
  184|      1|	VIPS_ARG_BOOL(class, "no_subsample", 14,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  185|      1|		_("No subsample"),
  186|      1|		_("Disable chroma subsample"),
  187|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  188|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, no_subsample),
  189|      1|		FALSE);
  190|       |
  191|      1|	VIPS_ARG_BOOL(class, "trellis_quant", 15,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  192|      1|		_("Trellis quantisation"),
  193|      1|		_("Apply trellis quantisation to each 8x8 block"),
  194|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  195|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, trellis_quant),
  196|      1|		FALSE);
  197|       |
  198|      1|	VIPS_ARG_BOOL(class, "overshoot_deringing", 16,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  199|      1|		_("Overshoot de-ringing"),
  200|      1|		_("Apply overshooting to samples with extreme values"),
  201|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  202|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, overshoot_deringing),
  203|      1|		FALSE);
  204|       |
  205|      1|	VIPS_ARG_BOOL(class, "optimize_scans", 17,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  206|      1|		_("Optimize scans"),
  207|      1|		_("Split spectrum of DCT coefficients into separate scans"),
  208|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  209|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, optimize_scans),
  210|      1|		FALSE);
  211|       |
  212|      1|	VIPS_ARG_INT(class, "quant_table", 18,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  213|      1|		_("Quantization table"),
  214|      1|		_("Use predefined quantization table with given index"),
  215|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  216|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, quant_table),
  217|      1|		0, 8, 0);
  218|       |
  219|      1|	VIPS_ARG_ENUM(class, "subsample_mode", 19,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  220|      1|		_("Subsample mode"),
  221|      1|		_("Select chroma subsample operation mode"),
  222|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  223|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, subsample_mode),
  224|      1|		VIPS_TYPE_FOREIGN_SUBSAMPLE,
  225|      1|		VIPS_FOREIGN_SUBSAMPLE_AUTO);
  226|       |
  227|      1|	VIPS_ARG_INT(class, "restart_interval", 20,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  228|      1|		_("Restart interval"),
  229|      1|		_("Add restart markers every specified number of mcu"),
  230|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  231|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpeg, restart_interval),
  232|      1|		0, INT_MAX, 0);
  233|      1|}
jpegsave.c:vips_foreign_save_jpeg_target_class_init:
  280|      1|{
  281|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  282|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  283|       |
  284|      1|	gobject_class->set_property = vips_object_set_property;
  285|      1|	gobject_class->get_property = vips_object_get_property;
  286|       |
  287|      1|	object_class->nickname = "jpegsave_target";
  288|      1|	object_class->description = _("save image to jpeg target");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  289|      1|	object_class->build = vips_foreign_save_jpeg_target_build;
  290|       |
  291|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  292|      1|		_("Target"),
  293|      1|		_("Target to save to"),
  294|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  295|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpegTarget, target),
  296|      1|		VIPS_TYPE_TARGET);
  297|      1|}
jpegsave.c:vips_foreign_save_jpeg_file_class_init:
  349|      1|{
  350|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  351|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  352|       |
  353|      1|	gobject_class->set_property = vips_object_set_property;
  354|      1|	gobject_class->get_property = vips_object_get_property;
  355|       |
  356|      1|	object_class->nickname = "jpegsave";
  357|      1|	object_class->description = _("save image to jpeg file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  358|      1|	object_class->build = vips_foreign_save_jpeg_file_build;
  359|       |
  360|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  361|      1|		_("Filename"),
  362|      1|		_("Filename to save to"),
  363|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  364|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpegFile, filename),
  365|      1|		NULL);
  366|      1|}
jpegsave.c:vips_foreign_save_jpeg_buffer_class_init:
  427|      1|{
  428|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  429|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  430|       |
  431|      1|	gobject_class->set_property = vips_object_set_property;
  432|      1|	gobject_class->get_property = vips_object_get_property;
  433|       |
  434|      1|	object_class->nickname = "jpegsave_buffer";
  435|      1|	object_class->description = _("save image to jpeg buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  436|      1|	object_class->build = vips_foreign_save_jpeg_buffer_build;
  437|       |
  438|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  439|      1|		_("Buffer"),
  440|      1|		_("Buffer to save to"),
  441|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  442|      1|		G_STRUCT_OFFSET(VipsForeignSaveJpegBuffer, buf),
  443|      1|		VIPS_TYPE_BLOB);
  444|      1|}
jpegsave.c:vips_foreign_save_jpeg_mime_class_init:
  507|      1|{
  508|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  509|       |
  510|      1|	object_class->nickname = "jpegsave_mime";
  511|      1|	object_class->description = _("save image to jpeg mime");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  512|      1|	object_class->build = vips_foreign_save_jpeg_mime_build;
  513|      1|}

nsgif_destroy:
 1384|    643|{
 1385|    643|	if (gif == NULL) {
  ------------------
  |  Branch (1385:6): [True: 0, False: 643]
  ------------------
 1386|      0|		return;
 1387|      0|	}
 1388|       |
 1389|       |	/* Release all our memory blocks */
 1390|    643|	if (gif->frame_image) {
  ------------------
  |  Branch (1390:6): [True: 341, False: 302]
  ------------------
 1391|    341|		assert(gif->bitmap.destroy);
 1392|    341|		gif->bitmap.destroy(gif->frame_image);
 1393|    341|		gif->frame_image = NULL;
 1394|    341|	}
 1395|       |
 1396|    643|	free(gif->frames);
 1397|    643|	gif->frames = NULL;
 1398|       |
 1399|    643|	free(gif->prev_frame);
 1400|    643|	gif->prev_frame = NULL;
 1401|       |
 1402|    643|	lzw_context_destroy(gif->lzw_ctx);
 1403|    643|	gif->lzw_ctx = NULL;
 1404|       |
 1405|    643|	free(gif);
 1406|    643|}
nsgif_create:
 1492|    645|{
 1493|    645|	nsgif_t *gif;
 1494|       |
 1495|    645|	gif = calloc(1, sizeof(*gif));
 1496|    645|	if (gif == NULL) {
  ------------------
  |  Branch (1496:6): [True: 0, False: 645]
  ------------------
 1497|      0|		return NSGIF_ERR_OOM;
 1498|      0|	}
 1499|       |
 1500|    645|	gif->bitmap = *bitmap_vt;
 1501|    645|	gif->decoded_frame = NSGIF_FRAME_INVALID;
  ------------------
  |  |  156|    645|#define NSGIF_FRAME_INVALID UINT32_MAX
  ------------------
 1502|    645|	gif->prev_index = NSGIF_FRAME_INVALID;
  ------------------
  |  |  156|    645|#define NSGIF_FRAME_INVALID UINT32_MAX
  ------------------
 1503|       |
 1504|    645|	gif->delay_min = NSGIF_FRAME_DELAY_MIN;
  ------------------
  |  |   21|    645|#define NSGIF_FRAME_DELAY_MIN 2
  ------------------
 1505|    645|	gif->delay_default = NSGIF_FRAME_DELAY_DEFAULT;
  ------------------
  |  |   28|    645|#define NSGIF_FRAME_DELAY_DEFAULT 10
  ------------------
 1506|       |
 1507|    645|	gif->colour_layout = nsgif__bitmap_fmt_to_colour_layout(bitmap_fmt);
 1508|       |
 1509|    645|	*gif_out = gif;
 1510|    645|	return NSGIF_OK;
 1511|    645|}
nsgif_data_scan:
 1612|    645|{
 1613|    645|	const uint8_t *nsgif_data;
 1614|    645|	nsgif_error ret;
 1615|    645|	uint32_t frames;
 1616|       |
 1617|    645|	if (gif->data_complete) {
  ------------------
  |  Branch (1617:6): [True: 0, False: 645]
  ------------------
 1618|      0|		return NSGIF_ERR_DATA_COMPLETE;
 1619|      0|	}
 1620|       |
 1621|       |	/* Initialize values */
 1622|    645|	gif->buf_len = size;
 1623|    645|	gif->buf = data;
 1624|       |
 1625|       |	/* Get our current processing position */
 1626|    645|	nsgif_data = gif->buf + gif->buf_pos;
 1627|       |
 1628|       |	/* See if we should initialise the GIF */
 1629|    645|	if (gif->buf_pos == 0) {
  ------------------
  |  Branch (1629:6): [True: 645, False: 0]
  ------------------
 1630|       |		/* We want everything to be NULL before we start so we've no
 1631|       |		 * chance of freeing bad pointers (paranoia)
 1632|       |		 */
 1633|    645|		gif->frame_image = NULL;
 1634|    645|		gif->frames = NULL;
 1635|    645|		gif->frame_holders = 0;
 1636|       |
 1637|       |		/* The caller may have been lazy and not reset any values */
 1638|    645|		gif->info.frame_count = 0;
 1639|    645|		gif->frame_count_partial = 0;
 1640|    645|		gif->decoded_frame = NSGIF_FRAME_INVALID;
  ------------------
  |  |  156|    645|#define NSGIF_FRAME_INVALID UINT32_MAX
  ------------------
 1641|    645|		gif->frame = NSGIF_FRAME_INVALID;
  ------------------
  |  |  156|    645|#define NSGIF_FRAME_INVALID UINT32_MAX
  ------------------
 1642|       |
 1643|    645|		ret = nsgif__parse_header(gif, &nsgif_data, false);
 1644|    645|		if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1644:7): [True: 2, False: 643]
  ------------------
 1645|      2|			return ret;
 1646|      2|		}
 1647|       |
 1648|    643|		ret = nsgif__parse_logical_screen_descriptor(gif, &nsgif_data);
 1649|    643|		if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1649:7): [True: 5, False: 638]
  ------------------
 1650|      5|			return ret;
 1651|      5|		}
 1652|       |
 1653|       |		/* Remember we've done this now */
 1654|    638|		gif->buf_pos = nsgif_data - gif->buf;
 1655|       |
 1656|       |		/* Some broken GIFs report the size as the screen size they
 1657|       |		 * were created in. As such, we detect for the common cases and
 1658|       |		 * set the sizes as 0 if they are found which results in the
 1659|       |		 * GIF being the maximum size of the frames.
 1660|       |		 */
 1661|    638|		if (((gif->info.width == 640) && (gif->info.height == 480)) ||
  ------------------
  |  Branch (1661:8): [True: 3, False: 635]
  |  Branch (1661:36): [True: 0, False: 3]
  ------------------
 1662|    638|		    ((gif->info.width == 640) && (gif->info.height == 512)) ||
  ------------------
  |  Branch (1662:8): [True: 3, False: 635]
  |  Branch (1662:36): [True: 0, False: 3]
  ------------------
 1663|    638|		    ((gif->info.width == 800) && (gif->info.height == 600)) ||
  ------------------
  |  Branch (1663:8): [True: 4, False: 634]
  |  Branch (1663:36): [True: 0, False: 4]
  ------------------
 1664|    638|		    ((gif->info.width == 1024) && (gif->info.height == 768)) ||
  ------------------
  |  Branch (1664:8): [True: 6, False: 632]
  |  Branch (1664:37): [True: 1, False: 5]
  ------------------
 1665|    638|		    ((gif->info.width == 1280) && (gif->info.height == 1024)) ||
  ------------------
  |  Branch (1665:8): [True: 4, False: 633]
  |  Branch (1665:37): [True: 1, False: 3]
  ------------------
 1666|    638|		    ((gif->info.width == 1600) && (gif->info.height == 1200)) ||
  ------------------
  |  Branch (1666:8): [True: 1, False: 635]
  |  Branch (1666:37): [True: 0, False: 1]
  ------------------
 1667|    638|		    ((gif->info.width == 0) || (gif->info.height == 0)) ||
  ------------------
  |  Branch (1667:8): [True: 13, False: 623]
  |  Branch (1667:34): [True: 103, False: 520]
  ------------------
 1668|    638|		    ((gif->info.width > 2048) || (gif->info.height > 2048))) {
  ------------------
  |  Branch (1668:8): [True: 153, False: 367]
  |  Branch (1668:36): [True: 133, False: 234]
  ------------------
 1669|    404|			gif->info.width = 1;
 1670|    404|			gif->info.height = 1;
 1671|    404|		}
 1672|       |
 1673|       |		/* Set the first colour to a value that will never occur in
 1674|       |		 * reality so we know if we've processed it
 1675|       |		*/
 1676|    638|		gif->global_colour_table[0] = NSGIF_PROCESS_COLOURS;
  ------------------
  |  |  153|    638|#define NSGIF_PROCESS_COLOURS 0xaa000000
  ------------------
 1677|       |
 1678|       |		/* Check if the GIF has no frame data (13-byte header + 1-byte
 1679|       |		 * termination block) Although generally useless, the GIF
 1680|       |		 * specification does not expressly prohibit this
 1681|       |		 */
 1682|    638|		if (gif->buf_len == gif->buf_pos + 1) {
  ------------------
  |  Branch (1682:7): [True: 17, False: 621]
  ------------------
 1683|     17|			if (nsgif_data[0] == NSGIF_TRAILER) {
  ------------------
  |  |  168|     17|#define NSGIF_TRAILER 0x3b
  ------------------
  |  Branch (1683:8): [True: 2, False: 15]
  ------------------
 1684|      2|				return NSGIF_OK;
 1685|      2|			}
 1686|     17|		}
 1687|    638|	}
 1688|       |
 1689|       |	/*  Do the colour map if we haven't already. As the top byte is always
 1690|       |	 *  0xff or 0x00 depending on the transparency we know if it's been
 1691|       |	 *  filled in.
 1692|       |	 */
 1693|    636|	if (gif->global_colour_table[0] == NSGIF_PROCESS_COLOURS) {
  ------------------
  |  |  153|    636|#define NSGIF_PROCESS_COLOURS 0xaa000000
  ------------------
  |  Branch (1693:6): [True: 636, False: 0]
  ------------------
 1694|       |		/* Check for a global colour map signified by bit 7 */
 1695|    636|		if (gif->info.global_palette) {
  ------------------
  |  Branch (1695:7): [True: 180, False: 456]
  ------------------
 1696|    180|			size_t remaining = gif->buf + gif->buf_len - nsgif_data;
 1697|    180|			size_t used;
 1698|       |
 1699|    180|			ret = nsgif__colour_table_extract(
 1700|    180|					gif->global_colour_table,
 1701|    180|					&gif->colour_layout,
 1702|    180|					gif->colour_table_size,
 1703|    180|					nsgif_data, remaining, &used, true);
 1704|    180|			if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1704:8): [True: 20, False: 160]
  ------------------
 1705|     20|				return ret;
 1706|     20|			}
 1707|       |
 1708|    160|			nsgif_data += used;
 1709|    160|			gif->buf_pos = (nsgif_data - gif->buf);
 1710|    456|		} else {
 1711|       |			/* Create a default colour table with the first two
 1712|       |			 * colours as black and white. */
 1713|    456|			uint8_t *entry = (uint8_t *)gif->global_colour_table;
 1714|       |
 1715|       |			/* Black */
 1716|    456|			entry[gif->colour_layout.r] = 0x00;
 1717|    456|			entry[gif->colour_layout.g] = 0x00;
 1718|    456|			entry[gif->colour_layout.b] = 0x00;
 1719|    456|			entry[gif->colour_layout.a] = 0xFF;
 1720|       |
 1721|    456|			entry += sizeof(uint32_t);
 1722|       |
 1723|       |			/* White */
 1724|    456|			entry[gif->colour_layout.r] = 0xFF;
 1725|    456|			entry[gif->colour_layout.g] = 0xFF;
 1726|    456|			entry[gif->colour_layout.b] = 0xFF;
 1727|    456|			entry[gif->colour_layout.a] = 0xFF;
 1728|       |
 1729|    456|			gif->colour_table_size = 2;
 1730|    456|		}
 1731|       |
 1732|    616|		if (gif->info.global_palette &&
  ------------------
  |  Branch (1732:7): [True: 160, False: 456]
  ------------------
 1733|    616|		    gif->bg_index < gif->colour_table_size) {
  ------------------
  |  Branch (1733:7): [True: 132, False: 28]
  ------------------
 1734|    132|			size_t bg_idx = gif->bg_index;
 1735|    132|			gif->info.background = gif->global_colour_table[bg_idx];
 1736|    484|		} else {
 1737|    484|			gif->info.background = gif->global_colour_table[0];
 1738|    484|		}
 1739|    616|	}
 1740|       |
 1741|    616|	if (gif->lzw_ctx == NULL) {
  ------------------
  |  Branch (1741:6): [True: 616, False: 0]
  ------------------
 1742|    616|		lzw_result res = lzw_context_create(
 1743|    616|				(struct lzw_ctx **)&gif->lzw_ctx);
 1744|    616|		if (res != LZW_OK) {
  ------------------
  |  Branch (1744:7): [True: 0, False: 616]
  ------------------
 1745|      0|			return nsgif__error_from_lzw(res);
 1746|      0|		}
 1747|    616|	}
 1748|       |
 1749|       |	/* Try to initialise all frames. */
 1750|  6.74k|	do {
 1751|  6.74k|		frames = gif->info.frame_count;
 1752|  6.74k|		ret = nsgif__process_frame(gif, frames, false);
 1753|  6.74k|	} while (gif->info.frame_count > frames);
  ------------------
  |  Branch (1753:11): [True: 6.12k, False: 616]
  ------------------
 1754|       |
 1755|    616|	if (ret == NSGIF_ERR_END_OF_DATA && gif->info.frame_count > 0) {
  ------------------
  |  Branch (1755:6): [True: 546, False: 70]
  |  Branch (1755:38): [True: 141, False: 405]
  ------------------
 1756|    141|		ret = NSGIF_OK;
 1757|    141|	}
 1758|       |
 1759|    616|	return ret;
 1760|    616|}
nsgif_data_complete:
 1765|    645|{
 1766|    645|	if (gif->data_complete == false) {
  ------------------
  |  Branch (1766:6): [True: 645, False: 0]
  ------------------
 1767|    645|		uint32_t start = gif->info.frame_count;
 1768|    645|		uint32_t end = gif->frame_count_partial;
 1769|       |
 1770|    674|		for (uint32_t f = start; f < end; f++) {
  ------------------
  |  Branch (1770:28): [True: 267, False: 407]
  ------------------
 1771|    267|			nsgif_frame *frame = &gif->frames[f];
 1772|       |
 1773|    267|			if (frame->lzw_data_length > 0) {
  ------------------
  |  Branch (1773:8): [True: 238, False: 29]
  ------------------
 1774|    238|				frame->info.display = true;
 1775|    238|				gif->info.frame_count = f + 1;
 1776|       |
 1777|    238|				if (f == 0) {
  ------------------
  |  Branch (1777:9): [True: 224, False: 14]
  ------------------
 1778|    224|					frame->info.transparency = true;
 1779|    224|				}
 1780|    238|				break;
 1781|    238|			}
 1782|    267|		}
 1783|    645|	}
 1784|       |
 1785|    645|	gif->data_complete = true;
 1786|    645|}
nsgif_frame_decode:
 1951|    341|{
 1952|    341|	uint32_t start_frame;
 1953|    341|	nsgif_error ret = NSGIF_OK;
 1954|       |
 1955|    341|	if (frame >= gif->info.frame_count) {
  ------------------
  |  Branch (1955:6): [True: 0, False: 341]
  ------------------
 1956|      0|		return NSGIF_ERR_BAD_FRAME;
 1957|      0|	}
 1958|       |
 1959|    341|	if (gif->decoded_frame == frame) {
  ------------------
  |  Branch (1959:6): [True: 0, False: 341]
  ------------------
 1960|      0|		*bitmap = gif->frame_image;
 1961|      0|		return NSGIF_OK;
 1962|       |
 1963|    341|	} else if (gif->decoded_frame >= frame ||
  ------------------
  |  Branch (1963:13): [True: 341, False: 0]
  ------------------
 1964|    341|	           gif->decoded_frame == NSGIF_FRAME_INVALID) {
  ------------------
  |  |  156|      0|#define NSGIF_FRAME_INVALID UINT32_MAX
  ------------------
  |  Branch (1964:13): [True: 0, False: 0]
  ------------------
 1965|       |		/* Can skip to first frame or restart. */
 1966|    341|		start_frame = 0;
 1967|    341|	} else {
 1968|      0|		start_frame = nsgif__frame_next(
 1969|      0|				gif, false, gif->decoded_frame);
 1970|      0|	}
 1971|       |
 1972|    626|	for (uint32_t f = start_frame; f <= frame; f++) {
  ------------------
  |  Branch (1972:33): [True: 341, False: 285]
  ------------------
 1973|    341|		ret = nsgif__process_frame(gif, f, true);
 1974|    341|		if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1974:7): [True: 56, False: 285]
  ------------------
 1975|     56|			return ret;
 1976|     56|		}
 1977|    341|	}
 1978|       |
 1979|    285|	*bitmap = gif->frame_image;
 1980|    285|	return ret;
 1981|    341|}
nsgif_get_info:
 1985|    645|{
 1986|    645|	return &gif->info;
 1987|    645|}
nsgif_get_frame_info:
 1993|  12.7k|{
 1994|  12.7k|	if (frame >= gif->info.frame_count) {
  ------------------
  |  Branch (1994:6): [True: 0, False: 12.7k]
  ------------------
 1995|      0|		return NULL;
 1996|      0|	}
 1997|       |
 1998|  12.7k|	return &gif->frames[frame].info;
 1999|  12.7k|}
nsgif_global_palette:
 2006|    715|{
 2007|    715|	size_t len = sizeof(*table) * NSGIF_MAX_COLOURS;
  ------------------
  |  |   27|    715|#define NSGIF_MAX_COLOURS 256
  ------------------
 2008|       |
 2009|    715|	memcpy(table, gif->global_colour_table, len);
 2010|    715|	*entries = gif->colour_table_size;
 2011|    715|}
nsgif_local_palette:
 2019|  4.16k|{
 2020|  4.16k|	const nsgif_frame *f;
 2021|       |
 2022|  4.16k|	if (frame >= gif->frame_count_partial) {
  ------------------
  |  Branch (2022:6): [True: 0, False: 4.16k]
  ------------------
 2023|      0|		return false;
 2024|      0|	}
 2025|       |
 2026|  4.16k|	f = &gif->frames[frame];
 2027|  4.16k|	if (f->info.local_palette == false) {
  ------------------
  |  Branch (2027:6): [True: 3.90k, False: 253]
  ------------------
 2028|  3.90k|		return false;
 2029|  3.90k|	}
 2030|       |
 2031|    253|	*entries = 2 << (f->flags & NSGIF_COLOUR_TABLE_SIZE_MASK);
  ------------------
  |  |  166|    253|#define NSGIF_COLOUR_TABLE_SIZE_MASK 0x07
  ------------------
 2032|    253|	nsgif__colour_table_decode(table, &gif->colour_layout,
 2033|    253|			*entries, gif->buf + f->colour_table_offset);
 2034|       |
 2035|    253|	return true;
 2036|  4.16k|}
nsgif_strerror:
 2040|    541|{
 2041|    541|	static const char *const str[] = {
 2042|    541|		[NSGIF_OK]                = "Success",
 2043|    541|		[NSGIF_ERR_OOM]           = "Out of memory",
 2044|    541|		[NSGIF_ERR_DATA]          = "Invalid source data",
 2045|    541|		[NSGIF_ERR_BAD_FRAME]     = "Requested frame does not exist",
 2046|    541|		[NSGIF_ERR_DATA_FRAME]    = "Invalid frame data",
 2047|    541|		[NSGIF_ERR_END_OF_DATA]   = "Unexpected end of GIF source data",
 2048|    541|		[NSGIF_ERR_DATA_COMPLETE] = "Can't add data to completed GIF",
 2049|    541|		[NSGIF_ERR_FRAME_DISPLAY] = "Frame can't be displayed",
 2050|    541|		[NSGIF_ERR_ANIMATION_END] = "Animation complete",
 2051|    541|	};
 2052|       |
 2053|    541|	if (err >= NSGIF_ARRAY_LEN(str) || str[err] == NULL) {
  ------------------
  |  |  139|  1.08k|#define NSGIF_ARRAY_LEN(_a) ((sizeof(_a)) / (sizeof(*_a)))
  ------------------
  |  Branch (2053:6): [True: 0, False: 541]
  |  Branch (2053:37): [True: 0, False: 541]
  ------------------
 2054|      0|		return "Unknown error";
 2055|      0|	}
 2056|       |
 2057|    541|	return str[err];
 2058|    541|}
gif.c:nsgif__bitmap_fmt_to_colour_layout:
 1424|    645|{
 1425|    645|	bool le = nsgif__host_is_little_endian();
 1426|       |
 1427|       |	/* Map endian-dependant formats to byte-wise format for the host. */
 1428|    645|	switch (bitmap_fmt) {
 1429|      0|	case NSGIF_BITMAP_FMT_RGBA8888:
  ------------------
  |  Branch (1429:2): [True: 0, False: 645]
  ------------------
 1430|      0|		bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_A8B8G8R8
  ------------------
  |  Branch (1430:16): [True: 0, False: 0]
  ------------------
 1431|      0|		                  : NSGIF_BITMAP_FMT_R8G8B8A8;
 1432|      0|		break;
 1433|      0|	case NSGIF_BITMAP_FMT_BGRA8888:
  ------------------
  |  Branch (1433:2): [True: 0, False: 645]
  ------------------
 1434|      0|		bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_A8R8G8B8
  ------------------
  |  Branch (1434:16): [True: 0, False: 0]
  ------------------
 1435|      0|		                  : NSGIF_BITMAP_FMT_B8G8R8A8;
 1436|      0|		break;
 1437|      0|	case NSGIF_BITMAP_FMT_ARGB8888:
  ------------------
  |  Branch (1437:2): [True: 0, False: 645]
  ------------------
 1438|      0|		bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_B8G8R8A8
  ------------------
  |  Branch (1438:16): [True: 0, False: 0]
  ------------------
 1439|      0|		                  : NSGIF_BITMAP_FMT_A8R8G8B8;
 1440|      0|		break;
 1441|      0|	case NSGIF_BITMAP_FMT_ABGR8888:
  ------------------
  |  Branch (1441:2): [True: 0, False: 645]
  ------------------
 1442|      0|		bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_R8G8B8A8
  ------------------
  |  Branch (1442:16): [True: 0, False: 0]
  ------------------
 1443|      0|		                  : NSGIF_BITMAP_FMT_A8B8G8R8;
 1444|      0|		break;
 1445|    645|	default:
  ------------------
  |  Branch (1445:2): [True: 645, False: 0]
  ------------------
 1446|    645|		break;
 1447|    645|	}
 1448|       |
 1449|       |	/* Set up colour component order for bitmap format. */
 1450|    645|	switch (bitmap_fmt) {
 1451|      0|	default:
  ------------------
  |  Branch (1451:2): [True: 0, False: 645]
  ------------------
 1452|       |		/* Fall through. */
 1453|    645|	case NSGIF_BITMAP_FMT_R8G8B8A8:
  ------------------
  |  Branch (1453:2): [True: 645, False: 0]
  ------------------
 1454|    645|		return (struct nsgif_colour_layout) {
 1455|    645|			.r = 0,
 1456|    645|			.g = 1,
 1457|    645|			.b = 2,
 1458|    645|			.a = 3,
 1459|    645|		};
 1460|       |
 1461|      0|	case NSGIF_BITMAP_FMT_B8G8R8A8:
  ------------------
  |  Branch (1461:2): [True: 0, False: 645]
  ------------------
 1462|      0|		return (struct nsgif_colour_layout) {
 1463|      0|			.b = 0,
 1464|      0|			.g = 1,
 1465|      0|			.r = 2,
 1466|      0|			.a = 3,
 1467|      0|		};
 1468|       |
 1469|      0|	case NSGIF_BITMAP_FMT_A8R8G8B8:
  ------------------
  |  Branch (1469:2): [True: 0, False: 645]
  ------------------
 1470|      0|		return (struct nsgif_colour_layout) {
 1471|      0|			.a = 0,
 1472|      0|			.r = 1,
 1473|      0|			.g = 2,
 1474|      0|			.b = 3,
 1475|      0|		};
 1476|       |
 1477|      0|	case NSGIF_BITMAP_FMT_A8B8G8R8:
  ------------------
  |  Branch (1477:2): [True: 0, False: 645]
  ------------------
 1478|      0|		return (struct nsgif_colour_layout) {
 1479|      0|			.a = 0,
 1480|      0|			.b = 1,
 1481|      0|			.g = 2,
 1482|      0|			.r = 3,
 1483|      0|		};
 1484|    645|	}
 1485|    645|}
gif.c:nsgif__host_is_little_endian:
 1416|    645|{
 1417|    645|	const uint16_t test = 1;
 1418|       |
 1419|    645|	return ((const uint8_t *) &test)[0];
 1420|    645|}
gif.c:nsgif__parse_header:
 1540|    645|{
 1541|    645|	const uint8_t *data = *pos;
 1542|    645|	size_t len = gif->buf + gif->buf_len - data;
 1543|       |
 1544|    645|	if (len < 6) {
  ------------------
  |  Branch (1544:6): [True: 2, False: 643]
  ------------------
 1545|      2|		return NSGIF_ERR_END_OF_DATA;
 1546|      2|	}
 1547|       |
 1548|    643|	if (strncmp((const char *) data, "GIF", 3) != 0) {
  ------------------
  |  Branch (1548:6): [True: 0, False: 643]
  ------------------
 1549|      0|		return NSGIF_ERR_DATA;
 1550|      0|	}
 1551|    643|	data += 3;
 1552|       |
 1553|    643|	if (strict == true) {
  ------------------
  |  Branch (1553:6): [True: 0, False: 643]
  ------------------
 1554|      0|		if ((strncmp((const char *) data, "87a", 3) != 0) &&
  ------------------
  |  Branch (1554:7): [True: 0, False: 0]
  ------------------
 1555|      0|		    (strncmp((const char *) data, "89a", 3) != 0)) {
  ------------------
  |  Branch (1555:7): [True: 0, False: 0]
  ------------------
 1556|      0|			return NSGIF_ERR_DATA;
 1557|      0|		}
 1558|      0|	}
 1559|    643|	data += 3;
 1560|       |
 1561|    643|	*pos = data;
 1562|    643|	return NSGIF_OK;
 1563|    643|}
gif.c:nsgif__parse_logical_screen_descriptor:
 1587|    643|{
 1588|    643|	const uint8_t *data = *pos;
 1589|    643|	size_t len = gif->buf + gif->buf_len - data;
 1590|       |
 1591|    643|	if (len < 7) {
  ------------------
  |  Branch (1591:6): [True: 5, False: 638]
  ------------------
 1592|      5|		return NSGIF_ERR_END_OF_DATA;
 1593|      5|	}
 1594|       |
 1595|    638|	gif->info.width = data[0] | (data[1] << 8);
 1596|    638|	gif->info.height = data[2] | (data[3] << 8);
 1597|    638|	gif->info.global_palette = data[4] & NSGIF_COLOUR_TABLE_MASK;
  ------------------
  |  |  165|    638|#define NSGIF_COLOUR_TABLE_MASK 0x80
  ------------------
 1598|    638|	gif->colour_table_size = 2 << (data[4] & NSGIF_COLOUR_TABLE_SIZE_MASK);
  ------------------
  |  |  166|    638|#define NSGIF_COLOUR_TABLE_SIZE_MASK 0x07
  ------------------
 1599|    638|	gif->bg_index = data[5];
 1600|    638|	gif->aspect_ratio = data[6];
 1601|    638|	gif->info.loop_max = 1;
 1602|       |
 1603|    638|	*pos += 7;
 1604|    638|	return NSGIF_OK;
 1605|    643|}
gif.c:nsgif__colour_table_extract:
 1115|    432|{
 1116|    432|	if (data_len < colour_table_entries * 3) {
  ------------------
  |  Branch (1116:6): [True: 29, False: 403]
  ------------------
 1117|     29|		return NSGIF_ERR_END_OF_DATA;
 1118|     29|	}
 1119|       |
 1120|    403|	if (decode) {
  ------------------
  |  Branch (1120:6): [True: 188, False: 215]
  ------------------
 1121|    188|		nsgif__colour_table_decode(colour_table, layout,
 1122|    188|				colour_table_entries, data);
 1123|    188|	}
 1124|       |
 1125|    403|	*used = colour_table_entries * 3;
 1126|    403|	return NSGIF_OK;
 1127|    432|}
gif.c:nsgif__error_from_lzw:
  177|    197|{
  178|    197|	static const nsgif_error g_res[] = {
  179|    197|		[LZW_OK]        = NSGIF_OK,
  180|    197|		[LZW_NO_MEM]    = NSGIF_ERR_OOM,
  181|    197|		[LZW_OK_EOD]    = NSGIF_ERR_END_OF_DATA,
  182|    197|		[LZW_NO_DATA]   = NSGIF_ERR_END_OF_DATA,
  183|    197|		[LZW_EOI_CODE]  = NSGIF_ERR_DATA_FRAME,
  184|    197|		[LZW_BAD_ICODE] = NSGIF_ERR_DATA_FRAME,
  185|    197|		[LZW_BAD_CODE]  = NSGIF_ERR_DATA_FRAME,
  186|    197|	};
  187|    197|	assert(l_res != LZW_BAD_PARAM);
  188|    197|	assert(l_res != LZW_NO_COLOUR);
  189|    197|	return g_res[l_res];
  190|    197|}
gif.c:nsgif__process_frame:
 1315|  7.08k|{
 1316|  7.08k|	nsgif_error ret;
 1317|  7.08k|	const uint8_t *pos;
 1318|  7.08k|	const uint8_t *end;
 1319|  7.08k|	struct nsgif_frame *frame;
 1320|       |
 1321|  7.08k|	frame = nsgif__get_frame(gif, frame_idx);
 1322|  7.08k|	if (frame == NULL) {
  ------------------
  |  Branch (1322:6): [True: 0, False: 7.08k]
  ------------------
 1323|      0|		return NSGIF_ERR_OOM;
 1324|      0|	}
 1325|       |
 1326|  7.08k|	end = gif->buf + gif->buf_len;
 1327|       |
 1328|  7.08k|	if (decode) {
  ------------------
  |  Branch (1328:6): [True: 341, False: 6.74k]
  ------------------
 1329|    341|		pos = gif->buf + frame->frame_offset;
 1330|       |
 1331|       |		/* Ensure this frame is supposed to be decoded */
 1332|    341|		if (frame->info.display == false) {
  ------------------
  |  Branch (1332:7): [True: 0, False: 341]
  ------------------
 1333|      0|			return NSGIF_OK;
 1334|      0|		}
 1335|       |
 1336|       |		/* Ensure the frame is in range to decode */
 1337|    341|		if (frame_idx > gif->frame_count_partial) {
  ------------------
  |  Branch (1337:7): [True: 0, False: 341]
  ------------------
 1338|      0|			return NSGIF_ERR_END_OF_DATA;
 1339|      0|		}
 1340|       |
 1341|       |		/* Done if frame is already decoded */
 1342|    341|		if (frame_idx == gif->decoded_frame) {
  ------------------
  |  Branch (1342:7): [True: 0, False: 341]
  ------------------
 1343|      0|			return NSGIF_OK;
 1344|      0|		}
 1345|  6.74k|	} else {
 1346|  6.74k|		pos = gif->buf + gif->buf_pos;
 1347|       |
 1348|       |		/* Check if we've finished */
 1349|  6.74k|		if (pos < end && pos[0] == NSGIF_TRAILER) {
  ------------------
  |  |  168|  6.70k|#define NSGIF_TRAILER 0x3b
  ------------------
  |  Branch (1349:7): [True: 6.70k, False: 36]
  |  Branch (1349:20): [True: 14, False: 6.69k]
  ------------------
 1350|     14|			return NSGIF_OK;
 1351|     14|		}
 1352|  6.74k|	}
 1353|       |
 1354|  7.06k|	ret = nsgif__parse_frame_extensions(gif, frame, &pos, !decode);
 1355|  7.06k|	if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1355:6): [True: 115, False: 6.95k]
  ------------------
 1356|    115|		goto cleanup;
 1357|    115|	}
 1358|       |
 1359|  6.95k|	ret = nsgif__parse_image_descriptor(gif, frame, &pos, !decode);
 1360|  6.95k|	if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1360:6): [True: 211, False: 6.74k]
  ------------------
 1361|    211|		goto cleanup;
 1362|    211|	}
 1363|       |
 1364|  6.74k|	ret = nsgif__parse_colour_table(gif, frame, &pos, decode);
 1365|  6.74k|	if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1365:6): [True: 9, False: 6.73k]
  ------------------
 1366|      9|		goto cleanup;
 1367|      9|	}
 1368|       |
 1369|  6.73k|	ret = nsgif__parse_image_data(gif, frame, &pos, decode);
 1370|  6.73k|	if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1370:6): [True: 320, False: 6.41k]
  ------------------
 1371|    320|		goto cleanup;
 1372|    320|	}
 1373|       |
 1374|  7.06k|cleanup:
 1375|  7.06k|	if (!decode) {
  ------------------
  |  Branch (1375:6): [True: 6.72k, False: 341]
  ------------------
 1376|  6.72k|		gif->buf_pos = pos - gif->buf;
 1377|  6.72k|	}
 1378|       |
 1379|  7.06k|	return ret;
 1380|  6.73k|}
gif.c:nsgif__get_frame:
 1268|  7.08k|{
 1269|  7.08k|	struct nsgif_frame *frame;
 1270|       |
 1271|  7.08k|	if (gif->frame_holders > frame_idx) {
  ------------------
  |  Branch (1271:6): [True: 341, False: 6.74k]
  ------------------
 1272|    341|		frame = &gif->frames[frame_idx];
 1273|  6.74k|	} else {
 1274|       |		/* Allocate more memory */
 1275|  6.74k|		size_t count = frame_idx + 1;
 1276|  6.74k|		struct nsgif_frame *temp;
 1277|       |
 1278|  6.74k|		temp = realloc(gif->frames, count * sizeof(*frame));
 1279|  6.74k|		if (temp == NULL) {
  ------------------
  |  Branch (1279:7): [True: 0, False: 6.74k]
  ------------------
 1280|      0|			return NULL;
 1281|      0|		}
 1282|  6.74k|		gif->frames = temp;
 1283|  6.74k|		gif->frame_holders = count;
 1284|       |
 1285|  6.74k|		frame = &gif->frames[frame_idx];
 1286|       |
 1287|  6.74k|		frame->info.local_palette = false;
 1288|  6.74k|		frame->info.transparency = false;
 1289|  6.74k|		frame->info.display = false;
 1290|  6.74k|		frame->info.disposal = 0;
 1291|  6.74k|		frame->info.delay = 10;
 1292|       |
 1293|  6.74k|		frame->transparency_index = NSGIF_NO_TRANSPARENCY;
  ------------------
  |  |  162|  6.74k|#define NSGIF_NO_TRANSPARENCY (0xFFFFFFFFu)
  ------------------
 1294|  6.74k|		frame->frame_offset = gif->buf_pos;
 1295|  6.74k|		frame->redraw_required = false;
 1296|  6.74k|		frame->lzw_data_length = 0;
 1297|  6.74k|		frame->decoded = false;
 1298|  6.74k|	}
 1299|       |
 1300|  7.08k|	return frame;
 1301|  7.08k|}
gif.c:nsgif__parse_frame_extensions:
  893|  7.06k|{
  894|  7.06k|	enum {
  895|  7.06k|		GIF_EXT_INTRODUCER      = 0x21,
  896|  7.06k|		GIF_EXT_GRAPHIC_CONTROL = 0xf9,
  897|  7.06k|		GIF_EXT_COMMENT         = 0xfe,
  898|  7.06k|		GIF_EXT_PLAIN_TEXT      = 0x01,
  899|  7.06k|		GIF_EXT_APPLICATION     = 0xff,
  900|  7.06k|	};
  901|  7.06k|	const uint8_t *nsgif_data = *pos;
  902|  7.06k|	const uint8_t *nsgif_end = gif->buf + gif->buf_len;
  903|  7.06k|	int nsgif_bytes = nsgif_end - nsgif_data;
  904|       |
  905|       |	/* Initialise the extensions */
  906|  19.0k|	while (nsgif_bytes > 0 && nsgif_data[0] == GIF_EXT_INTRODUCER) {
  ------------------
  |  Branch (906:9): [True: 18.9k, False: 60]
  |  Branch (906:28): [True: 12.1k, False: 6.89k]
  ------------------
  907|  12.1k|		bool block_step = true;
  908|  12.1k|		nsgif_error ret;
  909|       |
  910|  12.1k|		nsgif_data++;
  911|  12.1k|		nsgif_bytes--;
  912|       |
  913|  12.1k|		if (nsgif_bytes == 0) {
  ------------------
  |  Branch (913:7): [True: 3, False: 12.1k]
  ------------------
  914|      3|			return NSGIF_ERR_END_OF_DATA;
  915|      3|		}
  916|       |
  917|       |		/* Switch on extension label */
  918|  12.1k|		switch (nsgif_data[0]) {
  919|  5.20k|		case GIF_EXT_GRAPHIC_CONTROL:
  ------------------
  |  Branch (919:3): [True: 5.20k, False: 6.89k]
  ------------------
  920|  5.20k|			if (decode) {
  ------------------
  |  Branch (920:8): [True: 5.09k, False: 106]
  ------------------
  921|  5.09k|				ret = nsgif__parse_extension_graphic_control(
  922|  5.09k|						frame,
  923|  5.09k|						nsgif_data,
  924|  5.09k|						nsgif_bytes);
  925|  5.09k|				if (ret != NSGIF_OK) {
  ------------------
  |  Branch (925:9): [True: 6, False: 5.09k]
  ------------------
  926|      6|					return ret;
  927|      6|				}
  928|  5.09k|			}
  929|  5.19k|			break;
  930|       |
  931|  5.56k|		case GIF_EXT_APPLICATION:
  ------------------
  |  Branch (931:3): [True: 5.56k, False: 6.53k]
  ------------------
  932|  5.56k|			if (decode) {
  ------------------
  |  Branch (932:8): [True: 5.55k, False: 15]
  ------------------
  933|  5.55k|				ret = nsgif__parse_extension_application(
  934|  5.55k|						gif, nsgif_data, nsgif_bytes);
  935|  5.55k|				if (ret != NSGIF_OK) {
  ------------------
  |  Branch (935:9): [True: 8, False: 5.54k]
  ------------------
  936|      8|					return ret;
  937|      8|				}
  938|  5.55k|			}
  939|  5.55k|			break;
  940|       |
  941|  5.55k|		case GIF_EXT_COMMENT:
  ------------------
  |  Branch (941:3): [True: 11, False: 12.0k]
  ------------------
  942|       |			/* Move the pointer to the first data sub-block Skip 1
  943|       |			 * byte for the extension label. */
  944|     11|			++nsgif_data;
  945|     11|			block_step = false;
  946|     11|			break;
  947|       |
  948|  1.32k|		default:
  ------------------
  |  Branch (948:3): [True: 1.32k, False: 10.7k]
  ------------------
  949|  1.32k|			break;
  950|  12.1k|		}
  951|       |
  952|  12.0k|		if (block_step) {
  ------------------
  |  Branch (952:7): [True: 12.0k, False: 11]
  ------------------
  953|       |			/* Move the pointer to the first data sub-block Skip 2
  954|       |			 * bytes for the extension label and size fields Skip
  955|       |			 * the extension size itself
  956|       |			 */
  957|  12.0k|			if (nsgif_bytes < 2) {
  ------------------
  |  Branch (957:8): [True: 1, False: 12.0k]
  ------------------
  958|      1|				return NSGIF_ERR_END_OF_DATA;
  959|      1|			}
  960|  12.0k|			nsgif_data += 2 + nsgif_data[1];
  961|  12.0k|		}
  962|       |
  963|       |		/* Repeatedly skip blocks until we get a zero block or run out
  964|       |		 * of data.  This data is ignored by this gif decoder. */
  965|  70.4k|		while (nsgif_data < nsgif_end && nsgif_data[0] != NSGIF_BLOCK_TERMINATOR) {
  ------------------
  |  |  167|  70.4k|#define NSGIF_BLOCK_TERMINATOR 0x00
  ------------------
  |  Branch (965:10): [True: 70.4k, False: 22]
  |  Branch (965:36): [True: 58.4k, False: 11.9k]
  ------------------
  966|  58.4k|			nsgif_data += nsgif_data[0] + 1;
  967|  58.4k|			if (nsgif_data >= nsgif_end) {
  ------------------
  |  Branch (967:8): [True: 97, False: 58.3k]
  ------------------
  968|     97|				return NSGIF_ERR_END_OF_DATA;
  969|     97|			}
  970|  58.4k|		}
  971|  11.9k|		nsgif_data++;
  972|  11.9k|		nsgif_bytes = nsgif_end - nsgif_data;
  973|  11.9k|	}
  974|       |
  975|  6.95k|	if (nsgif_data > nsgif_end) {
  ------------------
  |  Branch (975:6): [True: 22, False: 6.93k]
  ------------------
  976|     22|		nsgif_data = nsgif_end;
  977|     22|	}
  978|       |
  979|       |	/* Set buffer position and return */
  980|  6.95k|	*pos = nsgif_data;
  981|  6.95k|	return NSGIF_OK;
  982|  7.06k|}
gif.c:nsgif__parse_extension_graphic_control:
  752|  5.09k|{
  753|  5.09k|	enum {
  754|  5.09k|		GIF_MASK_TRANSPARENCY = 0x01,
  755|  5.09k|		GIF_MASK_DISPOSAL     = 0x1c,
  756|  5.09k|	};
  757|       |
  758|       |	/* 6-byte Graphic Control Extension is:
  759|       |	 *
  760|       |	 *  +0  CHAR    Graphic Control Label
  761|       |	 *  +1  CHAR    Block Size
  762|       |	 *  +2  CHAR    __Packed Fields__
  763|       |	 *              3BITS   Reserved
  764|       |	 *              3BITS   Disposal Method
  765|       |	 *              1BIT    User Input Flag
  766|       |	 *              1BIT    Transparent Color Flag
  767|       |	 *  +3  SHORT   Delay Time
  768|       |	 *  +5  CHAR    Transparent Color Index
  769|       |	 */
  770|  5.09k|	if (len < 6) {
  ------------------
  |  Branch (770:6): [True: 6, False: 5.09k]
  ------------------
  771|      6|		return NSGIF_ERR_END_OF_DATA;
  772|      6|	}
  773|       |
  774|  5.09k|	frame->info.delay = data[3] | (data[4] << 8);
  775|       |
  776|  5.09k|	if (data[2] & GIF_MASK_TRANSPARENCY) {
  ------------------
  |  Branch (776:6): [True: 3.23k, False: 1.85k]
  ------------------
  777|  3.23k|		frame->info.transparency = true;
  778|  3.23k|		frame->transparency_index = data[5];
  779|  3.23k|	}
  780|       |
  781|  5.09k|	frame->info.disposal = ((data[2] & GIF_MASK_DISPOSAL) >> 2);
  782|       |	/* I have encountered documentation and GIFs in the
  783|       |	 * wild that use 0x04 to restore the previous frame,
  784|       |	 * rather than the officially documented 0x03.  I
  785|       |	 * believe some (older?)  software may even actually
  786|       |	 * export this way.  We handle this as a type of
  787|       |	 * "quirks" mode. */
  788|  5.09k|	if (frame->info.disposal == NSGIF_DISPOSAL_RESTORE_QUIRK) {
  ------------------
  |  Branch (788:6): [True: 750, False: 4.34k]
  ------------------
  789|    750|		frame->info.disposal = NSGIF_DISPOSAL_RESTORE_PREV;
  790|    750|	}
  791|       |
  792|       |	/* if we are clearing the background then we need to
  793|       |	 * redraw enough to cover the previous frame too. */
  794|  5.09k|	frame->redraw_required =
  795|  5.09k|			frame->info.disposal == NSGIF_DISPOSAL_RESTORE_BG ||
  ------------------
  |  Branch (795:4): [True: 1.57k, False: 3.51k]
  ------------------
  796|  5.09k|			frame->info.disposal == NSGIF_DISPOSAL_RESTORE_PREV;
  ------------------
  |  Branch (796:4): [True: 760, False: 2.75k]
  ------------------
  797|       |
  798|  5.09k|	return NSGIF_OK;
  799|  5.09k|}
gif.c:nsgif__parse_extension_application:
  842|  5.55k|{
  843|       |	/* 14-byte+ Application Extension is:
  844|       |	 *
  845|       |	 *  +0    CHAR    Application Extension Label
  846|       |	 *  +1    CHAR    Block Size
  847|       |	 *  +2    8CHARS  Application Identifier
  848|       |	 *  +10   3CHARS  Appl. Authentication Code
  849|       |	 *  +13   1-256   Application Data (Data sub-blocks)
  850|       |	 */
  851|  5.55k|	if (len < 17) {
  ------------------
  |  Branch (851:6): [True: 8, False: 5.54k]
  ------------------
  852|      8|		return NSGIF_ERR_END_OF_DATA;
  853|      8|	}
  854|       |
  855|  5.54k|	if (nsgif__app_ext_is_loop_count(data, len)) {
  ------------------
  |  Branch (855:6): [True: 1.65k, False: 3.88k]
  ------------------
  856|  1.65k|		enum {
  857|  1.65k|			EXT_LOOP_COUNT_SUB_BLOCK_SIZE = 0x03,
  858|  1.65k|			EXT_LOOP_COUNT_SUB_BLOCK_ID   = 0x01,
  859|  1.65k|		};
  860|  1.65k|		if ((data[13] == EXT_LOOP_COUNT_SUB_BLOCK_SIZE) &&
  ------------------
  |  Branch (860:7): [True: 638, False: 1.02k]
  ------------------
  861|  1.65k|		    (data[14] == EXT_LOOP_COUNT_SUB_BLOCK_ID)) {
  ------------------
  |  Branch (861:7): [True: 26, False: 612]
  ------------------
  862|     26|			gif->info.loop_max = data[15] | (data[16] << 8);
  863|       |
  864|       |			/* The value in the source data means repeat N times
  865|       |			 * after the first implied play. A value of zero has
  866|       |			 * the special meaning of loop forever. (The only way
  867|       |			 * to play the animation once is  not to have this
  868|       |			 * extension at all. */
  869|     26|			if (gif->info.loop_max > 0) {
  ------------------
  |  Branch (869:8): [True: 25, False: 1]
  ------------------
  870|     25|				gif->info.loop_max++;
  871|     25|			}
  872|     26|		}
  873|  1.65k|	}
  874|       |
  875|  5.54k|	return NSGIF_OK;
  876|  5.55k|}
gif.c:nsgif__app_ext_is_loop_count:
  811|  5.54k|{
  812|  5.54k|	enum {
  813|  5.54k|		EXT_LOOP_COUNT_BLOCK_SIZE = 0x0b,
  814|  5.54k|	};
  815|       |
  816|  5.54k|	assert(len > 13);
  817|  5.54k|	(void)(len);
  818|       |
  819|  5.54k|	if (data[1] == EXT_LOOP_COUNT_BLOCK_SIZE) {
  ------------------
  |  Branch (819:6): [True: 5.28k, False: 262]
  ------------------
  820|  5.28k|		if (strncmp((const char *)data + 2, "NETSCAPE2.0", 11) == 0 ||
  ------------------
  |  Branch (820:7): [True: 3, False: 5.27k]
  ------------------
  821|  5.28k|		    strncmp((const char *)data + 2, "ANIMEXTS1.0", 11) == 0) {
  ------------------
  |  Branch (821:7): [True: 1.65k, False: 3.62k]
  ------------------
  822|  1.65k|			return true;
  823|  1.65k|		}
  824|  5.28k|	}
  825|       |
  826|  3.88k|	return false;
  827|  5.54k|}
gif.c:nsgif__parse_image_descriptor:
 1012|  6.95k|{
 1013|  6.95k|	const uint8_t *data = *pos;
 1014|  6.95k|	size_t len = gif->buf + gif->buf_len - data;
 1015|  6.95k|	enum {
 1016|  6.95k|		NSGIF_IMAGE_DESCRIPTOR_LEN = 10u,
 1017|  6.95k|		NSGIF_IMAGE_SEPARATOR      = 0x2Cu,
 1018|  6.95k|		NSGIF_MASK_INTERLACE       = 0x40u,
 1019|  6.95k|	};
 1020|       |
 1021|  6.95k|	assert(gif != NULL);
 1022|  6.95k|	assert(frame != NULL);
 1023|       |
 1024|  6.95k|	if (len < NSGIF_IMAGE_DESCRIPTOR_LEN) {
  ------------------
  |  Branch (1024:6): [True: 161, False: 6.79k]
  ------------------
 1025|    161|		return NSGIF_ERR_END_OF_DATA;
 1026|    161|	}
 1027|       |
 1028|  6.79k|	if (decode) {
  ------------------
  |  Branch (1028:6): [True: 6.45k, False: 341]
  ------------------
 1029|  6.45k|		uint32_t x, y, w, h;
 1030|       |
 1031|  6.45k|		if (data[0] != NSGIF_IMAGE_SEPARATOR) {
  ------------------
  |  Branch (1031:7): [True: 50, False: 6.40k]
  ------------------
 1032|     50|			return NSGIF_ERR_DATA_FRAME;
 1033|     50|		}
 1034|       |
 1035|  6.40k|		x = data[1] | (data[2] << 8);
 1036|  6.40k|		y = data[3] | (data[4] << 8);
 1037|  6.40k|		w = data[5] | (data[6] << 8);
 1038|  6.40k|		h = data[7] | (data[8] << 8);
 1039|  6.40k|		frame->flags = data[9];
 1040|       |
 1041|  6.40k|		frame->info.rect.x0 = x;
 1042|  6.40k|		frame->info.rect.y0 = y;
 1043|  6.40k|		frame->info.rect.x1 = x + w;
 1044|  6.40k|		frame->info.rect.y1 = y + h;
 1045|       |
 1046|  6.40k|		frame->info.interlaced = frame->flags & NSGIF_MASK_INTERLACE;
 1047|       |
 1048|       |		/* Allow first frame to grow image dimensions. */
 1049|  6.40k|		if (gif->info.frame_count == 0) {
  ------------------
  |  Branch (1049:7): [True: 439, False: 5.96k]
  ------------------
 1050|    439|			if (x + w > gif->info.width) {
  ------------------
  |  Branch (1050:8): [True: 335, False: 104]
  ------------------
 1051|    335|				gif->info.width = x + w;
 1052|    335|			}
 1053|    439|			if (y + h > gif->info.height) {
  ------------------
  |  Branch (1053:8): [True: 316, False: 123]
  ------------------
 1054|    316|				gif->info.height = y + h;
 1055|    316|			}
 1056|    439|		}
 1057|  6.40k|	}
 1058|       |
 1059|  6.74k|	*pos += NSGIF_IMAGE_DESCRIPTOR_LEN;
 1060|  6.74k|	return NSGIF_OK;
 1061|  6.79k|}
gif.c:nsgif__parse_colour_table:
 1145|  6.74k|{
 1146|  6.74k|	nsgif_error ret;
 1147|  6.74k|	const uint8_t *data = *pos;
 1148|  6.74k|	size_t len = gif->buf + gif->buf_len - data;
 1149|  6.74k|	size_t used_bytes;
 1150|       |
 1151|  6.74k|	assert(gif != NULL);
 1152|  6.74k|	assert(frame != NULL);
 1153|       |
 1154|  6.74k|	if ((frame->flags & NSGIF_COLOUR_TABLE_MASK) == 0) {
  ------------------
  |  |  165|  6.74k|#define NSGIF_COLOUR_TABLE_MASK 0x80
  ------------------
  |  Branch (1154:6): [True: 6.49k, False: 252]
  ------------------
 1155|  6.49k|		gif->colour_table = gif->global_colour_table;
 1156|  6.49k|		return NSGIF_OK;
 1157|  6.49k|	}
 1158|       |
 1159|    252|	if (decode == false) {
  ------------------
  |  Branch (1159:6): [True: 224, False: 28]
  ------------------
 1160|    224|		frame->colour_table_offset = *pos - gif->buf;
 1161|    224|	}
 1162|       |
 1163|    252|	ret = nsgif__colour_table_extract(
 1164|    252|			gif->local_colour_table, &gif->colour_layout,
 1165|    252|			2 << (frame->flags & NSGIF_COLOUR_TABLE_SIZE_MASK),
  ------------------
  |  |  166|    252|#define NSGIF_COLOUR_TABLE_SIZE_MASK 0x07
  ------------------
 1166|    252|			data, len, &used_bytes, decode);
 1167|    252|	if (ret != NSGIF_OK) {
  ------------------
  |  Branch (1167:6): [True: 9, False: 243]
  ------------------
 1168|      9|		return ret;
 1169|      9|	}
 1170|    243|	*pos += used_bytes;
 1171|       |
 1172|    243|	if (decode) {
  ------------------
  |  Branch (1172:6): [True: 28, False: 215]
  ------------------
 1173|     28|		gif->colour_table = gif->local_colour_table;
 1174|    215|	} else {
 1175|    215|		frame->info.local_palette = true;
 1176|    215|	}
 1177|       |
 1178|    243|	return NSGIF_OK;
 1179|    252|}
gif.c:nsgif__parse_image_data:
 1197|  6.73k|{
 1198|  6.73k|	const uint8_t *data = *pos;
 1199|  6.73k|	size_t len = gif->buf + gif->buf_len - data;
 1200|  6.73k|	uint32_t frame_idx = frame - gif->frames;
 1201|  6.73k|	uint8_t minimum_code_size;
 1202|  6.73k|	nsgif_error ret;
 1203|       |
 1204|  6.73k|	assert(gif != NULL);
 1205|  6.73k|	assert(frame != NULL);
 1206|       |
 1207|  6.73k|	if (!decode) {
  ------------------
  |  Branch (1207:6): [True: 6.39k, False: 341]
  ------------------
 1208|  6.39k|		gif->frame_count_partial = frame_idx + 1;
 1209|  6.39k|	}
 1210|       |
 1211|       |	/* Ensure sufficient data remains.  A gif trailer or a minimum lzw code
 1212|       |	 * followed by a gif trailer is treated as OK, although without any
 1213|       |	 * image data. */
 1214|  6.73k|	switch (len) {
 1215|  6.70k|		default: if (data[0] == NSGIF_TRAILER) return NSGIF_OK;
  ------------------
  |  |  168|  6.70k|#define NSGIF_TRAILER 0x3b
  ------------------
  |  Branch (1215:3): [True: 6.70k, False: 25]
  |  Branch (1215:16): [True: 1, False: 6.70k]
  ------------------
 1216|  6.70k|			break;
 1217|  6.70k|		case 2: if (data[1] == NSGIF_TRAILER) return NSGIF_OK;
  ------------------
  |  |  168|      8|#define NSGIF_TRAILER 0x3b
  ------------------
  |  Branch (1217:3): [True: 8, False: 6.72k]
  |  Branch (1217:15): [True: 1, False: 7]
  ------------------
 1218|       |			/* Fall through. */
 1219|     15|		case 1: if (data[0] == NSGIF_TRAILER) return NSGIF_OK;
  ------------------
  |  |  168|     15|#define NSGIF_TRAILER 0x3b
  ------------------
  |  Branch (1219:3): [True: 8, False: 6.72k]
  |  Branch (1219:15): [True: 1, False: 14]
  ------------------
 1220|       |			/* Fall through. */
 1221|     23|		case 0: return NSGIF_ERR_END_OF_DATA;
  ------------------
  |  Branch (1221:3): [True: 9, False: 6.72k]
  ------------------
 1222|  6.73k|	}
 1223|       |
 1224|  6.70k|	minimum_code_size = data[0];
 1225|  6.70k|	if (minimum_code_size >= LZW_CODE_MAX) {
  ------------------
  |  |   21|  6.70k|#define LZW_CODE_MAX 12
  ------------------
  |  Branch (1225:6): [True: 3, False: 6.70k]
  ------------------
 1226|      3|		return NSGIF_ERR_DATA_FRAME;
 1227|      3|	}
 1228|       |
 1229|  6.70k|	if (decode) {
  ------------------
  |  Branch (1229:6): [True: 341, False: 6.36k]
  ------------------
 1230|    341|		ret = nsgif__update_bitmap(gif, frame, data, frame_idx);
 1231|  6.36k|	} else {
 1232|  6.36k|		uint32_t block_size = 0;
 1233|       |
 1234|       |		/* Skip the minimum code size. */
 1235|  6.36k|		data++;
 1236|  6.36k|		len--;
 1237|       |
 1238|  16.3k|		while (block_size != 1) {
  ------------------
  |  Branch (1238:10): [True: 10.2k, False: 6.12k]
  ------------------
 1239|  10.2k|			if (len < 1) {
  ------------------
  |  Branch (1239:8): [True: 58, False: 10.1k]
  ------------------
 1240|     58|				return NSGIF_ERR_END_OF_DATA;
 1241|     58|			}
 1242|  10.1k|			block_size = data[0] + 1;
 1243|       |			/* Check if the frame data runs off the end of the file */
 1244|  10.1k|			if (block_size > len) {
  ------------------
  |  Branch (1244:8): [True: 180, False: 10.0k]
  ------------------
 1245|    180|				frame->lzw_data_length += len;
 1246|    180|				return NSGIF_ERR_END_OF_DATA;
 1247|    180|			}
 1248|       |
 1249|  10.0k|			len -= block_size;
 1250|  10.0k|			data += block_size;
 1251|  10.0k|			frame->lzw_data_length += block_size;
 1252|  10.0k|		}
 1253|       |
 1254|  6.12k|		*pos = data;
 1255|       |
 1256|  6.12k|		gif->info.frame_count = frame_idx + 1;
 1257|  6.12k|		gif->frames[frame_idx].info.display = true;
 1258|       |
 1259|  6.12k|		return NSGIF_OK;
 1260|  6.36k|	}
 1261|       |
 1262|    341|	return ret;
 1263|  6.70k|}
gif.c:nsgif__update_bitmap:
  691|    341|{
  692|    341|	nsgif_error ret;
  693|    341|	uint32_t *bitmap;
  694|       |
  695|    341|	gif->decoded_frame = frame_idx;
  696|       |
  697|    341|	bitmap = nsgif__bitmap_get(gif);
  698|    341|	if (bitmap == NULL) {
  ------------------
  |  Branch (698:6): [True: 0, False: 341]
  ------------------
  699|      0|		return NSGIF_ERR_OOM;
  700|      0|	}
  701|       |
  702|       |	/* Handle any bitmap clearing/restoration required before decoding this
  703|       |	 * frame. */
  704|    341|	if (frame_idx == 0 || gif->decoded_frame == NSGIF_FRAME_INVALID) {
  ------------------
  |  |  156|      0|#define NSGIF_FRAME_INVALID UINT32_MAX
  ------------------
  |  Branch (704:6): [True: 341, False: 0]
  |  Branch (704:24): [True: 0, False: 0]
  ------------------
  705|    341|		nsgif__restore_bg(gif, NULL, bitmap);
  706|       |
  707|    341|	} else {
  708|      0|		struct nsgif_frame *prev = &gif->frames[frame_idx - 1];
  709|       |
  710|      0|		if (prev->info.disposal == NSGIF_DISPOSAL_RESTORE_BG) {
  ------------------
  |  Branch (710:7): [True: 0, False: 0]
  ------------------
  711|      0|			nsgif__restore_bg(gif, prev, bitmap);
  712|       |
  713|      0|		} else if (prev->info.disposal == NSGIF_DISPOSAL_RESTORE_PREV) {
  ------------------
  |  Branch (713:14): [True: 0, False: 0]
  ------------------
  714|      0|			ret = nsgif__recover_frame(gif, bitmap);
  715|      0|			if (ret != NSGIF_OK) {
  ------------------
  |  Branch (715:8): [True: 0, False: 0]
  ------------------
  716|      0|				nsgif__restore_bg(gif, prev, bitmap);
  717|      0|			}
  718|      0|		}
  719|      0|	}
  720|       |
  721|    341|	if (frame->info.disposal == NSGIF_DISPOSAL_RESTORE_PREV) {
  ------------------
  |  Branch (721:6): [True: 32, False: 309]
  ------------------
  722|       |		/* Store the previous frame for later restoration */
  723|     32|		nsgif__record_frame(gif, bitmap);
  724|     32|	}
  725|       |
  726|    341|	ret = nsgif__decode(gif, frame, data, bitmap);
  727|       |
  728|    341|	nsgif__bitmap_modified(gif);
  729|       |
  730|    341|	if (!frame->decoded) {
  ------------------
  |  Branch (730:6): [True: 341, False: 0]
  ------------------
  731|    341|		frame->opaque = nsgif__bitmap_get_opaque(gif);
  732|    341|		frame->decoded = true;
  733|    341|	}
  734|    341|	nsgif__bitmap_set_opaque(gif, frame);
  735|       |
  736|    341|	return ret;
  737|    341|}
gif.c:nsgif__bitmap_get:
  227|    373|{
  228|    373|	nsgif_error ret;
  229|       |
  230|       |	/* Make sure we have a buffer to decode to. */
  231|    373|	ret = nsgif__initialise_sprite(gif, gif->info.width, gif->info.height);
  232|    373|	if (ret != NSGIF_OK) {
  ------------------
  |  Branch (232:6): [True: 0, False: 373]
  ------------------
  233|      0|		return NULL;
  234|      0|	}
  235|       |
  236|    373|	gif->rowspan = gif->info.width;
  237|    373|	if (gif->bitmap.get_rowspan) {
  ------------------
  |  Branch (237:6): [True: 0, False: 373]
  ------------------
  238|      0|		gif->rowspan = gif->bitmap.get_rowspan(gif->frame_image);
  239|      0|	}
  240|       |
  241|       |	/* Get the frame data */
  242|    373|	assert(gif->bitmap.get_buffer);
  243|    373|	return (void *)gif->bitmap.get_buffer(gif->frame_image);
  244|    373|}
gif.c:nsgif__initialise_sprite:
  204|    373|{
  205|       |	/* Already allocated? */
  206|    373|	if (gif->frame_image) {
  ------------------
  |  Branch (206:6): [True: 32, False: 341]
  ------------------
  207|     32|		return NSGIF_OK;
  208|     32|	}
  209|       |
  210|    341|	assert(gif->bitmap.create);
  211|    341|	gif->frame_image = gif->bitmap.create(width, height);
  212|    341|	if (gif->frame_image == NULL) {
  ------------------
  |  Branch (212:6): [True: 0, False: 341]
  ------------------
  213|      0|		return NSGIF_ERR_OOM;
  214|      0|	}
  215|       |
  216|    341|	return NSGIF_OK;
  217|    341|}
gif.c:nsgif__restore_bg:
  643|    341|{
  644|    341|	size_t pixel_bytes = sizeof(*bitmap);
  645|       |
  646|    341|	if (frame == NULL) {
  ------------------
  |  Branch (646:6): [True: 341, False: 0]
  ------------------
  647|    341|		size_t width  = gif->info.width;
  648|    341|		size_t height = gif->info.height;
  649|       |
  650|    341|		memset(bitmap, NSGIF_TRANSPARENT_COLOUR,
  ------------------
  |  |  159|    341|#define NSGIF_TRANSPARENT_COLOUR 0x00
  ------------------
  651|    341|				width * height * pixel_bytes);
  652|    341|	} else {
  653|      0|		uint32_t width  = frame->info.rect.x1 - frame->info.rect.x0;
  654|      0|		uint32_t height = frame->info.rect.y1 - frame->info.rect.y0;
  655|      0|		uint32_t offset_x = frame->info.rect.x0;
  656|      0|		uint32_t offset_y = frame->info.rect.y0;
  657|       |
  658|      0|		if (frame->info.display == false ||
  ------------------
  |  Branch (658:7): [True: 0, False: 0]
  ------------------
  659|      0|		    frame->info.rect.x0 >= gif->info.width ||
  ------------------
  |  Branch (659:7): [True: 0, False: 0]
  ------------------
  660|      0|		    frame->info.rect.y0 >= gif->info.height) {
  ------------------
  |  Branch (660:7): [True: 0, False: 0]
  ------------------
  661|      0|			return;
  662|      0|		}
  663|       |
  664|      0|		width -= gif__clip(offset_x, width, gif->info.width);
  665|      0|		height -= gif__clip(offset_y, height, gif->info.height);
  666|       |
  667|      0|		if (frame->info.transparency) {
  ------------------
  |  Branch (667:7): [True: 0, False: 0]
  ------------------
  668|      0|			for (uint32_t y = 0; y < height; y++) {
  ------------------
  |  Branch (668:25): [True: 0, False: 0]
  ------------------
  669|      0|				uint32_t *scanline = bitmap + offset_x +
  670|      0|						(offset_y + y) * gif->info.width;
  671|      0|				memset(scanline, NSGIF_TRANSPARENT_COLOUR,
  ------------------
  |  |  159|      0|#define NSGIF_TRANSPARENT_COLOUR 0x00
  ------------------
  672|      0|						width * pixel_bytes);
  673|      0|			}
  674|      0|		} else {
  675|      0|			for (uint32_t y = 0; y < height; y++) {
  ------------------
  |  Branch (675:25): [True: 0, False: 0]
  ------------------
  676|      0|				uint32_t *scanline = bitmap + offset_x +
  677|      0|						(offset_y + y) * gif->info.width;
  678|      0|				for (uint32_t x = 0; x < width; x++) {
  ------------------
  |  Branch (678:26): [True: 0, False: 0]
  ------------------
  679|      0|					scanline[x] = gif->info.background;
  680|      0|				}
  681|      0|			}
  682|      0|		}
  683|      0|	}
  684|    341|}
gif.c:gif__clip:
  409|    556|{
  410|    556|	uint32_t frame_ext = frame_off + frame_dim;
  411|       |
  412|    556|	if (frame_ext <= image_ext) {
  ------------------
  |  Branch (412:6): [True: 556, False: 0]
  ------------------
  413|    556|		return 0;
  414|    556|	}
  415|       |
  416|      0|	return frame_ext - image_ext;
  417|    556|}
gif.c:nsgif__record_frame:
  297|     32|{
  298|     32|	size_t pixel_bytes = sizeof(*bitmap);
  299|     32|	size_t height = gif->info.height;
  300|     32|	size_t width  = gif->info.width;
  301|     32|	uint32_t *prev_frame;
  302|       |
  303|     32|	if (gif->decoded_frame == NSGIF_FRAME_INVALID ||
  ------------------
  |  |  156|     64|#define NSGIF_FRAME_INVALID UINT32_MAX
  ------------------
  |  Branch (303:6): [True: 0, False: 32]
  ------------------
  304|     32|	    gif->decoded_frame == gif->prev_index) {
  ------------------
  |  Branch (304:6): [True: 0, False: 32]
  ------------------
  305|       |		/* No frame to copy, or already have this frame recorded. */
  306|      0|		return;
  307|      0|	}
  308|       |
  309|     32|	bitmap = nsgif__bitmap_get(gif);
  310|     32|	if (bitmap == NULL) {
  ------------------
  |  Branch (310:6): [True: 0, False: 32]
  ------------------
  311|      0|		return;
  312|      0|	}
  313|       |
  314|     32|	if (gif->prev_frame == NULL) {
  ------------------
  |  Branch (314:6): [True: 32, False: 0]
  ------------------
  315|     32|		prev_frame = realloc(gif->prev_frame,
  316|     32|				width * height * pixel_bytes);
  317|     32|		if (prev_frame == NULL) {
  ------------------
  |  Branch (317:7): [True: 0, False: 32]
  ------------------
  318|      0|			return;
  319|      0|		}
  320|     32|	} else {
  321|      0|		prev_frame = gif->prev_frame;
  322|      0|	}
  323|       |
  324|     32|	memcpy(prev_frame, bitmap, width * height * pixel_bytes);
  325|       |
  326|     32|	gif->prev_frame  = prev_frame;
  327|     32|	gif->prev_index  = gif->decoded_frame;
  328|     32|}
gif.c:nsgif__decode:
  602|    341|{
  603|    341|	nsgif_error ret;
  604|    341|	uint32_t width  = frame->info.rect.x1 - frame->info.rect.x0;
  605|    341|	uint32_t height = frame->info.rect.y1 - frame->info.rect.y0;
  606|    341|	uint32_t offset_x = frame->info.rect.x0;
  607|    341|	uint32_t offset_y = frame->info.rect.y0;
  608|    341|	uint32_t transparency_index = frame->transparency_index;
  609|    341|	uint32_t *restrict colour_table = gif->colour_table;
  610|       |
  611|    341|	if (frame->info.interlaced == false && offset_x == 0 &&
  ------------------
  |  Branch (611:6): [True: 286, False: 55]
  |  Branch (611:41): [True: 175, False: 111]
  ------------------
  612|    341|			width == gif->info.width &&
  ------------------
  |  Branch (612:4): [True: 125, False: 50]
  ------------------
  613|    341|			width == gif->rowspan) {
  ------------------
  |  Branch (613:4): [True: 125, False: 0]
  ------------------
  614|    125|		ret = nsgif__decode_simple(gif, height, offset_y,
  615|    125|				data, transparency_index,
  616|    125|				frame_data, colour_table);
  617|    216|	} else {
  618|    216|		ret = nsgif__decode_complex(gif, width, height,
  619|    216|				offset_x, offset_y, frame->info.interlaced,
  620|    216|				data, transparency_index,
  621|    216|				frame_data, colour_table);
  622|    216|	}
  623|       |
  624|    341|	if (gif->data_complete && ret == NSGIF_ERR_END_OF_DATA) {
  ------------------
  |  Branch (624:6): [True: 341, False: 0]
  |  Branch (624:28): [True: 141, False: 200]
  ------------------
  625|       |		/* This is all the data there is, so make do. */
  626|    141|		ret = NSGIF_OK;
  627|    141|	}
  628|       |
  629|    341|	return ret;
  630|    341|}
gif.c:nsgif__decode_simple:
  546|    125|{
  547|    125|	uint32_t pixels;
  548|    125|	uint32_t written = 0;
  549|    125|	nsgif_error ret = NSGIF_OK;
  550|    125|	lzw_result res;
  551|       |
  552|    125|	if (offset_y >= gif->info.height) {
  ------------------
  |  Branch (552:6): [True: 1, False: 124]
  ------------------
  553|      1|		return NSGIF_OK;
  554|      1|	}
  555|       |
  556|    124|	height -= gif__clip(offset_y, height, gif->info.height);
  557|       |
  558|    124|	if (height == 0) {
  ------------------
  |  Branch (558:6): [True: 6, False: 118]
  ------------------
  559|      6|		return NSGIF_OK;
  560|      6|	}
  561|       |
  562|       |	/* Initialise the LZW decoding */
  563|    118|	res = lzw_decode_init_map(gif->lzw_ctx, data[0],
  564|    118|			transparency_index, colour_table,
  565|    118|			gif->buf, gif->buf_len,
  566|    118|			data + 1 - gif->buf);
  567|    118|	if (res != LZW_OK) {
  ------------------
  |  Branch (567:6): [True: 13, False: 105]
  ------------------
  568|     13|		return nsgif__error_from_lzw(res);
  569|     13|	}
  570|       |
  571|    105|	frame_data += (offset_y * gif->info.width);
  572|    105|	pixels = gif->info.width * height;
  573|       |
  574|    124|	while (pixels > 0) {
  ------------------
  |  Branch (574:9): [True: 105, False: 19]
  ------------------
  575|    105|		res = lzw_decode_map(gif->lzw_ctx,
  576|    105|				frame_data, pixels, &written);
  577|    105|		pixels -= written;
  578|    105|		frame_data += written;
  579|    105|		if (res != LZW_OK) {
  ------------------
  |  Branch (579:7): [True: 86, False: 19]
  ------------------
  580|       |			/* Unexpected end of frame, try to recover */
  581|     86|			if (res == LZW_OK_EOD || res == LZW_EOI_CODE) {
  ------------------
  |  Branch (581:8): [True: 9, False: 77]
  |  Branch (581:29): [True: 7, False: 70]
  ------------------
  582|     16|				ret = NSGIF_OK;
  583|     70|			} else {
  584|     70|				ret = nsgif__error_from_lzw(res);
  585|     70|			}
  586|     86|			break;
  587|     86|		}
  588|    105|	}
  589|       |
  590|    105|	if (pixels == 0) {
  ------------------
  |  Branch (590:6): [True: 19, False: 86]
  ------------------
  591|     19|		ret = NSGIF_OK;
  592|     19|	}
  593|       |
  594|    105|	return ret;
  595|    118|}
gif.c:nsgif__decode_complex:
  449|    216|{
  450|    216|	lzw_result res;
  451|    216|	nsgif_error ret = NSGIF_OK;
  452|    216|	uint32_t clip_x = gif__clip(offset_x, width, gif->info.width);
  453|    216|	uint32_t clip_y = gif__clip(offset_y, height, gif->info.height);
  454|    216|	const uint8_t *uncompressed;
  455|    216|	uint32_t available = 0;
  456|    216|	uint8_t step = 24;
  457|    216|	uint32_t skip = 0;
  458|    216|	uint32_t y = 0;
  459|       |
  460|    216|	if (offset_x >= gif->info.width ||
  ------------------
  |  Branch (460:6): [True: 21, False: 195]
  ------------------
  461|    216|	    offset_y >= gif->info.height) {
  ------------------
  |  Branch (461:6): [True: 9, False: 186]
  ------------------
  462|     30|		return NSGIF_OK;
  463|     30|	}
  464|       |
  465|    186|	width -= clip_x;
  466|    186|	height -= clip_y;
  467|       |
  468|    186|	if (width == 0 || height == 0) {
  ------------------
  |  Branch (468:6): [True: 10, False: 176]
  |  Branch (468:20): [True: 6, False: 170]
  ------------------
  469|     16|		return NSGIF_OK;
  470|     16|	}
  471|       |
  472|       |	/* Initialise the LZW decoding */
  473|    170|	res = lzw_decode_init(gif->lzw_ctx, data[0],
  474|    170|			gif->buf, gif->buf_len,
  475|    170|			data + 1 - gif->buf);
  476|    170|	if (res != LZW_OK) {
  ------------------
  |  Branch (476:6): [True: 32, False: 138]
  ------------------
  477|     32|		return nsgif__error_from_lzw(res);
  478|     32|	}
  479|       |
  480|  1.52k|	do {
  481|  1.52k|		uint32_t x;
  482|  1.52k|		uint32_t *frame_scanline;
  483|       |
  484|  1.52k|		frame_scanline = frame_data + offset_x +
  485|  1.52k|				(y + offset_y) * gif->rowspan;
  486|       |
  487|  1.52k|		x = width;
  488|  3.05k|		while (x > 0) {
  ------------------
  |  Branch (488:10): [True: 1.64k, False: 1.41k]
  ------------------
  489|  1.64k|			unsigned row_available;
  490|  1.79k|			while (available == 0) {
  ------------------
  |  Branch (490:11): [True: 264, False: 1.52k]
  ------------------
  491|    264|				if (res != LZW_OK) {
  ------------------
  |  Branch (491:9): [True: 112, False: 152]
  ------------------
  492|       |					/* Unexpected end of frame, try to recover */
  493|    112|					if (res == LZW_OK_EOD ||
  ------------------
  |  Branch (493:10): [True: 17, False: 95]
  ------------------
  494|    112|					    res == LZW_EOI_CODE) {
  ------------------
  |  Branch (494:10): [True: 13, False: 82]
  ------------------
  495|     30|						ret = NSGIF_OK;
  496|     82|					} else {
  497|     82|						ret = nsgif__error_from_lzw(res);
  498|     82|					}
  499|    112|					return ret;
  500|    112|				}
  501|    152|				res = lzw_decode(gif->lzw_ctx,
  502|    152|						&uncompressed, &available);
  503|       |
  504|    152|				if (available == 0) {
  ------------------
  |  Branch (504:9): [True: 1, False: 151]
  ------------------
  505|      1|					return NSGIF_OK;
  506|      1|				}
  507|    151|				gif__jump_data(&skip, &available, &uncompressed);
  508|    151|			}
  509|       |
  510|  1.52k|			row_available = x < available ? x : available;
  ------------------
  |  Branch (510:20): [True: 1.40k, False: 127]
  ------------------
  511|  1.52k|			x -= row_available;
  512|  1.52k|			available -= row_available;
  513|  1.52k|			if (transparency_index > 0xFF) {
  ------------------
  |  Branch (513:8): [True: 643, False: 885]
  ------------------
  514|  18.3k|				while (row_available-- > 0) {
  ------------------
  |  Branch (514:12): [True: 17.7k, False: 643]
  ------------------
  515|  17.7k|					*frame_scanline++ =
  516|  17.7k|						colour_table[*uncompressed++];
  517|  17.7k|				}
  518|    885|			} else {
  519|  68.7k|				while (row_available-- > 0) {
  ------------------
  |  Branch (519:12): [True: 67.8k, False: 885]
  ------------------
  520|  67.8k|					register uint32_t colour;
  521|  67.8k|					colour = *uncompressed++;
  522|  67.8k|					if (colour != transparency_index) {
  ------------------
  |  Branch (522:10): [True: 8.56k, False: 59.2k]
  ------------------
  523|  8.56k|						*frame_scanline =
  524|  8.56k|							colour_table[colour];
  525|  8.56k|					}
  526|  67.8k|					frame_scanline++;
  527|  67.8k|				}
  528|    885|			}
  529|  1.52k|		}
  530|       |
  531|  1.41k|		skip = clip_x;
  532|  1.41k|		gif__jump_data(&skip, &available, &uncompressed);
  533|  1.41k|	} while (nsgif__next_row(interlace, height, &y, &step));
  ------------------
  |  Branch (533:11): [True: 1.38k, False: 25]
  ------------------
  534|       |
  535|     25|	return ret;
  536|    138|}
gif.c:gif__jump_data:
  430|  1.56k|{
  431|  1.56k|	uint32_t jump = (*skip < *available) ? *skip : *available;
  ------------------
  |  Branch (431:18): [True: 1.55k, False: 12]
  ------------------
  432|       |
  433|  1.56k|	*skip -= jump;
  434|  1.56k|	*available -= jump;
  435|  1.56k|	*pos += jump;
  436|  1.56k|}
gif.c:nsgif__next_row:
  388|  1.41k|{
  389|  1.41k|	if (!interlace) {
  ------------------
  |  Branch (389:6): [True: 550, False: 863]
  ------------------
  390|    550|		return (++*y != height);
  391|    863|	} else {
  392|    863|		return nsgif__deinterlace(height, y, step);
  393|    863|	}
  394|  1.41k|}
gif.c:nsgif__deinterlace:
  358|    863|{
  359|    863|	*y += *step & 0xf;
  360|       |
  361|    863|	if (*y < height) return true;
  ------------------
  |  Branch (361:6): [True: 797, False: 66]
  ------------------
  362|       |
  363|     66|	switch (*step) {
  364|     28|	case 24: *y = 4; *step = 8; if (*y < height) return true;
  ------------------
  |  Branch (364:2): [True: 28, False: 38]
  |  Branch (364:34): [True: 26, False: 2]
  ------------------
  365|       |	         /* Fall through. */
  366|     21|	case  8: *y = 2; *step = 4; if (*y < height) return true;
  ------------------
  |  Branch (366:2): [True: 19, False: 47]
  |  Branch (366:34): [True: 20, False: 1]
  ------------------
  367|       |	         /* Fall through. */
  368|     16|	case  4: *y = 1; *step = 2; if (*y < height) return true;
  ------------------
  |  Branch (368:2): [True: 15, False: 51]
  |  Branch (368:34): [True: 15, False: 1]
  ------------------
  369|       |	         /* Fall through. */
  370|      5|	default:
  ------------------
  |  Branch (370:2): [True: 4, False: 62]
  ------------------
  371|      5|		break;
  372|     66|	}
  373|       |
  374|      5|	return false;
  375|     66|}
gif.c:nsgif__bitmap_modified:
  253|    341|{
  254|    341|	if (gif->bitmap.modified) {
  ------------------
  |  Branch (254:6): [True: 0, False: 341]
  ------------------
  255|      0|		gif->bitmap.modified(gif->frame_image);
  256|      0|	}
  257|    341|}
gif.c:nsgif__bitmap_get_opaque:
  285|    341|{
  286|    341|	if (gif->bitmap.test_opaque) {
  ------------------
  |  Branch (286:6): [True: 0, False: 341]
  ------------------
  287|      0|		return gif->bitmap.test_opaque(
  288|      0|				gif->frame_image);
  289|      0|	}
  290|       |
  291|    341|	return false;
  292|    341|}
gif.c:nsgif__bitmap_set_opaque:
  268|    341|{
  269|    341|	if (gif->bitmap.set_opaque) {
  ------------------
  |  Branch (269:6): [True: 0, False: 341]
  ------------------
  270|      0|		gif->bitmap.set_opaque(
  271|      0|				gif->frame_image, frame->opaque);
  272|      0|	}
  273|    341|}
gif.c:nsgif__colour_table_decode:
 1076|    441|{
 1077|    441|	uint8_t *entry = (uint8_t *)colour_table;
 1078|       |
 1079|  7.28k|	while (colour_table_entries--) {
  ------------------
  |  Branch (1079:9): [True: 6.84k, False: 441]
  ------------------
 1080|       |		/* Gif colour map contents are r,g,b.
 1081|       |		 *
 1082|       |		 * We want to pack them bytewise into the colour table,
 1083|       |		 * according to the client colour layout.
 1084|       |		 */
 1085|       |
 1086|  6.84k|		entry[layout->r] = *data++;
 1087|  6.84k|		entry[layout->g] = *data++;
 1088|  6.84k|		entry[layout->b] = *data++;
 1089|  6.84k|		entry[layout->a] = 0xff;
 1090|       |
 1091|  6.84k|		entry += sizeof(uint32_t);
 1092|  6.84k|	}
 1093|    441|}

lzw_context_create:
  101|    616|{
  102|    616|	struct lzw_ctx *c = malloc(sizeof(*c));
  103|    616|	if (c == NULL) {
  ------------------
  |  Branch (103:6): [True: 0, False: 616]
  ------------------
  104|      0|		return LZW_NO_MEM;
  105|      0|	}
  106|       |
  107|    616|	*ctx = c;
  108|    616|	return LZW_OK;
  109|    616|}
lzw_context_destroy:
  113|    643|{
  114|    643|	free(ctx);
  115|    643|}
lzw_decode_init:
  265|    288|{
  266|    288|	struct lzw_table_entry *table = ctx->table;
  267|    288|	lzw_result res;
  268|    288|	uint16_t code;
  269|       |
  270|    288|	if (minimum_code_size >= LZW_CODE_MAX) {
  ------------------
  |  |   21|    288|#define LZW_CODE_MAX 12
  ------------------
  |  Branch (270:6): [True: 0, False: 288]
  ------------------
  271|      0|		return LZW_BAD_ICODE;
  272|      0|	}
  273|       |
  274|       |	/* Initialise the input reading context */
  275|    288|	ctx->input.data = input_data;
  276|    288|	ctx->input.data_len = input_length;
  277|    288|	ctx->input.data_sb_next = input_pos;
  278|       |
  279|    288|	ctx->input.sb_bit = 0;
  280|    288|	ctx->input.sb_bit_count = 0;
  281|       |
  282|       |	/* Initialise the table building context */
  283|    288|	ctx->initial_code_size = minimum_code_size + 1;
  284|       |
  285|    288|	ctx->clear_code = (1 << minimum_code_size) + 0;
  286|    288|	ctx->eoi_code   = (1 << minimum_code_size) + 1;
  287|       |
  288|    288|	ctx->output_left = 0;
  289|       |
  290|       |	/* Initialise the standard table entries */
  291|  34.3k|	for (uint16_t i = 0; i < ctx->clear_code; i++) {
  ------------------
  |  Branch (291:23): [True: 34.0k, False: 288]
  ------------------
  292|  34.0k|		table[i].first = i;
  293|  34.0k|		table[i].value = i;
  294|  34.0k|		table[i].count = 1;
  295|  34.0k|	}
  296|       |
  297|    288|	res = lzw__handle_clear(ctx, &code);
  298|    288|	if (res != LZW_OK) {
  ------------------
  |  Branch (298:6): [True: 45, False: 243]
  ------------------
  299|     45|		return res;
  300|     45|	}
  301|       |
  302|       |	/* Store details of this code as "previous code" to the context. */
  303|    243|	ctx->prev_code_first = ctx->table[code].first;
  304|    243|	ctx->prev_code_count = ctx->table[code].count;
  305|    243|	ctx->prev_code = code;
  306|       |
  307|       |	/* Add code to context for immediate output. */
  308|    243|	ctx->output_code = code;
  309|    243|	ctx->output_left = 1;
  310|       |
  311|    243|	ctx->has_transparency = false;
  312|    243|	ctx->transparency_idx = 0;
  313|    243|	ctx->colour_map = NULL;
  314|       |
  315|    243|	return LZW_OK;
  316|    288|}
lzw_decode_init_map:
  327|    118|{
  328|    118|	lzw_result res;
  329|       |
  330|    118|	if (colour_table == NULL) {
  ------------------
  |  Branch (330:6): [True: 0, False: 118]
  ------------------
  331|      0|		return LZW_BAD_PARAM;
  332|      0|	}
  333|       |
  334|    118|	res = lzw_decode_init(ctx, minimum_code_size,
  335|    118|			input_data, input_length, input_pos);
  336|    118|	if (res != LZW_OK) {
  ------------------
  |  Branch (336:6): [True: 13, False: 105]
  ------------------
  337|     13|		return res;
  338|     13|	}
  339|       |
  340|    105|	ctx->has_transparency = (transparency_idx <= 0xFF);
  341|    105|	ctx->transparency_idx = transparency_idx;
  342|    105|	ctx->colour_map = colour_table;
  343|       |
  344|    105|	return LZW_OK;
  345|    118|}
lzw_decode:
  499|    152|{
  500|    152|	const uint32_t output_length = sizeof(ctx->stack_base);
  501|       |
  502|    152|	*output_written = 0;
  503|    152|	*output_data = ctx->stack_base;
  504|       |
  505|    152|	if (ctx->output_left != 0) {
  ------------------
  |  Branch (505:6): [True: 148, False: 4]
  ------------------
  506|    148|		*output_written += lzw__write_fn(ctx,
  507|    148|				ctx->stack_base, output_length, *output_written,
  508|    148|				ctx->output_code, ctx->output_left);
  509|    148|	}
  510|       |
  511|  29.1k|	while (*output_written != output_length) {
  ------------------
  |  Branch (511:9): [True: 29.1k, False: 15]
  ------------------
  512|  29.1k|		lzw_result res = lzw__decode(ctx, lzw__write_fn,
  513|  29.1k|				ctx->stack_base, output_length, output_written);
  514|  29.1k|		if (res != LZW_OK) {
  ------------------
  |  Branch (514:7): [True: 137, False: 29.0k]
  ------------------
  515|    137|			return res;
  516|    137|		}
  517|  29.1k|	}
  518|       |
  519|     15|	return LZW_OK;
  520|    152|}
lzw_decode_map:
  591|    105|{
  592|    105|	*output_written = 0;
  593|       |
  594|    105|	if (ctx->colour_map == NULL) {
  ------------------
  |  Branch (594:6): [True: 0, False: 105]
  ------------------
  595|      0|		return LZW_NO_COLOUR;
  596|      0|	}
  597|       |
  598|    105|	if (ctx->output_left != 0) {
  ------------------
  |  Branch (598:6): [True: 105, False: 0]
  ------------------
  599|    105|		*output_written += lzw__map_write_fn(ctx,
  600|    105|				output_data, output_length, *output_written,
  601|    105|				ctx->output_code, ctx->output_left);
  602|    105|	}
  603|       |
  604|  4.49k|	while (*output_written != output_length) {
  ------------------
  |  Branch (604:9): [True: 4.48k, False: 19]
  ------------------
  605|  4.48k|		lzw_result res = lzw__decode(ctx, lzw__map_write_fn,
  606|  4.48k|				output_data, output_length, output_written);
  607|  4.48k|		if (res != LZW_OK) {
  ------------------
  |  Branch (607:7): [True: 86, False: 4.39k]
  ------------------
  608|     86|			return res;
  609|     86|		}
  610|  4.48k|	}
  611|       |
  612|     19|	return LZW_OK;
  613|    105|}
lzw.c:lzw__handle_clear:
  232|  6.90k|{
  233|  6.90k|	uint16_t code;
  234|       |
  235|       |	/* Reset table building context */
  236|  6.90k|	ctx->code_size = ctx->initial_code_size;
  237|  6.90k|	ctx->code_max = (1 << ctx->initial_code_size) - 1;
  238|  6.90k|	ctx->table_size = ctx->eoi_code + 1;
  239|       |
  240|       |	/* There might be a sequence of clear codes, so process them all */
  241|  16.1k|	do {
  242|  16.1k|		lzw_result res = lzw__read_code(&ctx->input,
  243|  16.1k|				ctx->code_size, &code);
  244|  16.1k|		if (res != LZW_OK) {
  ------------------
  |  Branch (244:7): [True: 62, False: 16.0k]
  ------------------
  245|     62|			return res;
  246|     62|		}
  247|  16.1k|	} while (code == ctx->clear_code);
  ------------------
  |  Branch (247:11): [True: 9.24k, False: 6.84k]
  ------------------
  248|       |
  249|       |	/* The initial code must be from the initial table. */
  250|  6.84k|	if (code > ctx->clear_code) {
  ------------------
  |  Branch (250:6): [True: 13, False: 6.83k]
  ------------------
  251|     13|		return LZW_BAD_ICODE;
  252|     13|	}
  253|       |
  254|  6.83k|	*code_out = code;
  255|  6.83k|	return LZW_OK;
  256|  6.84k|}
lzw.c:lzw__read_code:
  167|  49.8k|{
  168|  49.8k|	uint32_t code = 0;
  169|  49.8k|	uint32_t current_bit = ctx->sb_bit & 0x7;
  170|       |
  171|  49.8k|	if (ctx->sb_bit + 24 <= ctx->sb_bit_count) {
  ------------------
  |  Branch (171:6): [True: 43.9k, False: 5.81k]
  ------------------
  172|       |		/* Fast path: read three bytes from this sub-block */
  173|  43.9k|		const uint8_t *data = ctx->sb_data + (ctx->sb_bit >> 3);
  174|  43.9k|		code |= *data++ <<  0;
  175|  43.9k|		code |= *data++ <<  8;
  176|  43.9k|		code |= *data   << 16;
  177|  43.9k|		ctx->sb_bit += code_size;
  178|  43.9k|	} else {
  179|       |		/* Slow path: code spans sub-blocks */
  180|  5.81k|		uint8_t byte_advance = (current_bit + code_size) >> 3;
  181|  5.81k|		uint8_t byte = 0;
  182|  5.81k|		uint8_t bits_remaining_0 = (code_size < (8u - current_bit)) ?
  ------------------
  |  Branch (182:30): [True: 4.81k, False: 999]
  ------------------
  183|  4.81k|				code_size : (8u - current_bit);
  184|  5.81k|		uint8_t bits_remaining_1 = code_size - bits_remaining_0;
  185|  5.81k|		uint8_t bits_used[3] = {
  186|  5.81k|			[0] = bits_remaining_0,
  187|  5.81k|			[1] = bits_remaining_1 < 8 ? bits_remaining_1 : 8,
  ------------------
  |  Branch (187:10): [True: 5.78k, False: 27]
  ------------------
  188|  5.81k|			[2] = bits_remaining_1 - 8,
  189|  5.81k|		};
  190|       |
  191|  5.81k|		assert(byte_advance <= 2);
  192|       |
  193|  6.33k|		while (true) {
  194|  6.33k|			const uint8_t *data = ctx->sb_data;
  195|  6.33k|			lzw_result res;
  196|       |
  197|       |			/* Get any data from end of this sub-block */
  198|  12.9k|			while (byte <= byte_advance &&
  ------------------
  |  Branch (198:11): [True: 7.35k, False: 5.62k]
  ------------------
  199|  12.9k|					ctx->sb_bit < ctx->sb_bit_count) {
  ------------------
  |  Branch (199:6): [True: 6.64k, False: 704]
  ------------------
  200|  6.64k|				code |= data[ctx->sb_bit >> 3] << (byte << 3);
  201|  6.64k|				ctx->sb_bit += bits_used[byte];
  202|  6.64k|				byte++;
  203|  6.64k|			}
  204|       |
  205|       |			/* Check if we have all we need */
  206|  6.33k|			if (byte > byte_advance) {
  ------------------
  |  Branch (206:8): [True: 5.62k, False: 704]
  ------------------
  207|  5.62k|				break;
  208|  5.62k|			}
  209|       |
  210|       |			/* Move to next sub-block */
  211|    704|			res = lzw__block_advance(ctx);
  212|    704|			if (res != LZW_OK) {
  ------------------
  |  Branch (212:8): [True: 189, False: 515]
  ------------------
  213|    189|				return res;
  214|    189|			}
  215|    704|		}
  216|  5.81k|	}
  217|       |
  218|  49.6k|	*code_out = (code >> current_bit) & ((1 << code_size) - 1);
  219|  49.6k|	return LZW_OK;
  220|  49.8k|}
lzw.c:lzw__block_advance:
  124|    704|{
  125|    704|	size_t block_size;
  126|    704|	size_t next_block_pos = ctx->data_sb_next;
  127|    704|	const uint8_t *data_next = ctx->data + next_block_pos;
  128|       |
  129|    704|	if (next_block_pos >= ctx->data_len) {
  ------------------
  |  Branch (129:6): [True: 32, False: 672]
  ------------------
  130|     32|		return LZW_NO_DATA;
  131|     32|	}
  132|       |
  133|    672|	block_size = *data_next;
  134|       |
  135|    672|	if ((next_block_pos + block_size) >= ctx->data_len) {
  ------------------
  |  Branch (135:6): [True: 104, False: 568]
  ------------------
  136|    104|		return LZW_NO_DATA;
  137|    104|	}
  138|       |
  139|    568|	ctx->sb_bit = 0;
  140|    568|	ctx->sb_bit_count = block_size * 8;
  141|       |
  142|    568|	if (block_size == 0) {
  ------------------
  |  Branch (142:6): [True: 53, False: 515]
  ------------------
  143|     53|		ctx->data_sb_next += 1;
  144|     53|		return LZW_OK_EOD;
  145|     53|	}
  146|       |
  147|    515|	ctx->sb_data = data_next + 1;
  148|    515|	ctx->data_sb_next += block_size + 1;
  149|       |
  150|    515|	return LZW_OK;
  151|    568|}
lzw.c:lzw__write_fn:
  463|  29.1k|{
  464|  29.1k|	uint8_t *restrict output_pos = (uint8_t *)output_data + output_used;
  465|  29.1k|	const struct lzw_table_entry * const table = ctx->table;
  466|  29.1k|	uint32_t space = output_length - output_used;
  467|  29.1k|	uint16_t count = left;
  468|       |
  469|  29.1k|	if (count > space) {
  ------------------
  |  Branch (469:6): [True: 10, False: 29.1k]
  ------------------
  470|     10|		left = count - space;
  471|     10|		count = space;
  472|  29.1k|	} else {
  473|  29.1k|		left = 0;
  474|  29.1k|	}
  475|       |
  476|  29.1k|	ctx->output_code = code;
  477|  29.1k|	ctx->output_left = left;
  478|       |
  479|       |	/* Skip over any values we don't have space for. */
  480|  29.4k|	for (unsigned i = left; i != 0; i--) {
  ------------------
  |  Branch (480:26): [True: 253, False: 29.1k]
  ------------------
  481|    253|		const struct lzw_table_entry *entry = table + code;
  482|    253|		code = entry->extends;
  483|    253|	}
  484|       |
  485|  29.1k|	output_pos += count;
  486|   120k|	for (unsigned i = count; i != 0; i--) {
  ------------------
  |  Branch (486:27): [True: 91.4k, False: 29.1k]
  ------------------
  487|  91.4k|		const struct lzw_table_entry *entry = table + code;
  488|  91.4k|		*--output_pos = entry->value;
  489|  91.4k|		code = entry->extends;
  490|  91.4k|	}
  491|       |
  492|  29.1k|	return count;
  493|  29.1k|}
lzw.c:lzw__decode:
  391|  33.6k|{
  392|  33.6k|	lzw_result res;
  393|  33.6k|	uint16_t code;
  394|       |
  395|       |	/* Get a new code from the input */
  396|  33.6k|	res = lzw__read_code(&ctx->input, ctx->code_size, &code);
  397|  33.6k|	if (res != LZW_OK) {
  ------------------
  |  Branch (397:6): [True: 127, False: 33.5k]
  ------------------
  398|    127|		return res;
  399|    127|	}
  400|       |
  401|       |	/* Handle the new code */
  402|  33.5k|	if (code == ctx->eoi_code) {
  ------------------
  |  Branch (402:6): [True: 21, False: 33.5k]
  ------------------
  403|       |		/* Got End of Information code */
  404|     21|		return LZW_EOI_CODE;
  405|       |
  406|  33.5k|	} else if (code > ctx->table_size) {
  ------------------
  |  Branch (406:13): [True: 45, False: 33.4k]
  ------------------
  407|       |		/* Code is invalid */
  408|     45|		return LZW_BAD_CODE;
  409|       |
  410|  33.4k|	} else if (code == ctx->clear_code) {
  ------------------
  |  Branch (410:13): [True: 6.61k, False: 26.8k]
  ------------------
  411|  6.61k|		res = lzw__handle_clear(ctx, &code);
  412|  6.61k|		if (res != LZW_OK) {
  ------------------
  |  Branch (412:7): [True: 30, False: 6.58k]
  ------------------
  413|     30|			return res;
  414|     30|		}
  415|       |
  416|  26.8k|	} else if (ctx->table_size < LZW_TABLE_ENTRY_MAX) {
  ------------------
  |  |   25|  26.8k|#define LZW_TABLE_ENTRY_MAX (1u << LZW_CODE_MAX)
  |  |  ------------------
  |  |  |  |   21|  26.8k|#define LZW_CODE_MAX 12
  |  |  ------------------
  ------------------
  |  Branch (416:13): [True: 26.8k, False: 0]
  ------------------
  417|  26.8k|		uint16_t size = ctx->table_size;
  418|  26.8k|		lzw__table_add_entry(ctx, (code < size) ?
  ------------------
  |  Branch (418:29): [True: 25.4k, False: 1.37k]
  ------------------
  419|  25.4k|				ctx->table[code].first :
  420|  26.8k|				ctx->prev_code_first);
  421|       |
  422|       |		/* Ensure code size is increased, if needed. */
  423|  26.8k|		if (size == ctx->code_max && ctx->code_size < LZW_CODE_MAX) {
  ------------------
  |  |   21|    321|#define LZW_CODE_MAX 12
  ------------------
  |  Branch (423:7): [True: 321, False: 26.5k]
  |  Branch (423:32): [True: 321, False: 0]
  ------------------
  424|    321|			ctx->code_size++;
  425|    321|			ctx->code_max = (1 << ctx->code_size) - 1;
  426|    321|		}
  427|  26.8k|	}
  428|       |
  429|  33.4k|	*output_written += write_fn(ctx,
  430|  33.4k|			output_data, output_length, *output_written,
  431|  33.4k|			code, ctx->table[code].count);
  432|       |
  433|       |	/* Store details of this code as "previous code" to the context. */
  434|  33.4k|	ctx->prev_code_first = ctx->table[code].first;
  435|  33.4k|	ctx->prev_code_count = ctx->table[code].count;
  436|  33.4k|	ctx->prev_code = code;
  437|       |
  438|  33.4k|	return LZW_OK;
  439|  33.5k|}
lzw.c:lzw__table_add_entry:
  356|  26.8k|{
  357|  26.8k|	struct lzw_table_entry *entry = &ctx->table[ctx->table_size];
  358|       |
  359|  26.8k|	entry->value = code;
  360|  26.8k|	entry->first = ctx->prev_code_first;
  361|  26.8k|	entry->count = ctx->prev_code_count + 1;
  362|  26.8k|	entry->extends = ctx->prev_code;
  363|       |
  364|  26.8k|	ctx->table_size++;
  365|  26.8k|}
lzw.c:lzw__map_write_fn:
  544|  4.49k|{
  545|  4.49k|	uint32_t *restrict output_pos = (uint32_t *)output_data + output_used;
  546|  4.49k|	const struct lzw_table_entry * const table = ctx->table;
  547|  4.49k|	uint32_t space = output_length - output_used;
  548|  4.49k|	uint16_t count = left;
  549|       |
  550|  4.49k|	if (count > space) {
  ------------------
  |  Branch (550:6): [True: 7, False: 4.49k]
  ------------------
  551|      7|		left = count - space;
  552|      7|		count = space;
  553|  4.49k|	} else {
  554|  4.49k|		left = 0;
  555|  4.49k|	}
  556|       |
  557|  4.49k|	ctx->output_code = code;
  558|  4.49k|	ctx->output_left = left;
  559|       |
  560|  4.54k|	for (unsigned i = left; i != 0; i--) {
  ------------------
  |  Branch (560:26): [True: 44, False: 4.49k]
  ------------------
  561|     44|		const struct lzw_table_entry *entry = table + code;
  562|     44|		code = entry->extends;
  563|     44|	}
  564|       |
  565|  4.49k|	output_pos += count;
  566|  4.49k|	if (ctx->has_transparency) {
  ------------------
  |  Branch (566:6): [True: 1.38k, False: 3.11k]
  ------------------
  567|  4.23k|		for (unsigned i = count; i != 0; i--) {
  ------------------
  |  Branch (567:28): [True: 2.84k, False: 1.38k]
  ------------------
  568|  2.84k|			const struct lzw_table_entry *entry = table + code;
  569|  2.84k|			--output_pos;
  570|  2.84k|			if (entry->value != ctx->transparency_idx) {
  ------------------
  |  Branch (570:8): [True: 2.24k, False: 600]
  ------------------
  571|  2.24k|				*output_pos = ctx->colour_map[entry->value];
  572|  2.24k|			}
  573|  2.84k|			code = entry->extends;
  574|  2.84k|		}
  575|  3.11k|	} else {
  576|  12.7k|		for (unsigned i = count; i != 0; i--) {
  ------------------
  |  Branch (576:28): [True: 9.68k, False: 3.11k]
  ------------------
  577|  9.68k|			const struct lzw_table_entry *entry = table + code;
  578|  9.68k|			*--output_pos = ctx->colour_map[entry->value];
  579|  9.68k|			code = entry->extends;
  580|  9.68k|		}
  581|  3.11k|	}
  582|       |
  583|  4.49k|	return count;
  584|  4.49k|}

matrixload.c:vips_foreign_load_matrix_class_init:
  265|      1|{
  266|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  268|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  269|       |
  270|      1|	gobject_class->dispose = vips_foreign_load_matrix_dispose;
  271|       |
  272|      1|	object_class->nickname = "matrixload_base";
  273|      1|	object_class->description = _("load matrix");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  274|      1|	object_class->build = vips_foreign_load_matrix_build;
  275|       |
  276|      1|	load_class->get_flags = vips_foreign_load_matrix_get_flags;
  277|      1|	load_class->header = vips_foreign_load_matrix_header;
  278|      1|	load_class->load = vips_foreign_load_matrix_load;
  279|      1|}
matrixload.c:vips_foreign_load_matrix_file_class_init:
  355|      1|{
  356|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  358|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  359|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  360|       |
  361|      1|	gobject_class->set_property = vips_object_set_property;
  362|      1|	gobject_class->get_property = vips_object_get_property;
  363|       |
  364|      1|	object_class->nickname = "matrixload";
  365|      1|	object_class->build = vips_foreign_load_matrix_file_build;
  366|       |
  367|      1|	foreign_class->suffs = vips_foreign_load_matrix_suffs;
  368|       |
  369|      1|	load_class->is_a = vips_foreign_load_matrix_file_is_a;
  370|      1|	load_class->get_flags_filename =
  371|      1|		vips_foreign_load_matrix_file_get_flags_filename;
  372|       |
  373|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  374|      1|		_("Filename"),
  375|      1|		_("Filename to load from"),
  376|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  377|      1|		G_STRUCT_OFFSET(VipsForeignLoadMatrixFile, filename),
  378|      1|		NULL);
  379|      1|}
matrixload.c:vips_foreign_load_matrix_source_class_init:
  445|      1|{
  446|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  447|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  448|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  449|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  450|       |
  451|      1|	gobject_class->set_property = vips_object_set_property;
  452|      1|	gobject_class->get_property = vips_object_get_property;
  453|       |
  454|      1|	object_class->nickname = "matrixload_source";
  455|      1|	object_class->build = vips_foreign_load_matrix_source_build;
  456|       |
  457|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  458|       |
  459|      1|	load_class->is_a_source = vips_foreign_load_matrix_source_is_a_source;
  460|       |
  461|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  462|      1|		_("Source"),
  463|      1|		_("Source to load from"),
  464|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  465|      1|		G_STRUCT_OFFSET(VipsForeignLoadMatrixSource, source),
  466|      1|		VIPS_TYPE_SOURCE);
  467|      1|}

matrixsave.c:vips_foreign_save_matrix_class_init:
  166|      1|{
  167|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  169|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  170|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  171|       |
  172|      1|	gobject_class->dispose = vips_foreign_save_matrix_dispose;
  173|       |
  174|      1|	object_class->nickname = "matrixsave_base";
  175|      1|	object_class->description = _("save image to matrix");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  176|      1|	object_class->build = vips_foreign_save_matrix_build;
  177|       |
  178|      1|	foreign_class->suffs = vips_foreign_save_matrix_suffs;
  179|       |
  180|      1|	save_class->saveable = VIPS_SAVEABLE_MONO;
  181|      1|	save_class->format_table = bandfmt_matrix;
  182|      1|}
matrixsave.c:vips_foreign_save_matrix_file_class_init:
  217|      1|{
  218|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  219|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  220|       |
  221|      1|	gobject_class->set_property = vips_object_set_property;
  222|      1|	gobject_class->get_property = vips_object_get_property;
  223|       |
  224|      1|	object_class->nickname = "matrixsave";
  225|      1|	object_class->build = vips_foreign_save_matrix_file_build;
  226|       |
  227|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  228|      1|		_("Filename"),
  229|      1|		_("Filename to save to"),
  230|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  231|      1|		G_STRUCT_OFFSET(VipsForeignSaveMatrixFile, filename),
  232|      1|		NULL);
  233|      1|}
matrixsave.c:vips_foreign_save_matrix_target_class_init:
  270|      1|{
  271|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  272|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  273|       |
  274|      1|	gobject_class->set_property = vips_object_set_property;
  275|      1|	gobject_class->get_property = vips_object_get_property;
  276|       |
  277|      1|	object_class->nickname = "matrixsave_target";
  278|      1|	object_class->build = vips_foreign_save_matrix_target_build;
  279|       |
  280|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  281|      1|		_("Target"),
  282|      1|		_("Target to save to"),
  283|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  284|      1|		G_STRUCT_OFFSET(VipsForeignSaveMatrixTarget, target),
  285|      1|		VIPS_TYPE_TARGET);
  286|      1|}
matrixsave.c:vips_foreign_print_matrix_class_init:
  319|      1|{
  320|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  321|       |
  322|      1|	object_class->nickname = "matrixprint";
  323|      1|	object_class->description = _("print matrix");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  324|      1|	object_class->build = vips_foreign_print_matrix_build;
  325|      1|}

vips_foreign_load_nsgif_tile_height:
  543|    341|{
  544|    341|	int height = gif->info->height;
  545|       |
  546|    341|	int i;
  547|       |
  548|       |	/* First, check the perfect size.
  549|       |	 */
  550|    341|	if (height % 16 == 0)
  ------------------
  |  Branch (550:6): [True: 106, False: 235]
  ------------------
  551|    106|		return 16;
  552|       |
  553|       |	/* Next, check larger and smaller sizes.
  554|       |	 */
  555|  2.10k|	for (i = 1; i < 16; i++) {
  ------------------
  |  Branch (555:14): [True: 2.10k, False: 0]
  ------------------
  556|  2.10k|		if (height % (16 + i) == 0)
  ------------------
  |  Branch (556:7): [True: 51, False: 2.05k]
  ------------------
  557|     51|			return 16 + i;
  558|  2.05k|		if (height % (16 - i) == 0)
  ------------------
  |  Branch (558:7): [True: 184, False: 1.86k]
  ------------------
  559|    184|			return 16 - i;
  560|  2.05k|	}
  561|       |
  562|      0|	return 1;
  563|    235|}
nsgifload.c:vips_foreign_load_nsgif_class_init:
  596|      1|{
  597|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  598|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  599|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  600|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  601|       |
  602|      1|	gobject_class->dispose = vips_foreign_load_nsgif_dispose;
  603|      1|	gobject_class->set_property = vips_object_set_property;
  604|      1|	gobject_class->get_property = vips_object_get_property;
  605|       |
  606|      1|	object_class->nickname = "gifload_base";
  607|      1|	object_class->description = _("load GIF with libnsgif");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  608|       |
  609|       |	/* High priority, so that we handle vipsheader etc.
  610|       |	 */
  611|      1|	foreign_class->priority = 50;
  612|       |
  613|      1|	load_class->get_flags_filename =
  614|      1|		vips_foreign_load_nsgif_get_flags_filename;
  615|      1|	load_class->get_flags = vips_foreign_load_nsgif_get_flags;
  616|      1|	load_class->header = vips_foreign_load_nsgif_header;
  617|      1|	load_class->load = vips_foreign_load_nsgif_load;
  618|       |
  619|      1|	VIPS_ARG_INT(class, "page", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  620|      1|		_("Page"),
  621|      1|		_("First page to load"),
  622|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  623|      1|		G_STRUCT_OFFSET(VipsForeignLoadNsgif, page),
  624|      1|		0, 100000, 0);
  625|       |
  626|      1|	VIPS_ARG_INT(class, "n", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  627|      1|		_("n"),
  628|      1|		_("Number of pages to load, -1 for all"),
  629|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  630|      1|		G_STRUCT_OFFSET(VipsForeignLoadNsgif, n),
  631|      1|		-1, 100000, 1);
  632|      1|}
nsgifload.c:vips_foreign_load_nsgif_dispose:
  172|    643|{
  173|    643|	VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) gobject;
  174|       |
  175|    643|	VIPS_DEBUG_MSG("vips_foreign_load_nsgif_dispose:\n");
  ------------------
  |  |   47|    643|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    643|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    643|	{ \
  |  |   49|    643|		; \
  |  |   50|    643|	} \
  |  |   51|    643|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    643|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  176|       |
  177|    643|	VIPS_FREEF(nsgif_destroy, gif->anim);
  ------------------
  |  |   41|    643|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    643|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|    643|	{ \
  |  |   43|    643|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 643, False: 0]
  |  |  ------------------
  |  |   44|    643|			(void) F((S)); \
  |  |   45|    643|			(S) = 0; \
  |  |   46|    643|		} \
  |  |   47|    643|	} \
  |  |   48|    643|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    643|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  178|    643|	VIPS_UNREF(gif->source);
  ------------------
  |  |   57|    643|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|    643|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|    643|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|    643|	{ \
  |  |  |  |   43|    643|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 643, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|    643|			(void) F((S)); \
  |  |  |  |   45|    643|			(S) = 0; \
  |  |  |  |   46|    643|		} \
  |  |  |  |   47|    643|	} \
  |  |  |  |   48|    643|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|    643|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|    643|	VIPS_FREE(gif->delay);
  ------------------
  |  |   50|    643|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|    643|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|    643|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|    643|	{ \
  |  |  |  |   43|    643|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 404, False: 239]
  |  |  |  |  ------------------
  |  |  |  |   44|    404|			(void) F((S)); \
  |  |  |  |   45|    404|			(S) = 0; \
  |  |  |  |   46|    404|		} \
  |  |  |  |   47|    643|	} \
  |  |  |  |   48|    643|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|    643|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|       |
  181|    643|	G_OBJECT_CLASS(vips_foreign_load_nsgif_parent_class)->dispose(gobject);
  ------------------
  |  |   58|    643|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|    643|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    643|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  182|    643|}
nsgifload.c:vips_foreign_load_nsgif_get_flags:
  192|    645|{
  193|    645|	return VIPS_FOREIGN_SEQUENTIAL;
  194|    645|}
nsgifload.c:vips_foreign_load_nsgif_header:
  365|    645|{
  366|    645|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load);
  ------------------
  |  |  441|    645|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|    645|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    645|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  367|    645|	VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) load;
  368|       |
  369|    645|	const void *data;
  370|    645|	size_t size;
  371|    645|	nsgif_error result;
  372|    645|	int i;
  373|       |
  374|    645|	VIPS_DEBUG_MSG("vips_foreign_load_nsgif_header:\n");
  ------------------
  |  |   47|    645|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    645|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    645|	{ \
  |  |   49|    645|		; \
  |  |   50|    645|	} \
  |  |   51|    645|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    645|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  375|       |
  376|       |	/* Map the whole source into memory.
  377|       |	 */
  378|    645|	if (!(data = vips_source_map(gif->source, &size)))
  ------------------
  |  Branch (378:6): [True: 0, False: 645]
  ------------------
  379|      0|		return -1;
  380|       |
  381|       |	/* Treat errors from _scan() as warnings. If libnsgif really can't do
  382|       |	 * something it'll fail gracefully later when we try to read out
  383|       |	 * frame data.
  384|       |	 */
  385|    645|	result = nsgif_data_scan(gif->anim, size, (void *) data);
  386|    645|	VIPS_DEBUG_MSG("nsgif_data_scan() = %s\n", nsgif_strerror(result));
  ------------------
  |  |   47|    645|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    645|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    645|	{ \
  |  |   49|    645|		; \
  |  |   50|    645|	} \
  |  |   51|    645|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    645|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  387|    645|	switch (result) {
  388|    432|	case NSGIF_ERR_END_OF_DATA:
  ------------------
  |  Branch (388:2): [True: 432, False: 213]
  ------------------
  389|    432|		if (load->fail_on >= VIPS_FAIL_ON_TRUNCATED) {
  ------------------
  |  Branch (389:7): [True: 0, False: 432]
  ------------------
  390|      0|			vips_foreign_load_nsgif_error(gif, result);
  391|      0|			return -1;
  392|      0|		}
  393|    432|		else
  394|    432|			g_warning("%s", nsgif_strerror(result));
  ------------------
  |  |  338|    432|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|    432|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|    432|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|    432|                               __VA_ARGS__)
  ------------------
  395|    432|		break;
  396|       |
  397|    432|	case NSGIF_OK:
  ------------------
  |  Branch (397:2): [True: 160, False: 485]
  ------------------
  398|    160|		break;
  399|       |
  400|     53|	default:
  ------------------
  |  Branch (400:2): [True: 53, False: 592]
  ------------------
  401|     53|		if (load->fail_on >= VIPS_FAIL_ON_WARNING) {
  ------------------
  |  Branch (401:7): [True: 0, False: 53]
  ------------------
  402|      0|			vips_foreign_load_nsgif_error(gif, result);
  403|      0|			return -1;
  404|      0|		}
  405|     53|		else
  406|     53|			g_warning("%s", nsgif_strerror(result));
  ------------------
  |  |  338|     53|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|     53|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|     53|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|     53|                               __VA_ARGS__)
  ------------------
  407|     53|		break;
  408|    645|	}
  409|       |
  410|       |	/* Tell libnsgif that that's all the data we have. This will let us
  411|       |	 * read out any truncated final frames.
  412|       |	 */
  413|    645|	nsgif_data_complete(gif->anim);
  414|       |
  415|    645|	gif->info = nsgif_get_info(gif->anim);
  416|       |#ifdef VERBOSE
  417|       |	print_animation(gif->anim, gif->info);
  418|       |#endif /*VERBOSE*/
  419|    645|	if (!gif->info->frame_count) {
  ------------------
  |  Branch (419:6): [True: 239, False: 406]
  ------------------
  420|    239|		vips_error(class->nickname, "%s", _("no frames in GIF"));
  ------------------
  |  |   30|    239|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    239|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  421|    239|		return -1;
  422|    239|	}
  423|       |
  424|       |	/* Update our global struct based on the information in the
  425|       |	 * individual frames.
  426|       |	 */
  427|  6.76k|	for (i = 0; i < gif->info->frame_count; i++) {
  ------------------
  |  Branch (427:14): [True: 6.36k, False: 406]
  ------------------
  428|  6.36k|		const nsgif_frame_info_t *frame_info;
  429|       |
  430|  6.36k|		if ((frame_info = nsgif_get_frame_info(gif->anim, i))) {
  ------------------
  |  Branch (430:7): [True: 6.36k, False: 0]
  ------------------
  431|  6.36k|			if (frame_info->transparency)
  ------------------
  |  Branch (431:8): [True: 3.27k, False: 3.09k]
  ------------------
  432|  3.27k|				gif->has_transparency = TRUE;
  ------------------
  |  |  798|  3.27k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  3.27k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  433|  6.36k|			if (frame_info->interlaced)
  ------------------
  |  Branch (433:8): [True: 117, False: 6.24k]
  ------------------
  434|    117|				gif->interlaced = TRUE;
  ------------------
  |  |  798|    117|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    117|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  435|  6.36k|			if (frame_info->local_palette)
  ------------------
  |  Branch (435:8): [True: 215, False: 6.14k]
  ------------------
  436|    215|				gif->local_palette = TRUE;
  ------------------
  |  |  798|    215|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    215|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  437|  6.36k|		}
  438|  6.36k|	}
  439|       |
  440|    406|	if (gif->n == -1)
  ------------------
  |  Branch (440:6): [True: 0, False: 406]
  ------------------
  441|      0|		gif->gif_n = gif->info->frame_count - gif->page;
  442|    406|	else
  443|    406|		gif->gif_n = gif->n;
  444|       |
  445|    406|	if (gif->page < 0 ||
  ------------------
  |  Branch (445:6): [True: 0, False: 406]
  ------------------
  446|    406|		gif->gif_n <= 0 ||
  ------------------
  |  Branch (446:3): [True: 0, False: 406]
  ------------------
  447|    406|		gif->page + gif->gif_n > gif->info->frame_count) {
  ------------------
  |  Branch (447:3): [True: 0, False: 406]
  ------------------
  448|      0|		vips_error(class->nickname, "%s", _("bad page number"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  449|      0|		return -1;
  450|      0|	}
  451|       |
  452|       |	/* In ms, frame_delay in cs.
  453|       |	 */
  454|    406|	VIPS_FREE(gif->delay);
  ------------------
  |  |   50|    406|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|    406|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|    406|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|    406|	{ \
  |  |  |  |   43|    406|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 406]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|    406|	} \
  |  |  |  |   48|    406|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|    406|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  455|    406|	if (!(gif->delay = VIPS_ARRAY(NULL,
  ------------------
  |  |   72|    406|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    406|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    406|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    406|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    406|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (455:6): [True: 0, False: 406]
  ------------------
  456|    406|			  gif->info->frame_count, int)))
  457|      0|		return -1;
  458|  6.76k|	for (i = 0; i < gif->info->frame_count; i++) {
  ------------------
  |  Branch (458:14): [True: 6.36k, False: 406]
  ------------------
  459|  6.36k|		const nsgif_frame_info_t *frame_info;
  460|       |
  461|  6.36k|		frame_info = nsgif_get_frame_info(gif->anim, i);
  462|  6.36k|		if (frame_info == NULL) {
  ------------------
  |  Branch (462:7): [True: 0, False: 6.36k]
  ------------------
  463|      0|			vips_error(class->nickname, "%s", _("bad frame"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  464|      0|			return -1;
  465|      0|		}
  466|  6.36k|		gif->delay[i] = 10 * frame_info->delay;
  467|  6.36k|	}
  468|       |
  469|    406|	gif->gif_delay = gif->delay[0] / 10;
  470|       |
  471|    406|	vips_foreign_load_nsgif_set_header(gif, load->out);
  472|       |
  473|    406|	return 0;
  474|    406|}
nsgifload.c:vips_foreign_load_nsgif_error:
  164|     56|{
  165|     56|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(gif);
  ------------------
  |  |  441|     56|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|     56|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|     56|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|       |
  167|     56|	vips_error(class->nickname, "%s", nsgif_strerror(result));
  168|     56|}
nsgifload.c:vips_foreign_load_nsgif_set_header:
  260|    747|{
  261|    747|	double array[3];
  262|    747|	const uint8_t *bg;
  263|    747|	size_t entries;
  264|    747|	uint32_t table[NSGIF_MAX_COLOURS];
  265|    747|	int colours;
  266|       |
  267|    747|	VIPS_DEBUG_MSG("vips_foreign_load_nsgif_set_header:\n");
  ------------------
  |  |   47|    747|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    747|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    747|	{ \
  |  |   49|    747|		; \
  |  |   50|    747|	} \
  |  |   51|    747|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    747|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|       |
  269|    747|	vips_image_init_fields(image,
  270|    747|		gif->info->width, gif->info->height * gif->gif_n,
  271|    747|		gif->has_transparency ? 4 : 3,
  ------------------
  |  Branch (271:3): [True: 552, False: 195]
  ------------------
  272|    747|		VIPS_FORMAT_UCHAR, VIPS_CODING_NONE,
  273|    747|		VIPS_INTERPRETATION_sRGB, 1.0, 1.0);
  274|    747|	vips_image_pipelinev(image, VIPS_DEMAND_STYLE_FATSTRIP, NULL);
  275|       |
  276|       |	/* Only set page-height if we have more than one page, or this could
  277|       |	 * accidentally turn into an animated image later.
  278|       |	 */
  279|    747|	if (gif->gif_n > 1)
  ------------------
  |  Branch (279:6): [True: 0, False: 747]
  ------------------
  280|      0|		vips_image_set_int(image, VIPS_META_PAGE_HEIGHT, gif->info->height);
  ------------------
  |  |  158|      0|#define VIPS_META_PAGE_HEIGHT "page-height"
  ------------------
  281|    747|	vips_image_set_int(image, VIPS_META_N_PAGES,
  ------------------
  |  |  165|    747|#define VIPS_META_N_PAGES "n-pages"
  ------------------
  282|    747|		gif->info->frame_count);
  283|    747|	vips_image_set_int(image, "loop", gif->info->loop_max);
  284|       |
  285|    747|	vips_image_set_array_int(image, "delay",
  286|    747|		gif->delay, gif->info->frame_count);
  287|       |
  288|    747|	bg = (uint8_t *) &gif->info->background;
  289|    747|	array[0] = bg[0];
  290|    747|	array[1] = bg[1];
  291|    747|	array[2] = bg[2];
  292|       |
  293|    747|	vips_image_set_array_double(image, "background", array, 3);
  294|       |
  295|    747|	VIPS_SETSTR(image->filename,
  ------------------
  |  |   53|    747|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    747|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|    747|	{ \
  |  |   55|    747|		const char *sst = (V); \
  |  |   56|    747|		\
  |  |   57|    747|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 747, False: 0]
  |  |  ------------------
  |  |   58|    747|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 0, False: 747]
  |  |  |  Branch (58:16): [True: 747, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|    747|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|    747|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|    747|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|    747|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|    747|	{ \
  |  |  |  |  |  |   43|    747|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 747, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|    747|			(void) F((S)); \
  |  |  |  |  |  |   45|    747|			(S) = 0; \
  |  |  |  |  |  |   46|    747|		} \
  |  |  |  |  |  |   47|    747|	} \
  |  |  |  |  |  |   48|    747|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|    747|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|    747|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 0, False: 747]
  |  |  ------------------
  |  |   61|    747|					(S) = g_strdup(sst); \
  |  |   62|    747|			} \
  |  |   63|    747|		} \
  |  |   64|    747|	} \
  |  |   65|    747|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    747|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  296|    747|		vips_connection_filename(VIPS_CONNECTION(gif->source)));
  297|       |
  298|       |	/* DEPRECATED "gif-loop"
  299|       |	 *
  300|       |	 * Not the correct behavior as loop=1 became gif-loop=0
  301|       |	 * but we want to keep the old behavior untouched!
  302|       |	 */
  303|    747|	vips_image_set_int(image, "gif-loop",
  304|    747|		gif->info->loop_max == 0
  ------------------
  |  Branch (304:3): [True: 0, False: 747]
  ------------------
  305|    747|			? 0
  306|    747|			: gif->info->loop_max - 1);
  307|       |
  308|       |	/* The deprecated gif-delay field is in centiseconds.
  309|       |	 */
  310|    747|	vips_image_set_int(image, "gif-delay", gif->gif_delay);
  311|       |
  312|       |	/* If there are no local palettes, we can attach the global palette as
  313|       |	 * metadata.
  314|       |	 */
  315|    747|	if (!gif->local_palette) {
  ------------------
  |  Branch (315:6): [True: 657, False: 90]
  ------------------
  316|    657|		nsgif_global_palette(gif->anim, table, &entries);
  317|    657|		vips_image_set_array_int(image, "gif-palette",
  318|    657|			(const int *) table, entries);
  319|       |
  320|    657|		colours = entries;
  321|    657|	}
  322|     90|	else {
  323|     90|		int i;
  324|       |
  325|     90|		colours = 0;
  326|       |
  327|     90|		if (gif->info->global_palette) {
  ------------------
  |  Branch (327:7): [True: 58, False: 32]
  ------------------
  328|     58|			nsgif_global_palette(gif->anim, table, &entries);
  329|     58|			colours = entries;
  330|     58|		}
  331|       |
  332|  4.25k|		for (i = 0; i < gif->info->frame_count; i++) {
  ------------------
  |  Branch (332:15): [True: 4.16k, False: 90]
  ------------------
  333|  4.16k|			if (nsgif_local_palette(gif->anim, i, table,
  ------------------
  |  Branch (333:8): [True: 253, False: 3.90k]
  ------------------
  334|  4.16k|					&entries))
  335|    253|				colours = VIPS_MAX(colours, entries);
  ------------------
  |  |   54|    253|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 90, False: 163]
  |  |  ------------------
  ------------------
  336|  4.16k|		}
  337|     90|	}
  338|       |
  339|    747|	vips_image_set_int(image, VIPS_META_BITS_PER_SAMPLE,
  ------------------
  |  |  100|    747|#define VIPS_META_BITS_PER_SAMPLE "bits-per-sample"
  ------------------
  340|    747|		ceil(log2(colours)));
  341|       |
  342|       |	/* Deprecated "palette-bit-depth" use "bits-per-sample" instead.
  343|       |	 */
  344|    747|	vips_image_set_int(image, "palette-bit-depth",
  345|    747|		ceil(log2(colours)));
  346|       |
  347|    747|	vips_image_set_int(image, VIPS_META_PALETTE, 1);
  ------------------
  |  |  107|    747|#define VIPS_META_PALETTE "palette"
  ------------------
  348|       |
  349|       |	/* Let our caller know if the GIF is interlaced.
  350|       |	 */
  351|    747|	if (gif->interlaced)
  ------------------
  |  Branch (351:6): [True: 135, False: 612]
  ------------------
  352|    135|		vips_image_set_int(image, "interlaced", 1);
  353|       |
  354|    747|	return 0;
  355|    747|}
nsgifload.c:vips_foreign_load_nsgif_load:
  567|    341|{
  568|    341|	VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) load;
  569|    341|	VipsImage **t = (VipsImage **)
  570|    341|		vips_object_local_array(VIPS_OBJECT(load), 2);
  ------------------
  |  |  433|    341|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|    341|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    341|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  571|       |
  572|    341|	VIPS_DEBUG_MSG("vips_foreign_load_nsgif_load:\n");
  ------------------
  |  |   47|    341|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    341|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    341|	{ \
  |  |   49|    341|		; \
  |  |   50|    341|	} \
  |  |   51|    341|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    341|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  573|       |
  574|       |	/* Make the output pipeline.
  575|       |	 */
  576|    341|	t[0] = vips_image_new();
  577|    341|	if (vips_foreign_load_nsgif_set_header(gif, t[0]))
  ------------------
  |  Branch (577:6): [True: 0, False: 341]
  ------------------
  578|      0|		return -1;
  579|       |
  580|       |	/* Strips 8 pixels high to avoid too many tiny regions.
  581|       |	 */
  582|    341|	if (vips_image_generate(t[0],
  ------------------
  |  Branch (582:6): [True: 0, False: 341]
  ------------------
  583|    341|			NULL, vips_foreign_load_nsgif_generate, NULL, gif, NULL) ||
  584|    341|		vips_sequential(t[0], &t[1],
  ------------------
  |  Branch (584:3): [True: 0, False: 341]
  ------------------
  585|    341|			"tile_height",
  586|    341|			vips_foreign_load_nsgif_tile_height(gif),
  587|    341|			NULL) ||
  588|    341|		vips_image_write(t[1], load->real))
  ------------------
  |  Branch (588:3): [True: 56, False: 285]
  ------------------
  589|     56|		return -1;
  590|       |
  591|    285|	return 0;
  592|    341|}
nsgifload.c:vips_foreign_load_nsgif_generate:
  479|  2.15k|{
  480|  2.15k|	VipsRect *r = &out_region->valid;
  481|  2.15k|	VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) a;
  482|       |
  483|  2.15k|	int y;
  484|       |
  485|       |#ifdef VERBOSE
  486|       |	VIPS_DEBUG_MSG("vips_foreign_load_nsgif_generate: "
  487|       |				   "top = %d, height = %d\n",
  488|       |		r->top, r->height);
  489|       |#endif /*VERBOSE*/
  490|       |
  491|  12.5k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (491:14): [True: 10.4k, False: 2.09k]
  ------------------
  492|       |		/* The page for this output line, and the line number in page.
  493|       |		 */
  494|  10.4k|		int page = (r->top + y) / gif->info->height + gif->page;
  495|  10.4k|		int line = (r->top + y) % gif->info->height;
  496|       |
  497|  10.4k|		nsgif_error result;
  498|  10.4k|		VipsPel *p, *q;
  499|       |
  500|  10.4k|		g_assert(line >= 0 && line < gif->info->height);
  ------------------
  |  |  166|  10.4k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  10.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  10.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  501|  10.4k|		g_assert(page >= 0 && page < gif->info->frame_count);
  ------------------
  |  |  166|  10.4k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  10.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  10.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  502|       |
  503|  10.4k|		if (gif->frame_number != page) {
  ------------------
  |  Branch (503:7): [True: 341, False: 10.0k]
  ------------------
  504|    341|			result = nsgif_frame_decode(gif->anim,
  505|    341|				page, &gif->bitmap);
  506|    341|			VIPS_DEBUG_MSG("  nsgif_frame_decode(%d) = %d\n",
  ------------------
  |  |   47|    341|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    341|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    341|	{ \
  |  |   49|    341|		; \
  |  |   50|    341|	} \
  |  |   51|    341|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    341|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  507|    341|				page, result);
  508|    341|			if (result != NSGIF_OK) {
  ------------------
  |  Branch (508:8): [True: 56, False: 285]
  ------------------
  509|     56|				vips_foreign_load_nsgif_error(gif, result);
  510|     56|				return -1;
  511|     56|			}
  512|       |
  513|       |#ifdef VERBOSE
  514|       |			print_frame(nsgif_get_frame_info(gif->anim, page));
  515|       |#endif /*VERBOSE*/
  516|       |
  517|    285|			gif->frame_number = page;
  518|    285|		}
  519|       |
  520|  10.3k|		p = (VipsPel *) gif->bitmap + line * gif->info->width * sizeof(int);
  521|  10.3k|		q = VIPS_REGION_ADDR(out_region, 0, r->top + y);
  ------------------
  |  |  227|  10.3k|	((R)->data + \
  |  |  228|  10.3k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  10.3k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  10.3k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  10.3k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  10.3k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  10.3k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  522|  10.3k|		if (gif->has_transparency)
  ------------------
  |  Branch (522:7): [True: 7.71k, False: 2.67k]
  ------------------
  523|  7.71k|			memcpy(q, p, VIPS_REGION_SIZEOF_LINE(out_region));
  ------------------
  |  |  203|  7.71k|	((size_t) ((R)->valid.width * VIPS_REGION_SIZEOF_PEL(R)))
  |  |  ------------------
  |  |  |  |  201|  7.71k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  7.71k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  7.71k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  524|  2.67k|		else {
  525|  2.67k|			int i;
  526|       |
  527|   109k|			for (i = 0; i < r->width; i++) {
  ------------------
  |  Branch (527:16): [True: 106k, False: 2.67k]
  ------------------
  528|   106k|				q[0] = p[0];
  529|   106k|				q[1] = p[1];
  530|   106k|				q[2] = p[2];
  531|       |
  532|   106k|				q += 3;
  533|   106k|				p += 4;
  534|   106k|			}
  535|  2.67k|		}
  536|  10.3k|	}
  537|       |
  538|  2.09k|	return 0;
  539|  2.15k|}
nsgifload.c:vips_foreign_load_nsgif_init:
  674|    645|{
  675|    645|	nsgif_error result = nsgif_create(
  676|    645|		&vips_foreign_load_nsgif_bitmap_callbacks,
  677|    645|		NSGIF_BITMAP_FMT_R8G8B8A8,
  678|    645|		&gif->anim);
  679|    645|	if (result != NSGIF_OK) {
  ------------------
  |  Branch (679:6): [True: 0, False: 645]
  ------------------
  680|      0|		VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(gif);
  ------------------
  |  |  441|      0|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|      0|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|      0|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  681|       |
  682|      0|		vips_error(class->nickname, "%s",
  683|      0|			nsgif_strerror(result));
  684|      0|		return;
  685|      0|	}
  686|       |
  687|    645|	gif->n = 1;
  688|    645|	gif->gif_n = 1;
  689|    645|	gif->frame_number = -1;
  690|    645|	gif->bitmap = NULL;
  691|    645|}
nsgifload.c:vips_foreign_load_nsgif_bitmap_create:
  636|    341|{
  637|       |	/* GIF has a limit of 64k per axis -- double-check this.
  638|       |	 */
  639|    341|	if (width <= 0 ||
  ------------------
  |  Branch (639:6): [True: 0, False: 341]
  ------------------
  640|    341|		width > 65536 ||
  ------------------
  |  Branch (640:3): [True: 0, False: 341]
  ------------------
  641|    341|		height <= 0 ||
  ------------------
  |  Branch (641:3): [True: 0, False: 341]
  ------------------
  642|    341|		height > 65536) {
  ------------------
  |  Branch (642:3): [True: 0, False: 341]
  ------------------
  643|      0|		vips_error("gifload",
  644|      0|			"%s", _("bad image dimensions"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  645|      0|		return NULL;
  646|      0|	}
  647|       |
  648|    341|	return g_malloc0((gsize) width * height * 4);
  649|    341|}
nsgifload.c:vips_foreign_load_nsgif_bitmap_destroy:
  661|    341|{
  662|    341|	g_assert(bitmap);
  ------------------
  |  |  166|    341|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    341|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    341|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  663|    341|	g_free(bitmap);
  664|    341|}
nsgifload.c:vips_foreign_load_nsgif_bitmap_get_buffer:
  653|    373|{
  654|    373|	g_assert(bitmap);
  ------------------
  |  |  166|    373|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    373|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    373|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  655|       |
  656|    373|	return bitmap;
  657|    373|}
nsgifload.c:vips_foreign_load_nsgif_file_class_init:
  747|      1|{
  748|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  750|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  751|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  752|       |
  753|      1|	gobject_class->set_property = vips_object_set_property;
  754|      1|	gobject_class->get_property = vips_object_get_property;
  755|       |
  756|      1|	object_class->nickname = "gifload";
  757|      1|	object_class->description = _("load GIF with libnsgif");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  758|      1|	object_class->build = vips_foreign_load_gif_file_build;
  759|       |
  760|      1|	foreign_class->suffs = vips_foreign_nsgif_suffs;
  761|       |
  762|      1|	load_class->is_a = vips_foreign_load_nsgif_file_is_a;
  763|       |
  764|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  765|      1|		_("Filename"),
  766|      1|		_("Filename to load from"),
  767|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  768|      1|		G_STRUCT_OFFSET(VipsForeignLoadNsgifFile, filename),
  769|      1|		NULL);
  770|      1|}
nsgifload.c:vips_foreign_load_nsgif_is_a_source:
  198|  31.8k|{
  199|  31.8k|	const unsigned char *data;
  200|       |
  201|  31.8k|	if ((data = vips_source_sniff(source, 4)) &&
  ------------------
  |  Branch (201:6): [True: 31.8k, False: 52]
  ------------------
  202|  31.8k|		data[0] == 'G' &&
  ------------------
  |  Branch (202:3): [True: 670, False: 31.1k]
  ------------------
  203|  31.8k|		data[1] == 'I' &&
  ------------------
  |  Branch (203:3): [True: 660, False: 10]
  ------------------
  204|  31.8k|		data[2] == 'F' &&
  ------------------
  |  Branch (204:3): [True: 652, False: 8]
  ------------------
  205|  31.8k|		data[3] == '8')
  ------------------
  |  Branch (205:3): [True: 645, False: 7]
  ------------------
  206|    645|		return TRUE;
  ------------------
  |  |  798|    645|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    645|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  207|       |
  208|  31.2k|	return FALSE;
  ------------------
  |  |  794|  31.2k|#define	FALSE	(0)
  ------------------
  209|  31.8k|}
nsgifload.c:vips_foreign_load_nsgif_buffer_class_init:
  828|      1|{
  829|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  830|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  831|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  832|       |
  833|      1|	gobject_class->set_property = vips_object_set_property;
  834|      1|	gobject_class->get_property = vips_object_get_property;
  835|       |
  836|      1|	object_class->nickname = "gifload_buffer";
  837|      1|	object_class->description = _("load GIF with libnsgif");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  838|      1|	object_class->build = vips_foreign_load_nsgif_buffer_build;
  839|       |
  840|      1|	load_class->is_a_buffer = vips_foreign_load_nsgif_buffer_is_a_buffer;
  841|       |
  842|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  843|      1|		_("Buffer"),
  844|      1|		_("Buffer to load from"),
  845|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  846|      1|		G_STRUCT_OFFSET(VipsForeignLoadNsgifBuffer, blob),
  847|      1|		VIPS_TYPE_BLOB);
  848|      1|}
nsgifload.c:vips_foreign_load_nsgif_buffer_build:
  793|    645|{
  794|    645|	VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) object;
  795|    645|	VipsForeignLoadNsgifBuffer *buffer =
  796|    645|		(VipsForeignLoadNsgifBuffer *) object;
  797|       |
  798|    645|	if (buffer->blob &&
  ------------------
  |  Branch (798:6): [True: 645, False: 0]
  ------------------
  799|    645|		!(gif->source = vips_source_new_from_memory(
  ------------------
  |  Branch (799:3): [True: 0, False: 645]
  ------------------
  800|    645|			  buffer->blob->data,
  801|    645|			  buffer->blob->length)))
  802|      0|		return -1;
  803|       |
  804|    645|	if (VIPS_OBJECT_CLASS(vips_foreign_load_nsgif_buffer_parent_class)
  ------------------
  |  |  435|    645|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|    645|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    645|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (804:6): [True: 239, False: 406]
  ------------------
  805|    645|			->build(object))
  806|    239|		return -1;
  807|       |
  808|    406|	return 0;
  809|    645|}
nsgifload.c:vips_foreign_load_nsgif_buffer_is_a_buffer:
  813|  31.8k|{
  814|  31.8k|	VipsSource *source;
  815|  31.8k|	gboolean result;
  816|       |
  817|  31.8k|	if (!(source = vips_source_new_from_memory(buf, len)))
  ------------------
  |  Branch (817:6): [True: 0, False: 31.8k]
  ------------------
  818|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  819|  31.8k|	result = vips_foreign_load_nsgif_is_a_source(source);
  820|  31.8k|	VIPS_UNREF(source);
  ------------------
  |  |   57|  31.8k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  31.8k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  31.8k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  31.8k|	{ \
  |  |  |  |   43|  31.8k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 31.8k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  31.8k|			(void) F((S)); \
  |  |  |  |   45|  31.8k|			(S) = 0; \
  |  |  |  |   46|  31.8k|		} \
  |  |  |  |   47|  31.8k|	} \
  |  |  |  |   48|  31.8k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  31.8k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  821|       |
  822|  31.8k|	return result;
  823|  31.8k|}
nsgifload.c:vips_foreign_load_nsgif_buffer_init:
  852|    645|{
  853|    645|}
nsgifload.c:vips_foreign_load_nsgif_source_class_init:
  891|      1|{
  892|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  893|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  894|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  895|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  896|       |
  897|      1|	gobject_class->set_property = vips_object_set_property;
  898|      1|	gobject_class->get_property = vips_object_get_property;
  899|       |
  900|      1|	object_class->nickname = "gifload_source";
  901|      1|	object_class->description = _("load gif from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  902|      1|	object_class->build = vips_foreign_load_nsgif_source_build;
  903|       |
  904|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  905|       |
  906|      1|	load_class->is_a_source = vips_foreign_load_nsgif_is_a_source;
  907|       |
  908|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  909|      1|		_("Source"),
  910|      1|		_("Source to load from"),
  911|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  912|      1|		G_STRUCT_OFFSET(VipsForeignLoadNsgifSource, source),
  913|      1|		VIPS_TYPE_SOURCE);
  914|      1|}

vips__pdf_is_a_buffer:
   56|  15.8k|{
   57|  15.8k|	const char *str = (const char *) buf;
   58|       |
   59|  15.8k|	if (len < 4)
  ------------------
  |  Branch (59:6): [True: 45, False: 15.7k]
  ------------------
   60|     45|		return FALSE;
  ------------------
  |  |  794|     45|#define	FALSE	(0)
  ------------------
   61|       |
   62|  29.7M|	for (size_t i = 0; i < len - 4; i++)
  ------------------
  |  Branch (62:21): [True: 29.6M, False: 15.7k]
  ------------------
   63|  29.6M|		if (vips_isprefix("%PDF", str + i))
  ------------------
  |  Branch (63:7): [True: 51, False: 29.6M]
  ------------------
   64|     51|			return TRUE;
  ------------------
  |  |  798|  15.8k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|     51|#define	FALSE	(0)
  |  |  ------------------
  ------------------
   65|       |
   66|  15.7k|	return FALSE;
  ------------------
  |  |  794|  15.7k|#define	FALSE	(0)
  ------------------
   67|  15.7k|}

pdfiumload.c:vips_foreign_load_pdf_class_init:
  675|      1|{
  676|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  677|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  678|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  679|       |
  680|      1|	gobject_class->dispose = vips_foreign_load_pdf_dispose;
  681|      1|	gobject_class->set_property = vips_object_set_property;
  682|      1|	gobject_class->get_property = vips_object_get_property;
  683|       |
  684|      1|	object_class->nickname = "pdfload_base";
  685|      1|	object_class->description = _("load PDF with PDFium");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  686|      1|	object_class->build = vips_foreign_load_pdf_build;
  687|       |
  688|      1|	load_class->get_flags_filename =
  689|      1|		vips_foreign_load_pdf_get_flags_filename;
  690|      1|	load_class->get_flags = vips_foreign_load_pdf_get_flags;
  691|      1|	load_class->header = vips_foreign_load_pdf_header;
  692|      1|	load_class->load = vips_foreign_load_pdf_load;
  693|       |
  694|      1|	VIPS_ARG_INT(class, "page", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  695|      1|		_("Page"),
  696|      1|		_("First page to load"),
  697|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  698|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdf, page_no),
  699|      1|		0, 100000, 0);
  700|       |
  701|      1|	VIPS_ARG_INT(class, "n", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  702|      1|		_("n"),
  703|      1|		_("Number of pages to load, -1 for all"),
  704|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  705|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdf, n),
  706|      1|		-1, 100000, 1);
  707|       |
  708|      1|	VIPS_ARG_DOUBLE(class, "dpi", 12,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  709|      1|		_("DPI"),
  710|      1|		_("DPI to render at"),
  711|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  712|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdf, dpi),
  713|      1|		0.001, 100000.0, 72.0);
  714|       |
  715|      1|	VIPS_ARG_DOUBLE(class, "scale", 13,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  716|      1|		_("Scale"),
  717|      1|		_("Factor to scale by"),
  718|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  719|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdf, scale),
  720|      1|		0.0, 100000.0, 1.0);
  721|       |
  722|      1|	VIPS_ARG_BOXED(class, "background", 14,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  723|      1|		_("Background"),
  724|      1|		_("Background colour"),
  725|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  726|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdf, background),
  727|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  728|       |
  729|      1|	VIPS_ARG_STRING(class, "password", 25,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  730|      1|		_("Password"),
  731|      1|		_("Password to decrypt with"),
  732|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  733|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdf, password),
  734|      1|		NULL);
  735|      1|}
pdfiumload.c:vips_foreign_load_pdf_dispose:
  214|     51|{
  215|     51|	VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) gobject;
  216|       |
  217|     51|	vips_foreign_load_pdf_close(pdf);
  218|       |
  219|     51|	G_OBJECT_CLASS(vips_foreign_load_pdf_parent_class)->dispose(gobject);
  ------------------
  |  |   58|     51|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|     51|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|     51|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|     51|}
pdfiumload.c:vips_foreign_load_pdf_close:
  201|     51|{
  202|     51|	g_mutex_lock(&vips_pdfium_mutex);
  203|       |
  204|     51|	VIPS_FREEF(FPDF_ClosePage, pdf->page);
  ------------------
  |  |   41|     51|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|     51|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|     51|	{ \
  |  |   43|     51|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 3, False: 48]
  |  |  ------------------
  |  |   44|      3|			(void) F((S)); \
  |  |   45|      3|			(S) = 0; \
  |  |   46|      3|		} \
  |  |   47|     51|	} \
  |  |   48|     51|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     51|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|     51|	VIPS_FREEF(FPDFDOC_ExitFormFillEnvironment, pdf->form);
  ------------------
  |  |   41|     51|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|     51|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|     51|	{ \
  |  |   43|     51|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 5, False: 46]
  |  |  ------------------
  |  |   44|      5|			(void) F((S)); \
  |  |   45|      5|			(S) = 0; \
  |  |   46|      5|		} \
  |  |   47|     51|	} \
  |  |   48|     51|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     51|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|     51|	VIPS_FREEF(FPDF_CloseDocument, pdf->doc);
  ------------------
  |  |   41|     51|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|     51|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|     51|	{ \
  |  |   43|     51|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 5, False: 46]
  |  |  ------------------
  |  |   44|      5|			(void) F((S)); \
  |  |   45|      5|			(S) = 0; \
  |  |   46|      5|		} \
  |  |   47|     51|	} \
  |  |   48|     51|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     51|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  207|     51|	VIPS_UNREF(pdf->source);
  ------------------
  |  |   57|     51|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|     51|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|     51|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|     51|	{ \
  |  |  |  |   43|     51|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 51, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|     51|			(void) F((S)); \
  |  |  |  |   45|     51|			(S) = 0; \
  |  |  |  |   46|     51|		} \
  |  |  |  |   47|     51|	} \
  |  |  |  |   48|     51|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|     51|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  208|       |
  209|     51|	g_mutex_unlock(&vips_pdfium_mutex);
  210|     51|}
pdfiumload.c:vips_foreign_load_pdf_build:
  269|     51|{
  270|     51|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|     51|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
  271|       |
  272|     51|	VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) object;
  273|     51|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(pdf);
  ------------------
  |  |  441|     51|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|     51|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|     51|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|       |
  275|     51|	gint64 length;
  276|       |
  277|     51|	VIPS_ONCE(&once, vips_pdfium_init_cb, NULL);
  ------------------
  |  |   93|     51|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|     51|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|     51|	{ \
  |  |   95|     51|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|     51|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|     51| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|     51|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|     51|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|     51|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 1, False: 50]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|     51|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|     51|   else                                         \
  |  |  |  |  |  |  931|     51|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|     51|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|     51|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 1, False: 50]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|     51|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      1|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  242|      1|   (once)->retval : \
  |  |  |  |  243|      1|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|     51|	} \
  |  |   98|     51|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     51|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  278|       |
  279|     51|	if (!vips_object_argument_isset(object, "scale"))
  ------------------
  |  Branch (279:6): [True: 51, False: 0]
  ------------------
  280|     51|		pdf->scale = pdf->dpi / 72.0; // FIXME: Invalidates operation cache
  281|       |
  282|     51|	pdf->form_callbacks.version = 2;
  283|       |
  284|       |	/* pdfium must know the file length, unfortunately.
  285|       |	 */
  286|     51|	if (pdf->source) {
  ------------------
  |  Branch (286:6): [True: 51, False: 0]
  ------------------
  287|     51|		if ((length = vips_source_length(pdf->source)) <= 0)
  ------------------
  |  Branch (287:7): [True: 0, False: 51]
  ------------------
  288|      0|			return -1;
  289|     51|		if (length > 1 << 30) {
  ------------------
  |  Branch (289:7): [True: 0, False: 51]
  ------------------
  290|      0|			vips_error(class->nickname,
  291|      0|				_("%s: too large for pdfium"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  292|      0|				vips_connection_nick(
  293|      0|					VIPS_CONNECTION(pdf->source)));
  ------------------
  |  |   48|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|      0|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  294|      0|			return -1;
  295|      0|		}
  296|     51|		pdf->file_access.m_FileLen = length;
  297|     51|		pdf->file_access.m_GetBlock = vips_pdfium_GetBlock;
  298|     51|		pdf->file_access.m_Param = pdf;
  299|       |
  300|     51|		g_mutex_lock(&vips_pdfium_mutex);
  301|       |
  302|     51|		if (!(pdf->doc = FPDF_LoadCustomDocument(&pdf->file_access,
  ------------------
  |  Branch (302:7): [True: 46, False: 5]
  ------------------
  303|     51|				  pdf->password))) {
  304|     46|			g_mutex_unlock(&vips_pdfium_mutex);
  305|     46|			vips_pdfium_error();
  306|     46|			vips_error("pdfload",
  307|     46|				_("%s: unable to load"),
  ------------------
  |  |   30|     46|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     46|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  308|     46|				vips_connection_nick(
  309|     46|					VIPS_CONNECTION(pdf->source)));
  ------------------
  |  |   48|     46|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|     46|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     46|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|     46|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  310|     46|			return -1;
  311|     46|		}
  312|       |
  313|      5|		if (!(pdf->form = FPDFDOC_InitFormFillEnvironment(pdf->doc,
  ------------------
  |  Branch (313:7): [True: 0, False: 5]
  ------------------
  314|      5|				  &pdf->form_callbacks))) {
  315|      0|			g_mutex_unlock(&vips_pdfium_mutex);
  316|      0|			vips_pdfium_error();
  317|      0|			vips_error("pdfload",
  318|      0|				_("%s: unable to initialize form fill environment"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  319|      0|				vips_connection_nick(
  320|      0|					VIPS_CONNECTION(pdf->source)));
  ------------------
  |  |   48|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|      0|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  321|      0|			return -1;
  322|      0|		}
  323|       |
  324|      5|		g_mutex_unlock(&vips_pdfium_mutex);
  325|      5|	}
  326|       |
  327|      5|	if (VIPS_OBJECT_CLASS(vips_foreign_load_pdf_parent_class)->build(object))
  ------------------
  |  |  435|      5|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      5|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      5|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (327:6): [True: 3, False: 2]
  ------------------
  328|      3|		return -1;
  329|       |
  330|      2|	return 0;
  331|      5|}
pdfiumload.c:vips_pdfium_init_cb:
  224|      1|{
  225|      1|	FPDF_LIBRARY_CONFIG config;
  226|       |
  227|      1|	config.version = 2;
  228|      1|	config.m_pUserFontPaths = NULL;
  229|      1|	config.m_pIsolate = NULL;
  230|      1|	config.m_v8EmbedderSlot = 0;
  231|       |
  232|      1|	FPDF_InitLibraryWithConfig(&config);
  233|       |
  234|      1|	return NULL;
  235|      1|}
pdfiumload.c:vips_pdfium_GetBlock:
  242|  5.60k|{
  243|  5.60k|	VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) param;
  244|       |
  245|       |	/* PDFium guarantees these.
  246|       |	 */
  247|  5.60k|	g_assert(size > 0);
  ------------------
  |  |  166|  5.60k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  5.60k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  5.60k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  248|  5.60k|	g_assert(position >= 0);
  ------------------
  |  |  166|  5.60k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  5.60k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  5.60k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|  5.60k|	g_assert(position + size <= pdf->file_access.m_FileLen);
  ------------------
  |  |  166|  5.60k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  5.60k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  5.60k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|       |
  251|  5.60k|	if (vips_source_seek(pdf->source, position, SEEK_SET) < 0)
  ------------------
  |  Branch (251:6): [True: 0, False: 5.60k]
  ------------------
  252|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  253|       |
  254|  11.2k|	while (size > 0) {
  ------------------
  |  Branch (254:9): [True: 5.60k, False: 5.60k]
  ------------------
  255|  5.60k|		gint64 bytes_read;
  256|       |
  257|  5.60k|		if ((bytes_read =
  ------------------
  |  Branch (257:7): [True: 0, False: 5.60k]
  ------------------
  258|  5.60k|					vips_source_read(pdf->source, pBuf, size)) < 0)
  259|      0|			return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  260|  5.60k|		pBuf += bytes_read;
  261|  5.60k|		size -= bytes_read;
  262|  5.60k|	}
  263|       |
  264|  5.60k|	return TRUE;
  ------------------
  |  |  798|  5.60k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  5.60k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  265|  5.60k|}
pdfiumload.c:vips_pdfium_error:
  189|     47|{
  190|     47|	int err = FPDF_GetLastError();
  191|       |
  192|     47|	if (err >= 0 &&
  ------------------
  |  Branch (192:6): [True: 47, False: 0]
  ------------------
  193|     47|		err < VIPS_NUMBER(vips_pdfium_errors))
  ------------------
  |  |   60|     47|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (193:3): [True: 47, False: 0]
  ------------------
  194|     47|		vips_error("pdfload", "%s", _(vips_pdfium_errors[err]));
  ------------------
  |  |   30|     47|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     47|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  195|      0|	else
  196|      0|		vips_error("pdfload", "%s", _("unknown error"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  197|     47|}
pdfiumload.c:vips_foreign_load_pdf_get_flags:
  343|      5|{
  344|      5|	return VIPS_FOREIGN_PARTIAL;
  345|      5|}
pdfiumload.c:vips_foreign_load_pdf_header:
  455|      5|{
  456|      5|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load);
  ------------------
  |  |  441|      5|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|      5|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|      5|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  457|      5|	VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) load;
  458|       |
  459|      5|	int top;
  460|      5|	int i;
  461|       |
  462|       |#ifdef DEBUG
  463|       |	printf("vips_foreign_load_pdf_header: %p\n", pdf);
  464|       |#endif /*DEBUG*/
  465|       |
  466|      5|	g_mutex_lock(&vips_pdfium_mutex);
  467|      5|	pdf->n_pages = FPDF_GetPageCount(pdf->doc);
  468|      5|	g_mutex_unlock(&vips_pdfium_mutex);
  469|       |
  470|       |	/* @n == -1 means until the end of the doc.
  471|       |	 */
  472|      5|	if (pdf->n == -1)
  ------------------
  |  Branch (472:6): [True: 0, False: 5]
  ------------------
  473|      0|		pdf->n = pdf->n_pages - pdf->page_no; // FIXME: Invalidates operation cache
  474|       |
  475|      5|	if (pdf->page_no + pdf->n > pdf->n_pages ||
  ------------------
  |  Branch (475:6): [True: 1, False: 4]
  ------------------
  476|      5|		pdf->page_no < 0 ||
  ------------------
  |  Branch (476:3): [True: 0, False: 4]
  ------------------
  477|      5|		pdf->n <= 0) {
  ------------------
  |  Branch (477:3): [True: 0, False: 4]
  ------------------
  478|      1|		vips_error(class->nickname, "%s", _("pages out of range"));
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  479|      1|		return -1;
  480|      1|	}
  481|       |
  482|       |	/* Lay out the pages in our output image.
  483|       |	 */
  484|      4|	if (!(pdf->pages = VIPS_ARRAY(pdf, pdf->n, VipsRect)))
  ------------------
  |  |   72|      4|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|      4|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|      4|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|      4|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|      4|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (484:6): [True: 0, False: 4]
  ------------------
  485|      0|		return -1;
  486|       |
  487|      4|	top = 0;
  488|      4|	pdf->image.left = 0;
  489|      4|	pdf->image.top = 0;
  490|      4|	pdf->image.width = 0;
  491|      4|	pdf->image.height = 0;
  492|      6|	for (i = 0; i < pdf->n; i++) {
  ------------------
  |  Branch (492:14): [True: 4, False: 2]
  ------------------
  493|      4|		if (vips_foreign_load_pdf_get_page(pdf, pdf->page_no + i))
  ------------------
  |  Branch (493:7): [True: 1, False: 3]
  ------------------
  494|      1|			return -1;
  495|      3|		pdf->pages[i].left = 0;
  496|      3|		pdf->pages[i].top = top;
  497|       |		/* We do round to nearest, in the same way that vips_resize()
  498|       |		 * does round to nearest. Without this, things like
  499|       |		 * shrink-on-load will break.
  500|       |		 */
  501|      3|		pdf->pages[i].width = VIPS_RINT(
  ------------------
  |  |   74|      3|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  502|      3|			FPDF_GetPageWidth(pdf->page) * pdf->scale);
  503|      3|		pdf->pages[i].height = VIPS_RINT(
  ------------------
  |  |   74|      3|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  504|      3|			FPDF_GetPageHeight(pdf->page) * pdf->scale);
  505|       |
  506|       |		/* PDFium allows page width or height to be less than 1 (!!).
  507|       |		 */
  508|      3|		if (pdf->pages[i].width < 1 ||
  ------------------
  |  Branch (508:7): [True: 0, False: 3]
  ------------------
  509|      3|			pdf->pages[i].height < 1 ||
  ------------------
  |  Branch (509:4): [True: 0, False: 3]
  ------------------
  510|      3|			pdf->pages[i].width > VIPS_MAX_COORD ||
  ------------------
  |  |   69|      6|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  |  Branch (510:4): [True: 1, False: 2]
  ------------------
  511|      3|			pdf->pages[i].height > VIPS_MAX_COORD) {
  ------------------
  |  |   69|      2|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  |  Branch (511:4): [True: 0, False: 2]
  ------------------
  512|      1|			vips_error(class->nickname,
  513|      1|				"%s", _("page size out of range"));
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  514|      1|			return -1;
  515|      1|		}
  516|       |
  517|      2|		if (pdf->pages[i].width > pdf->image.width)
  ------------------
  |  Branch (517:7): [True: 2, False: 0]
  ------------------
  518|      2|			pdf->image.width = pdf->pages[i].width;
  519|      2|		pdf->image.height += pdf->pages[i].height;
  520|       |
  521|      2|		top += pdf->pages[i].height;
  522|      2|	}
  523|       |
  524|       |	/* If all pages are the same height, we can tag this as a toilet roll
  525|       |	 * image.
  526|       |	 */
  527|      2|	for (i = 1; i < pdf->n; i++)
  ------------------
  |  Branch (527:14): [True: 0, False: 2]
  ------------------
  528|      0|		if (pdf->pages[i].height != pdf->pages[0].height)
  ------------------
  |  Branch (528:7): [True: 0, False: 0]
  ------------------
  529|      0|			break;
  530|       |
  531|       |	/* Only set page-height if we have more than one page, or this could
  532|       |	 * accidentally turn into an animated image later.
  533|       |	 */
  534|      2|	if (pdf->n > 1)
  ------------------
  |  Branch (534:6): [True: 0, False: 2]
  ------------------
  535|      0|		vips_image_set_int(load->out,
  536|      0|			VIPS_META_PAGE_HEIGHT, pdf->pages[0].height);
  ------------------
  |  |  158|      0|#define VIPS_META_PAGE_HEIGHT "page-height"
  ------------------
  537|       |
  538|      2|	vips_foreign_load_pdf_set_image(pdf, load->out);
  539|       |
  540|       |	/* Convert the background to the image format.
  541|       |	 */
  542|      2|	if (!(pdf->ink = vips__vector_to_ink(class->nickname,
  ------------------
  |  Branch (542:6): [True: 0, False: 2]
  ------------------
  543|      2|			  load->out,
  544|      2|			  VIPS_AREA(pdf->background)->data, NULL,
  ------------------
  |  |  137|      2|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  545|      2|			  VIPS_AREA(pdf->background)->n)))
  ------------------
  |  |  137|      2|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  546|      0|		return -1;
  547|      2|	vips__bgra2rgba((guint32 *) pdf->ink, 1);
  548|       |
  549|      2|	return 0;
  550|      2|}
pdfiumload.c:vips_foreign_load_pdf_get_page:
  349|      4|{
  350|      4|	if (pdf->current_page != page_no) {
  ------------------
  |  Branch (350:6): [True: 4, False: 0]
  ------------------
  351|      4|		VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(pdf);
  ------------------
  |  |  441|      4|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|      4|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|      4|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  352|       |
  353|      4|		g_mutex_lock(&vips_pdfium_mutex);
  354|       |
  355|      4|		VIPS_FREEF(FPDF_ClosePage, pdf->page);
  ------------------
  |  |   41|      4|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      4|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      4|	{ \
  |  |   43|      4|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 4]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|      4|	} \
  |  |   48|      4|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      4|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  356|      4|		pdf->current_page = -1;
  357|       |
  358|       |#ifdef DEBUG
  359|       |		printf("vips_foreign_load_pdf_get_page: %d\n", page_no);
  360|       |#endif /*DEBUG*/
  361|       |
  362|      4|		if (!(pdf->page = FPDF_LoadPage(pdf->doc, page_no))) {
  ------------------
  |  Branch (362:7): [True: 1, False: 3]
  ------------------
  363|      1|			g_mutex_unlock(&vips_pdfium_mutex);
  364|      1|			vips_pdfium_error();
  365|      1|			vips_error(class->nickname,
  366|      1|				_("unable to load page %d"), page_no);
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  367|      1|			return -1;
  368|      1|		}
  369|      3|		pdf->current_page = page_no;
  370|       |
  371|      3|		g_mutex_unlock(&vips_pdfium_mutex);
  372|      3|	}
  373|       |
  374|      3|	return 0;
  375|      4|}
pdfiumload.c:vips_foreign_load_pdf_set_image:
  397|      2|{
  398|      2|	int i;
  399|      2|	double res;
  400|       |
  401|       |#ifdef DEBUG
  402|       |	printf("vips_foreign_load_pdf_set_image: %p\n", pdf);
  403|       |#endif /*DEBUG*/
  404|       |
  405|       |	/* We render to a tilecache, so it has to be SMALLTILE.
  406|       |	 */
  407|      2|	if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_SMALLTILE, NULL))
  ------------------
  |  Branch (407:6): [True: 0, False: 2]
  ------------------
  408|      0|		return -1;
  409|       |
  410|       |	/* Extract and attach metadata. Set the old name too for compat.
  411|       |	 */
  412|      2|	vips_image_set_int(out, "pdf-n_pages", pdf->n_pages);
  413|      2|	vips_image_set_int(out, VIPS_META_N_PAGES, pdf->n_pages);
  ------------------
  |  |  165|      2|#define VIPS_META_N_PAGES "n-pages"
  ------------------
  414|       |
  415|      2|	g_mutex_lock(&vips_pdfium_mutex);
  416|       |
  417|     14|	for (i = 0; i < n_metadata; i++) {
  ------------------
  |  Branch (417:14): [True: 12, False: 2]
  ------------------
  418|     12|		VipsForeignLoadPdfMetadata *metadata =
  419|     12|			&vips_foreign_load_pdf_metadata[i];
  420|       |
  421|     12|		char text[1024];
  422|     12|		int len;
  423|       |
  424|     12|		len = FPDF_GetMetaText(pdf->doc, metadata->tag, text, 1024);
  425|     12|		if (len > 0) {
  ------------------
  |  Branch (425:7): [True: 0, False: 12]
  ------------------
  426|      0|			char *str;
  427|       |
  428|       |			/* Silently ignore coding errors.
  429|       |			 */
  430|      0|			if ((str = g_utf16_to_utf8((gunichar2 *) text, len,
  ------------------
  |  Branch (430:8): [True: 0, False: 0]
  ------------------
  431|      0|					 NULL, NULL, NULL))) {
  432|      0|				vips_image_set_string(out,
  433|      0|					metadata->field, str);
  434|      0|				g_free(str);
  435|      0|			}
  436|      0|		}
  437|     12|	}
  438|       |
  439|      2|	g_mutex_unlock(&vips_pdfium_mutex);
  440|       |
  441|       |	/* We need pixels/mm for vips.
  442|       |	 */
  443|      2|	res = pdf->dpi / 25.4;
  444|       |
  445|      2|	vips_image_init_fields(out,
  446|      2|		pdf->image.width, pdf->image.height,
  447|      2|		4, VIPS_FORMAT_UCHAR,
  448|      2|		VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, res, res);
  449|       |
  450|      2|	return 0;
  451|      2|}
pdfiumload.c:vips_foreign_load_pdf_init:
  739|     51|{
  740|     51|	pdf->dpi = 72.0;
  741|     51|	pdf->scale = 1.0;
  742|     51|	pdf->n = 1;
  743|     51|	pdf->current_page = -1;
  744|     51|	pdf->background = vips_array_double_newv(1, 255.0);
  745|     51|}
pdfiumload.c:vips_foreign_load_pdf_file_class_init:
  793|      1|{
  794|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  795|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  796|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  797|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  798|       |
  799|      1|	gobject_class->set_property = vips_object_set_property;
  800|      1|	gobject_class->get_property = vips_object_get_property;
  801|       |
  802|      1|	object_class->nickname = "pdfload";
  803|      1|	object_class->description = _("load PDF from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  804|      1|	object_class->build = vips_foreign_load_pdf_file_build;
  805|       |
  806|      1|	foreign_class->suffs = vips__pdf_suffs;
  807|       |
  808|      1|	load_class->is_a = vips__pdf_is_a_file;
  809|      1|	load_class->header = vips_foreign_load_pdf_file_header;
  810|       |
  811|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  812|      1|		_("Filename"),
  813|      1|		_("Filename to load from"),
  814|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  815|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdfFile, filename),
  816|      1|		NULL);
  817|      1|}
pdfiumload.c:vips_foreign_load_pdf_buffer_class_init:
  857|      1|{
  858|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  859|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  860|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  861|       |
  862|      1|	gobject_class->set_property = vips_object_set_property;
  863|      1|	gobject_class->get_property = vips_object_get_property;
  864|       |
  865|      1|	object_class->nickname = "pdfload_buffer";
  866|      1|	object_class->description = _("load PDF from buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  867|      1|	object_class->build = vips_foreign_load_pdf_buffer_build;
  868|       |
  869|      1|	load_class->is_a_buffer = vips__pdf_is_a_buffer;
  870|       |
  871|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  872|      1|		_("Buffer"),
  873|      1|		_("Buffer to load from"),
  874|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  875|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdfBuffer, buf),
  876|      1|		VIPS_TYPE_BLOB);
  877|      1|}
pdfiumload.c:vips_foreign_load_pdf_buffer_build:
  840|     51|{
  841|     51|	VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) object;
  842|     51|	VipsForeignLoadPdfBuffer *buffer = (VipsForeignLoadPdfBuffer *) pdf;
  843|       |
  844|     51|	if (buffer->buf &&
  ------------------
  |  Branch (844:6): [True: 51, False: 0]
  ------------------
  845|     51|		!(pdf->source = vips_source_new_from_memory(
  ------------------
  |  Branch (845:3): [True: 0, False: 51]
  ------------------
  846|     51|			  VIPS_AREA(buffer->buf)->data,
  ------------------
  |  |  137|     51|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  847|     51|			  VIPS_AREA(buffer->buf)->length)))
  ------------------
  |  |  137|     51|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  848|      0|		return -1;
  849|       |
  850|     51|	return VIPS_OBJECT_CLASS(vips_foreign_load_pdf_buffer_parent_class)
  ------------------
  |  |  435|     51|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|     51|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|     51|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  851|     51|		->build(object);
  852|     51|}
pdfiumload.c:vips_foreign_load_pdf_buffer_init:
  881|     51|{
  882|     51|}
pdfiumload.c:vips_foreign_load_pdf_source_class_init:
  914|      1|{
  915|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  916|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  917|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  918|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  919|       |
  920|      1|	gobject_class->set_property = vips_object_set_property;
  921|      1|	gobject_class->get_property = vips_object_get_property;
  922|       |
  923|      1|	object_class->nickname = "pdfload_source";
  924|      1|	object_class->description = _("load PDF from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  925|      1|	object_class->build = vips_foreign_load_pdf_source_build;
  926|       |
  927|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  928|       |
  929|      1|	load_class->is_a_source = vips__pdf_is_a_source;
  930|       |
  931|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  932|      1|		_("Source"),
  933|      1|		_("Source to load from"),
  934|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  935|      1|		G_STRUCT_OFFSET(VipsForeignLoadPdfSource, source),
  936|      1|		VIPS_TYPE_SOURCE);
  937|      1|}

ppmload.c:vips_foreign_load_ppm_class_init:
  734|      1|{
  735|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  736|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  737|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  738|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  739|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  740|       |
  741|      1|	gobject_class->dispose = vips_foreign_load_ppm_dispose;
  742|      1|	gobject_class->set_property = vips_object_set_property;
  743|      1|	gobject_class->get_property = vips_object_get_property;
  744|       |
  745|      1|	object_class->nickname = "ppmload_base";
  746|      1|	object_class->description = _("load ppm base class");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  747|      1|	object_class->build = vips_foreign_load_ppm_build;
  748|       |
  749|       |	/* You're unlikely to want to use this on untrusted files.
  750|       |	 */
  751|      1|	operation_class->flags |= VIPS_OPERATION_UNTRUSTED;
  752|       |
  753|      1|	foreign_class->suffs = vips__ppm_suffs;
  754|       |
  755|       |	/* We are fast at is_a(), so high priority.
  756|       |	 */
  757|      1|	foreign_class->priority = 200;
  758|       |
  759|      1|	load_class->get_flags = vips_foreign_load_ppm_get_flags;
  760|      1|	load_class->header = vips_foreign_load_ppm_header;
  761|      1|	load_class->load = vips_foreign_load_ppm_load;
  762|      1|}
ppmload.c:vips_foreign_load_ppm_file_class_init:
  814|      1|{
  815|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  816|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  817|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  818|       |
  819|      1|	gobject_class->set_property = vips_object_set_property;
  820|      1|	gobject_class->get_property = vips_object_get_property;
  821|       |
  822|      1|	object_class->nickname = "ppmload";
  823|      1|	object_class->description = _("load ppm from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  824|      1|	object_class->build = vips_foreign_load_ppm_file_build;
  825|       |
  826|      1|	load_class->is_a = vips_foreign_load_ppm_file_is_a;
  827|       |
  828|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  829|      1|		_("Filename"),
  830|      1|		_("Filename to load from"),
  831|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  832|      1|		G_STRUCT_OFFSET(VipsForeignLoadPpmFile, filename),
  833|      1|		NULL);
  834|      1|}
ppmload.c:vips_foreign_load_ppm_source_class_init:
  873|      1|{
  874|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  875|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  876|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  877|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  878|       |
  879|      1|	gobject_class->set_property = vips_object_set_property;
  880|      1|	gobject_class->get_property = vips_object_get_property;
  881|       |
  882|      1|	object_class->nickname = "ppmload_source";
  883|      1|	object_class->build = vips_foreign_load_ppm_source_build;
  884|       |
  885|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  886|       |
  887|      1|	load_class->is_a_source = vips_foreign_load_ppm_is_a_source;
  888|       |
  889|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  890|      1|		_("Source"),
  891|      1|		_("Source to load from"),
  892|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  893|      1|		G_STRUCT_OFFSET(VipsForeignLoadPpmSource, source),
  894|      1|		VIPS_TYPE_SOURCE);
  895|      1|}

ppmsave.c:vips_foreign_save_ppm_class_init:
  490|      1|{
  491|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  492|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  493|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  494|       |
  495|      1|	gobject_class->dispose = vips_foreign_save_ppm_dispose;
  496|      1|	gobject_class->set_property = vips_object_set_property;
  497|      1|	gobject_class->get_property = vips_object_get_property;
  498|       |
  499|      1|	object_class->nickname = "ppmsave_base";
  500|      1|	object_class->description = _("save to ppm");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  501|      1|	object_class->build = vips_foreign_save_ppm_build;
  502|       |
  503|      1|	save_class->saveable = VIPS_SAVEABLE_ANY;
  504|      1|	save_class->format_table = bandfmt_ppm;
  505|       |
  506|      1|	VIPS_ARG_ENUM(class, "format", 2,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  507|      1|		_("Format"),
  508|      1|		_("Format to save in"),
  509|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  510|      1|		G_STRUCT_OFFSET(VipsForeignSavePpm, format),
  511|      1|		VIPS_TYPE_FOREIGN_PPM_FORMAT,
  512|      1|		VIPS_FOREIGN_PPM_FORMAT_PPM);
  513|       |
  514|      1|	VIPS_ARG_BOOL(class, "ascii", 10,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  515|      1|		_("ASCII"),
  516|      1|		_("Save as ascii"),
  517|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  518|      1|		G_STRUCT_OFFSET(VipsForeignSavePpm, ascii),
  519|      1|		FALSE);
  520|       |
  521|      1|	VIPS_ARG_INT(class, "bitdepth", 15,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  522|      1|		_("Bit depth"),
  523|      1|		_("Set to 1 to write as a 1 bit image"),
  524|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  525|      1|		G_STRUCT_OFFSET(VipsForeignSavePpm, bitdepth),
  526|      1|		0, 1, 0);
  527|       |
  528|      1|	VIPS_ARG_BOOL(class, "squash", 11,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  529|      1|		_("Squash"),
  530|      1|		_("Save as one bit"),
  531|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  532|      1|		G_STRUCT_OFFSET(VipsForeignSavePpm, squash),
  533|      1|		FALSE);
  534|      1|}
ppmsave.c:vips_foreign_save_ppm_file_class_init:
  578|      1|{
  579|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  580|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  581|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  582|       |
  583|      1|	gobject_class->set_property = vips_object_set_property;
  584|      1|	gobject_class->get_property = vips_object_get_property;
  585|       |
  586|      1|	object_class->nickname = "ppmsave";
  587|      1|	object_class->description = _("save image to ppm file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  588|      1|	object_class->build = vips_foreign_save_ppm_file_build;
  589|       |
  590|      1|	foreign_class->suffs = vips__ppm_suffs;
  591|       |
  592|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  593|      1|		_("Filename"),
  594|      1|		_("Filename to save to"),
  595|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  596|      1|		G_STRUCT_OFFSET(VipsForeignSavePpmFile, filename),
  597|      1|		NULL);
  598|      1|}
ppmsave.c:vips_foreign_save_ppm_target_class_init:
  635|      1|{
  636|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  637|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  638|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  639|       |
  640|      1|	gobject_class->set_property = vips_object_set_property;
  641|      1|	gobject_class->get_property = vips_object_get_property;
  642|       |
  643|      1|	object_class->nickname = "ppmsave_target";
  644|      1|	object_class->build = vips_foreign_save_ppm_target_build;
  645|       |
  646|      1|	foreign_class->suffs = vips__save_ppm_suffs;
  647|       |
  648|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  649|      1|		_("Target"),
  650|      1|		_("Target to save to"),
  651|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  652|      1|		G_STRUCT_OFFSET(VipsForeignSavePpmTarget, target),
  653|      1|		VIPS_TYPE_TARGET);
  654|      1|}
ppmsave.c:vips_foreign_save_pbm_target_class_init:
  670|      1|{
  671|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  672|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  673|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
  674|       |
  675|      1|	object_class->nickname = "pbmsave_target";
  676|      1|	object_class->description = _("save image in pbm format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  677|       |
  678|      1|	foreign_class->suffs = vips__save_pbm_suffs;
  679|       |
  680|       |	/* Hide from UI.
  681|       |	 */
  682|      1|	operation_class->flags |= VIPS_OPERATION_DEPRECATED;
  683|      1|}
ppmsave.c:vips_foreign_save_pgm_target_class_init:
  702|      1|{
  703|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  704|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  705|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
  706|       |
  707|      1|	object_class->nickname = "pgmsave_target";
  708|      1|	object_class->description = _("save image in pgm format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  709|       |
  710|      1|	foreign_class->suffs = vips__save_pgm_suffs;
  711|       |
  712|       |	/* Hide from UI.
  713|       |	 */
  714|      1|	operation_class->flags |= VIPS_OPERATION_DEPRECATED;
  715|      1|}
ppmsave.c:vips_foreign_save_pfm_target_class_init:
  734|      1|{
  735|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  736|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  737|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
  738|       |
  739|      1|	object_class->nickname = "pfmsave_target";
  740|      1|	object_class->description = _("save image in pfm format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  741|       |
  742|      1|	foreign_class->suffs = vips__save_pfm_suffs;
  743|       |
  744|       |	/* Hide from UI.
  745|       |	 */
  746|      1|	operation_class->flags |= VIPS_OPERATION_DEPRECATED;
  747|      1|}
ppmsave.c:vips_foreign_save_pnm_target_class_init:
  766|      1|{
  767|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  768|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  769|      1|	VipsOperationClass *operation_class = (VipsOperationClass *) class;
  770|       |
  771|      1|	object_class->nickname = "pnmsave_target";
  772|      1|	object_class->description = _("save image in pnm format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  773|       |
  774|      1|	foreign_class->suffs = vips__save_pnm_suffs;
  775|       |
  776|       |	/* Hide from UI.
  777|       |	 */
  778|      1|	operation_class->flags |= VIPS_OPERATION_DEPRECATED;
  779|      1|}

vips__rad_israd:
  568|  6.95k|{
  569|  6.95k|	VipsSbuf *sbuf;
  570|  6.95k|	const char *line;
  571|  6.95k|	int result;
  572|       |
  573|       |	/* Just test that the first line is the magic string.
  574|       |	 */
  575|  6.95k|	sbuf = vips_sbuf_new_from_source(source);
  576|  6.95k|	result = (line = vips_sbuf_get_line(sbuf)) &&
  ------------------
  |  Branch (576:11): [True: 6.95k, False: 0]
  ------------------
  577|  6.95k|		strcmp(line, "#?RADIANCE") == 0;
  ------------------
  |  Branch (577:3): [True: 543, False: 6.41k]
  ------------------
  578|  6.95k|	VIPS_UNREF(sbuf);
  ------------------
  |  |   57|  6.95k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  6.95k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  6.95k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  6.95k|	{ \
  |  |  |  |   43|  6.95k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 6.95k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  6.95k|			(void) F((S)); \
  |  |  |  |   45|  6.95k|			(S) = 0; \
  |  |  |  |   46|  6.95k|		} \
  |  |  |  |   47|  6.95k|	} \
  |  |  |  |   48|  6.95k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  6.95k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  579|       |
  580|  6.95k|	return result;
  581|  6.95k|}
vips__rad_header:
  740|    543|{
  741|    543|	Read *read;
  742|       |
  743|    543|	if (!(read = read_new(source, out)))
  ------------------
  |  Branch (743:6): [True: 0, False: 543]
  ------------------
  744|      0|		return -1;
  745|    543|	if (rad2vips_get_header(read, read->out))
  ------------------
  |  Branch (745:6): [True: 277, False: 266]
  ------------------
  746|    277|		return -1;
  747|    266|	vips_source_minimise(source);
  748|       |
  749|    266|	return 0;
  750|    543|}
vips__rad_load:
  787|    246|{
  788|    246|	VipsImage **t = (VipsImage **)
  789|    246|		vips_object_local_array(VIPS_OBJECT(out), 3);
  ------------------
  |  |  433|    246|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|    246|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    246|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  790|       |
  791|    246|	Read *read;
  792|       |
  793|       |#ifdef DEBUG
  794|       |	printf("rad2vips: reading \"%s\"\n",
  795|       |		vips_connection_nick(VIPS_CONNECTION(source)));
  796|       |#endif /*DEBUG*/
  797|       |
  798|    246|	if (!(read = read_new(source, out)))
  ------------------
  |  Branch (798:6): [True: 0, False: 246]
  ------------------
  799|      0|		return -1;
  800|       |
  801|    246|	t[0] = vips_image_new();
  802|    246|	if (rad2vips_get_header(read, t[0]))
  ------------------
  |  Branch (802:6): [True: 0, False: 246]
  ------------------
  803|      0|		return -1;
  804|       |
  805|    246|	if (vips_image_generate(t[0],
  ------------------
  |  Branch (805:6): [True: 0, False: 246]
  ------------------
  806|    246|			NULL, rad2vips_generate, NULL, read, NULL) ||
  807|    246|		vips_sequential(t[0], &t[1],
  ------------------
  |  Branch (807:3): [True: 0, False: 246]
  ------------------
  808|    246|			"tile_height", VIPS__FATSTRIP_HEIGHT,
  ------------------
  |  |  161|    246|#define VIPS__FATSTRIP_HEIGHT (16)
  ------------------
  809|    246|			NULL) ||
  810|    246|		vips_image_write(t[1], out))
  ------------------
  |  Branch (810:3): [True: 189, False: 57]
  ------------------
  811|    189|		return -1;
  812|       |
  813|     57|	if (vips_source_decode(source))
  ------------------
  |  Branch (813:6): [True: 0, False: 57]
  ------------------
  814|      0|		return -1;
  815|       |
  816|     57|	return 0;
  817|     57|}
radiance.c:read_new:
  598|    789|{
  599|    789|	Read *read;
  600|    789|	int i;
  601|       |
  602|    789|	if (vips_source_rewind(source))
  ------------------
  |  Branch (602:6): [True: 0, False: 789]
  ------------------
  603|      0|		return NULL;
  604|       |
  605|    789|	if (!(read = VIPS_NEW(out, Read)))
  ------------------
  |  |   70|    789|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    789|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    789|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    789|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    789|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (605:6): [True: 0, False: 789]
  ------------------
  606|      0|		return NULL;
  607|       |
  608|    789|	read->sbuf = vips_sbuf_new_from_source(source);
  609|    789|	read->out = out;
  610|    789|	strcpy(read->format, COLRFMT);
  ------------------
  |  |  202|    789|#define COLRFMT "32-bit_rle_rgbe"
  ------------------
  611|    789|	read->expos = 1.0;
  612|  3.15k|	for (i = 0; i < 3; i++)
  ------------------
  |  Branch (612:14): [True: 2.36k, False: 789]
  ------------------
  613|  2.36k|		read->colcor[i] = 1.0;
  614|    789|	read->aspect = 1.0;
  615|    789|	read->prims[0][0] = CIE_x_r;
  ------------------
  |  |  192|    789|#define CIE_x_r 0.640 /* nominal CRT primaries */
  ------------------
  616|    789|	read->prims[0][1] = CIE_y_r;
  ------------------
  |  |  193|    789|#define CIE_y_r 0.330
  ------------------
  617|    789|	read->prims[1][0] = CIE_x_g;
  ------------------
  |  |  194|    789|#define CIE_x_g 0.290
  ------------------
  618|    789|	read->prims[1][1] = CIE_y_g;
  ------------------
  |  |  195|    789|#define CIE_y_g 0.600
  ------------------
  619|    789|	read->prims[2][0] = CIE_x_b;
  ------------------
  |  |  196|    789|#define CIE_x_b 0.150
  ------------------
  620|    789|	read->prims[2][1] = CIE_y_b;
  ------------------
  |  |  197|    789|#define CIE_y_b 0.060
  ------------------
  621|    789|	read->prims[3][0] = CIE_x_w;
  ------------------
  |  |  198|    789|#define CIE_x_w (1. / 3.) /* use EE white */
  ------------------
  622|    789|	read->prims[3][1] = CIE_y_w;
  ------------------
  |  |  199|    789|#define CIE_y_w (1. / 3.)
  ------------------
  623|       |
  624|    789|	g_signal_connect(out, "close",
  ------------------
  |  |  491|    789|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  625|    789|		G_CALLBACK(read_destroy), read);
  626|    789|	g_signal_connect(out, "minimise",
  ------------------
  |  |  491|    789|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  627|    789|		G_CALLBACK(read_minimise_cb), read);
  628|       |
  629|    789|	return read;
  630|    789|}
radiance.c:read_destroy:
  585|    783|{
  586|    783|	VIPS_UNREF(read->sbuf);
  ------------------
  |  |   57|    783|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|    783|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|    783|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|    783|	{ \
  |  |  |  |   43|    783|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 783, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|    783|			(void) F((S)); \
  |  |  |  |   45|    783|			(S) = 0; \
  |  |  |  |   46|    783|		} \
  |  |  |  |   47|    783|	} \
  |  |  |  |   48|    783|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|    783|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  587|    783|}
radiance.c:read_minimise_cb:
  591|  1.09k|{
  592|  1.09k|	if (read->sbuf)
  ------------------
  |  Branch (592:6): [True: 1.09k, False: 0]
  ------------------
  593|  1.09k|		vips_source_minimise(read->sbuf->source);
  594|  1.09k|}
radiance.c:rad2vips_get_header:
  675|    789|{
  676|    789|	VipsInterpretation interpretation;
  677|    789|	const char *line;
  678|    789|	int width;
  679|    789|	int height;
  680|    789|	int i, j;
  681|       |
  682|    789|	if (getheader(read->sbuf,
  ------------------
  |  Branch (682:6): [True: 192, False: 597]
  ------------------
  683|    789|			(gethfunc *) rad2vips_process_line, read) ||
  684|    789|		!(line = vips_sbuf_get_line(read->sbuf)) ||
  ------------------
  |  Branch (684:3): [True: 3, False: 594]
  ------------------
  685|    789|		!str2resolu(&read->rs, (char *) line)) {
  ------------------
  |  Branch (685:3): [True: 66, False: 528]
  ------------------
  686|    261|		vips_error("rad2vips", "%s",
  687|    261|			_("error reading radiance header"));
  ------------------
  |  |   30|    261|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    261|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  688|    261|		return -1;
  689|    261|	}
  690|       |
  691|    528|	if (strcmp(read->format, COLRFMT) == 0)
  ------------------
  |  |  202|    528|#define COLRFMT "32-bit_rle_rgbe"
  ------------------
  |  Branch (691:6): [True: 528, False: 0]
  ------------------
  692|    528|		interpretation = VIPS_INTERPRETATION_scRGB;
  693|      0|	else if (strcmp(read->format, CIEFMT) == 0)
  ------------------
  |  |  203|      0|#define CIEFMT "32-bit_rle_xyze"
  ------------------
  |  Branch (693:11): [True: 0, False: 0]
  ------------------
  694|      0|		interpretation = VIPS_INTERPRETATION_XYZ;
  695|      0|	else
  696|      0|		interpretation = VIPS_INTERPRETATION_MULTIBAND;
  697|       |
  698|    528|	width = scanlen(&read->rs);
  ------------------
  |  |  251|    528|#define scanlen(rs) ((rs)->rt & YMAJOR ? (rs)->xr : (rs)->yr)
  |  |  ------------------
  |  |  |  |  242|    528|#define YMAJOR 4
  |  |  ------------------
  |  |  |  Branch (251:22): [True: 25, False: 503]
  |  |  ------------------
  ------------------
  699|    528|	height = numscans(&read->rs);
  ------------------
  |  |  252|    528|#define numscans(rs) ((rs)->rt & YMAJOR ? (rs)->yr : (rs)->xr)
  |  |  ------------------
  |  |  |  |  242|    528|#define YMAJOR 4
  |  |  ------------------
  |  |  |  Branch (252:23): [True: 25, False: 503]
  |  |  ------------------
  ------------------
  700|    528|	if (width <= 0 ||
  ------------------
  |  Branch (700:6): [True: 0, False: 528]
  ------------------
  701|    528|		width >= VIPS_MAX_COORD ||
  ------------------
  |  |   69|  1.05k|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  |  Branch (701:3): [True: 8, False: 520]
  ------------------
  702|    528|		height <= 0 ||
  ------------------
  |  Branch (702:3): [True: 0, False: 520]
  ------------------
  703|    528|		height >= VIPS_MAX_COORD) {
  ------------------
  |  |   69|    520|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  |  Branch (703:3): [True: 8, False: 512]
  ------------------
  704|     16|		vips_error("rad2vips", "%s", _("image size out of bounds"));
  ------------------
  |  |   30|     16|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     16|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  705|     16|		return -1;
  706|     16|	}
  707|       |
  708|    512|	vips_image_init_fields(out, width, height, 4,
  709|    512|		VIPS_FORMAT_UCHAR, VIPS_CODING_RAD,
  710|    512|		interpretation,
  711|    512|		1, read->aspect);
  712|       |
  713|    512|	VIPS_SETSTR(out->filename,
  ------------------
  |  |   53|    512|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    512|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|    512|	{ \
  |  |   55|    512|		const char *sst = (V); \
  |  |   56|    512|		\
  |  |   57|    512|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 512, False: 0]
  |  |  ------------------
  |  |   58|    512|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 0, False: 512]
  |  |  |  Branch (58:16): [True: 512, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|    512|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|    512|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|    512|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|    512|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|    512|	{ \
  |  |  |  |  |  |   43|    512|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 512, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|    512|			(void) F((S)); \
  |  |  |  |  |  |   45|    512|			(S) = 0; \
  |  |  |  |  |  |   46|    512|		} \
  |  |  |  |  |  |   47|    512|	} \
  |  |  |  |  |  |   48|    512|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|    512|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|    512|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 0, False: 512]
  |  |  ------------------
  |  |   61|    512|					(S) = g_strdup(sst); \
  |  |   62|    512|			} \
  |  |   63|    512|		} \
  |  |   64|    512|	} \
  |  |   65|    512|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    512|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  714|    512|		vips_connection_filename(
  715|    512|			VIPS_CONNECTION(read->sbuf->source)));
  716|       |
  717|    512|	if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, NULL))
  ------------------
  |  Branch (717:6): [True: 0, False: 512]
  ------------------
  718|      0|		return -1;
  719|       |
  720|    512|	vips_image_set_string(out, "rad-format", read->format);
  721|       |
  722|    512|	vips_image_set_double(out, "rad-expos", read->expos);
  723|       |
  724|  2.04k|	for (i = 0; i < 3; i++)
  ------------------
  |  Branch (724:14): [True: 1.53k, False: 512]
  ------------------
  725|  1.53k|		vips_image_set_double(out,
  726|  1.53k|			colcor_name[i], read->colcor[i]);
  727|       |
  728|    512|	vips_image_set_double(out, "rad-aspect", read->aspect);
  729|       |
  730|  2.56k|	for (i = 0; i < 4; i++)
  ------------------
  |  Branch (730:14): [True: 2.04k, False: 512]
  ------------------
  731|  6.14k|		for (j = 0; j < 2; j++)
  ------------------
  |  Branch (731:15): [True: 4.09k, False: 2.04k]
  ------------------
  732|  4.09k|			vips_image_set_double(out,
  733|  4.09k|				prims_name[i][j], read->prims[i][j]);
  734|       |
  735|    512|	return 0;
  736|    512|}
radiance.c:getheader:
  343|    789|{
  344|  9.48k|	for (;;) {
  345|  9.48k|		const char *line;
  346|       |
  347|  9.48k|		if (!(line = vips_sbuf_get_line(sbuf)))
  ------------------
  |  Branch (347:7): [True: 192, False: 9.29k]
  ------------------
  348|    192|			return -1;
  349|  9.29k|		if (strcmp(line, "") == 0)
  ------------------
  |  Branch (349:7): [True: 597, False: 8.69k]
  ------------------
  350|       |			/* Blank line. We've parsed the header successfully.
  351|       |			 */
  352|    597|			break;
  353|       |
  354|  8.69k|		if (f != NULL &&
  ------------------
  |  Branch (354:7): [True: 8.69k, False: 0]
  ------------------
  355|  8.69k|			(*f)((char *) line, p) < 0)
  ------------------
  |  Branch (355:4): [True: 0, False: 8.69k]
  ------------------
  356|      0|			return -1;
  357|  8.69k|	}
  358|       |
  359|    597|	return 0;
  360|    789|}
radiance.c:rad2vips_process_line:
  634|  8.69k|{
  635|  8.69k|	if (isformat(line)) {
  ------------------
  |  |  259|  8.69k|#define isformat(s) formatval(NULL, s)
  |  |  ------------------
  |  |  |  Branch (259:21): [True: 399, False: 8.29k]
  |  |  ------------------
  ------------------
  636|    399|		if (formatval(line, read->format))
  ------------------
  |  Branch (636:7): [True: 0, False: 399]
  ------------------
  637|      0|			return -1;
  638|    399|	}
  639|  8.29k|	else if (isexpos(line)) {
  ------------------
  |  |  208|  8.29k|#define isexpos(hl) (!strncmp(hl, EXPOSSTR, LEXPOSSTR))
  |  |  ------------------
  |  |  |  |  206|  8.29k|#define EXPOSSTR "EXPOSURE="
  |  |  ------------------
  |  |               #define isexpos(hl) (!strncmp(hl, EXPOSSTR, LEXPOSSTR))
  |  |  ------------------
  |  |  |  |  207|  8.29k|#define LEXPOSSTR 9
  |  |  ------------------
  |  |  |  Branch (208:21): [True: 228, False: 8.06k]
  |  |  ------------------
  ------------------
  640|    228|		read->expos *= exposval(line);
  ------------------
  |  |  209|    228|#define exposval(hl) atof((hl) + LEXPOSSTR)
  |  |  ------------------
  |  |  |  |  207|    228|#define LEXPOSSTR 9
  |  |  ------------------
  ------------------
  641|    228|	}
  642|  8.06k|	else if (iscolcor(line)) {
  ------------------
  |  |  231|  8.06k|#define iscolcor(hl) (!strncmp(hl, COLCORSTR, LCOLCORSTR))
  |  |  ------------------
  |  |  |  |  229|  8.06k|#define COLCORSTR "COLORCORR="
  |  |  ------------------
  |  |               #define iscolcor(hl) (!strncmp(hl, COLCORSTR, LCOLCORSTR))
  |  |  ------------------
  |  |  |  |  230|  8.06k|#define LCOLCORSTR 10
  |  |  ------------------
  |  |  |  Branch (231:22): [True: 403, False: 7.66k]
  |  |  ------------------
  ------------------
  643|    403|		COLOR cc;
  644|    403|		int i;
  645|       |
  646|    403|		(void) colcorval(cc, line);
  ------------------
  |  |  232|    403|#define colcorval(cc, hl) sscanf((hl) + LCOLCORSTR, "%f %f %f", \
  |  |  ------------------
  |  |  |  |  230|    403|#define LCOLCORSTR 10
  |  |  ------------------
  |  |  233|    403|	&(cc)[RED], &(cc)[GRN], &(cc)[BLU])
  |  |  ------------------
  |  |  |  |  174|    403|#define RED 0
  |  |  ------------------
  |  |               	&(cc)[RED], &(cc)[GRN], &(cc)[BLU])
  |  |  ------------------
  |  |  |  |  175|    403|#define GRN 1
  |  |  ------------------
  |  |               	&(cc)[RED], &(cc)[GRN], &(cc)[BLU])
  |  |  ------------------
  |  |  |  |  176|    403|#define BLU 2
  |  |  ------------------
  ------------------
  647|  1.61k|		for (i = 0; i < 3; i++)
  ------------------
  |  Branch (647:15): [True: 1.20k, False: 403]
  ------------------
  648|  1.20k|			read->colcor[i] *= cc[i];
  649|    403|	}
  650|  7.66k|	else if (isaspect(line)) {
  ------------------
  |  |  214|  7.66k|#define isaspect(hl) (!strncmp(hl, ASPECTSTR, LASPECTSTR))
  |  |  ------------------
  |  |  |  |  212|  7.66k|#define ASPECTSTR "PIXASPECT="
  |  |  ------------------
  |  |               #define isaspect(hl) (!strncmp(hl, ASPECTSTR, LASPECTSTR))
  |  |  ------------------
  |  |  |  |  213|  7.66k|#define LASPECTSTR 10
  |  |  ------------------
  |  |  |  Branch (214:22): [True: 222, False: 7.44k]
  |  |  ------------------
  ------------------
  651|    222|		read->aspect *= aspectval(line);
  ------------------
  |  |  215|    222|#define aspectval(hl) atof((hl) + LASPECTSTR)
  |  |  ------------------
  |  |  |  |  213|    222|#define LASPECTSTR 10
  |  |  ------------------
  ------------------
  652|    222|	}
  653|  7.44k|	else if (isprims(line)) {
  ------------------
  |  |  220|  7.44k|#define isprims(hl) (!strncmp(hl, PRIMARYSTR, LPRIMARYSTR))
  |  |  ------------------
  |  |  |  |  218|  7.44k|#define PRIMARYSTR "PRIMARIES="
  |  |  ------------------
  |  |               #define isprims(hl) (!strncmp(hl, PRIMARYSTR, LPRIMARYSTR))
  |  |  ------------------
  |  |  |  |  219|  7.44k|#define LPRIMARYSTR 10
  |  |  ------------------
  |  |  |  Branch (220:21): [True: 86, False: 7.35k]
  |  |  ------------------
  ------------------
  654|     86|		(void) primsval(read->prims, line);
  ------------------
  |  |  221|     86|#define primsval(p, hl) (sscanf((hl) + LPRIMARYSTR, \
  |  |  ------------------
  |  |  |  |  219|     86|#define LPRIMARYSTR 10
  |  |  ------------------
  |  |  222|     86|							 "%f %f %f %f %f %f %f %f", \
  |  |  223|     86|							 &(p)[RED][CIEX], &(p)[RED][CIEY], \
  |  |  ------------------
  |  |  |  |  174|     86|#define RED 0
  |  |  ------------------
  |  |               							 &(p)[RED][CIEX], &(p)[RED][CIEY], \
  |  |  ------------------
  |  |  |  |  177|     86|#define CIEX 0 /* or, if input is XYZ... */
  |  |  ------------------
  |  |               							 &(p)[RED][CIEX], &(p)[RED][CIEY], \
  |  |  ------------------
  |  |  |  |  174|     86|#define RED 0
  |  |  ------------------
  |  |               							 &(p)[RED][CIEX], &(p)[RED][CIEY], \
  |  |  ------------------
  |  |  |  |  178|     86|#define CIEY 1
  |  |  ------------------
  |  |  224|     86|							 &(p)[GRN][CIEX], &(p)[GRN][CIEY], \
  |  |  ------------------
  |  |  |  |  175|     86|#define GRN 1
  |  |  ------------------
  |  |               							 &(p)[GRN][CIEX], &(p)[GRN][CIEY], \
  |  |  ------------------
  |  |  |  |  177|     86|#define CIEX 0 /* or, if input is XYZ... */
  |  |  ------------------
  |  |               							 &(p)[GRN][CIEX], &(p)[GRN][CIEY], \
  |  |  ------------------
  |  |  |  |  175|     86|#define GRN 1
  |  |  ------------------
  |  |               							 &(p)[GRN][CIEX], &(p)[GRN][CIEY], \
  |  |  ------------------
  |  |  |  |  178|     86|#define CIEY 1
  |  |  ------------------
  |  |  225|     86|							 &(p)[BLU][CIEX], &(p)[BLU][CIEY], \
  |  |  ------------------
  |  |  |  |  176|     86|#define BLU 2
  |  |  ------------------
  |  |               							 &(p)[BLU][CIEX], &(p)[BLU][CIEY], \
  |  |  ------------------
  |  |  |  |  177|     86|#define CIEX 0 /* or, if input is XYZ... */
  |  |  ------------------
  |  |               							 &(p)[BLU][CIEX], &(p)[BLU][CIEY], \
  |  |  ------------------
  |  |  |  |  176|     86|#define BLU 2
  |  |  ------------------
  |  |               							 &(p)[BLU][CIEX], &(p)[BLU][CIEY], \
  |  |  ------------------
  |  |  |  |  178|     86|#define CIEY 1
  |  |  ------------------
  |  |  226|     86|							 &(p)[WHT][CIEX], &(p)[WHT][CIEY]) == 8)
  |  |  ------------------
  |  |  |  |  181|     86|#define WHT 3	  /* used for RGBPRIMS type */
  |  |  ------------------
  |  |               							 &(p)[WHT][CIEX], &(p)[WHT][CIEY]) == 8)
  |  |  ------------------
  |  |  |  |  177|     86|#define CIEX 0 /* or, if input is XYZ... */
  |  |  ------------------
  |  |               							 &(p)[WHT][CIEX], &(p)[WHT][CIEY]) == 8)
  |  |  ------------------
  |  |  |  |  181|     86|#define WHT 3	  /* used for RGBPRIMS type */
  |  |  ------------------
  |  |               							 &(p)[WHT][CIEX], &(p)[WHT][CIEY]) == 8)
  |  |  ------------------
  |  |  |  |  178|     86|#define CIEY 1
  |  |  ------------------
  ------------------
  655|     86|	}
  656|       |
  657|  8.69k|	return 0;
  658|  8.69k|}
radiance.c:formatval:
  315|  9.09k|{
  316|  9.09k|	const char *cp = FMTSTR;
  317|  9.09k|	char *r = fmt;
  318|       |	/* check against format string */
  319|  14.2k|	while (*cp)
  ------------------
  |  Branch (319:9): [True: 13.6k, False: 691]
  ------------------
  320|  13.6k|		if (*cp++ != *s++)
  ------------------
  |  Branch (320:7): [True: 8.40k, False: 5.20k]
  ------------------
  321|  8.40k|			return 0;
  322|  1.24k|	while (g_ascii_isspace(*s))
  ------------------
  |  |   81|  1.24k|  ((g_ascii_table[(guchar) (c)] & G_ASCII_SPACE) != 0)
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 554, False: 691]
  |  |  ------------------
  ------------------
  323|    554|		s++;
  324|    691|	if (!*s)
  ------------------
  |  Branch (324:6): [True: 292, False: 399]
  ------------------
  325|    292|		return 0;
  326|    399|	if (r == NULL) /* just checking if format? */
  ------------------
  |  Branch (326:6): [True: 399, False: 0]
  ------------------
  327|    399|		return 1;
  328|      0|	do /* copy format ID */
  329|      0|		*r++ = *s++;
  330|      0|	while (*s && r - fmt < MAXFMTLEN - 1);
  ------------------
  |  |  309|      0|#define MAXFMTLEN 64
  ------------------
  |  Branch (330:9): [True: 0, False: 0]
  |  Branch (330:15): [True: 0, False: 0]
  ------------------
  331|       |
  332|      0|	do /* remove trailing white space */
  333|      0|		*r-- = '\0';
  334|      0|	while (r > fmt && g_ascii_isspace(*r));
  ------------------
  |  |   81|      0|  ((g_ascii_table[(guchar) (c)] & G_ASCII_SPACE) != 0)
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (334:9): [True: 0, False: 0]
  ------------------
  335|       |
  336|      0|	return 1;
  337|    399|}
radiance.c:str2resolu:
  281|    594|{
  282|    594|	register char *xndx, *yndx;
  283|    594|	register char *cp;
  284|       |
  285|    594|	if (buf == NULL)
  ------------------
  |  Branch (285:6): [True: 0, False: 594]
  ------------------
  286|      0|		return 0;
  287|    594|	xndx = yndx = NULL;
  288|  7.62k|	for (cp = buf; *cp; cp++)
  ------------------
  |  Branch (288:17): [True: 7.03k, False: 594]
  ------------------
  289|  7.03k|		if (*cp == 'X')
  ------------------
  |  Branch (289:7): [True: 1.03k, False: 6.00k]
  ------------------
  290|  1.03k|			xndx = cp;
  291|  6.00k|		else if (*cp == 'Y')
  ------------------
  |  Branch (291:12): [True: 882, False: 5.12k]
  ------------------
  292|    882|			yndx = cp;
  293|    594|	if (xndx == NULL || yndx == NULL)
  ------------------
  |  Branch (293:6): [True: 12, False: 582]
  |  Branch (293:22): [True: 4, False: 578]
  ------------------
  294|     16|		return 0;
  295|    578|	rp->rt = 0;
  296|    578|	if (xndx > yndx)
  ------------------
  |  Branch (296:6): [True: 47, False: 531]
  ------------------
  297|     47|		rp->rt |= YMAJOR;
  ------------------
  |  |  242|     47|#define YMAJOR 4
  ------------------
  298|    578|	if (xndx[-1] == '-')
  ------------------
  |  Branch (298:6): [True: 5, False: 573]
  ------------------
  299|      5|		rp->rt |= XDECR;
  ------------------
  |  |  240|      5|#define XDECR 1
  ------------------
  300|    578|	if (yndx[-1] == '-')
  ------------------
  |  Branch (300:6): [True: 19, False: 559]
  ------------------
  301|     19|		rp->rt |= YDECR;
  ------------------
  |  |  241|     19|#define YDECR 2
  ------------------
  302|    578|	if ((rp->xr = atoi(xndx + 1)) <= 0)
  ------------------
  |  Branch (302:6): [True: 28, False: 550]
  ------------------
  303|     28|		return 0;
  304|    550|	if ((rp->yr = atoi(yndx + 1)) <= 0)
  ------------------
  |  Branch (304:6): [True: 22, False: 528]
  ------------------
  305|     22|		return 0;
  306|    528|	return 1;
  307|    550|}
radiance.c:rad2vips_generate:
  755|    312|{
  756|    312|	VipsRect *r = &out_region->valid;
  757|    312|	Read *read = (Read *) a;
  758|       |
  759|    312|	int y;
  760|       |
  761|       |#ifdef DEBUG
  762|       |	printf("rad2vips_generate: line %d, %d rows\n",
  763|       |		r->top, r->height);
  764|       |#endif /*DEBUG*/
  765|       |
  766|    312|	VIPS_GATE_START("rad2vips_generate: work");
  ------------------
  |  |   41|    312|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    312|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|    312|	{ \
  |  |   43|    312|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 312]
  |  |  ------------------
  |  |   44|    312|			vips__thread_gate_start(NAME); \
  |  |   45|    312|	} \
  |  |   46|    312|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    312|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  767|       |
  768|  1.78k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (768:14): [True: 1.65k, False: 123]
  ------------------
  769|  1.65k|		COLR *buf = (COLR *)
  770|  1.65k|			VIPS_REGION_ADDR(out_region, 0, r->top + y);
  ------------------
  |  |  227|  1.65k|	((R)->data + \
  |  |  228|  1.65k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  1.65k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  1.65k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  1.65k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  1.65k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  1.65k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  771|       |
  772|  1.65k|		if (scanline_read(read->sbuf, buf, out_region->im->Xsize)) {
  ------------------
  |  Branch (772:7): [True: 189, False: 1.47k]
  ------------------
  773|    189|			vips_error("rad2vips",
  774|    189|				_("read error line %d"), r->top + y);
  ------------------
  |  |   30|    189|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    189|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  775|    189|			VIPS_GATE_STOP("rad2vips_generate: work");
  ------------------
  |  |   49|    189|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    189|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|    189|	{ \
  |  |   51|    189|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 189]
  |  |  ------------------
  |  |   52|    189|			vips__thread_gate_stop(NAME); \
  |  |   53|    189|	} \
  |  |   54|    189|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    189|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  776|    189|			return -1;
  777|    189|		}
  778|  1.65k|	}
  779|       |
  780|    312|	VIPS_GATE_STOP("rad2vips_generate: work");
  ------------------
  |  |   49|    123|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    123|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|    123|	{ \
  |  |   51|    123|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 123]
  |  |  ------------------
  |  |   52|    123|			vips__thread_gate_stop(NAME); \
  |  |   53|    123|	} \
  |  |   54|    312|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    312|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  781|       |
  782|    123|	return 0;
  783|    312|}
radiance.c:scanline_read:
  413|  1.65k|{
  414|  1.65k|	int i, j;
  415|       |
  416|       |	/* Detect old-style scanlines.
  417|       |	 */
  418|  1.65k|	if (width < MINELEN ||
  ------------------
  |  |  235|  3.31k|#define MINELEN 8	   /* minimum scanline length for encoding */
  ------------------
  |  Branch (418:6): [True: 508, False: 1.15k]
  ------------------
  419|  1.65k|		width > MAXELEN)
  ------------------
  |  |  236|  1.15k|#define MAXELEN 0x7fff /* maximum scanline length for encoding */
  ------------------
  |  Branch (419:3): [True: 0, False: 1.15k]
  ------------------
  420|    508|		return scanline_read_old(sbuf, scanline, width);
  421|       |
  422|  1.15k|	if (VIPS_SBUF_REQUIRE(sbuf, 4))
  ------------------
  |  |  123|  1.15k|#define VIPS_SBUF_REQUIRE(S, R) ( \
  |  |  ------------------
  |  |  |  Branch (123:33): [True: 25, False: 1.12k]
  |  |  ------------------
  |  |  124|  1.15k|	(S)->read_point + (R) <= (S)->chars_in_buffer \
  |  |  ------------------
  |  |  |  Branch (124:2): [True: 1.12k, False: 29]
  |  |  ------------------
  |  |  125|  1.15k|		? 0 \
  |  |  126|  1.15k|		: vips_sbuf_require((S), (R)))
  ------------------
  423|     25|		return -1;
  424|       |
  425|  1.12k|	if (VIPS_SBUF_PEEK(sbuf)[0] != 2)
  ------------------
  |  |  127|  1.12k|#define VIPS_SBUF_PEEK(S) ((S)->input_buffer + (S)->read_point)
  ------------------
  |  Branch (425:6): [True: 1.01k, False: 115]
  ------------------
  426|  1.01k|		return scanline_read_old(sbuf, scanline, width);
  427|       |
  428|    115|	scanline[0][RED] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  174|    115|#define RED 0
  ------------------
              	scanline[0][RED] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|    115|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  429|    115|	scanline[0][GRN] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  175|    115|#define GRN 1
  ------------------
              	scanline[0][GRN] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|    115|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  430|    115|	scanline[0][BLU] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  176|    115|#define BLU 2
  ------------------
              	scanline[0][BLU] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|    115|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  431|    115|	scanline[0][EXP] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  179|    115|#define EXP 3	  /* exponent same for either format */
  ------------------
              	scanline[0][EXP] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|    115|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  432|    115|	if (scanline[0][GRN] != 2 ||
  ------------------
  |  |  175|    115|#define GRN 1
  ------------------
  |  Branch (432:6): [True: 35, False: 80]
  ------------------
  433|    115|		scanline[0][BLU] & 128)
  ------------------
  |  |  176|     80|#define BLU 2
  ------------------
  |  Branch (433:3): [True: 31, False: 49]
  ------------------
  434|     66|		return scanline_read_old(sbuf,
  435|     66|			scanline + 1, width - 1);
  436|       |
  437|     49|	if (((scanline[0][BLU] << 8) | scanline[0][EXP]) != width) {
  ------------------
  |  |  176|     49|#define BLU 2
  ------------------
              	if (((scanline[0][BLU] << 8) | scanline[0][EXP]) != width) {
  ------------------
  |  |  179|     49|#define EXP 3	  /* exponent same for either format */
  ------------------
  |  Branch (437:6): [True: 4, False: 45]
  ------------------
  438|      4|		vips_error("rad2vips", "%s", _("scanline length mismatch"));
  ------------------
  |  |   30|      4|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      4|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  439|      4|		return -1;
  440|      4|	}
  441|       |
  442|     97|	for (i = 0; i < 4; i++)
  ------------------
  |  Branch (442:14): [True: 93, False: 4]
  ------------------
  443|   307k|		for (j = 0; j < width;) {
  ------------------
  |  Branch (443:15): [True: 307k, False: 52]
  ------------------
  444|   307k|			int code, len;
  445|   307k|			gboolean run;
  446|       |
  447|   307k|			if (VIPS_SBUF_REQUIRE(sbuf, 2))
  ------------------
  |  |  123|   307k|#define VIPS_SBUF_REQUIRE(S, R) ( \
  |  |  ------------------
  |  |  |  Branch (123:33): [True: 25, False: 307k]
  |  |  ------------------
  |  |  124|   307k|	(S)->read_point + (R) <= (S)->chars_in_buffer \
  |  |  ------------------
  |  |  |  Branch (124:2): [True: 307k, False: 99]
  |  |  ------------------
  |  |  125|   307k|		? 0 \
  |  |  126|   307k|		: vips_sbuf_require((S), (R)))
  ------------------
  448|     25|				return -1;
  449|       |
  450|   307k|			code = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|   307k|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  451|   307k|			run = code > 128;
  452|   307k|			len = run ? code & 127 : code;
  ------------------
  |  Branch (452:10): [True: 284, False: 307k]
  ------------------
  453|       |
  454|   307k|			if (j + len > width) {
  ------------------
  |  Branch (454:8): [True: 13, False: 307k]
  ------------------
  455|     13|				vips_error("rad2vips", "%s", _("overrun"));
  ------------------
  |  |   30|     13|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     13|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  456|     13|				return -1;
  457|     13|			}
  458|       |
  459|   307k|			if (run) {
  ------------------
  |  Branch (459:8): [True: 278, False: 307k]
  ------------------
  460|    278|				int val;
  461|       |
  462|    278|				val = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|    278|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  463|    579|				while (len--)
  ------------------
  |  Branch (463:12): [True: 301, False: 278]
  ------------------
  464|    301|					scanline[j++][i] = val;
  465|    278|			}
  466|   307k|			else {
  467|   307k|				if (VIPS_SBUF_REQUIRE(sbuf, len))
  ------------------
  |  |  123|   307k|#define VIPS_SBUF_REQUIRE(S, R) ( \
  |  |  ------------------
  |  |  |  Branch (123:33): [True: 3, False: 307k]
  |  |  ------------------
  |  |  124|   307k|	(S)->read_point + (R) <= (S)->chars_in_buffer \
  |  |  ------------------
  |  |  |  Branch (124:2): [True: 307k, False: 3]
  |  |  ------------------
  |  |  125|   307k|		? 0 \
  |  |  126|   307k|		: vips_sbuf_require((S), (R)))
  ------------------
  468|      3|					return -1;
  469|   307k|				while (len--)
  ------------------
  |  Branch (469:12): [True: 226, False: 307k]
  ------------------
  470|    226|					scanline[j++][i] =
  471|    226|						VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|   307k|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  472|   307k|			}
  473|   307k|		}
  474|       |
  475|      4|	return 0;
  476|     45|}
radiance.c:scanline_read_old:
  366|  1.58k|{
  367|  1.58k|	int rshift;
  368|       |
  369|  1.58k|	rshift = 0;
  370|       |
  371|  32.4k|	while (width > 0) {
  ------------------
  |  Branch (371:9): [True: 30.9k, False: 1.46k]
  ------------------
  372|  30.9k|		if (VIPS_SBUF_REQUIRE(sbuf, 4))
  ------------------
  |  |  123|  30.9k|#define VIPS_SBUF_REQUIRE(S, R) ( \
  |  |  ------------------
  |  |  |  Branch (123:33): [True: 115, False: 30.8k]
  |  |  ------------------
  |  |  124|  30.9k|	(S)->read_point + (R) <= (S)->chars_in_buffer \
  |  |  ------------------
  |  |  |  Branch (124:2): [True: 30.8k, False: 135]
  |  |  ------------------
  |  |  125|  30.9k|		? 0 \
  |  |  126|  30.9k|		: vips_sbuf_require((S), (R)))
  ------------------
  373|    115|			return -1;
  374|       |
  375|  30.8k|		scanline[0][RED] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  174|  30.8k|#define RED 0
  ------------------
              		scanline[0][RED] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|  30.8k|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  376|  30.8k|		scanline[0][GRN] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  175|  30.8k|#define GRN 1
  ------------------
              		scanline[0][GRN] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|  30.8k|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  377|  30.8k|		scanline[0][BLU] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  176|  30.8k|#define BLU 2
  ------------------
              		scanline[0][BLU] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|  30.8k|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  378|  30.8k|		scanline[0][EXP] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  179|  30.8k|#define EXP 3	  /* exponent same for either format */
  ------------------
              		scanline[0][EXP] = VIPS_SBUF_FETCH(sbuf);
  ------------------
  |  |  128|  30.8k|#define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++])
  ------------------
  379|       |
  380|  30.8k|		if (scanline[0][RED] == 1 &&
  ------------------
  |  |  174|  30.8k|#define RED 0
  ------------------
  |  Branch (380:7): [True: 3.57k, False: 27.2k]
  ------------------
  381|  30.8k|			scanline[0][GRN] == 1 &&
  ------------------
  |  |  175|  3.57k|#define GRN 1
  ------------------
  |  Branch (381:4): [True: 2.20k, False: 1.36k]
  ------------------
  382|  30.8k|			scanline[0][BLU] == 1) {
  ------------------
  |  |  176|  2.20k|#define BLU 2
  ------------------
  |  Branch (382:4): [True: 1.69k, False: 513]
  ------------------
  383|  1.69k|			guint i;
  384|       |
  385|  1.69k|			for (i = ((guint32) scanline[0][EXP] << rshift);
  ------------------
  |  |  179|  1.69k|#define EXP 3	  /* exponent same for either format */
  ------------------
  386|  38.4k|				 i > 0 && width > 0; i--) {
  ------------------
  |  Branch (386:6): [True: 37.3k, False: 1.09k]
  |  Branch (386:15): [True: 36.7k, False: 593]
  ------------------
  387|  36.7k|				copycolr(scanline[0], scanline[-1]);
  ------------------
  |  |  189|  36.7k|#define copycolr(c1, c2) (c1[0] = c2[0], c1[1] = c2[1], \
  |  |  190|  36.7k|	c1[2] = c2[2], c1[3] = c2[3])
  ------------------
  388|  36.7k|				scanline += 1;
  389|  36.7k|				width -= 1;
  390|  36.7k|			}
  391|       |
  392|  1.69k|			rshift += 8;
  393|       |
  394|       |			/* This can happen with badly-formed input files.
  395|       |			 */
  396|  1.69k|			if (rshift > 24)
  ------------------
  |  Branch (396:8): [True: 4, False: 1.68k]
  ------------------
  397|      4|				return -1;
  398|  1.69k|		}
  399|  29.1k|		else {
  400|  29.1k|			scanline += 1;
  401|  29.1k|			width -= 1;
  402|  29.1k|			rshift = 0;
  403|  29.1k|		}
  404|  30.8k|	}
  405|       |
  406|  1.46k|	return 0;
  407|  1.58k|}

radload.c:vips_foreign_load_rad_class_init:
  115|      1|{
  116|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  117|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  118|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  119|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  120|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  121|       |
  122|      1|	gobject_class->dispose = vips_foreign_load_rad_dispose;
  123|       |
  124|      1|	object_class->nickname = "radload_base";
  125|      1|	object_class->description = _("load rad base class");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  126|       |
  127|       |	/* You're unlikely to want to use this on untrusted files.
  128|       |	 */
  129|      1|	operation_class->flags |= VIPS_OPERATION_UNTRUSTED;
  130|       |
  131|       |	/* is_a() is not that quick ... lower the priority.
  132|       |	 */
  133|      1|	foreign_class->priority = -50;
  134|       |
  135|      1|	load_class->get_flags_filename =
  136|      1|		vips_foreign_load_rad_get_flags_filename;
  137|      1|	load_class->get_flags = vips_foreign_load_rad_get_flags;
  138|      1|	load_class->header = vips_foreign_load_rad_header;
  139|      1|	load_class->load = vips_foreign_load_rad_load;
  140|      1|}
radload.c:vips_foreign_load_rad_dispose:
   71|    540|{
   72|    540|	VipsForeignLoadRad *rad = (VipsForeignLoadRad *) gobject;
   73|       |
   74|    540|	VIPS_UNREF(rad->source);
  ------------------
  |  |   57|    540|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|    540|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|    540|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|    540|	{ \
  |  |  |  |   43|    540|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 540, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|    540|			(void) F((S)); \
  |  |  |  |   45|    540|			(S) = 0; \
  |  |  |  |   46|    540|		} \
  |  |  |  |   47|    540|	} \
  |  |  |  |   48|    540|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|    540|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   75|       |
   76|    540|	G_OBJECT_CLASS(vips_foreign_load_rad_parent_class)->dispose(gobject);
  ------------------
  |  |   58|    540|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|    540|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    540|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   77|    540|}
radload.c:vips_foreign_load_rad_get_flags:
   81|    543|{
   82|    543|	return VIPS_FOREIGN_SEQUENTIAL;
   83|    543|}
radload.c:vips_foreign_load_rad_header:
   93|    543|{
   94|    543|	VipsForeignLoadRad *rad = (VipsForeignLoadRad *) load;
   95|       |
   96|    543|	if (vips__rad_header(rad->source, load->out))
  ------------------
  |  Branch (96:6): [True: 277, False: 266]
  ------------------
   97|    277|		return -1;
   98|       |
   99|    266|	return 0;
  100|    543|}
radload.c:vips_foreign_load_rad_load:
  104|    246|{
  105|    246|	VipsForeignLoadRad *rad = (VipsForeignLoadRad *) load;
  106|       |
  107|    246|	if (vips__rad_load(rad->source, load->real))
  ------------------
  |  Branch (107:6): [True: 189, False: 57]
  ------------------
  108|    189|		return -1;
  109|       |
  110|     57|	return 0;
  111|    246|}
radload.c:vips_foreign_load_rad_init:
  144|    543|{
  145|    543|}
radload.c:vips_foreign_load_rad_source_class_init:
  187|      1|{
  188|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  190|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  191|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  192|       |
  193|      1|	gobject_class->set_property = vips_object_set_property;
  194|      1|	gobject_class->get_property = vips_object_get_property;
  195|       |
  196|      1|	object_class->nickname = "radload_source";
  197|      1|	object_class->description = _("load rad from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  198|      1|	object_class->build = vips_foreign_load_rad_source_build;
  199|       |
  200|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  201|       |
  202|      1|	load_class->is_a_source = vips_foreign_load_rad_source_is_a_source;
  203|       |
  204|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  205|      1|		_("Source"),
  206|      1|		_("Source to load from"),
  207|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  208|      1|		G_STRUCT_OFFSET(VipsForeignLoadRadSource, source),
  209|      1|		VIPS_TYPE_SOURCE);
  210|      1|}
radload.c:vips_foreign_load_rad_source_is_a_source:
  181|  6.95k|{
  182|  6.95k|	return vips__rad_israd(source);
  183|  6.95k|}
radload.c:vips_foreign_load_rad_file_class_init:
  263|      1|{
  264|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  265|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  266|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  267|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  268|       |
  269|      1|	gobject_class->set_property = vips_object_set_property;
  270|      1|	gobject_class->get_property = vips_object_get_property;
  271|       |
  272|      1|	object_class->nickname = "radload";
  273|      1|	object_class->description = _("load a Radiance image from a file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  274|      1|	object_class->build = vips_foreign_load_rad_file_build;
  275|       |
  276|      1|	foreign_class->suffs = vips__rad_suffs;
  277|       |
  278|      1|	load_class->is_a = vips_foreign_load_rad_file_is_a;
  279|       |
  280|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  281|      1|		_("Filename"),
  282|      1|		_("Filename to load from"),
  283|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  284|      1|		G_STRUCT_OFFSET(VipsForeignLoadRadFile, filename),
  285|      1|		NULL);
  286|      1|}
radload.c:vips_foreign_load_rad_buffer_class_init:
  341|      1|{
  342|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  343|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  344|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  345|       |
  346|      1|	gobject_class->set_property = vips_object_set_property;
  347|      1|	gobject_class->get_property = vips_object_get_property;
  348|       |
  349|      1|	object_class->nickname = "radload_buffer";
  350|      1|	object_class->description = _("load rad from buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  351|      1|	object_class->build = vips_foreign_load_rad_buffer_build;
  352|       |
  353|      1|	load_class->is_a_buffer = vips_foreign_load_rad_buffer_is_a_buffer;
  354|       |
  355|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  356|      1|		_("Buffer"),
  357|      1|		_("Buffer to load from"),
  358|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  359|      1|		G_STRUCT_OFFSET(VipsForeignLoadRadBuffer, blob),
  360|      1|		VIPS_TYPE_BLOB);
  361|      1|}
radload.c:vips_foreign_load_rad_buffer_build:
  309|    543|{
  310|    543|	VipsForeignLoadRad *rad = (VipsForeignLoadRad *) object;
  311|    543|	VipsForeignLoadRadBuffer *buffer = (VipsForeignLoadRadBuffer *) object;
  312|       |
  313|    543|	if (buffer->blob &&
  ------------------
  |  Branch (313:6): [True: 543, False: 0]
  ------------------
  314|    543|		!(rad->source = vips_source_new_from_memory(
  ------------------
  |  Branch (314:3): [True: 0, False: 543]
  ------------------
  315|    543|			  VIPS_AREA(buffer->blob)->data,
  ------------------
  |  |  137|    543|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  316|    543|			  VIPS_AREA(buffer->blob)->length)))
  ------------------
  |  |  137|    543|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  317|      0|		return -1;
  318|       |
  319|    543|	if (VIPS_OBJECT_CLASS(vips_foreign_load_rad_file_parent_class)->build(object))
  ------------------
  |  |  435|    543|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|    543|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|    543|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (319:6): [True: 277, False: 266]
  ------------------
  320|    277|		return -1;
  321|       |
  322|    266|	return 0;
  323|    543|}
radload.c:vips_foreign_load_rad_buffer_is_a_buffer:
  327|  6.95k|{
  328|  6.95k|	VipsSource *source;
  329|  6.95k|	gboolean result;
  330|       |
  331|  6.95k|	if (!(source = vips_source_new_from_memory(buf, len)))
  ------------------
  |  Branch (331:6): [True: 0, False: 6.95k]
  ------------------
  332|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  333|  6.95k|	result = vips_foreign_load_rad_source_is_a_source(source);
  334|  6.95k|	VIPS_UNREF(source);
  ------------------
  |  |   57|  6.95k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  6.95k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  6.95k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  6.95k|	{ \
  |  |  |  |   43|  6.95k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 6.95k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  6.95k|			(void) F((S)); \
  |  |  |  |   45|  6.95k|			(S) = 0; \
  |  |  |  |   46|  6.95k|		} \
  |  |  |  |   47|  6.95k|	} \
  |  |  |  |   48|  6.95k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  6.95k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  335|       |
  336|  6.95k|	return result;
  337|  6.95k|}
radload.c:vips_foreign_load_rad_buffer_init:
  365|    543|{
  366|    543|}

radsave.c:vips_foreign_save_rad_class_init:
   86|      1|{
   87|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
   88|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
   89|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
   90|       |
   91|      1|	object_class->nickname = "radsave_base";
   92|      1|	object_class->description = _("save Radiance");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   93|       |
   94|      1|	foreign_class->suffs = vips__rad_suffs;
   95|       |
   96|      1|	save_class->saveable = VIPS_SAVEABLE_RGB;
   97|      1|	save_class->format_table = vips_foreign_save_rad_format_table;
   98|      1|	save_class->coding[VIPS_CODING_NONE] = FALSE;
  ------------------
  |  |  794|      1|#define	FALSE	(0)
  ------------------
   99|      1|	save_class->coding[VIPS_CODING_RAD] = TRUE;
  ------------------
  |  |  798|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  100|      1|}
radsave.c:vips_foreign_save_rad_file_class_init:
  142|      1|{
  143|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  144|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  145|       |
  146|      1|	gobject_class->set_property = vips_object_set_property;
  147|      1|	gobject_class->get_property = vips_object_get_property;
  148|       |
  149|      1|	object_class->nickname = "radsave";
  150|      1|	object_class->description = _("save image to Radiance file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  151|      1|	object_class->build = vips_foreign_save_rad_file_build;
  152|       |
  153|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  154|      1|		_("Filename"),
  155|      1|		_("Filename to save to"),
  156|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  157|      1|		G_STRUCT_OFFSET(VipsForeignSaveRadFile, filename),
  158|      1|		NULL);
  159|      1|}
radsave.c:vips_foreign_save_rad_target_class_init:
  195|      1|{
  196|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  198|       |
  199|      1|	gobject_class->set_property = vips_object_set_property;
  200|      1|	gobject_class->get_property = vips_object_get_property;
  201|       |
  202|      1|	object_class->nickname = "radsave_target";
  203|      1|	object_class->description = _("save image to Radiance target");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  204|      1|	object_class->build = vips_foreign_save_rad_target_build;
  205|       |
  206|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  207|      1|		_("Target"),
  208|      1|		_("Target to save to"),
  209|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  210|      1|		G_STRUCT_OFFSET(VipsForeignSaveRadTarget, target),
  211|      1|		VIPS_TYPE_TARGET);
  212|      1|}
radsave.c:vips_foreign_save_rad_buffer_class_init:
  261|      1|{
  262|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  263|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  264|       |
  265|      1|	gobject_class->set_property = vips_object_set_property;
  266|      1|	gobject_class->get_property = vips_object_get_property;
  267|       |
  268|      1|	object_class->nickname = "radsave_buffer";
  269|      1|	object_class->description = _("save image to Radiance buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  270|      1|	object_class->build = vips_foreign_save_rad_buffer_build;
  271|       |
  272|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  273|      1|		_("Buffer"),
  274|      1|		_("Buffer to save to"),
  275|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  276|      1|		G_STRUCT_OFFSET(VipsForeignSaveRadBuffer, buf),
  277|      1|		VIPS_TYPE_BLOB);
  278|      1|}

rawload.c:vips_foreign_load_raw_class_init:
  117|      1|{
  118|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  120|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  121|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  122|       |
  123|      1|	gobject_class->set_property = vips_object_set_property;
  124|      1|	gobject_class->get_property = vips_object_get_property;
  125|       |
  126|       |	/* You're unlikely to want to use this on untrusted files.
  127|       |	 */
  128|      1|	operation_class->flags |= VIPS_OPERATION_UNTRUSTED;
  129|       |
  130|      1|	object_class->nickname = "rawload";
  131|      1|	object_class->description = _("load raw data from a file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  132|       |
  133|      1|	load_class->get_flags = vips_foreign_load_raw_get_flags;
  134|      1|	load_class->get_flags_filename =
  135|      1|		vips_foreign_load_raw_get_flags_filename;
  136|      1|	load_class->header = vips_foreign_load_raw_header;
  137|       |
  138|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  139|      1|		_("Filename"),
  140|      1|		_("Filename to load from"),
  141|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  142|      1|		G_STRUCT_OFFSET(VipsForeignLoadRaw, filename),
  143|      1|		NULL);
  144|       |
  145|      1|	VIPS_ARG_INT(class, "width", 20,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  146|      1|		_("Width"),
  147|      1|		_("Image width in pixels"),
  148|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  149|      1|		G_STRUCT_OFFSET(VipsForeignLoadRaw, width),
  150|      1|		0, VIPS_MAX_COORD, 0);
  151|       |
  152|      1|	VIPS_ARG_INT(class, "height", 21,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  153|      1|		_("Height"),
  154|      1|		_("Image height in pixels"),
  155|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  156|      1|		G_STRUCT_OFFSET(VipsForeignLoadRaw, height),
  157|      1|		0, VIPS_MAX_COORD, 0);
  158|       |
  159|      1|	VIPS_ARG_INT(class, "bands", 22,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  160|      1|		_("Bands"),
  161|      1|		_("Number of bands in image"),
  162|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  163|      1|		G_STRUCT_OFFSET(VipsForeignLoadRaw, bands),
  164|      1|		0, VIPS_MAX_COORD, 0);
  165|       |
  166|      1|	VIPS_ARG_UINT64(class, "offset", 23,
  ------------------
  |  |  198|      1|	{ \
  |  |  199|      1|		GParamSpec *pspec; \
  |  |  200|      1|\
  |  |  201|      1|		pspec = g_param_spec_uint64((NAME), (LONG), (DESC), \
  |  |  202|      1|			(MIN), (MAX), (VALUE), \
  |  |  203|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  204|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  205|      1|			vips_argument_get_id(), pspec); \
  |  |  206|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  207|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  208|      1|	}
  ------------------
  167|      1|		_("Size of header"),
  168|      1|		_("Offset in bytes from start of file"),
  169|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  170|      1|		G_STRUCT_OFFSET(VipsForeignLoadRaw, offset),
  171|      1|		0, 100000000000, 0);
  172|       |
  173|      1|	VIPS_ARG_ENUM(class, "format", 24,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  174|      1|		_("Format"),
  175|      1|		_("Pixel format in image"),
  176|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  177|      1|		G_STRUCT_OFFSET(VipsForeignLoadRaw, format),
  178|      1|		VIPS_TYPE_BAND_FORMAT, VIPS_FORMAT_UCHAR);
  179|       |
  180|      1|	VIPS_ARG_ENUM(class, "interpretation", 25,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  181|      1|		_("Interpretation"),
  182|      1|		_("Pixel interpretation"),
  183|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  184|      1|		G_STRUCT_OFFSET(VipsForeignLoadRaw, interpretation),
  185|      1|		VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_MULTIBAND);
  186|      1|}

rawsave.c:vips_foreign_save_raw_class_init:
  128|      1|{
  129|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  130|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  131|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  132|       |
  133|      1|	gobject_class->dispose = vips_foreign_save_raw_dispose;
  134|      1|	gobject_class->set_property = vips_object_set_property;
  135|      1|	gobject_class->get_property = vips_object_get_property;
  136|       |
  137|      1|	object_class->nickname = "rawsave_base";
  138|      1|	object_class->description = _("save image to raw");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  139|      1|	object_class->build = vips_foreign_save_raw_build;
  140|       |
  141|      1|	save_class->saveable = VIPS_SAVEABLE_ANY;
  142|      1|}
rawsave.c:vips_foreign_save_raw_file_class_init:
  181|      1|{
  182|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  183|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  184|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  185|       |
  186|      1|	gobject_class->set_property = vips_object_set_property;
  187|      1|	gobject_class->get_property = vips_object_get_property;
  188|       |
  189|      1|	object_class->nickname = "rawsave";
  190|      1|	object_class->description = _("save image to raw file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  191|      1|	object_class->build = vips_foreign_save_raw_file_build;
  192|       |
  193|      1|	foreign_class->suffs = vips_foreign_save_raw_suffs;
  194|       |
  195|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  196|      1|		_("Filename"),
  197|      1|		_("Filename to save to"),
  198|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  199|      1|		G_STRUCT_OFFSET(VipsForeignSaveRawFile, filename),
  200|      1|		NULL);
  201|      1|}
rawsave.c:vips_foreign_save_raw_target_class_init:
  237|      1|{
  238|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  240|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  241|       |
  242|      1|	gobject_class->set_property = vips_object_set_property;
  243|      1|	gobject_class->get_property = vips_object_get_property;
  244|       |
  245|      1|	object_class->nickname = "rawsave_target";
  246|      1|	object_class->description = _("write raw image to target");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  247|      1|	object_class->build = vips_foreign_save_raw_target_build;
  248|       |
  249|      1|	foreign_class->suffs = vips_foreign_save_raw_suffs;
  250|       |
  251|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  252|      1|		_("Target"),
  253|      1|		_("Target to save to"),
  254|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  255|      1|		G_STRUCT_OFFSET(VipsForeignSaveRawTarget, target),
  256|      1|		VIPS_TYPE_TARGET);
  257|      1|}
rawsave.c:vips_foreign_save_raw_buffer_class_init:
  299|      1|{
  300|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  302|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  303|       |
  304|      1|	gobject_class->set_property = vips_object_set_property;
  305|      1|	gobject_class->get_property = vips_object_get_property;
  306|       |
  307|      1|	object_class->nickname = "rawsave_buffer";
  308|      1|	object_class->description = _("write raw image to buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  309|      1|	object_class->build = vips_foreign_save_raw_buffer_build;
  310|       |
  311|      1|	foreign_class->suffs = vips_foreign_save_raw_suffs;
  312|       |
  313|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  314|      1|		_("Buffer"),
  315|      1|		_("Buffer to save to"),
  316|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  317|      1|		G_STRUCT_OFFSET(VipsForeignSaveRawBuffer, buf),
  318|      1|		VIPS_TYPE_BLOB);
  319|      1|}

spngload.c:vips_foreign_load_png_class_init:
  653|      1|{
  654|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  655|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  656|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  657|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  658|       |
  659|      1|	gobject_class->dispose = vips_foreign_load_png_dispose;
  660|      1|	gobject_class->set_property = vips_object_set_property;
  661|      1|	gobject_class->get_property = vips_object_get_property;
  662|       |
  663|      1|	object_class->nickname = "pngload_base";
  664|      1|	object_class->description = _("load png base class");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  665|       |
  666|       |	/* We are fast at is_a(), so high priority.
  667|       |	 */
  668|      1|	foreign_class->priority = 200;
  669|       |
  670|      1|	load_class->get_flags_filename =
  671|      1|		vips_foreign_load_png_get_flags_filename;
  672|      1|	load_class->get_flags = vips_foreign_load_png_get_flags;
  673|      1|	load_class->header = vips_foreign_load_png_header;
  674|      1|	load_class->load = vips_foreign_load_png_load;
  675|       |
  676|       |#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
  677|       |	VIPS_ARG_BOOL(class, "unlimited", 23,
  678|       |		_("Unlimited"),
  679|       |		_("Remove all denial of service limits"),
  680|       |		VIPS_ARGUMENT_OPTIONAL_INPUT,
  681|       |		G_STRUCT_OFFSET(VipsForeignLoadPng, unlimited),
  682|       |		FALSE);
  683|       |#endif
  684|      1|}
spngload.c:vips_foreign_load_png_dispose:
   90|  2.63k|{
   91|  2.63k|	VipsForeignLoadPng *png = (VipsForeignLoadPng *) gobject;
   92|       |
   93|  2.63k|	VIPS_FREEF(spng_ctx_free, png->ctx);
  ------------------
  |  |   41|  2.63k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  2.63k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  2.63k|	{ \
  |  |   43|  2.63k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 2.63k, False: 0]
  |  |  ------------------
  |  |   44|  2.63k|			(void) F((S)); \
  |  |   45|  2.63k|			(S) = 0; \
  |  |   46|  2.63k|		} \
  |  |   47|  2.63k|	} \
  |  |   48|  2.63k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.63k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   94|  2.63k|	VIPS_UNREF(png->source);
  ------------------
  |  |   57|  2.63k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  2.63k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  2.63k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  2.63k|	{ \
  |  |  |  |   43|  2.63k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 2.63k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  2.63k|			(void) F((S)); \
  |  |  |  |   45|  2.63k|			(S) = 0; \
  |  |  |  |   46|  2.63k|		} \
  |  |  |  |   47|  2.63k|	} \
  |  |  |  |   48|  2.63k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  2.63k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|       |
   96|  2.63k|	G_OBJECT_CLASS(vips_foreign_load_png_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  2.63k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  2.63k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  2.63k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   97|  2.63k|}
spngload.c:vips_foreign_load_png_get_flags_source:
  123|  2.63k|{
  124|  2.63k|	spng_ctx *ctx;
  125|  2.63k|	struct spng_ihdr ihdr;
  126|  2.63k|	VipsForeignFlags flags;
  127|       |
  128|  2.63k|	ctx = spng_ctx_new(SPNG_CTX_IGNORE_ADLER32);
  129|  2.63k|	spng_set_crc_action(ctx, SPNG_CRC_USE, SPNG_CRC_USE);
  130|  2.63k|	if (vips_source_rewind(source))
  ------------------
  |  Branch (130:6): [True: 0, False: 2.63k]
  ------------------
  131|      0|		return 0;
  132|  2.63k|	spng_set_png_stream(ctx,
  133|  2.63k|		vips_foreign_load_png_stream, source);
  134|  2.63k|	if (spng_get_ihdr(ctx, &ihdr)) {
  ------------------
  |  Branch (134:6): [True: 125, False: 2.51k]
  ------------------
  135|    125|		spng_ctx_free(ctx);
  136|    125|		return 0;
  137|    125|	}
  138|  2.51k|	spng_ctx_free(ctx);
  139|       |
  140|  2.51k|	flags = 0;
  141|  2.51k|	if (ihdr.interlace_method != SPNG_INTERLACE_NONE)
  ------------------
  |  Branch (141:6): [True: 652, False: 1.85k]
  ------------------
  142|    652|		flags |= VIPS_FOREIGN_PARTIAL;
  143|  1.85k|	else
  144|  1.85k|		flags |= VIPS_FOREIGN_SEQUENTIAL;
  145|       |
  146|  2.51k|	return flags;
  147|  2.63k|}
spngload.c:vips_foreign_load_png_stream:
  102|   128k|{
  103|   128k|	VipsSource *source = VIPS_SOURCE(user);
  ------------------
  |  |  106|   128k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   128k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   128k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|   128k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  104|       |
  105|   244k|	while (length > 0) {
  ------------------
  |  Branch (105:9): [True: 129k, False: 114k]
  ------------------
  106|   129k|		gint64 bytes_read;
  107|       |
  108|   129k|		bytes_read = vips_source_read(source, dest, length);
  109|   129k|		if (bytes_read < 0)
  ------------------
  |  Branch (109:7): [True: 0, False: 129k]
  ------------------
  110|      0|			return SPNG_IO_ERROR;
  111|   129k|		if (bytes_read == 0)
  ------------------
  |  Branch (111:7): [True: 14.0k, False: 115k]
  ------------------
  112|  14.0k|			return SPNG_IO_EOF;
  113|       |
  114|   115k|		dest = (char *) dest + bytes_read;
  115|   115k|		length -= bytes_read;
  116|   115k|	}
  117|       |
  118|   114k|	return 0;
  119|   128k|}
spngload.c:vips_foreign_load_png_get_flags:
  151|  2.63k|{
  152|  2.63k|	VipsForeignLoadPng *png = (VipsForeignLoadPng *) load;
  153|       |
  154|  2.63k|	return vips_foreign_load_png_get_flags_source(png->source);
  155|  2.63k|}
spngload.c:vips_foreign_load_png_header:
  332|  2.63k|{
  333|  2.63k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load);
  ------------------
  |  |  441|  2.63k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  2.63k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  2.63k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  334|  2.63k|	VipsForeignLoadPng *png = (VipsForeignLoadPng *) load;
  335|       |
  336|  2.63k|	int flags;
  337|  2.63k|	int error;
  338|  2.63k|	struct spng_trns trns;
  339|       |
  340|       |	/* In non-fail mode, ignore CRC errors.
  341|       |	 */
  342|  2.63k|	flags = 0;
  343|  2.63k|	if (load->fail_on < VIPS_FAIL_ON_ERROR)
  ------------------
  |  Branch (343:6): [True: 2.63k, False: 0]
  ------------------
  344|  2.63k|		flags |= SPNG_CTX_IGNORE_ADLER32;
  345|  2.63k|	png->ctx = spng_ctx_new(flags);
  346|  2.63k|	if (load->fail_on < VIPS_FAIL_ON_ERROR)
  ------------------
  |  Branch (346:6): [True: 2.63k, False: 0]
  ------------------
  347|       |		/* Ignore and don't calculate checksums.
  348|       |		 */
  349|  2.63k|		spng_set_crc_action(png->ctx, SPNG_CRC_USE, SPNG_CRC_USE);
  350|       |
  351|       |	/* Set limits to avoid decompression bombs. Set chunk limits to 60mb
  352|       |	 * -- we've seen 50mb XMP blocks in the wild.
  353|       |	 *
  354|       |	 * No need to test the decoded image size -- the user can do that if
  355|       |	 * they wish.
  356|       |	 */
  357|  2.63k|	if (!png->unlimited) {
  ------------------
  |  Branch (357:6): [True: 2.63k, False: 0]
  ------------------
  358|  2.63k|		spng_set_image_limits(png->ctx,
  359|  2.63k|			VIPS_MAX_COORD, VIPS_MAX_COORD);
  ------------------
  |  |   69|  2.63k|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
              			VIPS_MAX_COORD, VIPS_MAX_COORD);
  ------------------
  |  |   69|  2.63k|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  360|  2.63k|		spng_set_chunk_limits(png->ctx,
  361|  2.63k|			60 * 1024 * 1024, 60 * 1024 * 1024);
  362|  2.63k|	}
  363|       |
  364|  2.63k|	if (vips_source_rewind(png->source))
  ------------------
  |  Branch (364:6): [True: 0, False: 2.63k]
  ------------------
  365|      0|		return -1;
  366|  2.63k|	spng_set_png_stream(png->ctx,
  367|  2.63k|		vips_foreign_load_png_stream, png->source);
  368|  2.63k|	if ((error = spng_get_ihdr(png->ctx, &png->ihdr))) {
  ------------------
  |  Branch (368:6): [True: 159, False: 2.47k]
  ------------------
  369|    159|		vips_error(class->nickname, "%s", spng_strerror(error));
  370|    159|		return -1;
  371|    159|	}
  372|       |
  373|       |#ifdef DEBUG
  374|       |	printf("width: %d\nheight: %d\nbit depth: %d\ncolor type: %d\n",
  375|       |		png->ihdr.width, png->ihdr.height,
  376|       |		png->ihdr.bit_depth, png->ihdr.color_type);
  377|       |	printf("compression method: %d\nfilter method: %d\n"
  378|       |		   "interlace method: %d\n",
  379|       |		png->ihdr.compression_method, png->ihdr.filter_method,
  380|       |		png->ihdr.interlace_method);
  381|       |#endif /*DEBUG*/
  382|       |
  383|       |	/* Just convert to host-endian if nothing else applies.
  384|       |	 */
  385|  2.47k|	png->fmt = SPNG_FMT_PNG;
  386|       |
  387|  2.47k|	switch (png->ihdr.color_type) {
  388|    779|	case SPNG_COLOR_TYPE_INDEXED:
  ------------------
  |  Branch (388:2): [True: 779, False: 1.69k]
  ------------------
  389|    779|		png->bands = 3;
  390|    779|		break;
  391|       |
  392|     85|	case SPNG_COLOR_TYPE_GRAYSCALE_ALPHA:
  ------------------
  |  Branch (392:2): [True: 85, False: 2.39k]
  ------------------
  393|    860|	case SPNG_COLOR_TYPE_GRAYSCALE:
  ------------------
  |  Branch (393:2): [True: 775, False: 1.70k]
  ------------------
  394|    860|		png->bands = 1;
  395|    860|		break;
  396|       |
  397|    348|	case SPNG_COLOR_TYPE_TRUECOLOR:
  ------------------
  |  Branch (397:2): [True: 348, False: 2.12k]
  ------------------
  398|    838|	case SPNG_COLOR_TYPE_TRUECOLOR_ALPHA:
  ------------------
  |  Branch (398:2): [True: 490, False: 1.98k]
  ------------------
  399|    838|		png->bands = 3;
  400|    838|		break;
  401|       |
  402|      0|	default:
  ------------------
  |  Branch (402:2): [True: 0, False: 2.47k]
  ------------------
  403|      0|		vips_error(class->nickname, "%s", _("unknown color type"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  404|      0|		return -1;
  405|  2.47k|	}
  406|       |
  407|       |	/* Set libvips format and interpretation.
  408|       |	 */
  409|  2.47k|	if (png->ihdr.bit_depth > 8) {
  ------------------
  |  Branch (409:6): [True: 666, False: 1.81k]
  ------------------
  410|    666|		if (png->bands < 3)
  ------------------
  |  Branch (410:7): [True: 382, False: 284]
  ------------------
  411|    382|			png->interpretation = VIPS_INTERPRETATION_GREY16;
  412|    284|		else
  413|    284|			png->interpretation = VIPS_INTERPRETATION_RGB16;
  414|       |
  415|    666|		png->format = VIPS_FORMAT_USHORT;
  416|    666|	}
  417|  1.81k|	else {
  418|  1.81k|		if (png->bands < 3)
  ------------------
  |  Branch (418:7): [True: 478, False: 1.33k]
  ------------------
  419|    478|			png->interpretation = VIPS_INTERPRETATION_B_W;
  420|  1.33k|		else
  421|  1.33k|			png->interpretation = VIPS_INTERPRETATION_sRGB;
  422|       |
  423|  1.81k|		png->format = VIPS_FORMAT_UCHAR;
  424|  1.81k|	}
  425|       |
  426|       |	/* Expand palette images.
  427|       |	 */
  428|  2.47k|	if (png->ihdr.color_type == SPNG_COLOR_TYPE_INDEXED)
  ------------------
  |  Branch (428:6): [True: 779, False: 1.69k]
  ------------------
  429|    779|		png->fmt = SPNG_FMT_RGB8;
  430|       |
  431|       |	/* Expand <8 bit images to full bytes.
  432|       |	 */
  433|  2.47k|	if (png->ihdr.color_type == SPNG_COLOR_TYPE_GRAYSCALE &&
  ------------------
  |  Branch (433:6): [True: 775, False: 1.70k]
  ------------------
  434|  2.47k|		png->ihdr.bit_depth < 8)
  ------------------
  |  Branch (434:3): [True: 383, False: 392]
  ------------------
  435|    383|		png->fmt = SPNG_FMT_G8;
  436|       |
  437|       |	/* Try reading the optional transparency chunk. This will cause all
  438|       |	 * chunks up to the first IDAT to be read in, so it can fail if any
  439|       |	 * chunk has an error.
  440|       |	 */
  441|  2.47k|	error = spng_get_trns(png->ctx, &trns);
  442|  2.47k|	if (error &&
  ------------------
  |  Branch (442:6): [True: 2.36k, False: 117]
  ------------------
  443|  2.47k|		error != SPNG_ECHUNKAVAIL) {
  ------------------
  |  Branch (443:3): [True: 1.73k, False: 627]
  ------------------
  444|  1.73k|		vips_error(class->nickname, "%s", spng_strerror(error));
  445|  1.73k|		return -1;
  446|  1.73k|	}
  447|       |
  448|       |	/* Expand transparency.
  449|       |	 *
  450|       |	 * The _ALPHA types should not have the optional trns chunk (they
  451|       |	 * always have a transparent band), see
  452|       |	 * https://www.w3.org/TR/2003/REC-PNG-20031110/#11tRNS
  453|       |	 *
  454|       |	 * It's quick and safe to call spng_get_trns() again, and we now know
  455|       |	 * it will only fail for no transparency chunk.
  456|       |	 */
  457|    744|	if (png->ihdr.color_type == SPNG_COLOR_TYPE_GRAYSCALE_ALPHA ||
  ------------------
  |  Branch (457:6): [True: 16, False: 728]
  ------------------
  458|    744|		png->ihdr.color_type == SPNG_COLOR_TYPE_TRUECOLOR_ALPHA)
  ------------------
  |  Branch (458:3): [True: 214, False: 514]
  ------------------
  459|    230|		png->bands += 1;
  460|    514|	else if (!spng_get_trns(png->ctx, &trns)) {
  ------------------
  |  Branch (460:11): [True: 117, False: 397]
  ------------------
  461|    117|		png->bands += 1;
  462|       |
  463|    117|		if (png->ihdr.color_type == SPNG_COLOR_TYPE_TRUECOLOR) {
  ------------------
  |  Branch (463:7): [True: 44, False: 73]
  ------------------
  464|     44|			if (png->ihdr.bit_depth == 16)
  ------------------
  |  Branch (464:8): [True: 20, False: 24]
  ------------------
  465|     20|				png->fmt = SPNG_FMT_RGBA16;
  466|     24|			else
  467|     24|				png->fmt = SPNG_FMT_RGBA8;
  468|     44|		}
  469|     73|		else if (png->ihdr.color_type == SPNG_COLOR_TYPE_INDEXED)
  ------------------
  |  Branch (469:12): [True: 25, False: 48]
  ------------------
  470|     25|			png->fmt = SPNG_FMT_RGBA8;
  471|     48|		else if (png->ihdr.color_type == SPNG_COLOR_TYPE_GRAYSCALE) {
  ------------------
  |  Branch (471:12): [True: 48, False: 0]
  ------------------
  472|     48|			if (png->ihdr.bit_depth == 16)
  ------------------
  |  Branch (472:8): [True: 17, False: 31]
  ------------------
  473|     17|				png->fmt = SPNG_FMT_GA16;
  474|     31|			else
  475|     31|				png->fmt = SPNG_FMT_GA8;
  476|     48|		}
  477|    117|	}
  478|       |
  479|    744|	vips_source_minimise(png->source);
  480|       |
  481|    744|	if (vips_foreign_load_png_set_header(png, load->out))
  ------------------
  |  Branch (481:6): [True: 0, False: 744]
  ------------------
  482|      0|		return -1;
  483|       |
  484|    744|	return 0;
  485|    744|}
spngload.c:vips_foreign_load_png_set_header:
  207|  1.46k|{
  208|  1.46k|	double xres, yres;
  209|  1.46k|	struct spng_iccp iccp;
  210|  1.46k|	struct spng_exif exif;
  211|  1.46k|	struct spng_phys phys;
  212|  1.46k|	struct spng_bkgd bkgd;
  213|  1.46k|	guint32 n_text;
  214|       |
  215|       |	/* Get resolution. Default to 72 pixels per inch.
  216|       |	 */
  217|  1.46k|	xres = 72.0 / 25.4;
  218|  1.46k|	yres = 72.0 / 25.4;
  219|  1.46k|	if (!spng_get_phys(png->ctx, &phys)) {
  ------------------
  |  Branch (219:6): [True: 126, False: 1.33k]
  ------------------
  220|       |		/* unit 1 means pixels per metre, otherwise unspecified.
  221|       |		 */
  222|    126|		xres = phys.unit_specifier == 1
  ------------------
  |  Branch (222:10): [True: 118, False: 8]
  ------------------
  223|    126|			? phys.ppu_x / 1000.0
  224|    126|			: phys.ppu_x;
  225|    126|		yres = phys.unit_specifier == 1
  ------------------
  |  Branch (225:10): [True: 118, False: 8]
  ------------------
  226|    126|			? phys.ppu_y / 1000.0
  227|    126|			: phys.ppu_y;
  228|    126|	}
  229|       |
  230|  1.46k|	vips_image_init_fields(image,
  231|  1.46k|		png->ihdr.width, png->ihdr.height, png->bands,
  232|  1.46k|		png->format, VIPS_CODING_NONE, png->interpretation,
  233|  1.46k|		xres, yres);
  234|       |
  235|  1.46k|	VIPS_SETSTR(image->filename,
  ------------------
  |  |   53|  1.46k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.46k|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|  1.46k|	{ \
  |  |   55|  1.46k|		const char *sst = (V); \
  |  |   56|  1.46k|		\
  |  |   57|  1.46k|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 1.46k, False: 0]
  |  |  ------------------
  |  |   58|  1.46k|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 0, False: 1.46k]
  |  |  |  Branch (58:16): [True: 1.46k, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|  1.46k|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|  1.46k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  1.46k|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|  1.46k|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  1.46k|	{ \
  |  |  |  |  |  |   43|  1.46k|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 1.46k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  1.46k|			(void) F((S)); \
  |  |  |  |  |  |   45|  1.46k|			(S) = 0; \
  |  |  |  |  |  |   46|  1.46k|		} \
  |  |  |  |  |  |   47|  1.46k|	} \
  |  |  |  |  |  |   48|  1.46k|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|  1.46k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  1.46k|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 0, False: 1.46k]
  |  |  ------------------
  |  |   61|  1.46k|					(S) = g_strdup(sst); \
  |  |   62|  1.46k|			} \
  |  |   63|  1.46k|		} \
  |  |   64|  1.46k|	} \
  |  |   65|  1.46k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.46k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  236|  1.46k|		vips_connection_filename(VIPS_CONNECTION(png->source)));
  237|       |
  238|  1.46k|	if (vips_image_pipelinev(image, VIPS_DEMAND_STYLE_THINSTRIP, NULL))
  ------------------
  |  Branch (238:6): [True: 0, False: 1.46k]
  ------------------
  239|      0|		return -1;
  240|       |
  241|  1.46k|	if (!spng_get_iccp(png->ctx, &iccp))
  ------------------
  |  Branch (241:6): [True: 100, False: 1.36k]
  ------------------
  242|    100|		vips_image_set_blob_copy(image,
  243|    100|			VIPS_META_ICC_NAME, iccp.profile, iccp.profile_len);
  ------------------
  |  |   78|    100|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  244|       |
  245|  1.46k|	if (!spng_get_text(png->ctx, NULL, &n_text)) {
  ------------------
  |  Branch (245:6): [True: 55, False: 1.40k]
  ------------------
  246|     55|		struct spng_text *text;
  247|       |
  248|       |		/* Very large numbers of text chunks are used in DoS
  249|       |		 * attacks.
  250|       |		 */
  251|     55|		if (!png->unlimited && n_text > MAX_PNG_TEXT_CHUNKS) {
  ------------------
  |  |   40|     55|#define MAX_PNG_TEXT_CHUNKS 50
  ------------------
  |  Branch (251:7): [True: 55, False: 0]
  |  Branch (251:26): [True: 2, False: 53]
  ------------------
  252|      2|			g_warning(_("%d text chunks, only %d text chunks will be loaded"),
  ------------------
  |  |  338|      2|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      2|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      2|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      2|                               __VA_ARGS__)
  ------------------
  253|      2|				n_text, MAX_PNG_TEXT_CHUNKS);
  254|      2|			n_text = MAX_PNG_TEXT_CHUNKS;
  ------------------
  |  |   40|      2|#define MAX_PNG_TEXT_CHUNKS 50
  ------------------
  255|      2|		}
  256|       |
  257|     55|		text = VIPS_ARRAY(VIPS_OBJECT(png),
  ------------------
  |  |   72|     55|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|     55|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|     55|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|     55|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|     55|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  258|     55|			n_text, struct spng_text);
  259|     55|		if (!spng_get_text(png->ctx, text, &n_text)) {
  ------------------
  |  Branch (259:7): [True: 53, False: 2]
  ------------------
  260|     53|			guint32 i;
  261|       |
  262|    268|			for (i = 0; i < n_text; i++)
  ------------------
  |  Branch (262:16): [True: 215, False: 53]
  ------------------
  263|       |				/* .text is always a null-terminated C string.
  264|       |				 */
  265|    215|				vips_foreign_load_png_set_text(image,
  266|    215|					i, text[i].keyword, text[i].text);
  267|     53|		}
  268|     55|	}
  269|       |
  270|  1.46k|	if (!spng_get_exif(png->ctx, &exif))
  ------------------
  |  Branch (270:6): [True: 0, False: 1.46k]
  ------------------
  271|      0|		vips_image_set_blob_copy(image, VIPS_META_EXIF_NAME,
  ------------------
  |  |   46|      0|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  272|      0|			exif.data, exif.length);
  273|       |
  274|  1.46k|	vips_image_set_int(image, VIPS_META_BITS_PER_SAMPLE,
  ------------------
  |  |  100|  1.46k|#define VIPS_META_BITS_PER_SAMPLE "bits-per-sample"
  ------------------
  275|  1.46k|		png->ihdr.bit_depth);
  276|       |
  277|  1.46k|	if (png->ihdr.color_type == SPNG_COLOR_TYPE_INDEXED) {
  ------------------
  |  Branch (277:6): [True: 151, False: 1.31k]
  ------------------
  278|       |		/* Deprecated "palette-bit-depth" use "bits-per-sample" instead.
  279|       |		 */
  280|    151|		vips_image_set_int(image,
  281|    151|			"palette-bit-depth", png->ihdr.bit_depth);
  282|       |
  283|    151|		vips_image_set_int(image, VIPS_META_PALETTE, 1);
  ------------------
  |  |  107|    151|#define VIPS_META_PALETTE "palette"
  ------------------
  284|    151|	}
  285|       |
  286|       |	/* Let our caller know. These are very expensive to decode.
  287|       |	 */
  288|  1.46k|	if (png->ihdr.interlace_method != SPNG_INTERLACE_NONE)
  ------------------
  |  Branch (288:6): [True: 332, False: 1.13k]
  ------------------
  289|    332|		vips_image_set_int(image, "interlaced", 1);
  290|       |
  291|  1.46k|	if (!spng_get_bkgd(png->ctx, &bkgd)) {
  ------------------
  |  Branch (291:6): [True: 109, False: 1.35k]
  ------------------
  292|    109|		const int scale =
  293|    109|			image->BandFmt == VIPS_FORMAT_UCHAR ? 1 : 256;
  ------------------
  |  Branch (293:4): [True: 99, False: 10]
  ------------------
  294|       |
  295|    109|		double array[3];
  296|    109|		int n;
  297|       |
  298|    109|		switch (png->ihdr.color_type) {
  299|     11|		case SPNG_COLOR_TYPE_GRAYSCALE:
  ------------------
  |  Branch (299:3): [True: 11, False: 98]
  ------------------
  300|     14|		case SPNG_COLOR_TYPE_GRAYSCALE_ALPHA:
  ------------------
  |  Branch (300:3): [True: 3, False: 106]
  ------------------
  301|     14|			array[0] = bkgd.gray / scale;
  302|     14|			n = 1;
  303|     14|			break;
  304|       |
  305|      3|		case SPNG_COLOR_TYPE_TRUECOLOR:
  ------------------
  |  Branch (305:3): [True: 3, False: 106]
  ------------------
  306|      8|		case SPNG_COLOR_TYPE_TRUECOLOR_ALPHA:
  ------------------
  |  Branch (306:3): [True: 5, False: 104]
  ------------------
  307|      8|			array[0] = bkgd.red / scale;
  308|      8|			array[1] = bkgd.green / scale;
  309|      8|			array[2] = bkgd.blue / scale;
  310|      8|			n = 3;
  311|      8|			break;
  312|       |
  313|     87|		case SPNG_COLOR_TYPE_INDEXED:
  ------------------
  |  Branch (313:3): [True: 87, False: 22]
  ------------------
  314|     87|		default:
  ------------------
  |  Branch (314:3): [True: 0, False: 109]
  ------------------
  315|       |			/* Not sure what to do here. I suppose we should read
  316|       |			 * the palette.
  317|       |			 */
  318|     87|			n = 0;
  319|     87|			break;
  320|    109|		}
  321|       |
  322|    109|		if (n > 0)
  ------------------
  |  Branch (322:7): [True: 22, False: 87]
  ------------------
  323|     22|			vips_image_set_array_double(image, "background",
  324|     22|				array, n);
  325|    109|	}
  326|       |
  327|  1.46k|	return 0;
  328|  1.46k|}
spngload.c:vips_foreign_load_png_set_text:
  177|    215|{
  178|       |#ifdef DEBUG
  179|       |	printf("vips_foreign_load_png_set_text: key %s, value %s\n",
  180|       |		key, value);
  181|       |#endif /*DEBUG*/
  182|       |
  183|    215|	if (strcmp(key, "XML:com.adobe.xmp") == 0) {
  ------------------
  |  Branch (183:6): [True: 1, False: 214]
  ------------------
  184|       |		/* Save as an XMP tag. This must be a BLOB, for compatibility
  185|       |		 * for things like the XMP blob that the tiff loader adds.
  186|       |		 *
  187|       |		 * Note that this will remove the null-termination from the
  188|       |		 * string. We must carefully reattach this.
  189|       |		 */
  190|      1|		vips_image_set_blob_copy(out,
  191|      1|			VIPS_META_XMP_NAME, value, strlen(value));
  ------------------
  |  |   53|      1|#define VIPS_META_XMP_NAME "xmp-data"
  ------------------
  192|      1|	}
  193|    214|	else {
  194|    214|		char name[256];
  195|       |
  196|       |		/* Save as a string comment. Some PNGs have EXIF data as
  197|       |		 * text segments, unfortunately.
  198|       |		 */
  199|    214|		g_snprintf(name, 256, "png-comment-%d-%s", i, key);
  200|       |
  201|    214|		vips_image_set_string(out, name, value);
  202|    214|	}
  203|    215|}
spngload.c:vips_foreign_load_png_load:
  575|    719|{
  576|    719|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load);
  ------------------
  |  |  441|    719|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|    719|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|    719|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  577|    719|	VipsForeignLoadPng *png = (VipsForeignLoadPng *) load;
  578|    719|	VipsImage **t = (VipsImage **)
  579|    719|		vips_object_local_array(VIPS_OBJECT(load), 3);
  ------------------
  |  |  433|    719|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|    719|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    719|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  580|       |
  581|    719|	enum spng_decode_flags flags;
  582|    719|	int error;
  583|       |
  584|    719|	if (vips_source_decode(png->source))
  ------------------
  |  Branch (584:6): [True: 0, False: 719]
  ------------------
  585|      0|		return -1;
  586|       |
  587|       |	/* Decode transparency, if available.
  588|       |	 */
  589|    719|	flags = SPNG_DECODE_TRNS;
  590|       |
  591|    719|	if (png->ihdr.interlace_method != SPNG_INTERLACE_NONE) {
  ------------------
  |  Branch (591:6): [True: 162, False: 557]
  ------------------
  592|       |		/* Arg awful interlaced image. We have to load to a huge mem
  593|       |		 * buffer, then copy to out.
  594|       |		 */
  595|    162|		t[0] = vips_image_new_memory();
  596|    162|		if (vips_foreign_load_png_set_header(png, t[0]) ||
  ------------------
  |  Branch (596:7): [True: 0, False: 162]
  ------------------
  597|    162|			vips_image_write_prepare(t[0]))
  ------------------
  |  Branch (597:4): [True: 0, False: 162]
  ------------------
  598|      0|			return -1;
  599|       |
  600|    162|		if ((error = spng_decode_image(png->ctx,
  ------------------
  |  Branch (600:7): [True: 144, False: 18]
  ------------------
  601|    162|				 VIPS_IMAGE_ADDR(t[0], 0, 0),
  ------------------
  |  |  418|    162|	((I)->data + \
  |  |  419|    162|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|    162|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|    162|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|    162|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|    162|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|    162|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|    162|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  602|    162|				 VIPS_IMAGE_SIZEOF_IMAGE(t[0]),
  ------------------
  |  |  388|    162|	(VIPS_IMAGE_SIZEOF_LINE(I) * (I)->Ysize)
  |  |  ------------------
  |  |  |  |  386|    162|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|    162|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|    162|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  603|    162|				 png->fmt, flags))) {
  604|    144|			vips_error(class->nickname,
  605|    144|				"%s", spng_strerror(error));
  606|    144|			return -1;
  607|    144|		}
  608|       |
  609|       |		/* We've now finished reading the file.
  610|       |		 */
  611|     18|		vips_source_minimise(png->source);
  612|       |
  613|     18|		if (vips_image_write(t[0], load->real))
  ------------------
  |  Branch (613:7): [True: 0, False: 18]
  ------------------
  614|      0|			return -1;
  615|     18|	}
  616|    557|	else {
  617|    557|		t[0] = vips_image_new();
  618|       |
  619|    557|		if (vips_foreign_load_png_set_header(png, t[0]))
  ------------------
  |  Branch (619:7): [True: 0, False: 557]
  ------------------
  620|      0|			return -1;
  621|       |
  622|       |		/* We can decode these progressively.
  623|       |		 */
  624|    557|		flags |= SPNG_DECODE_PROGRESSIVE;
  625|       |
  626|    557|		if ((error = spng_decode_image(png->ctx, NULL, 0,
  ------------------
  |  Branch (626:7): [True: 114, False: 443]
  ------------------
  627|    557|				 png->fmt, flags))) {
  628|    114|			vips_error(class->nickname,
  629|    114|				"%s", spng_strerror(error));
  630|    114|			return -1;
  631|    114|		}
  632|       |
  633|       |		/* Close input immediately at end of read.
  634|       |		 */
  635|    443|		g_signal_connect(t[0], "minimise",
  ------------------
  |  |  491|    443|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  636|    443|			G_CALLBACK(vips_foreign_load_png_minimise), png);
  637|       |
  638|    443|		if (vips_image_generate(t[0],
  ------------------
  |  Branch (638:7): [True: 0, False: 443]
  ------------------
  639|    443|				NULL, vips_foreign_load_png_generate, NULL,
  640|    443|				png, NULL) ||
  641|    443|			vips_sequential(t[0], &t[1],
  ------------------
  |  Branch (641:4): [True: 0, False: 443]
  ------------------
  642|    443|				"tile_height", VIPS__FATSTRIP_HEIGHT,
  ------------------
  |  |  161|    443|#define VIPS__FATSTRIP_HEIGHT (16)
  ------------------
  643|    443|				NULL) ||
  644|    443|			vips_image_write(t[1], load->real))
  ------------------
  |  Branch (644:4): [True: 0, False: 443]
  ------------------
  645|      0|			return -1;
  646|    443|	}
  647|       |
  648|    461|	return 0;
  649|    719|}
spngload.c:vips_foreign_load_png_minimise:
  489|    886|{
  490|    886|	vips_source_minimise(png->source);
  491|    886|}
spngload.c:vips_foreign_load_png_generate:
  496|  2.24k|{
  497|  2.24k|	VipsRect *r = &out_region->valid;
  498|  2.24k|	VipsForeignLoad *load = VIPS_FOREIGN_LOAD(a);
  ------------------
  |  |  133|  2.24k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  2.24k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  2.24k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|  2.24k|		VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoad))
  ------------------
  499|  2.24k|	VipsForeignLoadPng *png = (VipsForeignLoadPng *) load;
  500|  2.24k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(png);
  ------------------
  |  |  441|  2.24k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  2.24k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  2.24k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  501|       |
  502|  2.24k|	int y;
  503|  2.24k|	int error;
  504|       |
  505|       |#ifdef DEBUG
  506|       |	printf("vips_foreign_load_png_generate: line %d, %d rows\n",
  507|       |		r->top, r->height);
  508|       |	printf("vips_foreign_load_png_generate: y_top = %d\n", png->y_pos);
  509|       |#endif /*DEBUG*/
  510|       |
  511|       |	/* We're inside a tilecache where tiles are the full image width, so
  512|       |	 * this should always be true.
  513|       |	 */
  514|  2.24k|	g_assert(r->left == 0);
  ------------------
  |  |  166|  2.24k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  2.24k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.24k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  515|  2.24k|	g_assert(r->width == out_region->im->Xsize);
  ------------------
  |  |  166|  2.24k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  2.24k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.24k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  516|  2.24k|	g_assert(VIPS_RECT_BOTTOM(r) <= out_region->im->Ysize);
  ------------------
  |  |  166|  2.24k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  2.24k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.24k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|       |
  518|       |	/* Tiles should always be a strip in height, unless it's the final
  519|       |	 * strip.
  520|       |	 */
  521|  2.24k|	g_assert(r->height ==
  ------------------
  |  |  166|  2.24k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  2.24k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.24k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  522|  2.24k|		VIPS_MIN(VIPS__FATSTRIP_HEIGHT, out_region->im->Ysize - r->top));
  523|       |
  524|       |	/* And check that y_pos is correct. It should be, since we are inside
  525|       |	 * a vips_sequential().
  526|       |	 */
  527|  2.24k|	if (r->top != png->y_pos) {
  ------------------
  |  Branch (527:6): [True: 0, False: 2.24k]
  ------------------
  528|      0|		vips_error(class->nickname,
  529|      0|			_("out of order read at line %d"), png->y_pos);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  530|      0|		return -1;
  531|      0|	}
  532|       |
  533|  33.8k|	for (y = 0; y < r->height; y++) {
  ------------------
  |  Branch (533:14): [True: 31.5k, False: 2.24k]
  ------------------
  534|       |		/* libspng returns EOI when successfully reading the
  535|       |		 * final line of input.
  536|       |		 */
  537|  31.5k|		error = spng_decode_row(png->ctx,
  538|  31.5k|			VIPS_REGION_ADDR(out_region, 0, r->top + y),
  ------------------
  |  |  227|  31.5k|	((R)->data + \
  |  |  228|  31.5k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  31.5k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  31.5k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  31.5k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  31.5k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  31.5k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  539|  31.5k|			VIPS_REGION_SIZEOF_LINE(out_region));
  ------------------
  |  |  203|  31.5k|	((size_t) ((R)->valid.width * VIPS_REGION_SIZEOF_PEL(R)))
  |  |  ------------------
  |  |  |  |  201|  31.5k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  31.5k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  31.5k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  540|  31.5k|		if (error != 0 &&
  ------------------
  |  Branch (540:7): [True: 13.0k, False: 18.5k]
  ------------------
  541|  31.5k|			error != SPNG_EOI) {
  ------------------
  |  Branch (541:4): [True: 12.9k, False: 86]
  ------------------
  542|       |			/* We've failed to read some pixels. Knock this
  543|       |			 * operation out of cache.
  544|       |			 */
  545|  12.9k|			vips_operation_invalidate(VIPS_OPERATION(png));
  ------------------
  |  |   57|  12.9k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  12.9k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  12.9k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  12.9k|		VIPS_TYPE_OPERATION, VipsOperation))
  ------------------
  546|       |
  547|       |#ifdef DEBUG
  548|       |			printf("vips_foreign_load_png_generate:\n");
  549|       |			printf("  spng_decode_row() failed, line %d\n",
  550|       |				r->top + y);
  551|       |			printf("  thread %p\n", g_thread_self());
  552|       |			printf("  error %s\n", spng_strerror(error));
  553|       |#endif /*DEBUG*/
  554|       |
  555|  12.9k|			g_warning("%s: %s",
  ------------------
  |  |  338|  12.9k|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|  12.9k|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|  12.9k|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|  12.9k|                               __VA_ARGS__)
  ------------------
  556|  12.9k|				class->nickname, spng_strerror(error));
  557|       |
  558|       |			/* And bail if trunc is on.
  559|       |			 */
  560|  12.9k|			if (load->fail_on >= VIPS_FAIL_ON_TRUNCATED) {
  ------------------
  |  Branch (560:8): [True: 0, False: 12.9k]
  ------------------
  561|      0|				vips_error(class->nickname,
  562|      0|					"%s", _("libspng read error"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  563|      0|				return -1;
  564|      0|			}
  565|  12.9k|		}
  566|       |
  567|  31.5k|		png->y_pos += 1;
  568|  31.5k|	}
  569|       |
  570|  2.24k|	return 0;
  571|  2.24k|}
spngload.c:vips_foreign_load_png_init:
  688|  2.63k|{
  689|  2.63k|}
spngload.c:vips_foreign_load_png_source_class_init:
  739|      1|{
  740|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  741|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  742|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  743|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  744|       |
  745|      1|	gobject_class->set_property = vips_object_set_property;
  746|      1|	gobject_class->get_property = vips_object_get_property;
  747|       |
  748|      1|	object_class->nickname = "pngload_source";
  749|      1|	object_class->description = _("load png from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  750|      1|	object_class->build = vips_foreign_load_png_source_build;
  751|       |
  752|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  753|       |
  754|      1|	load_class->is_a_source = vips_foreign_load_png_source_is_a_source;
  755|       |
  756|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  757|      1|		_("Source"),
  758|      1|		_("Source to load from"),
  759|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  760|      1|		G_STRUCT_OFFSET(VipsForeignLoadPngSource, source),
  761|      1|		VIPS_TYPE_SOURCE);
  762|      1|}
spngload.c:vips_foreign_load_png_source_is_a_source:
  725|  36.4k|{
  726|  36.4k|	static unsigned char signature[8] = { 137, 80, 78, 71, 13, 10, 26, 10 };
  727|       |
  728|  36.4k|	const unsigned char *p;
  729|       |
  730|  36.4k|	if ((p = vips_source_sniff(source, 8)) &&
  ------------------
  |  Branch (730:6): [True: 36.1k, False: 290]
  ------------------
  731|  36.4k|		memcmp(p, signature, 8) == 0)
  ------------------
  |  Branch (731:3): [True: 2.63k, False: 33.4k]
  ------------------
  732|  2.63k|		return TRUE;
  ------------------
  |  |  798|  2.63k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  2.63k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  733|       |
  734|  33.7k|	return FALSE;
  ------------------
  |  |  794|  33.7k|#define	FALSE	(0)
  ------------------
  735|  36.4k|}
spngload.c:vips_foreign_load_png_file_class_init:
  817|      1|{
  818|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  819|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  820|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  821|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  822|       |
  823|      1|	gobject_class->set_property = vips_object_set_property;
  824|      1|	gobject_class->get_property = vips_object_get_property;
  825|       |
  826|      1|	object_class->nickname = "pngload";
  827|      1|	object_class->description = _("load png from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  828|      1|	object_class->build = vips_foreign_load_png_file_build;
  829|       |
  830|      1|	foreign_class->suffs = vips_foreign_load_png_file_suffs;
  831|       |
  832|      1|	load_class->is_a = vips_foreign_load_png_file_is_a;
  833|       |
  834|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  835|      1|		_("Filename"),
  836|      1|		_("Filename to load from"),
  837|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  838|      1|		G_STRUCT_OFFSET(VipsForeignLoadPngFile, filename),
  839|      1|		NULL);
  840|      1|}
spngload.c:vips_foreign_load_png_buffer_class_init:
  896|      1|{
  897|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  898|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  899|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  900|       |
  901|      1|	gobject_class->set_property = vips_object_set_property;
  902|      1|	gobject_class->get_property = vips_object_get_property;
  903|       |
  904|      1|	object_class->nickname = "pngload_buffer";
  905|      1|	object_class->description = _("load png from buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  906|      1|	object_class->build = vips_foreign_load_png_buffer_build;
  907|       |
  908|      1|	load_class->is_a_buffer = vips_foreign_load_png_buffer_is_a_buffer;
  909|       |
  910|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  911|      1|		_("Buffer"),
  912|      1|		_("Buffer to load from"),
  913|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  914|      1|		G_STRUCT_OFFSET(VipsForeignLoadPngBuffer, blob),
  915|      1|		VIPS_TYPE_BLOB);
  916|      1|}
spngload.c:vips_foreign_load_png_buffer_build:
  863|  2.63k|{
  864|  2.63k|	VipsForeignLoadPng *png = (VipsForeignLoadPng *) object;
  865|  2.63k|	VipsForeignLoadPngBuffer *buffer = (VipsForeignLoadPngBuffer *) object;
  866|       |
  867|  2.63k|	if (buffer->blob &&
  ------------------
  |  Branch (867:6): [True: 2.63k, False: 0]
  ------------------
  868|  2.63k|		!(png->source = vips_source_new_from_memory(
  ------------------
  |  Branch (868:3): [True: 0, False: 2.63k]
  ------------------
  869|  2.63k|			  VIPS_AREA(buffer->blob)->data,
  ------------------
  |  |  137|  2.63k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  870|  2.63k|			  VIPS_AREA(buffer->blob)->length)))
  ------------------
  |  |  137|  2.63k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  871|      0|		return -1;
  872|       |
  873|  2.63k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_png_buffer_parent_class)
  ------------------
  |  |  435|  2.63k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  2.63k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  2.63k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (873:6): [True: 1.89k, False: 744]
  ------------------
  874|  2.63k|			->build(object))
  875|  1.89k|		return -1;
  876|       |
  877|    744|	return 0;
  878|  2.63k|}
spngload.c:vips_foreign_load_png_buffer_is_a_buffer:
  882|  36.4k|{
  883|  36.4k|	VipsSource *source;
  884|  36.4k|	gboolean result;
  885|       |
  886|  36.4k|	if (!(source = vips_source_new_from_memory(buf, len)))
  ------------------
  |  Branch (886:6): [True: 0, False: 36.4k]
  ------------------
  887|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  888|  36.4k|	result = vips_foreign_load_png_source_is_a_source(source);
  889|  36.4k|	VIPS_UNREF(source);
  ------------------
  |  |   57|  36.4k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  36.4k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  36.4k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  36.4k|	{ \
  |  |  |  |   43|  36.4k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 36.4k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  36.4k|			(void) F((S)); \
  |  |  |  |   45|  36.4k|			(S) = 0; \
  |  |  |  |   46|  36.4k|		} \
  |  |  |  |   47|  36.4k|	} \
  |  |  |  |   48|  36.4k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  36.4k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  890|       |
  891|  36.4k|	return result;
  892|  36.4k|}
spngload.c:vips_foreign_load_png_buffer_init:
  920|  2.63k|{
  921|  2.63k|}

spngsave.c:vips_foreign_save_spng_class_init:
  670|      1|{
  671|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  672|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  673|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  674|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  675|       |
  676|      1|	gobject_class->dispose = vips_foreign_save_spng_dispose;
  677|      1|	gobject_class->set_property = vips_object_set_property;
  678|      1|	gobject_class->get_property = vips_object_get_property;
  679|       |
  680|      1|	object_class->nickname = "spngsave_base";
  681|      1|	object_class->description = _("save spng");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  682|      1|	object_class->build = vips_foreign_save_spng_build;
  683|       |
  684|      1|	foreign_class->suffs = vips__png_suffs;
  685|       |
  686|      1|	save_class->saveable = VIPS_SAVEABLE_RGBA;
  687|      1|	save_class->format_table = bandfmt_spng;
  688|       |
  689|      1|	VIPS_ARG_INT(class, "compression", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  690|      1|		_("Compression"),
  691|      1|		_("Compression factor"),
  692|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  693|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, compression),
  694|      1|		0, 9, 6);
  695|       |
  696|      1|	VIPS_ARG_BOOL(class, "interlace", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  697|      1|		_("Interlace"),
  698|      1|		_("Interlace image"),
  699|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  700|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, interlace),
  701|      1|		FALSE);
  702|       |
  703|      1|	VIPS_ARG_FLAGS(class, "filter", 12,
  ------------------
  |  |  226|      1|	{ \
  |  |  227|      1|		GParamSpec *pspec; \
  |  |  228|      1|\
  |  |  229|      1|		pspec = g_param_spec_flags((NAME), (LONG), (DESC), \
  |  |  230|      1|			(TYPE), (VALUE), \
  |  |  231|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  232|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  233|      1|			vips_argument_get_id(), pspec); \
  |  |  234|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  235|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  236|      1|	}
  ------------------
  704|      1|		_("Filter"),
  705|      1|		_("libspng row filter flag(s)"),
  706|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  707|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, filter),
  708|      1|		VIPS_TYPE_FOREIGN_PNG_FILTER,
  709|      1|		VIPS_FOREIGN_PNG_FILTER_NONE);
  710|       |
  711|      1|	VIPS_ARG_BOOL(class, "palette", 13,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  712|      1|		_("Palette"),
  713|      1|		_("Quantise to 8bpp palette"),
  714|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  715|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, palette),
  716|      1|		FALSE);
  717|       |
  718|      1|	VIPS_ARG_INT(class, "Q", 15,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  719|      1|		_("Quality"),
  720|      1|		_("Quantisation quality"),
  721|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  722|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, Q),
  723|      1|		0, 100, 100);
  724|       |
  725|      1|	VIPS_ARG_DOUBLE(class, "dither", 16,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  726|      1|		_("Dithering"),
  727|      1|		_("Amount of dithering"),
  728|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  729|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, dither),
  730|      1|		0.0, 1.0, 1.0);
  731|       |
  732|      1|	VIPS_ARG_INT(class, "bitdepth", 17,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  733|      1|		_("Bit depth"),
  734|      1|		_("Write as a 1, 2, 4, 8 or 16 bit image"),
  735|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  736|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, bitdepth),
  737|      1|		1, 16, 8);
  738|       |
  739|      1|	VIPS_ARG_INT(class, "effort", 18,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  740|      1|		_("Effort"),
  741|      1|		_("Quantisation CPU effort"),
  742|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  743|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, effort),
  744|      1|		1, 10, 7);
  745|       |
  746|      1|	VIPS_ARG_INT(class, "colours", 14,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  747|      1|		_("Colours"),
  748|      1|		_("Max number of palette colours"),
  749|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  750|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpng, colours),
  751|      1|		2, 256, 256);
  752|      1|}
spngsave.c:vips_foreign_save_spng_dispose:
  107|  21.6k|{
  108|  21.6k|	VipsForeignSaveSpng *spng = (VipsForeignSaveSpng *) gobject;
  109|       |
  110|  21.6k|	GSList *p;
  111|       |
  112|  21.6k|	VIPS_UNREF(spng->target);
  ------------------
  |  |   57|  21.6k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  21.6k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  21.6k|	{ \
  |  |  |  |   43|  21.6k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 21.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  21.6k|			(void) F((S)); \
  |  |  |  |   45|  21.6k|			(S) = 0; \
  |  |  |  |   46|  21.6k|		} \
  |  |  |  |   47|  21.6k|	} \
  |  |  |  |   48|  21.6k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  113|  21.6k|	VIPS_UNREF(spng->memory);
  ------------------
  |  |   57|  21.6k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  21.6k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  21.6k|	{ \
  |  |  |  |   43|  21.6k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 21.6k]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|  21.6k|	} \
  |  |  |  |   48|  21.6k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  114|  21.6k|	VIPS_FREEF(spng_ctx_free, spng->ctx);
  ------------------
  |  |   41|  21.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  21.6k|	{ \
  |  |   43|  21.6k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 21.6k, False: 0]
  |  |  ------------------
  |  |   44|  21.6k|			(void) F((S)); \
  |  |   45|  21.6k|			(S) = 0; \
  |  |   46|  21.6k|		} \
  |  |   47|  21.6k|	} \
  |  |   48|  21.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|       |
  116|  21.7k|	for (p = spng->text_chunks; p; p = p->next) {
  ------------------
  |  Branch (116:30): [True: 122, False: 21.6k]
  ------------------
  117|    122|		struct spng_text *text = (struct spng_text *) p->data;
  118|       |
  119|    122|		VIPS_FREE(text->text);
  ------------------
  |  |   50|    122|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|    122|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|    122|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|    122|	{ \
  |  |  |  |   43|    122|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 122, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|    122|			(void) F((S)); \
  |  |  |  |   45|    122|			(S) = 0; \
  |  |  |  |   46|    122|		} \
  |  |  |  |   47|    122|	} \
  |  |  |  |   48|    122|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|    122|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  120|    122|		VIPS_FREE(text);
  ------------------
  |  |   50|    122|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|    122|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|    122|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|    122|	{ \
  |  |  |  |   43|    122|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 122, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|    122|			(void) F((S)); \
  |  |  |  |   45|    122|			(S) = 0; \
  |  |  |  |   46|    122|		} \
  |  |  |  |   47|    122|	} \
  |  |  |  |   48|    122|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|    122|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  121|    122|	}
  122|  21.6k|	VIPS_FREEF(g_slist_free, spng->text_chunks);
  ------------------
  |  |   41|  21.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  21.6k|	{ \
  |  |   43|  21.6k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 44, False: 21.5k]
  |  |  ------------------
  |  |   44|     44|			(void) F((S)); \
  |  |   45|     44|			(S) = 0; \
  |  |   46|     44|		} \
  |  |   47|  21.6k|	} \
  |  |   48|  21.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  123|       |
  124|  21.6k|	VIPS_FREE(spng->line);
  ------------------
  |  |   50|  21.6k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  21.6k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  21.6k|	{ \
  |  |  |  |   43|  21.6k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 21.6k]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|  21.6k|	} \
  |  |  |  |   48|  21.6k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  125|       |
  126|  21.6k|	G_OBJECT_CLASS(vips_foreign_save_spng_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  21.6k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  21.6k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  21.6k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  127|  21.6k|}
spngsave.c:vips_foreign_save_spng_build:
  595|  21.6k|{
  596|  21.6k|	VipsForeignSave *save = (VipsForeignSave *) object;
  597|  21.6k|	VipsForeignSaveSpng *spng = (VipsForeignSaveSpng *) object;
  598|       |
  599|  21.6k|	VipsImage *in;
  600|       |
  601|  21.6k|	if (VIPS_OBJECT_CLASS(vips_foreign_save_spng_parent_class)->build(object))
  ------------------
  |  |  435|  21.6k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  21.6k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  21.6k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (601:6): [True: 0, False: 21.6k]
  ------------------
  602|      0|		return -1;
  603|       |
  604|  21.6k|	in = save->ready;
  605|  21.6k|	g_object_ref(in);
  606|       |
  607|       |	/* If no output bitdepth has been specified, use input Type to pick.
  608|       |	 */
  609|  21.6k|	if (!vips_object_argument_isset(object, "bitdepth"))
  ------------------
  |  Branch (609:6): [True: 21.6k, False: 0]
  ------------------
  610|  21.6k|		spng->bitdepth =
  611|  21.6k|			in->Type == VIPS_INTERPRETATION_RGB16 ||
  ------------------
  |  Branch (611:4): [True: 3.58k, False: 18.0k]
  ------------------
  612|  21.6k|				in->Type == VIPS_INTERPRETATION_GREY16
  ------------------
  |  Branch (612:5): [True: 284, False: 17.7k]
  ------------------
  613|  21.6k|			? 16
  614|  21.6k|			: 8;
  615|       |
  616|       |	/* Deprecated "colours" arg just sets bitdepth large enough to hold
  617|       |	 * that many colours.
  618|       |	 */
  619|  21.6k|	if (vips_object_argument_isset(object, "colours"))
  ------------------
  |  Branch (619:6): [True: 0, False: 21.6k]
  ------------------
  620|      0|		spng->bitdepth = ceil(log2(spng->colours));
  621|       |
  622|       |	/* Cast in down to 8 bit if we can.
  623|       |	 */
  624|  21.6k|	if (spng->bitdepth <= 8) {
  ------------------
  |  Branch (624:6): [True: 17.7k, False: 3.86k]
  ------------------
  625|  17.7k|		VipsImage *x;
  626|       |
  627|  17.7k|		if (vips_cast(in, &x, VIPS_FORMAT_UCHAR, NULL)) {
  ------------------
  |  Branch (627:7): [True: 0, False: 17.7k]
  ------------------
  628|      0|			g_object_unref(in);
  629|      0|			return -1;
  630|      0|		}
  631|  17.7k|		g_object_unref(in);
  632|  17.7k|		in = x;
  633|  17.7k|	}
  634|       |
  635|       |	/* If this is a RGB or RGBA image and a low bit depth has been
  636|       |	 * requested, enable palettisation.
  637|       |	 */
  638|  21.6k|	if (in->Bands > 2 &&
  ------------------
  |  Branch (638:6): [True: 16.4k, False: 5.17k]
  ------------------
  639|  21.6k|		spng->bitdepth < 8)
  ------------------
  |  Branch (639:3): [True: 0, False: 16.4k]
  ------------------
  640|      0|		spng->palette = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  641|       |
  642|       |	/* Disable palettization for >8 bit save.
  643|       |	 */
  644|  21.6k|	if (spng->bitdepth > 8)
  ------------------
  |  Branch (644:6): [True: 3.86k, False: 17.7k]
  ------------------
  645|  3.86k|		spng->palette = FALSE;
  ------------------
  |  |  794|  3.86k|#define	FALSE	(0)
  ------------------
  646|       |
  647|  21.6k|	if (vips_foreign_save_spng_write(spng, in)) {
  ------------------
  |  Branch (647:6): [True: 13.2k, False: 8.38k]
  ------------------
  648|  13.2k|		g_object_unref(in);
  649|  13.2k|		return -1;
  650|  13.2k|	}
  651|       |
  652|  8.38k|	g_object_unref(in);
  653|       |
  654|  8.38k|	return 0;
  655|  21.6k|}
spngsave.c:vips_foreign_save_spng_write:
  384|  21.6k|{
  385|  21.6k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(spng);
  ------------------
  |  |  441|  21.6k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  21.6k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  21.6k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  386|       |
  387|  21.6k|	int error;
  388|  21.6k|	struct spng_ihdr ihdr;
  389|  21.6k|	struct spng_phys phys;
  390|  21.6k|	int fmt;
  391|  21.6k|	enum spng_encode_flags encode_flags;
  392|       |
  393|  21.6k|	spng->ctx = spng_ctx_new(SPNG_CTX_ENCODER);
  394|       |
  395|  21.6k|	if ((error = spng_set_png_stream(spng->ctx,
  ------------------
  |  Branch (395:6): [True: 0, False: 21.6k]
  ------------------
  396|  21.6k|			 vips_foreign_save_spng_write_fn, spng))) {
  397|      0|		vips_error(class->nickname, "%s", spng_strerror(error));
  398|      0|		return -1;
  399|      0|	}
  400|       |
  401|  21.6k|	ihdr.width = in->Xsize;
  402|  21.6k|	ihdr.height = in->Ysize;
  403|  21.6k|	ihdr.bit_depth = spng->bitdepth;
  404|       |
  405|  21.6k|	switch (in->Bands) {
  406|  4.87k|	case 1:
  ------------------
  |  Branch (406:2): [True: 4.87k, False: 16.7k]
  ------------------
  407|  4.87k|		ihdr.color_type = SPNG_COLOR_TYPE_GRAYSCALE;
  408|  4.87k|		break;
  409|       |
  410|    292|	case 2:
  ------------------
  |  Branch (410:2): [True: 292, False: 21.3k]
  ------------------
  411|    292|		ihdr.color_type = SPNG_COLOR_TYPE_GRAYSCALE_ALPHA;
  412|    292|		break;
  413|       |
  414|  13.2k|	case 3:
  ------------------
  |  Branch (414:2): [True: 13.2k, False: 8.41k]
  ------------------
  415|  13.2k|		ihdr.color_type = SPNG_COLOR_TYPE_TRUECOLOR;
  416|  13.2k|		break;
  417|       |
  418|  3.24k|	case 4:
  ------------------
  |  Branch (418:2): [True: 3.24k, False: 18.3k]
  ------------------
  419|  3.24k|		ihdr.color_type = SPNG_COLOR_TYPE_TRUECOLOR_ALPHA;
  420|  3.24k|		break;
  421|       |
  422|      0|	default:
  ------------------
  |  Branch (422:2): [True: 0, False: 21.6k]
  ------------------
  423|      0|		vips_error(class->nickname, "%s", _("bad bands"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  424|      0|		return -1;
  425|  21.6k|	}
  426|       |
  427|  21.6k|#ifdef HAVE_QUANTIZATION
  428|       |	/* Enable image quantisation to paletted 8bpp PNG if palette is set.
  429|       |	 */
  430|  21.6k|	if (spng->palette)
  ------------------
  |  Branch (430:6): [True: 0, False: 21.6k]
  ------------------
  431|      0|		ihdr.color_type = SPNG_COLOR_TYPE_INDEXED;
  432|       |#else
  433|       |	if (spng->palette)
  434|       |		g_warning("%s",
  435|       |			_("ignoring palette (no quantisation support)"));
  436|       |#endif /*HAVE_QUANTIZATION*/
  437|       |
  438|  21.6k|	ihdr.compression_method = 0;
  439|  21.6k|	ihdr.filter_method = 0;
  440|  21.6k|	ihdr.interlace_method = spng->interlace ? 1 : 0;
  ------------------
  |  Branch (440:26): [True: 0, False: 21.6k]
  ------------------
  441|  21.6k|	if ((error = spng_set_ihdr(spng->ctx, &ihdr))) {
  ------------------
  |  Branch (441:6): [True: 0, False: 21.6k]
  ------------------
  442|      0|		vips_error(class->nickname, "%s", spng_strerror(error));
  443|      0|		return -1;
  444|      0|	}
  445|       |
  446|  21.6k|	spng_set_option(spng->ctx,
  447|  21.6k|		SPNG_IMG_COMPRESSION_LEVEL, spng->compression);
  448|  21.6k|	spng_set_option(spng->ctx,
  449|  21.6k|		SPNG_TEXT_COMPRESSION_LEVEL, spng->compression);
  450|  21.6k|	spng_set_option(spng->ctx,
  451|  21.6k|		SPNG_FILTER_CHOICE, spng->filter);
  452|       |
  453|       |	/* Set resolution. spng uses pixels per meter.
  454|       |	 */
  455|  21.6k|	phys.unit_specifier = 1;
  456|  21.6k|	phys.ppu_x = VIPS_RINT(in->Xres * 1000.0);
  ------------------
  |  |   74|  21.6k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  457|  21.6k|	phys.ppu_y = VIPS_RINT(in->Xres * 1000.0);
  ------------------
  |  |   74|  21.6k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  458|  21.6k|	spng_set_phys(spng->ctx, &phys);
  459|       |
  460|       |	/* Metadata.
  461|       |	 */
  462|  21.6k|	if (vips_foreign_save_spng_profile(spng, in) ||
  ------------------
  |  Branch (462:6): [True: 0, False: 21.6k]
  ------------------
  463|  21.6k|		vips_foreign_save_spng_metadata(spng, in))
  ------------------
  |  Branch (463:3): [True: 0, False: 21.6k]
  ------------------
  464|      0|		return -1;
  465|       |
  466|  21.6k|#ifdef HAVE_QUANTIZATION
  467|  21.6k|	if (spng->palette) {
  ------------------
  |  Branch (467:6): [True: 0, False: 21.6k]
  ------------------
  468|      0|		struct spng_plte plte = { 0 };
  469|      0|		struct spng_trns trns = { 0 };
  470|       |
  471|      0|		VipsImage *im_index;
  472|      0|		VipsImage *im_palette;
  473|      0|		int palette_count;
  474|      0|		int i;
  475|       |
  476|      0|		if (vips__quantise_image(in, &im_index, &im_palette,
  ------------------
  |  Branch (476:7): [True: 0, False: 0]
  ------------------
  477|      0|				1 << spng->bitdepth,
  478|      0|				spng->Q,
  479|      0|				spng->dither,
  480|      0|				spng->effort,
  481|      0|				FALSE))
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  482|      0|			return -1;
  483|       |
  484|       |		/* PNG is 8-bit index only.
  485|       |		 */
  486|      0|		palette_count = im_palette->Xsize;
  487|      0|		g_assert(palette_count <= 256);
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  488|       |
  489|      0|		for (i = 0; i < palette_count; i++) {
  ------------------
  |  Branch (489:15): [True: 0, False: 0]
  ------------------
  490|      0|			VipsPel *p = (VipsPel *)
  491|      0|				VIPS_IMAGE_ADDR(im_palette, i, 0);
  ------------------
  |  |  418|      0|	((I)->data + \
  |  |  419|      0|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|      0|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|      0|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  492|      0|			struct spng_plte_entry *entry =
  493|      0|				&plte.entries[plte.n_entries];
  494|       |
  495|      0|			entry->red = p[0];
  496|      0|			entry->green = p[1];
  497|      0|			entry->blue = p[2];
  498|      0|			plte.n_entries += 1;
  499|       |
  500|      0|			trns.type3_alpha[i] = p[3];
  501|      0|			if (p[3] != 255) {
  ------------------
  |  Branch (501:8): [True: 0, False: 0]
  ------------------
  502|      0|				trns.n_type3_entries = i + 1;
  503|      0|			}
  504|      0|		}
  505|       |
  506|       |#ifdef DEBUG
  507|       |		printf("attaching %d entry palette\n", plte.n_entries);
  508|       |		if (trns.n_type3_entries)
  509|       |			printf("attaching %d transparency values\n",
  510|       |				trns.n_type3_entries);
  511|       |#endif /*DEBUG*/
  512|       |
  513|      0|		VIPS_UNREF(im_palette);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  514|       |
  515|      0|		spng_set_plte(spng->ctx, &plte);
  516|      0|		if (trns.n_type3_entries)
  ------------------
  |  Branch (516:7): [True: 0, False: 0]
  ------------------
  517|      0|			spng_set_trns(spng->ctx, &trns);
  518|       |
  519|      0|		in = spng->memory = im_index;
  520|      0|	}
  521|  21.6k|#endif /*HAVE_QUANTIZATION*/
  522|       |
  523|       |	/* Low-bitdepth write needs an extra buffer for packing pixels.
  524|       |	 */
  525|  21.6k|	if (spng->bitdepth < 8) {
  ------------------
  |  Branch (525:6): [True: 0, False: 21.6k]
  ------------------
  526|      0|		spng->sizeof_line =
  527|      0|			1 + VIPS_IMAGE_SIZEOF_LINE(in) / (8 / spng->bitdepth);
  ------------------
  |  |  386|      0|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  528|       |
  529|      0|		if (!(spng->line =
  ------------------
  |  Branch (529:7): [True: 0, False: 0]
  ------------------
  530|      0|					vips_malloc(NULL, VIPS_IMAGE_SIZEOF_LINE(in))))
  ------------------
  |  |  386|      0|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  531|      0|			return -1;
  532|      0|	}
  533|       |
  534|       |	/* SPNG_FMT_PNG is a special value that matches the format in ihdr
  535|       |	 */
  536|  21.6k|	fmt = SPNG_FMT_PNG;
  537|  21.6k|	encode_flags = SPNG_ENCODE_PROGRESSIVE | SPNG_ENCODE_FINALIZE;
  538|  21.6k|	if ((error = spng_encode_image(spng->ctx,
  ------------------
  |  Branch (538:6): [True: 0, False: 21.6k]
  ------------------
  539|  21.6k|			 NULL, -1, fmt, encode_flags))) {
  540|      0|		vips_error(class->nickname, "%s", spng_strerror(error));
  541|      0|		return -1;
  542|      0|	}
  543|       |
  544|  21.6k|	if (spng->interlace) {
  ------------------
  |  Branch (544:6): [True: 0, False: 21.6k]
  ------------------
  545|       |		/* Force the input into memory, if it's not there already.
  546|       |		 */
  547|      0|		if (!spng->memory) {
  ------------------
  |  Branch (547:7): [True: 0, False: 0]
  ------------------
  548|      0|			if (!(spng->memory = vips_image_copy_memory(in)))
  ------------------
  |  Branch (548:8): [True: 0, False: 0]
  ------------------
  549|      0|				return -1;
  550|      0|			in = spng->memory;
  551|      0|		}
  552|       |
  553|      0|		do {
  554|      0|			struct spng_row_info row_info;
  555|      0|			VipsPel *line;
  556|      0|			size_t sizeof_line;
  557|       |
  558|      0|			if ((error =
  ------------------
  |  Branch (558:8): [True: 0, False: 0]
  ------------------
  559|      0|						spng_get_row_info(spng->ctx, &row_info)))
  560|      0|				break;
  561|       |
  562|      0|			line = VIPS_IMAGE_ADDR(in, 0, row_info.row_num);
  ------------------
  |  |  418|      0|	((I)->data + \
  |  |  419|      0|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|      0|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|      0|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  563|      0|			sizeof_line = VIPS_IMAGE_SIZEOF_LINE(in);
  ------------------
  |  |  386|      0|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  564|       |
  565|      0|			if (spng->bitdepth < 8) {
  ------------------
  |  Branch (565:8): [True: 0, False: 0]
  ------------------
  566|      0|				vips_foreign_save_spng_pack(spng,
  567|      0|					spng->line, line, sizeof_line);
  568|      0|				line = spng->line;
  569|      0|				sizeof_line = spng->sizeof_line;
  570|      0|			}
  571|       |
  572|      0|			error = spng_encode_row(spng->ctx, line, sizeof_line);
  573|      0|		} while (!error);
  ------------------
  |  Branch (573:12): [True: 0, False: 0]
  ------------------
  574|       |
  575|      0|		if (error != SPNG_EOI) {
  ------------------
  |  Branch (575:7): [True: 0, False: 0]
  ------------------
  576|      0|			vips_error(class->nickname,
  577|      0|				"%s", spng_strerror(error));
  578|      0|			return -1;
  579|      0|		}
  580|      0|	}
  581|  21.6k|	else {
  582|  21.6k|		if (vips_sink_disc(in,
  ------------------
  |  Branch (582:7): [True: 13.2k, False: 8.38k]
  ------------------
  583|  21.6k|				vips_foreign_save_spng_write_block, spng))
  584|  13.2k|			return -1;
  585|  21.6k|	}
  586|       |
  587|  8.38k|	if (vips_target_end(spng->target))
  ------------------
  |  Branch (587:6): [True: 0, False: 8.38k]
  ------------------
  588|      0|		return -1;
  589|       |
  590|  8.38k|	return 0;
  591|  8.38k|}
spngsave.c:vips_foreign_save_spng_write_fn:
  328|   106k|{
  329|   106k|	VipsForeignSaveSpng *spng = (VipsForeignSaveSpng *) user;
  330|       |
  331|   106k|	if (vips_target_write(spng->target, data, n))
  ------------------
  |  Branch (331:6): [True: 0, False: 106k]
  ------------------
  332|      0|		return SPNG_IO_ERROR;
  333|       |
  334|   106k|	return 0;
  335|   106k|}
spngsave.c:vips_foreign_save_spng_profile:
  176|  21.6k|{
  177|  21.6k|	VipsForeignSave *save = (VipsForeignSave *) spng;
  178|       |
  179|  21.6k|	struct spng_iccp iccp;
  180|       |
  181|       |	/* A profile supplied as an argument overrides an embedded
  182|       |	 * profile.
  183|       |	 */
  184|  21.6k|	if (save->profile) {
  ------------------
  |  Branch (184:6): [True: 0, False: 21.6k]
  ------------------
  185|      0|		VipsBlob *blob;
  186|       |
  187|      0|		if (vips_profile_load(save->profile, &blob, NULL))
  ------------------
  |  Branch (187:7): [True: 0, False: 0]
  ------------------
  188|      0|			return -1;
  189|       |
  190|      0|		if (blob) {
  ------------------
  |  Branch (190:7): [True: 0, False: 0]
  ------------------
  191|      0|			size_t length;
  192|      0|			const void *data = vips_blob_get(blob, &length);
  193|      0|			char *basename = g_path_get_basename(save->profile);
  194|       |
  195|       |#ifdef DEBUG
  196|       |			printf("write_vips: attaching %zd bytes of ICC profile\n", length);
  197|       |#endif /*DEBUG*/
  198|       |
  199|      0|			g_strlcpy(iccp.profile_name, basename,
  200|      0|				sizeof(iccp.profile_name));
  201|      0|			iccp.profile_len = length;
  202|      0|			iccp.profile = (void *) data;
  203|      0|			spng_set_iccp(spng->ctx, &iccp);
  204|       |
  205|      0|			vips_area_unref((VipsArea *) blob);
  206|      0|			g_free(basename);
  207|      0|		}
  208|      0|	}
  209|  21.6k|	else if (vips_image_get_typeof(in, VIPS_META_ICC_NAME)) {
  ------------------
  |  |   78|  21.6k|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  |  Branch (209:11): [True: 19, False: 21.6k]
  ------------------
  210|     19|		const void *data;
  211|     19|		size_t length;
  212|       |
  213|     19|		if (vips_image_get_blob(in, VIPS_META_ICC_NAME, &data, &length))
  ------------------
  |  |   78|     19|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
  |  Branch (213:7): [True: 0, False: 19]
  ------------------
  214|      0|			return -1;
  215|       |
  216|       |#ifdef DEBUG
  217|       |		printf("write_vips: attaching %zd bytes of ICC profile\n",
  218|       |			length);
  219|       |#endif /*DEBUG*/
  220|       |
  221|     19|		g_strlcpy(iccp.profile_name, "icc", sizeof(iccp.profile_name));
  222|     19|		iccp.profile_len = length;
  223|     19|		iccp.profile = (void *) data;
  224|       |
  225|     19|		spng_set_iccp(spng->ctx, &iccp);
  226|     19|	}
  227|       |
  228|  21.6k|	return 0;
  229|  21.6k|}
spngsave.c:vips_foreign_save_spng_metadata:
  233|  21.6k|{
  234|  21.6k|	uint32_t n_text;
  235|  21.6k|	struct spng_text *text_chunk_array;
  236|  21.6k|	struct spng_exif exif;
  237|  21.6k|	int i;
  238|  21.6k|	GSList *p;
  239|       |
  240|  21.6k|	if (vips_image_get_typeof(in, VIPS_META_XMP_NAME)) {
  ------------------
  |  |   53|  21.6k|#define VIPS_META_XMP_NAME "xmp-data"
  ------------------
  |  Branch (240:6): [True: 20, False: 21.6k]
  ------------------
  241|     20|		const void *data;
  242|     20|		size_t length;
  243|     20|		char *str;
  244|       |
  245|     20|		if (vips_image_get_blob(in, VIPS_META_XMP_NAME, &data, &length))
  ------------------
  |  |   53|     20|#define VIPS_META_XMP_NAME "xmp-data"
  ------------------
  |  Branch (245:7): [True: 0, False: 20]
  ------------------
  246|      0|			return -1;
  247|       |
  248|       |		/* The blob form of the XMP metadata is missing the
  249|       |		 * terminating \0 bytes, we have to paste it back,
  250|       |		 * unfortunately. See pngload.
  251|       |		 */
  252|     20|		str = g_malloc(length + 1);
  253|     20|		g_strlcpy(str, data, length + 1);
  254|     20|		vips_foreign_save_spng_text(spng, "XML:com.adobe.xmp", str);
  255|     20|		g_free(str);
  256|     20|	}
  257|       |
  258|  21.6k|	if (vips_image_get_typeof(in, VIPS_META_EXIF_NAME)) {
  ------------------
  |  |   46|  21.6k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (258:6): [True: 21.6k, False: 0]
  ------------------
  259|  21.6k|		if (vips_image_get_blob(in, VIPS_META_EXIF_NAME,
  ------------------
  |  |   46|  21.6k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (259:7): [True: 0, False: 21.6k]
  ------------------
  260|  21.6k|				(const void **) &exif.data, &exif.length))
  261|      0|			return -1;
  262|       |
  263|       |		/* libspng does not want the JFIF "Exif\0\0" prefix.
  264|       |		 */
  265|  21.6k|		if (exif.length >= 6 &&
  ------------------
  |  Branch (265:7): [True: 21.6k, False: 0]
  ------------------
  266|  21.6k|			vips_isprefix("Exif", exif.data)) {
  ------------------
  |  Branch (266:4): [True: 21.6k, False: 0]
  ------------------
  267|  21.6k|			exif.data += 6;
  268|  21.6k|			exif.length -= 6;
  269|  21.6k|		}
  270|  21.6k|		spng_set_exif(spng->ctx, &exif);
  271|  21.6k|	}
  272|       |
  273|  21.6k|	if (vips_image_map(in, vips_foreign_save_spng_comment, spng))
  ------------------
  |  Branch (273:6): [True: 0, False: 21.6k]
  ------------------
  274|      0|		return -1;
  275|       |
  276|  21.6k|	n_text = g_slist_length(spng->text_chunks);
  277|  21.6k|	text_chunk_array = VIPS_ARRAY(NULL, n_text, struct spng_text);
  ------------------
  |  |   72|  21.6k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  21.6k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  21.6k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  21.6k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  21.6k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  278|  21.7k|	for (i = 0, p = spng->text_chunks; p; p = p->next, i++) {
  ------------------
  |  Branch (278:37): [True: 122, False: 21.6k]
  ------------------
  279|    122|		struct spng_text *text = (struct spng_text *) p->data;
  280|       |
  281|    122|		text_chunk_array[i] = *text;
  282|    122|	}
  283|       |#ifdef DEBUG
  284|       |	printf("attaching %u text items\n", n_text);
  285|       |#endif /*DEBUG*/
  286|  21.6k|	spng_set_text(spng->ctx, text_chunk_array, n_text);
  287|  21.6k|	VIPS_FREE(text_chunk_array);
  ------------------
  |  |   50|  21.6k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  21.6k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  21.6k|	{ \
  |  |  |  |   43|  21.6k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 44, False: 21.5k]
  |  |  |  |  ------------------
  |  |  |  |   44|     44|			(void) F((S)); \
  |  |  |  |   45|     44|			(S) = 0; \
  |  |  |  |   46|     44|		} \
  |  |  |  |   47|  21.6k|	} \
  |  |  |  |   48|  21.6k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  288|       |
  289|  21.6k|	return 0;
  290|  21.6k|}
spngsave.c:vips_foreign_save_spng_text:
  132|    122|{
  133|    122|	struct spng_text *text = VIPS_NEW(NULL, struct spng_text);
  ------------------
  |  |   70|    122|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    122|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    122|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    122|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    122|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  134|       |
  135|    122|	g_strlcpy(text->keyword, keyword, sizeof(text->keyword));
  136|       |	/* FIXME ... is this right?
  137|       |	 */
  138|    122|	text->type = SPNG_TEXT;
  139|    122|	text->length = strlen(value);
  140|    122|	text->text = g_strdup(value);
  141|       |
  142|    122|	spng->text_chunks = g_slist_prepend(spng->text_chunks, text);
  143|       |
  144|    122|	return 0;
  145|    122|}
spngsave.c:vips_foreign_save_spng_comment:
  150|   634k|{
  151|   634k|	VipsForeignSaveSpng *spng = (VipsForeignSaveSpng *) user_data;
  152|       |
  153|   634k|	if (vips_isprefix("png-comment-", field)) {
  ------------------
  |  Branch (153:6): [True: 102, False: 634k]
  ------------------
  154|    102|		const char *value;
  155|    102|		int i;
  156|    102|		char key[256];
  157|       |
  158|    102|		if (vips_image_get_string(image, field, &value))
  ------------------
  |  Branch (158:7): [True: 0, False: 102]
  ------------------
  159|      0|			return image;
  160|       |
  161|    102|		if (strlen(field) > 256 ||
  ------------------
  |  Branch (161:7): [True: 0, False: 102]
  ------------------
  162|    102|			sscanf(field, "png-comment-%d-%80s", &i, key) != 2) {
  ------------------
  |  Branch (162:4): [True: 0, False: 102]
  ------------------
  163|      0|			vips_error("vips2png",
  164|      0|				"%s", _("bad png comment key"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  165|      0|			return image;
  166|      0|		}
  167|       |
  168|    102|		vips_foreign_save_spng_text(spng, key, value);
  169|    102|	}
  170|       |
  171|   634k|	return NULL;
  172|   634k|}
spngsave.c:vips_foreign_save_spng_write_block:
  340|  8.38k|{
  341|  8.38k|	VipsForeignSaveSpng *spng = (VipsForeignSaveSpng *) user;
  342|  8.38k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(spng);
  ------------------
  |  |  441|  8.38k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  8.38k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  8.38k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  343|       |
  344|  8.38k|	int y;
  345|  8.38k|	int error;
  346|       |
  347|       |	/* The area to write is always a set of complete scanlines.
  348|       |	 */
  349|  8.38k|	g_assert(area->left == 0);
  ------------------
  |  |  166|  8.38k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  8.38k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  350|  8.38k|	g_assert(area->width == region->im->Xsize);
  ------------------
  |  |  166|  8.38k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  8.38k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  351|  8.38k|	g_assert(area->top + area->height <= region->im->Ysize);
  ------------------
  |  |  166|  8.38k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  8.38k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  352|       |
  353|   449k|	for (y = 0; y < area->height; y++) {
  ------------------
  |  Branch (353:14): [True: 449k, False: 0]
  ------------------
  354|   449k|		VipsPel *line;
  355|   449k|		size_t sizeof_line;
  356|       |
  357|   449k|		line = VIPS_REGION_ADDR(region, 0, area->top + y);
  ------------------
  |  |  227|   449k|	((R)->data + \
  |  |  228|   449k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   449k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   449k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   449k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   449k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   449k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  358|   449k|		sizeof_line = VIPS_REGION_SIZEOF_LINE(region);
  ------------------
  |  |  203|   449k|	((size_t) ((R)->valid.width * VIPS_REGION_SIZEOF_PEL(R)))
  |  |  ------------------
  |  |  |  |  201|   449k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   449k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   449k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  359|       |
  360|   449k|		if (spng->bitdepth < 8) {
  ------------------
  |  Branch (360:7): [True: 0, False: 449k]
  ------------------
  361|      0|			vips_foreign_save_spng_pack(spng,
  362|      0|				spng->line, line, sizeof_line);
  363|      0|			line = spng->line;
  364|      0|			sizeof_line = spng->sizeof_line;
  365|      0|		}
  366|       |
  367|   449k|		if ((error = spng_encode_row(spng->ctx, line, sizeof_line)))
  ------------------
  |  Branch (367:7): [True: 8.38k, False: 440k]
  ------------------
  368|  8.38k|			break;
  369|   449k|	}
  370|       |
  371|       |	/* You can get SPNG_EOI for the final scanline.
  372|       |	 */
  373|  8.38k|	if (error &&
  ------------------
  |  Branch (373:6): [True: 8.38k, False: 0]
  ------------------
  374|  8.38k|		error != SPNG_EOI) {
  ------------------
  |  Branch (374:3): [True: 0, False: 8.38k]
  ------------------
  375|      0|		vips_error(class->nickname, "%s", spng_strerror(error));
  376|      0|		return -1;
  377|      0|	}
  378|       |
  379|  8.38k|	return 0;
  380|  8.38k|}
spngsave.c:vips_foreign_save_spng_init:
  756|  21.6k|{
  757|  21.6k|	spng->compression = 6;
  758|  21.6k|	spng->filter = VIPS_FOREIGN_PNG_FILTER_NONE;
  759|  21.6k|	spng->Q = 100;
  760|  21.6k|	spng->dither = 1.0;
  761|  21.6k|	spng->effort = 7;
  762|  21.6k|}
spngsave.c:vips_foreign_save_spng_target_class_init:
  794|      1|{
  795|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  796|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  797|       |
  798|      1|	gobject_class->set_property = vips_object_set_property;
  799|      1|	gobject_class->get_property = vips_object_get_property;
  800|       |
  801|      1|	object_class->nickname = "pngsave_target";
  802|      1|	object_class->description = _("save image to target as PNG");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  803|      1|	object_class->build = vips_foreign_save_spng_target_build;
  804|       |
  805|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  806|      1|		_("Target"),
  807|      1|		_("Target to save to"),
  808|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  809|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpngTarget, target),
  810|      1|		VIPS_TYPE_TARGET);
  811|      1|}
spngsave.c:vips_foreign_save_spng_target_build:
  777|  21.6k|{
  778|  21.6k|	VipsForeignSaveSpng *spng = (VipsForeignSaveSpng *) object;
  779|  21.6k|	VipsForeignSaveSpngTarget *target =
  780|  21.6k|		(VipsForeignSaveSpngTarget *) object;
  781|       |
  782|  21.6k|	spng->target = target->target;
  783|  21.6k|	g_object_ref(spng->target);
  784|       |
  785|  21.6k|	if (VIPS_OBJECT_CLASS(vips_foreign_save_spng_target_parent_class)
  ------------------
  |  |  435|  21.6k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  21.6k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  21.6k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (785:6): [True: 13.2k, False: 8.38k]
  ------------------
  786|  21.6k|			->build(object))
  787|  13.2k|		return -1;
  788|       |
  789|  8.38k|	return 0;
  790|  21.6k|}
spngsave.c:vips_foreign_save_spng_target_init:
  815|  21.6k|{
  816|  21.6k|}
spngsave.c:vips_foreign_save_spng_file_class_init:
  847|      1|{
  848|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  849|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  850|       |
  851|      1|	gobject_class->set_property = vips_object_set_property;
  852|      1|	gobject_class->get_property = vips_object_get_property;
  853|       |
  854|      1|	object_class->nickname = "pngsave";
  855|      1|	object_class->description = _("save image to file as PNG");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  856|      1|	object_class->build = vips_foreign_save_spng_file_build;
  857|       |
  858|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  859|      1|		_("Filename"),
  860|      1|		_("Filename to save to"),
  861|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  862|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpngFile, filename),
  863|      1|		NULL);
  864|      1|}
spngsave.c:vips_foreign_save_spng_buffer_class_init:
  907|      1|{
  908|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  909|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  910|       |
  911|      1|	gobject_class->set_property = vips_object_set_property;
  912|      1|	gobject_class->get_property = vips_object_get_property;
  913|       |
  914|      1|	object_class->nickname = "pngsave_buffer";
  915|      1|	object_class->description = _("save image to buffer as PNG");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  916|      1|	object_class->build = vips_foreign_save_spng_buffer_build;
  917|       |
  918|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  919|      1|		_("Buffer"),
  920|      1|		_("Buffer to save to"),
  921|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  922|      1|		G_STRUCT_OFFSET(VipsForeignSaveSpngBuffer, buf),
  923|      1|		VIPS_TYPE_BLOB);
  924|      1|}

vips__tiff_init:
   64|  50.0k|vips__tiff_init(void) {}
vips__tiff_openin_source:
  168|  49.9k|{
  169|  49.9k|	TIFF *tiff;
  170|       |
  171|       |#ifdef DEBUG
  172|       |	printf("vips__tiff_openin_source:\n");
  173|       |#endif /*DEBUG*/
  174|       |
  175|  49.9k|	if (vips_source_rewind(source))
  ------------------
  |  Branch (175:6): [True: 0, False: 49.9k]
  ------------------
  176|      0|		return NULL;
  177|       |
  178|       |	/* Disable memory mapped input -- it chews up VM and the performance
  179|       |	 * gain is very small.
  180|       |	 *
  181|       |	 * C enables strip chopping: very large uncompressed strips are
  182|       |	 * chopped into c. 8kb chunks. This can reduce peak memory use for
  183|       |	 * this type of file.
  184|       |	 */
  185|       |
  186|  49.9k|#ifdef HAVE_TIFF_OPEN_OPTIONS
  187|  49.9k|	TIFFOpenOptions *opts = TIFFOpenOptionsAlloc();
  188|  49.9k|	TIFFOpenOptionsSetErrorHandlerExtR(opts, error_fn, user_data);
  189|  49.9k|	TIFFOpenOptionsSetWarningHandlerExtR(opts, warning_fn, user_data);
  190|  49.9k|#ifdef HAVE_TIFF_OPEN_OPTIONS_SET_MAX_CUMULATED_MEM_ALLOC
  191|  49.9k|	if (!unlimited) {
  ------------------
  |  Branch (191:6): [True: 49.9k, False: 0]
  ------------------
  192|  49.9k|		TIFFOpenOptionsSetMaxCumulatedMemAlloc(opts, 20 * 1024 * 1024);
  193|  49.9k|	}
  194|  49.9k|#endif /*HAVE_TIFF_OPEN_OPTIONS_SET_MAX_CUMULATED_MEM_ALLOC*/
  195|  49.9k|	if (!(tiff = TIFFClientOpenExt("source input", "rmC",
  ------------------
  |  Branch (195:6): [True: 15.8k, False: 34.1k]
  ------------------
  196|  49.9k|			  (thandle_t) source,
  197|  49.9k|			  openin_source_read,
  198|  49.9k|			  openin_source_write,
  199|  49.9k|			  openin_source_seek,
  200|  49.9k|			  openin_source_close,
  201|  49.9k|			  openin_source_length,
  202|  49.9k|			  openin_source_map,
  203|  49.9k|			  openin_source_unmap,
  204|  49.9k|			  opts))) {
  205|  15.8k|	    TIFFOpenOptionsFree(opts);
  206|  15.8k|		vips_error("vips__tiff_openin_source", "%s",
  207|  15.8k|			_("unable to open source for input"));
  ------------------
  |  |   30|  15.8k|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|  15.8k|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  208|  15.8k|		return NULL;
  209|  15.8k|	}
  210|  34.1k|	TIFFOpenOptionsFree(opts);
  211|       |#else
  212|       |	if (!(tiff = TIFFClientOpen("source input", "rmC",
  213|       |			  (thandle_t) source,
  214|       |			  openin_source_read,
  215|       |			  openin_source_write,
  216|       |			  openin_source_seek,
  217|       |			  openin_source_close,
  218|       |			  openin_source_length,
  219|       |			  openin_source_map,
  220|       |			  openin_source_unmap))) {
  221|       |		vips_error("vips__tiff_openin_source", "%s",
  222|       |			_("unable to open source for input"));
  223|       |		return NULL;
  224|       |	}
  225|       |#endif /*HAVE_TIFF_OPEN_OPTIONS*/
  226|       |
  227|       |	/* Unreffed on close(), see above.
  228|       |	 */
  229|  34.1k|	g_object_ref(source);
  230|       |
  231|  34.1k|	return tiff;
  232|  49.9k|}
tiff.c:openin_source_read:
  104|   564k|{
  105|   564k|	VipsSource *source = VIPS_SOURCE(st);
  ------------------
  |  |  106|   564k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   564k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   564k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|   564k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  106|       |
  107|   564k|	return vips_source_read(source, data, size);
  108|   564k|}
tiff.c:openin_source_seek:
  120|   465k|{
  121|   465k|	VipsSource *source = VIPS_SOURCE(st);
  ------------------
  |  |  106|   465k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   465k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   465k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|   465k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  122|       |
  123|   465k|	return (toff_t) vips_source_seek(source, offset, whence);
  124|   465k|}
tiff.c:openin_source_close:
  128|  34.1k|{
  129|  34.1k|	VipsSource *source = VIPS_SOURCE(st);
  ------------------
  |  |  106|  34.1k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  34.1k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  34.1k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|  34.1k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  130|       |
  131|  34.1k|	VIPS_UNREF(source);
  ------------------
  |  |   57|  34.1k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  34.1k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  34.1k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  34.1k|	{ \
  |  |  |  |   43|  34.1k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 34.1k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  34.1k|			(void) F((S)); \
  |  |  |  |   45|  34.1k|			(S) = 0; \
  |  |  |  |   46|  34.1k|		} \
  |  |  |  |   47|  34.1k|	} \
  |  |  |  |   48|  34.1k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  34.1k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|       |
  133|  34.1k|	return 0;
  134|  34.1k|}
tiff.c:openin_source_length:
  138|  49.9k|{
  139|  49.9k|	VipsSource *source = VIPS_SOURCE(st);
  ------------------
  |  |  106|  49.9k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  49.9k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  49.9k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|  49.9k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  140|       |
  141|       |	/* libtiff will use this to get file size if tags like StripByteCounts
  142|       |	 * are missing.
  143|       |	 *
  144|       |	 * toff_t is usually uint64, with -1 cast to uint64 to indicate error.
  145|       |	 */
  146|  49.9k|	return (toff_t) vips_source_length(source);
  147|  49.9k|}

vips__istiff_source:
 3453|  24.9k|{
 3454|  24.9k|	return vips__testtiff_source(source, NULL);
 3455|  24.9k|}
vips__istifftiled_source:
 3459|  9.14k|{
 3460|  9.14k|	return vips__testtiff_source(source, TIFFIsTiled);
 3461|  9.14k|}
vips__tiff_read_header_source:
 3467|  9.14k|{
 3468|  9.14k|	Rtiff *rtiff;
 3469|       |
 3470|  9.14k|	vips__tiff_init();
 3471|       |
 3472|  9.14k|	if (!(rtiff = rtiff_new(source, out,
  ------------------
  |  Branch (3472:6): [True: 0, False: 9.14k]
  ------------------
 3473|  9.14k|			  page, n, autorotate, subifd, fail_on, unlimited)) ||
 3474|  9.14k|		rtiff_header_read_all(rtiff))
  ------------------
  |  Branch (3474:3): [True: 1.89k, False: 7.25k]
  ------------------
 3475|  1.89k|		return -1;
 3476|       |
 3477|  7.25k|	if (rtiff_set_header(rtiff, out))
  ------------------
  |  Branch (3477:6): [True: 159, False: 7.09k]
  ------------------
 3478|    159|		return -1;
 3479|       |
 3480|  7.09k|	if (rtiff->autorotate &&
  ------------------
  |  Branch (3480:6): [True: 0, False: 7.09k]
  ------------------
 3481|  7.09k|		vips_image_get_orientation_swap(out)) {
  ------------------
  |  Branch (3481:3): [True: 0, False: 0]
  ------------------
 3482|      0|		VIPS_SWAP(int, out->Xsize, out->Ysize);
  ------------------
  |  |  114|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  115|      0|	{ \
  |  |  116|      0|		TYPE t = (A); \
  |  |  117|      0|		(A) = (B); \
  |  |  118|      0|		(B) = t; \
  |  |  119|      0|	} \
  |  |  120|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3483|      0|		vips_autorot_remove_angle(out);
 3484|      0|	}
 3485|       |
 3486|       |	/* We never call vips_source_decode() since we need to be able to
 3487|       |	 * seek() the whole way through the file. Just minimise instead,
 3488|       |	 */
 3489|  7.09k|	vips_source_minimise(source);
 3490|       |
 3491|  7.09k|	return 0;
 3492|  7.25k|}
vips__tiff_read_source:
 3498|  6.73k|{
 3499|  6.73k|	Rtiff *rtiff;
 3500|       |
 3501|       |#ifdef DEBUG
 3502|       |	printf("tiff2vips: libtiff version is \"%s\"\n", TIFFGetVersion());
 3503|       |#endif /*DEBUG*/
 3504|       |
 3505|  6.73k|	vips__tiff_init();
 3506|       |
 3507|  6.73k|	if (!(rtiff = rtiff_new(source, out,
  ------------------
  |  Branch (3507:6): [True: 0, False: 6.73k]
  ------------------
 3508|  6.73k|			  page, n, autorotate, subifd, fail_on, unlimited)) ||
 3509|  6.73k|		rtiff_header_read_all(rtiff))
  ------------------
  |  Branch (3509:3): [True: 0, False: 6.73k]
  ------------------
 3510|      0|		return -1;
 3511|       |
 3512|  6.73k|	if (rtiff->header.tiled) {
  ------------------
  |  Branch (3512:6): [True: 1.41k, False: 5.31k]
  ------------------
 3513|  1.41k|		if (rtiff_read_tilewise(rtiff, out))
  ------------------
  |  Branch (3513:7): [True: 6, False: 1.40k]
  ------------------
 3514|      6|			return -1;
 3515|  1.41k|	}
 3516|  5.31k|	else {
 3517|  5.31k|		if (rtiff_read_stripwise(rtiff, out))
  ------------------
  |  Branch (3517:7): [True: 1.10k, False: 4.21k]
  ------------------
 3518|  1.10k|			return -1;
 3519|  5.31k|	}
 3520|       |
 3521|       |	/* We never call vips_source_decode() since we need to be able to
 3522|       |	 * seek() the whole way through the file. Just minimise instead,
 3523|       |	 */
 3524|  5.62k|	vips_source_minimise(source);
 3525|       |
 3526|  5.62k|	return 0;
 3527|  6.73k|}
tiff2vips.c:vips__testtiff_source:
 3432|  34.1k|{
 3433|  34.1k|	TIFF *tif;
 3434|  34.1k|	gboolean property;
 3435|       |
 3436|  34.1k|	vips__tiff_init();
 3437|       |
 3438|  34.1k|	if (!(tif = vips__tiff_openin_source(source, rtiff_handler_error,
  ------------------
  |  Branch (3438:6): [True: 15.8k, False: 18.2k]
  ------------------
 3439|  34.1k|		rtiff_handler_warning, NULL, FALSE))) {
  ------------------
  |  |  206|  34.1k|#define FALSE   0               /* values of boolean */
  ------------------
 3440|  15.8k|		vips_error_clear();
 3441|  15.8k|		return FALSE;
  ------------------
  |  |  206|  15.8k|#define FALSE   0               /* values of boolean */
  ------------------
 3442|  15.8k|	}
 3443|       |
 3444|  18.2k|	property = fn ? fn(tif) : TRUE;
  ------------------
  |  |  209|  27.4k|#define TRUE    1
  ------------------
  |  Branch (3444:13): [True: 9.14k, False: 9.14k]
  ------------------
 3445|       |
 3446|  18.2k|	TIFFClose(tif);
 3447|       |
 3448|  18.2k|	return property;
 3449|  34.1k|}
tiff2vips.c:rtiff_handler_error:
  624|  1.46M|{
  625|  1.46M|	vips_verror("tiff2vips", fmt, ap);
  626|  1.46M|	return 1;
  627|  1.46M|}
tiff2vips.c:rtiff_handler_warning:
  632|   657k|{
  633|   657k|	if (user_data) {
  ------------------
  |  Branch (633:6): [True: 489k, False: 167k]
  ------------------
  634|   489k|		Rtiff *rtiff = (Rtiff*) user_data;
  635|   489k|		if (rtiff->fail_on >= VIPS_FAIL_ON_WARNING) {
  ------------------
  |  Branch (635:7): [True: 0, False: 489k]
  ------------------
  636|      0|			rtiff->failed = TRUE;
  ------------------
  |  |  209|      0|#define TRUE    1
  ------------------
  637|      0|		}
  638|   489k|	}
  639|   657k|	g_logv("tiff2vips", G_LOG_LEVEL_WARNING, fmt, ap);
  640|   657k|	return 1;
  641|   657k|}
tiff2vips.c:rtiff_new:
  647|  15.8k|{
  648|  15.8k|	Rtiff *rtiff;
  649|       |
  650|  15.8k|	if (!(rtiff = VIPS_NEW(out, Rtiff)))
  ------------------
  |  |   70|  15.8k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  15.8k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  15.8k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  15.8k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  15.8k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (650:6): [True: 0, False: 15.8k]
  ------------------
  651|      0|		return NULL;
  652|       |
  653|  15.8k|	g_object_ref(source);
  654|  15.8k|	rtiff->source = source;
  655|  15.8k|	rtiff->out = out;
  656|  15.8k|	rtiff->page = page;
  657|  15.8k|	rtiff->n = n;
  658|  15.8k|	rtiff->autorotate = autorotate;
  659|  15.8k|	rtiff->subifd = subifd;
  660|  15.8k|	rtiff->fail_on = fail_on;
  661|  15.8k|	g_rec_mutex_init(&rtiff->lock);
  662|  15.8k|	rtiff->tiff = NULL;
  663|  15.8k|	rtiff->n_pages = 0;
  664|  15.8k|	rtiff->current_page = -1;
  665|  15.8k|	rtiff->sfn = NULL;
  666|  15.8k|	rtiff->client = NULL;
  667|  15.8k|	rtiff->memcpy = FALSE;
  ------------------
  |  |  206|  15.8k|#define FALSE   0               /* values of boolean */
  ------------------
  668|  15.8k|	rtiff->plane_buf = NULL;
  669|  15.8k|	rtiff->contig_buf = NULL;
  670|  15.8k|	rtiff->y_pos = 0;
  671|  15.8k|	rtiff->failed = FALSE;
  ------------------
  |  |  206|  15.8k|#define FALSE   0               /* values of boolean */
  ------------------
  672|       |
  673|  15.8k|	g_signal_connect(out, "close",
  ------------------
  |  |  491|  15.8k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  674|  15.8k|		G_CALLBACK(rtiff_close_cb), rtiff);
  675|  15.8k|	g_signal_connect(out, "minimise",
  ------------------
  |  |  491|  15.8k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  676|  15.8k|		G_CALLBACK(rtiff_minimise_cb), rtiff);
  677|       |
  678|  15.8k|	if (rtiff->page < 0 ||
  ------------------
  |  Branch (678:6): [True: 0, False: 15.8k]
  ------------------
  679|  15.8k|		rtiff->page > 1000000) {
  ------------------
  |  Branch (679:3): [True: 0, False: 15.8k]
  ------------------
  680|      0|		vips_error("tiff2vips", _("bad page number %d"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  681|      0|			rtiff->page);
  682|      0|		return NULL;
  683|      0|	}
  684|       |
  685|       |	/* We allow n == -1, meaning all pages. It gets swapped for a real n
  686|       |	 * value when we open the TIFF.
  687|       |	 */
  688|  15.8k|	if (rtiff->n != -1 &&
  ------------------
  |  Branch (688:6): [True: 15.8k, False: 0]
  ------------------
  689|  15.8k|		(rtiff->n < 1 || rtiff->n > 1000000)) {
  ------------------
  |  Branch (689:4): [True: 0, False: 15.8k]
  |  Branch (689:20): [True: 0, False: 15.8k]
  ------------------
  690|      0|		vips_error("tiff2vips", _("bad number of pages %d"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  691|      0|			rtiff->n);
  692|      0|		return NULL;
  693|      0|	}
  694|       |
  695|  15.8k|	if (!(rtiff->tiff = vips__tiff_openin_source(source,
  ------------------
  |  Branch (695:6): [True: 0, False: 15.8k]
  ------------------
  696|  15.8k|		rtiff_handler_error, rtiff_handler_warning, rtiff, unlimited)))
  697|      0|		return NULL;
  698|       |
  699|  15.8k|	return rtiff;
  700|  15.8k|}
tiff2vips.c:rtiff_close_cb:
  606|  15.8k|{
  607|  15.8k|	rtiff_free(rtiff);
  608|  15.8k|}
tiff2vips.c:rtiff_free:
  598|  15.8k|{
  599|  15.8k|	VIPS_FREEF(TIFFClose, rtiff->tiff);
  ------------------
  |  |   41|  15.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  15.8k|	{ \
  |  |   43|  15.8k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 15.8k, False: 0]
  |  |  ------------------
  |  |   44|  15.8k|			(void) F((S)); \
  |  |   45|  15.8k|			(S) = 0; \
  |  |   46|  15.8k|		} \
  |  |   47|  15.8k|	} \
  |  |   48|  15.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  600|  15.8k|	g_rec_mutex_clear(&rtiff->lock);
  601|  15.8k|	VIPS_UNREF(rtiff->source);
  ------------------
  |  |   57|  15.8k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  15.8k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  15.8k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  15.8k|	{ \
  |  |  |  |   43|  15.8k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 15.8k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  15.8k|			(void) F((S)); \
  |  |  |  |   45|  15.8k|			(S) = 0; \
  |  |  |  |   46|  15.8k|		} \
  |  |  |  |   47|  15.8k|	} \
  |  |  |  |   48|  15.8k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  15.8k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  602|  15.8k|}
tiff2vips.c:rtiff_minimise_cb:
  612|  35.3k|{
  613|       |	/* We must not minimised tiled images. These can be read from many
  614|       |	 * threads, and this minimise handler is not inside the lock.
  615|       |	 */
  616|  35.3k|	if (!rtiff->header.tiled &&
  ------------------
  |  Branch (616:6): [True: 29.6k, False: 5.64k]
  ------------------
  617|  35.3k|		rtiff->source)
  ------------------
  |  Branch (617:3): [True: 29.6k, False: 0]
  ------------------
  618|  29.6k|		vips_source_minimise(rtiff->source);
  619|  35.3k|}
tiff2vips.c:rtiff_header_read_all:
 3375|  15.8k|{
 3376|       |#ifdef DEBUG
 3377|       |	printf("rtiff_header_read_all: reading header for page %d ...\n",
 3378|       |		rtiff->page);
 3379|       |#endif /*DEBUG*/
 3380|       |
 3381|       |	/* -1 means "to the end".
 3382|       |	 *
 3383|       |	 * We must count pages before selecting and reading the header of the
 3384|       |	 * first page, since scanning a TIFF can change the value of libtiff's
 3385|       |	 * internal header fields in strange ways, especially if the TIFF is
 3386|       |	 * corrupt.
 3387|       |	 */
 3388|  15.8k|	rtiff->n_pages = rtiff_n_pages(rtiff);
 3389|       |
 3390|  15.8k|	if (rtiff_set_page(rtiff, rtiff->page) ||
  ------------------
  |  Branch (3390:6): [True: 8, False: 15.8k]
  ------------------
 3391|  15.8k|		rtiff_header_read(rtiff, &rtiff->header))
  ------------------
  |  Branch (3391:3): [True: 1.88k, False: 13.9k]
  ------------------
 3392|  1.89k|		return -1;
 3393|       |
 3394|       |	/* If we're to read many pages, verify that they are all identical.
 3395|       |	 */
 3396|  13.9k|	if (rtiff->n == -1)
  ------------------
  |  Branch (3396:6): [True: 0, False: 13.9k]
  ------------------
 3397|      0|		rtiff->n = rtiff->n_pages - rtiff->page;
 3398|  13.9k|	if (rtiff->n > 1) {
  ------------------
  |  Branch (3398:6): [True: 0, False: 13.9k]
  ------------------
 3399|      0|		int i;
 3400|       |
 3401|      0|		for (i = 1; i < rtiff->n; i++) {
  ------------------
  |  Branch (3401:15): [True: 0, False: 0]
  ------------------
 3402|      0|			RtiffHeader header;
 3403|       |
 3404|       |#ifdef DEBUG
 3405|       |			printf("rtiff_header_read_all: verifying header for page %d ...\n",
 3406|       |				rtiff->page + i);
 3407|       |#endif /*DEBUG*/
 3408|       |
 3409|      0|			if (rtiff_set_page(rtiff, rtiff->page + i) ||
  ------------------
  |  Branch (3409:8): [True: 0, False: 0]
  ------------------
 3410|      0|				rtiff_header_read(rtiff, &header))
  ------------------
  |  Branch (3410:5): [True: 0, False: 0]
  ------------------
 3411|      0|				return -1;
 3412|       |
 3413|      0|			if (!rtiff_header_equal(&rtiff->header, &header)) {
  ------------------
  |  Branch (3413:8): [True: 0, False: 0]
  ------------------
 3414|      0|				vips_error("tiff2vips", _("page %d differs from page %d"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3415|      0|					rtiff->page + i, rtiff->page);
 3416|      0|				return -1;
 3417|      0|			}
 3418|      0|		}
 3419|       |
 3420|       |		/* Make sure the next set_page() will reread the directory.
 3421|       |		 */
 3422|      0|		rtiff->current_page = -1;
 3423|      0|	}
 3424|       |
 3425|  13.9k|	return 0;
 3426|  13.9k|}
tiff2vips.c:rtiff_n_pages:
  844|  15.8k|{
  845|  15.8k|	int n;
  846|       |
  847|  15.8k|	(void) TIFFSetDirectory(rtiff->tiff, 0);
  848|       |
  849|  17.6k|	for (n = 1; TIFFReadDirectory(rtiff->tiff); n++)
  ------------------
  |  Branch (849:14): [True: 1.78k, False: 15.8k]
  ------------------
  850|  1.78k|		;
  851|       |
  852|       |	/* Make sure the nest set_page() will set the directory.
  853|       |	 */
  854|  15.8k|	rtiff->current_page = -1;
  855|       |
  856|       |#ifdef DEBUG
  857|       |	printf("rtiff_n_pages: found %d pages\n", n);
  858|       |#endif /*DEBUG*/
  859|       |
  860|  15.8k|	return n;
  861|  15.8k|}
tiff2vips.c:rtiff_set_page:
  794|  78.3k|{
  795|  78.3k|	if (rtiff->current_page != page) {
  ------------------
  |  Branch (795:6): [True: 15.8k, False: 62.4k]
  ------------------
  796|       |#ifdef DEBUG
  797|       |		printf("rtiff_set_page: selecting page %d, subifd %d\n",
  798|       |			page, rtiff->subifd);
  799|       |#endif /*DEBUG*/
  800|       |
  801|  15.8k|		if (!TIFFSetDirectory(rtiff->tiff, page)) {
  ------------------
  |  Branch (801:7): [True: 8, False: 15.8k]
  ------------------
  802|      8|			vips_error("tiff2vips", _("TIFF does not contain page %d"), page);
  ------------------
  |  |   30|      8|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      8|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  803|      8|			return -1;
  804|      8|		}
  805|       |
  806|  15.8k|		if (rtiff->subifd >= 0) {
  ------------------
  |  Branch (806:7): [True: 0, False: 15.8k]
  ------------------
  807|      0|			guint16 subifd_count;
  808|      0|			toff_t *subifd_offsets;
  809|       |
  810|      0|			if (!TIFFGetField(rtiff->tiff, TIFFTAG_SUBIFD,
  ------------------
  |  |  321|      0|#define TIFFTAG_SUBIFD 330                 /* subimage descriptors */
  ------------------
  |  Branch (810:8): [True: 0, False: 0]
  ------------------
  811|      0|					&subifd_count, &subifd_offsets)) {
  812|      0|				vips_error("tiff2vips", "%s", _("no SUBIFD tag"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  813|      0|				return -1;
  814|      0|			}
  815|       |
  816|      0|			if (rtiff->subifd >= subifd_count) {
  ------------------
  |  Branch (816:8): [True: 0, False: 0]
  ------------------
  817|      0|				vips_error("tiff2vips",
  818|      0|					_("subifd %d out of range, only 0-%d available"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  819|      0|					rtiff->subifd,
  820|      0|					subifd_count - 1);
  821|      0|				return -1;
  822|      0|			}
  823|       |
  824|      0|			if (!TIFFSetSubDirectory(rtiff->tiff,
  ------------------
  |  Branch (824:8): [True: 0, False: 0]
  ------------------
  825|      0|					subifd_offsets[rtiff->subifd])) {
  826|      0|				vips_error("tiff2vips", "%s", _("subdirectory unreadable"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  827|      0|				return -1;
  828|      0|			}
  829|      0|		}
  830|       |
  831|  15.8k|		rtiff->current_page = page;
  832|       |
  833|       |		/* These can get unset when we change directories. Make sure
  834|       |		 * they are set again.
  835|       |		 */
  836|  15.8k|		rtiff_set_decode_format(rtiff);
  837|  15.8k|	}
  838|       |
  839|  78.3k|	return 0;
  840|  78.3k|}
tiff2vips.c:rtiff_set_decode_format:
  778|  44.5k|{
  779|       |	/* Ask for YCbCr->RGB for jpg data.
  780|       |	 */
  781|  44.5k|	if (rtiff->header.compression == COMPRESSION_JPEG ||
  ------------------
  |  |  190|  89.0k|#define COMPRESSION_JPEG 7            /* %JPEG DCT compression */
  ------------------
  |  Branch (781:6): [True: 2.89k, False: 41.6k]
  ------------------
  782|  44.5k|		rtiff->header.compression == COMPRESSION_OJPEG)
  ------------------
  |  |  189|  41.6k|#define COMPRESSION_OJPEG 6           /* !6.0 JPEG */
  ------------------
  |  Branch (782:3): [True: 4.36k, False: 37.2k]
  ------------------
  783|  7.26k|		TIFFSetField(rtiff->tiff, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RGB);
  ------------------
  |  |  706|  7.26k|#define TIFFTAG_JPEGCOLORMODE 65538  /* Auto RGB<=>YCbCr convert? */
  ------------------
              		TIFFSetField(rtiff->tiff, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RGB);
  ------------------
  |  |  708|  7.26k|#define JPEGCOLORMODE_RGB 0x0001     /* do auto conversion */
  ------------------
  784|       |
  785|       |	/* Ask for SGI LOGLUV as 3xfloat.
  786|       |	 */
  787|  44.5k|	if (rtiff->header.photometric_interpretation ==
  ------------------
  |  Branch (787:6): [True: 666, False: 43.8k]
  ------------------
  788|  44.5k|		PHOTOMETRIC_LOGLUV)
  ------------------
  |  |  233|  44.5k|#define PHOTOMETRIC_LOGLUV 32845           /* CIE Log2(L) (u',v') */
  ------------------
  789|    666|		TIFFSetField(rtiff->tiff, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_FLOAT);
  ------------------
  |  |  743|    666|#define TIFFTAG_SGILOGDATAFMT 65560    /* SGILog user data format */
  ------------------
              		TIFFSetField(rtiff->tiff, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_FLOAT);
  ------------------
  |  |  744|    666|#define SGILOGDATAFMT_FLOAT 0          /* IEEE float samples */
  ------------------
  790|  44.5k|}
tiff2vips.c:rtiff_header_read:
 2989|  15.8k|{
 2990|  15.8k|	int i;
 2991|  15.8k|	guint16 extra_samples_count;
 2992|  15.8k|	guint16 *extra_samples_types;
 2993|  15.8k|	guint16 subifd_count;
 2994|  15.8k|	toff_t *subifd_offsets;
 2995|  15.8k|	char *image_description;
 2996|  15.8k|	guint32 max_tile_dimension;
 2997|  15.8k|	gboolean can_read_as_rgba;
 2998|       |
 2999|  15.8k|	if (!tfget32(rtiff->tiff, TIFFTAG_IMAGEWIDTH,
  ------------------
  |  |  178|  15.8k|#define TIFFTAG_IMAGEWIDTH 256        /* image width in pixels */
  ------------------
  |  Branch (2999:6): [True: 0, False: 15.8k]
  ------------------
 3000|  15.8k|			&header->width) ||
 3001|  15.8k|		!tfget32(rtiff->tiff, TIFFTAG_IMAGELENGTH,
  ------------------
  |  |  179|  15.8k|#define TIFFTAG_IMAGELENGTH 257       /* image height in pixels */
  ------------------
  |  Branch (3001:3): [True: 0, False: 15.8k]
  ------------------
 3002|  15.8k|			&header->height) ||
 3003|  15.8k|		!tfget16(rtiff->tiff, TIFFTAG_SAMPLESPERPIXEL,
  ------------------
  |  |  257|  15.8k|#define TIFFTAG_SAMPLESPERPIXEL 277        /* samples per pixel */
  ------------------
  |  Branch (3003:3): [True: 0, False: 15.8k]
  ------------------
 3004|  15.8k|			&header->samples_per_pixel) ||
 3005|  15.8k|		!tfget16(rtiff->tiff, TIFFTAG_BITSPERSAMPLE,
  ------------------
  |  |  180|  15.8k|#define TIFFTAG_BITSPERSAMPLE 258     /* bits per channel (sample) */
  ------------------
  |  Branch (3005:3): [True: 0, False: 15.8k]
  ------------------
 3006|  15.8k|			&header->bits_per_sample) ||
 3007|  15.8k|		!tfget16(rtiff->tiff, TIFFTAG_PHOTOMETRIC,
  ------------------
  |  |  220|  15.8k|#define TIFFTAG_PHOTOMETRIC 262            /* photometric interpretation */
  ------------------
  |  Branch (3007:3): [True: 1.18k, False: 14.6k]
  ------------------
 3008|  15.8k|			&header->photometric_interpretation) ||
 3009|  15.8k|		!tfget16(rtiff->tiff, TIFFTAG_INKSET,
  ------------------
  |  |  322|  14.6k|#define TIFFTAG_INKSET 332                 /* !inks in separated image */
  ------------------
  |  Branch (3009:3): [True: 0, False: 14.6k]
  ------------------
 3010|  14.6k|			&header->inkset))
 3011|  1.18k|		return -1;
 3012|       |
 3013|  14.6k|	header->read_as_rgba = FALSE;
  ------------------
  |  |  206|  14.6k|#define FALSE   0               /* values of boolean */
  ------------------
 3014|       |
 3015|       |	/* TIFF images which can be read by TIFFRGBAImage or TIFFReadRGBATile.
 3016|       |	 */
 3017|  14.6k|	can_read_as_rgba =
 3018|  14.6k|		(header->samples_per_pixel == 1 ||
  ------------------
  |  Branch (3018:4): [True: 7.55k, False: 7.13k]
  ------------------
 3019|  14.6k|			header->samples_per_pixel == 3 ||
  ------------------
  |  Branch (3019:4): [True: 5.06k, False: 2.07k]
  ------------------
 3020|  14.6k|			header->samples_per_pixel == 4) &&
  ------------------
  |  Branch (3020:4): [True: 1.65k, False: 420]
  ------------------
 3021|  14.6k|		(header->bits_per_sample == 1 ||
  ------------------
  |  Branch (3021:4): [True: 4.92k, False: 9.34k]
  ------------------
 3022|  14.2k|			header->bits_per_sample == 2 ||
  ------------------
  |  Branch (3022:4): [True: 384, False: 8.95k]
  ------------------
 3023|  14.2k|			header->bits_per_sample == 4 ||
  ------------------
  |  Branch (3023:4): [True: 349, False: 8.61k]
  ------------------
 3024|  14.2k|			header->bits_per_sample == 8 ||
  ------------------
  |  Branch (3024:4): [True: 5.20k, False: 3.40k]
  ------------------
 3025|  14.2k|			header->bits_per_sample == 16);
  ------------------
  |  Branch (3025:4): [True: 1.95k, False: 1.44k]
  ------------------
 3026|       |
 3027|  14.6k|	TIFFGetFieldDefaulted(rtiff->tiff,
 3028|  14.6k|		TIFFTAG_COMPRESSION, &header->compression);
  ------------------
  |  |  181|  14.6k|#define TIFFTAG_COMPRESSION 259       /* data compression technique */
  ------------------
 3029|       |
 3030|       |	/* We'll decode old-style JPEG using the libtiff RGBA path.
 3031|       |	 */
 3032|  14.6k|	if (header->compression == COMPRESSION_OJPEG) {
  ------------------
  |  |  189|  14.6k|#define COMPRESSION_OJPEG 6           /* !6.0 JPEG */
  ------------------
  |  Branch (3032:6): [True: 2.27k, False: 12.4k]
  ------------------
 3033|  2.27k|		if (!can_read_as_rgba) {
  ------------------
  |  Branch (3033:7): [True: 21, False: 2.25k]
  ------------------
 3034|     21|			vips_error("tiff2vips", "%s", _("unsupported tiff image type"));
  ------------------
  |  |   30|     21|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     21|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3035|     21|			return -1;
 3036|     21|		}
 3037|       |
 3038|  2.25k|		header->read_as_rgba = TRUE;
  ------------------
  |  |  209|  2.25k|#define TRUE    1
  ------------------
 3039|  2.25k|	}
 3040|       |
 3041|       |	/* One of the types we decompress?
 3042|       |	 */
 3043|  66.7k|	for (i = 0; i < VIPS_NUMBER(rtiff_we_decompress); i++)
  ------------------
  |  |   60|  66.7k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (3043:14): [True: 53.7k, False: 13.0k]
  ------------------
 3044|  53.7k|		if (header->compression == rtiff_we_decompress[i]) {
  ------------------
  |  Branch (3044:7): [True: 1.63k, False: 52.1k]
  ------------------
 3045|       |#ifdef DEBUG
 3046|       |			printf("rtiff_header_read: compression %d handled by us\n",
 3047|       |				header->compression);
 3048|       |#endif /*DEBUG*/
 3049|  1.63k|			header->we_decompress = TRUE;
  ------------------
  |  |  209|  1.63k|#define TRUE    1
  ------------------
 3050|  1.63k|			break;
 3051|  1.63k|		}
 3052|       |
 3053|       |	/* We must set this here since it'll change the value of scanline_size.
 3054|       |	 */
 3055|  14.6k|	rtiff_set_decode_format(rtiff);
 3056|       |
 3057|       |	/* If there's YCbCr chroma subsampling and we're not already using one of
 3058|       |	 * the JPEG decompressors, use the libtiff RGBA path.
 3059|       |	 */
 3060|  14.6k|	if (!header->read_as_rgba &&
  ------------------
  |  Branch (3060:6): [True: 12.4k, False: 2.25k]
  ------------------
 3061|  14.6k|		header->compression != COMPRESSION_JPEG &&
  ------------------
  |  |  190|  27.0k|#define COMPRESSION_JPEG 7            /* %JPEG DCT compression */
  ------------------
  |  Branch (3061:3): [True: 10.7k, False: 1.63k]
  ------------------
 3062|  14.6k|		header->photometric_interpretation == PHOTOMETRIC_YCBCR) {
  ------------------
  |  |  227|  10.7k|#define PHOTOMETRIC_YCBCR 6                /* !CCIR 601 */
  ------------------
  |  Branch (3062:3): [True: 1.17k, False: 9.59k]
  ------------------
 3063|  1.17k|		guint16 hsub, vsub;
 3064|       |
 3065|  1.17k|		TIFFGetFieldDefaulted(rtiff->tiff,
 3066|  1.17k|			TIFFTAG_YCBCRSUBSAMPLING, &hsub, &vsub);
  ------------------
  |  |  388|  1.17k|#define TIFFTAG_YCBCRSUBSAMPLING 530       /* !YCbCr subsampling factors */
  ------------------
 3067|  1.17k|		if (hsub != 1 || vsub != 1) {
  ------------------
  |  Branch (3067:7): [True: 1.11k, False: 60]
  |  Branch (3067:20): [True: 55, False: 5]
  ------------------
 3068|  1.17k|			if (!can_read_as_rgba) {
  ------------------
  |  Branch (3068:8): [True: 5, False: 1.16k]
  ------------------
 3069|      5|				vips_error("tiff2vips",
 3070|      5|					"%s", _("subsampled images not supported"));
  ------------------
  |  |   30|      5|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      5|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3071|      5|				return -1;
 3072|      5|			}
 3073|       |
 3074|  1.16k|			header->read_as_rgba = TRUE;
  ------------------
  |  |  209|  1.16k|#define TRUE    1
  ------------------
 3075|  1.16k|		}
 3076|  1.17k|	}
 3077|       |
 3078|  14.6k|	if (header->photometric_interpretation == PHOTOMETRIC_LOGLUV) {
  ------------------
  |  |  233|  14.6k|#define PHOTOMETRIC_LOGLUV 32845           /* CIE Log2(L) (u',v') */
  ------------------
  |  Branch (3078:6): [True: 346, False: 14.3k]
  ------------------
 3079|    346|		if (header->compression != COMPRESSION_SGILOG &&
  ------------------
  |  |  210|    692|#define COMPRESSION_SGILOG 34676   /* SGI Log Luminance RLE */
  ------------------
  |  Branch (3079:7): [True: 165, False: 181]
  ------------------
 3080|    346|			header->compression != COMPRESSION_SGILOG24) {
  ------------------
  |  |  211|    165|#define COMPRESSION_SGILOG24 34677 /* SGI Log 24-bit packed */
  ------------------
  |  Branch (3080:4): [True: 21, False: 144]
  ------------------
 3081|     21|			vips_error("tiff2vips",
 3082|     21|				"%s", _("not SGI-compressed LOGLUV"));
  ------------------
  |  |   30|     21|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     21|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3083|     21|			return -1;
 3084|     21|		}
 3085|    346|	}
 3086|       |
 3087|       |	/* For logluv, the calibration factor to get to absolute luminance.
 3088|       |	 */
 3089|  14.6k|	if (!TIFFGetField(rtiff->tiff, TIFFTAG_STONITS, &header->stonits))
  ------------------
  |  |  490|  14.6k|#define TIFFTAG_STONITS 37439 /* Sample value to Nits */
  ------------------
  |  Branch (3089:6): [True: 14.6k, False: 36]
  ------------------
 3090|  14.6k|		header->stonits = 1.0;
 3091|       |
 3092|       |	/* Arbitrary sanity-checking limits.
 3093|       |	 */
 3094|  14.6k|	if (header->width <= 0 ||
  ------------------
  |  Branch (3094:6): [True: 0, False: 14.6k]
  ------------------
 3095|  14.6k|		header->width >= VIPS_MAX_COORD ||
  ------------------
  |  |   69|  29.2k|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  |  Branch (3095:3): [True: 46, False: 14.5k]
  ------------------
 3096|  14.6k|		header->height <= 0 ||
  ------------------
  |  Branch (3096:3): [True: 0, False: 14.5k]
  ------------------
 3097|  14.6k|		header->height >= VIPS_MAX_COORD) {
  ------------------
  |  |   69|  14.5k|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  |  Branch (3097:3): [True: 23, False: 14.5k]
  ------------------
 3098|     69|		vips_error("tiff2vips",
 3099|     69|			"%s", _("width/height out of range"));
  ------------------
  |  |   30|     69|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     69|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3100|     69|		return -1;
 3101|     69|	}
 3102|       |
 3103|  14.5k|	if (header->samples_per_pixel <= 0 ||
  ------------------
  |  Branch (3103:6): [True: 0, False: 14.5k]
  ------------------
 3104|  14.5k|		header->samples_per_pixel > 10000 ||
  ------------------
  |  Branch (3104:3): [True: 13, False: 14.5k]
  ------------------
 3105|  14.5k|		header->bits_per_sample <= 0 ||
  ------------------
  |  Branch (3105:3): [True: 0, False: 14.5k]
  ------------------
 3106|  14.5k|		header->bits_per_sample > 32) {
  ------------------
  |  Branch (3106:3): [True: 64, False: 14.4k]
  ------------------
 3107|     77|		vips_error("tiff2vips",
 3108|     77|			"%s", _("samples out of range"));
  ------------------
  |  |   30|     77|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     77|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3109|     77|		return -1;
 3110|     77|	}
 3111|       |
 3112|  14.4k|	header->sample_format = get_sample_format(rtiff->tiff);
 3113|  14.4k|	header->orientation = get_orientation(rtiff->tiff);
 3114|       |
 3115|  14.4k|	header->separate = FALSE;
  ------------------
  |  |  206|  14.4k|#define FALSE   0               /* values of boolean */
  ------------------
 3116|  14.4k|	if (tfexists(rtiff->tiff, TIFFTAG_PLANARCONFIG)) {
  ------------------
  |  |  264|  14.4k|#define TIFFTAG_PLANARCONFIG 284           /* storage organization */
  ------------------
  |  Branch (3116:6): [True: 14.4k, False: 0]
  ------------------
 3117|  14.4k|		int v;
 3118|       |
 3119|  14.4k|		if (!tfget16(rtiff->tiff, TIFFTAG_PLANARCONFIG, &v))
  ------------------
  |  |  264|  14.4k|#define TIFFTAG_PLANARCONFIG 284           /* storage organization */
  ------------------
  |  Branch (3119:7): [True: 0, False: 14.4k]
  ------------------
 3120|      0|			return -1;
 3121|  14.4k|		if (v == PLANARCONFIG_SEPARATE)
  ------------------
  |  |  266|  14.4k|#define PLANARCONFIG_SEPARATE 2            /* separate planes of data */
  ------------------
  |  Branch (3121:7): [True: 350, False: 14.1k]
  ------------------
 3122|    350|			header->separate = TRUE;
  ------------------
  |  |  209|    350|#define TRUE    1
  ------------------
 3123|  14.4k|	}
 3124|       |
 3125|       |	/* TIFFGetField needs a guint16 to write count to.
 3126|       |	 */
 3127|  14.4k|	if (TIFFGetField(rtiff->tiff, TIFFTAG_SUBIFD,
  ------------------
  |  |  321|  14.4k|#define TIFFTAG_SUBIFD 330                 /* subimage descriptors */
  ------------------
  |  Branch (3127:6): [True: 16, False: 14.4k]
  ------------------
 3128|  14.4k|			&subifd_count, &subifd_offsets))
 3129|     16|		header->subifd_count = subifd_count;
 3130|       |
 3131|       |	/* IMAGEDESCRIPTION often has useful metadata. libtiff makes sure
 3132|       |	 * that data is null-terminated and contains no embedded null
 3133|       |	 * characters.
 3134|       |	 */
 3135|  14.4k|	if (TIFFGetField(rtiff->tiff, TIFFTAG_IMAGEDESCRIPTION, &image_description))
  ------------------
  |  |  244|  14.4k|#define TIFFTAG_IMAGEDESCRIPTION 270       /* info about image */
  ------------------
  |  Branch (3135:6): [True: 35, False: 14.4k]
  ------------------
 3136|     35|		header->image_description =
 3137|     35|			vips_strdup(VIPS_OBJECT(rtiff->out), image_description);
  ------------------
  |  |  433|     35|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|     35|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     35|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3138|       |
 3139|       |	/* Tiles and strip images have slightly different fields.
 3140|       |	 */
 3141|  14.4k|	header->tiled = TIFFIsTiled(rtiff->tiff);
 3142|       |
 3143|  14.4k|	if (header->read_as_rgba) {
  ------------------
  |  Branch (3143:6): [True: 3.39k, False: 11.0k]
  ------------------
 3144|  3.39k|		header->we_decompress = FALSE;
  ------------------
  |  |  206|  3.39k|#define FALSE   0               /* values of boolean */
  ------------------
 3145|  3.39k|		header->photometric_interpretation = PHOTOMETRIC_RGB;
  ------------------
  |  |  223|  3.39k|#define PHOTOMETRIC_RGB 2                  /* RGB color model */
  ------------------
 3146|  3.39k|		header->samples_per_pixel = 4;
 3147|  3.39k|		header->bits_per_sample = 8;
 3148|  3.39k|		header->sample_format = SAMPLEFORMAT_UINT;
  ------------------
  |  |  334|  3.39k|#define SAMPLEFORMAT_UINT 1                /* !unsigned integer data */
  ------------------
 3149|  3.39k|		header->separate = FALSE;
  ------------------
  |  |  206|  3.39k|#define FALSE   0               /* values of boolean */
  ------------------
 3150|  3.39k|	}
 3151|       |
 3152|       |#ifdef DEBUG
 3153|       |	printf("rtiff_header_read: header.read_as_rgba = %d\n",
 3154|       |		header->read_as_rgba);
 3155|       |	printf("rtiff_header_read: header.width = %d\n",
 3156|       |		header->width);
 3157|       |	printf("rtiff_header_read: header.height = %d\n",
 3158|       |		header->height);
 3159|       |	printf("rtiff_header_read: header.samples_per_pixel = %d\n",
 3160|       |		header->samples_per_pixel);
 3161|       |	printf("rtiff_header_read: header.bits_per_sample = %d\n",
 3162|       |		header->bits_per_sample);
 3163|       |	printf("rtiff_header_read: header.sample_format = %d\n",
 3164|       |		header->sample_format);
 3165|       |	printf("rtiff_header_read: header.orientation = %d\n",
 3166|       |		header->orientation);
 3167|       |	printf("rtiff_header_read: header.tiled = %d\n",
 3168|       |		header->tiled);
 3169|       |#endif /*DEBUG*/
 3170|       |
 3171|  14.4k|	if (header->tiled) {
  ------------------
  |  Branch (3171:6): [True: 3.35k, False: 11.1k]
  ------------------
 3172|  3.35k|		if (!tfget32(rtiff->tiff, TIFFTAG_TILEWIDTH, &header->tile_width) ||
  ------------------
  |  |  311|  3.35k|#define TIFFTAG_TILEWIDTH 322              /* !tile width in pixels */
  ------------------
  |  Branch (3172:7): [True: 0, False: 3.35k]
  ------------------
 3173|  3.35k|			!tfget32(rtiff->tiff, TIFFTAG_TILELENGTH, &header->tile_height))
  ------------------
  |  |  312|  3.35k|#define TIFFTAG_TILELENGTH 323             /* !tile height in pixels */
  ------------------
  |  Branch (3173:4): [True: 0, False: 3.35k]
  ------------------
 3174|      0|			return -1;
 3175|       |
 3176|       |#ifdef DEBUG
 3177|       |		printf("rtiff_header_read: header.tile_width = %d\n",
 3178|       |			header->tile_width);
 3179|       |		printf("rtiff_header_read: header.tile_height = %d\n",
 3180|       |			header->tile_height);
 3181|       |#endif /*DEBUG*/
 3182|       |
 3183|       |		/* Arbitrary sanity-checking limits.
 3184|       |		 */
 3185|  3.35k|		max_tile_dimension = VIPS_MIN(8192,
  ------------------
  |  |   55|  13.4k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 337, False: 3.01k]
  |  |  |  Branch (55:32): [True: 2.52k, False: 825]
  |  |  |  Branch (55:32): [True: 2.52k, False: 825]
  |  |  |  Branch (55:44): [True: 2.20k, False: 808]
  |  |  |  Branch (55:44): [True: 2.20k, False: 808]
  |  |  ------------------
  ------------------
 3186|  3.35k|			VIPS_ROUND_UP(2 * VIPS_MAX(header->width, header->height), 256));
 3187|  3.35k|		if (header->tile_width <= 0 ||
  ------------------
  |  Branch (3187:7): [True: 0, False: 3.35k]
  ------------------
 3188|  3.35k|			header->tile_width > max_tile_dimension ||
  ------------------
  |  Branch (3188:4): [True: 76, False: 3.27k]
  ------------------
 3189|  3.35k|			header->tile_width % 16 != 0 ||
  ------------------
  |  Branch (3189:4): [True: 412, False: 2.86k]
  ------------------
 3190|  3.35k|			header->tile_height <= 0 ||
  ------------------
  |  Branch (3190:4): [True: 0, False: 2.86k]
  ------------------
 3191|  3.35k|			header->tile_height > max_tile_dimension ||
  ------------------
  |  Branch (3191:4): [True: 16, False: 2.84k]
  ------------------
 3192|  3.35k|			header->tile_height % 16 != 0) {
  ------------------
  |  Branch (3192:4): [True: 4, False: 2.84k]
  ------------------
 3193|    508|			vips_error("tiff2vips",
 3194|    508|				"%s", _("tile size out of range"));
  ------------------
  |  |   30|    508|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    508|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3195|    508|			return -1;
 3196|    508|		}
 3197|       |
 3198|  2.84k|		if (header->read_as_rgba) {
  ------------------
  |  Branch (3198:7): [True: 427, False: 2.41k]
  ------------------
 3199|    427|			header->tile_row_size = header->tile_width * 4;
 3200|    427|			header->tile_size = header->tile_row_size * header->tile_height;
 3201|    427|		}
 3202|  2.41k|		else {
 3203|  2.41k|			header->tile_size = TIFFTileSize(rtiff->tiff);
 3204|  2.41k|			header->tile_row_size = TIFFTileRowSize(rtiff->tiff);
 3205|  2.41k|		}
 3206|       |
 3207|       |#ifdef DEBUG
 3208|       |		printf("rtiff_header_read: header.tile_size = %zd\n",
 3209|       |			header->tile_size);
 3210|       |		printf("rtiff_header_read: header.tile_row_size = %zd\n",
 3211|       |			header->tile_row_size);
 3212|       |#endif /*DEBUG*/
 3213|       |
 3214|       |		/* Fuzzed TIFFs can give crazy values for tile_size. Sanity
 3215|       |		 * check at 100mb per tile.
 3216|       |		 */
 3217|  2.84k|		if (header->tile_size <= 0 ||
  ------------------
  |  Branch (3217:7): [True: 0, False: 2.84k]
  ------------------
 3218|  2.84k|			header->tile_size > 100 * 1000 * 1000 ||
  ------------------
  |  Branch (3218:4): [True: 1, False: 2.84k]
  ------------------
 3219|  2.84k|			header->tile_row_size <= 0 ||
  ------------------
  |  Branch (3219:4): [True: 0, False: 2.84k]
  ------------------
 3220|  2.84k|			header->tile_row_size > 100 * 1000 * 1000) {
  ------------------
  |  Branch (3220:4): [True: 0, False: 2.84k]
  ------------------
 3221|      1|			vips_error("tiff2vips",
 3222|      1|				"%s", _("tile size out of range"));
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3223|      1|			return -1;
 3224|      1|		}
 3225|       |
 3226|       |		/* Stop some compiler warnings.
 3227|       |		 */
 3228|  2.84k|		header->rows_per_strip = 0;
 3229|  2.84k|		header->strip_size = 0;
 3230|  2.84k|		header->number_of_strips = 0;
 3231|  2.84k|		header->read_height = 0;
 3232|  2.84k|		header->read_size = 0;
 3233|  2.84k|	}
 3234|  11.1k|	else {
 3235|  11.1k|		if (!tfget32(rtiff->tiff,
  ------------------
  |  Branch (3235:7): [True: 0, False: 11.1k]
  ------------------
 3236|  11.1k|				TIFFTAG_ROWSPERSTRIP, &header->rows_per_strip))
  ------------------
  |  |  258|  11.1k|#define TIFFTAG_ROWSPERSTRIP 278           /* rows per strip of data */
  ------------------
 3237|      0|			return -1;
 3238|       |
 3239|       |		/* rows_per_strip can be 2 ** 32 - 1, meaning the
 3240|       |		 * whole image. Clip this down to height to avoid
 3241|       |		 * confusing vips.
 3242|       |		 *
 3243|       |		 * And it mustn't be zero.
 3244|       |		 */
 3245|  11.1k|		header->rows_per_strip = VIPS_CLIP(1,
  ------------------
  |  |   57|  11.1k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|  22.2k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 0, False: 11.1k]
  |  |  |  |  |  Branch (54:32): [True: 4.03k, False: 7.10k]
  |  |  |  |  |  Branch (54:44): [True: 4.03k, False: 7.10k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3246|  11.1k|			header->rows_per_strip, header->height);
 3247|       |
 3248|  11.1k|		header->number_of_strips = TIFFNumberOfStrips(rtiff->tiff);
 3249|       |
 3250|  11.1k|		if (header->read_as_rgba) {
  ------------------
  |  Branch (3250:7): [True: 2.83k, False: 8.30k]
  ------------------
 3251|  2.83k|			header->scanline_size = header->width * 4;
 3252|  2.83k|			header->strip_size = header->scanline_size * header->rows_per_strip;
 3253|  2.83k|		}
 3254|  8.30k|		else {
 3255|  8.30k|			header->scanline_size = TIFFScanlineSize(rtiff->tiff);
 3256|  8.30k|			header->strip_size = TIFFStripSize(rtiff->tiff);
 3257|  8.30k|		}
 3258|       |
 3259|       |#ifdef DEBUG
 3260|       |		printf("rtiff_header_read: header.rows_per_strip = %d\n",
 3261|       |			header->rows_per_strip);
 3262|       |		printf("rtiff_header_read: header.strip_size = %zd\n",
 3263|       |			header->strip_size);
 3264|       |		printf("rtiff_header_read: header.scanline_size = %zd\n",
 3265|       |			header->scanline_size);
 3266|       |		printf("rtiff_header_read: header.number_of_strips = %d\n",
 3267|       |			header->number_of_strips);
 3268|       |#endif /*DEBUG*/
 3269|       |
 3270|       |		/* libtiff has two strip-wise readers. TIFFReadEncodedStrip()
 3271|       |		 * decompresses an entire strip to memory. It's fast, but it
 3272|       |		 * will need a lot of ram if the strip is large.
 3273|       |		 * TIFFReadScanline() reads a single scanline. It's slower, but
 3274|       |		 * will save a lot of memory if strips are large.
 3275|       |		 *
 3276|       |		 * If this image has a strip size of over 128 lines, fall back
 3277|       |		 * to TIFFReadScanline(), otherwise use TIFFReadEncodedStrip().
 3278|       |		 *
 3279|       |		 * Don't do this in plane-separate mode. TIFFReadScanline() is
 3280|       |		 * too fiddly to use in this case.
 3281|       |		 *
 3282|       |		 * Don't try scanline reading for YCbCr images.
 3283|       |		 * TIFFScanlineSize() will not work in this case due to
 3284|       |		 * chroma subsampling.
 3285|       |		 *
 3286|       |		 * Don't use scanline reading if we're going to use TIFFRGBAImage
 3287|       |		 */
 3288|  11.1k|		if (header->rows_per_strip > 128 &&
  ------------------
  |  Branch (3288:7): [True: 183, False: 10.9k]
  ------------------
 3289|  11.1k|			!header->separate &&
  ------------------
  |  Branch (3289:4): [True: 178, False: 5]
  ------------------
 3290|  11.1k|			header->photometric_interpretation != PHOTOMETRIC_YCBCR &&
  ------------------
  |  |  227|  11.3k|#define PHOTOMETRIC_YCBCR 6                /* !CCIR 601 */
  ------------------
  |  Branch (3290:4): [True: 150, False: 28]
  ------------------
 3291|  11.1k|			!header->read_as_rgba) {
  ------------------
  |  Branch (3291:4): [True: 43, False: 107]
  ------------------
 3292|     43|			header->read_scanlinewise = TRUE;
  ------------------
  |  |  209|     43|#define TRUE    1
  ------------------
 3293|     43|			header->read_height = 1;
 3294|     43|			header->read_size = rtiff->header.scanline_size;
 3295|     43|		}
 3296|  11.1k|		else {
 3297|  11.1k|			header->read_scanlinewise = FALSE;
  ------------------
  |  |  206|  11.1k|#define FALSE   0               /* values of boolean */
  ------------------
 3298|  11.1k|			header->read_height = header->rows_per_strip;
 3299|  11.1k|			header->read_size = header->strip_size;
 3300|  11.1k|		}
 3301|       |
 3302|       |#ifdef DEBUG
 3303|       |		printf("rtiff_header_read: header.read_scanlinewise = %d\n",
 3304|       |			header->read_scanlinewise);
 3305|       |		printf("rtiff_header_read: header.read_height = %d\n",
 3306|       |			header->read_height);
 3307|       |		printf("rtiff_header_read: header.read_size = %zd\n",
 3308|       |			header->read_size);
 3309|       |#endif /*DEBUG*/
 3310|       |
 3311|       |		/* Stop some compiler warnings.
 3312|       |		 */
 3313|  11.1k|		header->tile_width = 0;
 3314|  11.1k|		header->tile_height = 0;
 3315|  11.1k|		header->tile_size = 0;
 3316|  11.1k|		header->tile_row_size = 0;
 3317|  11.1k|	}
 3318|       |
 3319|  13.9k|	TIFFGetFieldDefaulted(rtiff->tiff, TIFFTAG_EXTRASAMPLES,
  ------------------
  |  |  329|  13.9k|#define TIFFTAG_EXTRASAMPLES 338           /* !info about extra samples */
  ------------------
 3320|  13.9k|		&extra_samples_count, &extra_samples_types);
 3321|       |
 3322|  13.9k|	header->alpha_band = -1;
 3323|  13.9k|	if (extra_samples_count > 0) {
  ------------------
  |  Branch (3323:6): [True: 2.94k, False: 11.0k]
  ------------------
 3324|       |		/* There must be exactly one band which is
 3325|       |		 * EXTRASAMPLE_ASSOCALPHA. Note which one it is so we can
 3326|       |		 * unpremultiply with the right channel.
 3327|       |		 */
 3328|  2.94k|		int i;
 3329|       |
 3330|  77.2k|		for (i = 0; i < extra_samples_count; i++)
  ------------------
  |  Branch (3330:15): [True: 74.3k, False: 2.94k]
  ------------------
 3331|  74.3k|			if (extra_samples_types[i] == EXTRASAMPLE_ASSOCALPHA) {
  ------------------
  |  |  331|  74.3k|#define EXTRASAMPLE_ASSOCALPHA 1           /* !associated alpha data */
  ------------------
  |  Branch (3331:8): [True: 1.98k, False: 72.3k]
  ------------------
 3332|  1.98k|				if (header->alpha_band != -1)
  ------------------
  |  Branch (3332:9): [True: 67, False: 1.91k]
  ------------------
 3333|     67|					g_warning("%s", _("more than one alpha -- ignoring"));
  ------------------
  |  |  338|     67|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|     67|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|     67|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|     67|                               __VA_ARGS__)
  ------------------
 3334|       |
 3335|  1.98k|				header->alpha_band = header->samples_per_pixel -
 3336|  1.98k|					extra_samples_count + i;
 3337|  1.98k|			}
 3338|  2.94k|	}
 3339|       |
 3340|  13.9k|	return 0;
 3341|  14.4k|}
tiff2vips.c:tfget32:
  475|  49.5k|{
  476|  49.5k|	guint32 fld;
  477|       |
  478|  49.5k|	if (!TIFFGetFieldDefaulted(tif, tag, &fld)) {
  ------------------
  |  Branch (478:6): [True: 0, False: 49.5k]
  ------------------
  479|      0|		vips_error("tiff2vips",
  480|      0|			_("required field %d missing"), tag);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  481|      0|		return 0;
  482|      0|	}
  483|       |
  484|  49.5k|	*out = fld;
  485|       |
  486|  49.5k|	return 1;
  487|  49.5k|}
tiff2vips.c:tfget16:
  493|  77.4k|{
  494|  77.4k|	guint16 fld;
  495|       |
  496|  77.4k|	if (!TIFFGetFieldDefaulted(tif, tag, &fld)) {
  ------------------
  |  Branch (496:6): [True: 1.18k, False: 76.2k]
  ------------------
  497|  1.18k|		vips_error("tiff2vips",
  498|  1.18k|			_("required field %d missing"), tag);
  ------------------
  |  |   30|  1.18k|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|  1.18k|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  499|  1.18k|		return 0;
  500|  1.18k|	}
  501|       |
  502|  76.2k|	*out = fld;
  503|       |
  504|  76.2k|	return 1;
  505|  77.4k|}
tiff2vips.c:get_sample_format:
  560|  14.4k|{
  561|  14.4k|	int sample_format;
  562|  14.4k|	guint16 v;
  563|       |
  564|  14.4k|	sample_format = SAMPLEFORMAT_INT;
  ------------------
  |  |  335|  14.4k|#define SAMPLEFORMAT_INT 2                 /* !signed integer data */
  ------------------
  565|       |
  566|  14.4k|	if (TIFFGetFieldDefaulted(tiff, TIFFTAG_SAMPLEFORMAT, &v)) {
  ------------------
  |  |  333|  14.4k|#define TIFFTAG_SAMPLEFORMAT 339           /* !data sample format */
  ------------------
  |  Branch (566:6): [True: 14.4k, False: 0]
  ------------------
  567|       |		/* Some images have this set to void, bizarre.
  568|       |		 */
  569|  14.4k|		if (v == SAMPLEFORMAT_VOID)
  ------------------
  |  |  337|  14.4k|#define SAMPLEFORMAT_VOID 4                /* !untyped data */
  ------------------
  |  Branch (569:7): [True: 15, False: 14.4k]
  ------------------
  570|     15|			v = SAMPLEFORMAT_UINT;
  ------------------
  |  |  334|     15|#define SAMPLEFORMAT_UINT 1                /* !unsigned integer data */
  ------------------
  571|       |
  572|  14.4k|		sample_format = v;
  573|  14.4k|	}
  574|       |
  575|  14.4k|	return sample_format;
  576|  14.4k|}
tiff2vips.c:get_orientation:
  580|  14.4k|{
  581|  14.4k|	int orientation;
  582|  14.4k|	guint16 v;
  583|       |
  584|  14.4k|	orientation = ORIENTATION_TOPLEFT;
  ------------------
  |  |  249|  14.4k|#define ORIENTATION_TOPLEFT 1              /* row 0 top, col 0 lhs */
  ------------------
  585|       |
  586|  14.4k|	if (TIFFGetFieldDefaulted(tiff, TIFFTAG_ORIENTATION, &v))
  ------------------
  |  |  248|  14.4k|#define TIFFTAG_ORIENTATION 274            /* +image orientation */
  ------------------
  |  Branch (586:6): [True: 14.4k, False: 0]
  ------------------
  587|       |		/* Can have mad values.
  588|       |		 */
  589|  14.4k|		orientation = VIPS_CLIP(1, v, 8);
  ------------------
  |  |   57|  14.4k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|  28.9k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 0, False: 14.4k]
  |  |  |  |  |  Branch (54:32): [True: 0, False: 14.4k]
  |  |  |  |  |  Branch (54:44): [True: 0, False: 14.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  590|       |
  591|  14.4k|	return orientation;
  592|  14.4k|}
tiff2vips.c:tfexists:
  462|  14.4k|{
  463|  14.4k|	guint32 a, b;
  464|       |
  465|  14.4k|	if (TIFFGetField(tif, tag, &a, &b))
  ------------------
  |  Branch (465:6): [True: 14.4k, False: 0]
  ------------------
  466|  14.4k|		return 1;
  467|      0|	else
  468|      0|		return 0;
  469|  14.4k|}
tiff2vips.c:rtiff_set_header:
 1852|  13.9k|{
 1853|  13.9k|	guint32 data_len;
 1854|  13.9k|	void *data;
 1855|       |
 1856|  13.9k|	rtiff_set_decode_format(rtiff);
 1857|       |
 1858|  13.9k|	if (rtiff->header.photometric_interpretation == PHOTOMETRIC_LOGLUV)
  ------------------
  |  |  233|  13.9k|#define PHOTOMETRIC_LOGLUV 32845           /* CIE Log2(L) (u',v') */
  ------------------
  |  Branch (1858:6): [True: 320, False: 13.6k]
  ------------------
 1859|    320|		vips_image_set_double(out, "stonits", rtiff->header.stonits);
 1860|       |
 1861|  13.9k|	out->Xsize = rtiff->header.width;
 1862|  13.9k|	out->Ysize = rtiff->header.height * rtiff->n;
 1863|       |
 1864|  13.9k|	VIPS_SETSTR(out->filename,
  ------------------
  |  |   53|  13.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  13.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|  13.9k|	{ \
  |  |   55|  13.9k|		const char *sst = (V); \
  |  |   56|  13.9k|		\
  |  |   57|  13.9k|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 13.9k, False: 0]
  |  |  ------------------
  |  |   58|  13.9k|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 0, False: 13.9k]
  |  |  |  Branch (58:16): [True: 13.9k, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|  13.9k|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|  13.9k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  13.9k|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|  13.9k|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  13.9k|	{ \
  |  |  |  |  |  |   43|  13.9k|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 13.9k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  13.9k|			(void) F((S)); \
  |  |  |  |  |  |   45|  13.9k|			(S) = 0; \
  |  |  |  |  |  |   46|  13.9k|		} \
  |  |  |  |  |  |   47|  13.9k|	} \
  |  |  |  |  |  |   48|  13.9k|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|  13.9k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  13.9k|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 0, False: 13.9k]
  |  |  ------------------
  |  |   61|  13.9k|					(S) = g_strdup(sst); \
  |  |   62|  13.9k|			} \
  |  |   63|  13.9k|		} \
  |  |   64|  13.9k|	} \
  |  |   65|  13.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1865|  13.9k|		vips_connection_filename(VIPS_CONNECTION(rtiff->source)));
 1866|       |
 1867|  13.9k|	if (rtiff->n > 1)
  ------------------
  |  Branch (1867:6): [True: 0, False: 13.9k]
  ------------------
 1868|      0|		vips_image_set_int(out, VIPS_META_PAGE_HEIGHT, rtiff->header.height);
  ------------------
  |  |  158|      0|#define VIPS_META_PAGE_HEIGHT "page-height"
  ------------------
 1869|       |
 1870|  13.9k|	if (rtiff->header.subifd_count > 0)
  ------------------
  |  Branch (1870:6): [True: 12, False: 13.9k]
  ------------------
 1871|     12|		vips_image_set_int(out,
 1872|     12|			VIPS_META_N_SUBIFDS, rtiff->header.subifd_count);
  ------------------
  |  |  172|     12|#define VIPS_META_N_SUBIFDS "n-subifds"
  ------------------
 1873|       |
 1874|  13.9k|	vips_image_set_int(out, VIPS_META_N_PAGES, rtiff->n_pages);
  ------------------
  |  |  165|  13.9k|#define VIPS_META_N_PAGES "n-pages"
  ------------------
 1875|       |
 1876|       |	/* We have a range of output paths. Look at the tiff header and try to
 1877|       |	 * route the input image to the best output path.
 1878|       |	 */
 1879|  13.9k|	if (rtiff_pick_reader(rtiff)(rtiff, out))
  ------------------
  |  Branch (1879:6): [True: 159, False: 13.8k]
  ------------------
 1880|    159|		return -1;
 1881|       |
 1882|       |	/* Read any ICC profile.
 1883|       |	 */
 1884|  13.8k|	if (TIFFGetField(rtiff->tiff, TIFFTAG_ICCPROFILE, &data_len, &data))
  ------------------
  |  |  479|  13.8k|#define TIFFTAG_ICCPROFILE 34675 /* ICC profile data */
  ------------------
  |  Branch (1884:6): [True: 2, False: 13.8k]
  ------------------
 1885|      2|		vips_image_set_blob_copy(out, VIPS_META_ICC_NAME, data, data_len);
  ------------------
  |  |   78|      2|#define VIPS_META_ICC_NAME "icc-profile-data"
  ------------------
 1886|       |
 1887|       |	/* Read any XMP metadata.
 1888|       |	 */
 1889|  13.8k|	if (TIFFGetField(rtiff->tiff, TIFFTAG_XMLPACKET, &data_len, &data))
  ------------------
  |  |  394|  13.8k|#define TIFFTAG_XMLPACKET 700              /* %XML packet [Adobe XMP Specification, January 2004 */
  ------------------
  |  Branch (1889:6): [True: 4, False: 13.8k]
  ------------------
 1890|      4|		vips_image_set_blob_copy(out, VIPS_META_XMP_NAME, data, data_len);
  ------------------
  |  |   53|      4|#define VIPS_META_XMP_NAME "xmp-data"
  ------------------
 1891|       |
 1892|       |	/* Read any IPTC metadata.
 1893|       |	 */
 1894|  13.8k|	if (TIFFGetField(rtiff->tiff, TIFFTAG_RICHTIFFIPTC, &data_len, &data)) {
  ------------------
  |  |  448|  13.8k|#define TIFFTAG_RICHTIFFIPTC 33723
  ------------------
  |  Branch (1894:6): [True: 6, False: 13.8k]
  ------------------
 1895|      6|		vips_image_set_blob_copy(out, VIPS_META_IPTC_NAME, data, data_len);
  ------------------
  |  |   60|      6|#define VIPS_META_IPTC_NAME "iptc-data"
  ------------------
 1896|       |
 1897|       |		/* Older versions of libvips used this misspelt name :-( attach
 1898|       |		 * under this name too for compatibility.
 1899|       |		 */
 1900|      6|		vips_image_set_blob_copy(out, "ipct-data", data, data_len);
 1901|      6|	}
 1902|       |
 1903|       |	/* Read any photoshop metadata.
 1904|       |	 */
 1905|  13.8k|	if (TIFFGetField(rtiff->tiff, TIFFTAG_PHOTOSHOP, &data_len, &data))
  ------------------
  |  |  475|  13.8k|#define TIFFTAG_PHOTOSHOP 34377
  ------------------
  |  Branch (1905:6): [True: 7, False: 13.8k]
  ------------------
 1906|      7|		vips_image_set_blob_copy(out, VIPS_META_PHOTOSHOP_NAME, data, data_len);
  ------------------
  |  |   68|      7|#define VIPS_META_PHOTOSHOP_NAME "photoshop-data"
  ------------------
 1907|       |
 1908|  13.8k|	if (rtiff->header.image_description)
  ------------------
  |  Branch (1908:6): [True: 34, False: 13.7k]
  ------------------
 1909|     34|		vips_image_set_string(out, VIPS_META_IMAGEDESCRIPTION,
  ------------------
  |  |   85|     34|#define VIPS_META_IMAGEDESCRIPTION "image-description"
  ------------------
 1910|     34|			rtiff->header.image_description);
 1911|       |
 1912|  13.8k|	if (get_resolution(rtiff->tiff, out))
  ------------------
  |  Branch (1912:6): [True: 0, False: 13.8k]
  ------------------
 1913|      0|		return -1;
 1914|       |
 1915|  13.8k|	vips_image_set_int(out, VIPS_META_BITS_PER_SAMPLE,
  ------------------
  |  |  100|  13.8k|#define VIPS_META_BITS_PER_SAMPLE "bits-per-sample"
  ------------------
 1916|  13.8k|		rtiff->header.bits_per_sample);
 1917|       |
 1918|       |	/* Set the "orientation" tag. This is picked up later by autorot, if
 1919|       |	 * requested.
 1920|       |	 */
 1921|  13.8k|	vips_image_set_int(out, VIPS_META_ORIENTATION, rtiff->header.orientation);
  ------------------
  |  |  149|  13.8k|#define VIPS_META_ORIENTATION "orientation"
  ------------------
 1922|       |
 1923|       |	/* Hint smalltile for tiled images, since we may be decompressing
 1924|       |	 * outside the lock and THINSTRIP would prevent parallel tile decode.
 1925|       |	 */
 1926|  13.8k|	vips_image_pipelinev(out,
 1927|  13.8k|		rtiff->header.tiled
  ------------------
  |  Branch (1927:3): [True: 2.83k, False: 10.9k]
  ------------------
 1928|  13.8k|			? VIPS_DEMAND_STYLE_SMALLTILE
 1929|  13.8k|			: VIPS_DEMAND_STYLE_THINSTRIP,
 1930|  13.8k|		NULL);
 1931|       |
 1932|  13.8k|	return 0;
 1933|  13.8k|}
tiff2vips.c:rtiff_pick_reader:
 1804|  13.9k|{
 1805|  13.9k|	int bits_per_sample = rtiff->header.bits_per_sample;
 1806|  13.9k|	int photometric_interpretation =
 1807|  13.9k|		rtiff->header.photometric_interpretation;
 1808|  13.9k|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1809|  13.9k|	int read_as_rgba = rtiff->header.read_as_rgba;
 1810|       |
 1811|  13.9k|	if (read_as_rgba)
  ------------------
  |  Branch (1811:6): [True: 3.26k, False: 10.7k]
  ------------------
 1812|  3.26k|		return rtiff_parse_rgba;
 1813|       |
 1814|  10.7k|	if (photometric_interpretation == PHOTOMETRIC_CIELAB) {
  ------------------
  |  |  228|  10.7k|#define PHOTOMETRIC_CIELAB 8               /* !1976 CIE L*a*b* */
  ------------------
  |  Branch (1814:6): [True: 275, False: 10.4k]
  ------------------
 1815|    275|		if (bits_per_sample == 8) {
  ------------------
  |  Branch (1815:7): [True: 138, False: 137]
  ------------------
 1816|    138|			if (samples_per_pixel > 3)
  ------------------
  |  Branch (1816:8): [True: 62, False: 76]
  ------------------
 1817|     62|				return rtiff_parse_lab_with_alpha;
 1818|     76|			else
 1819|     76|				return rtiff_parse_labpack;
 1820|    138|		}
 1821|    137|		if (bits_per_sample == 16)
  ------------------
  |  Branch (1821:7): [True: 75, False: 62]
  ------------------
 1822|     75|			return rtiff_parse_labs;
 1823|    137|	}
 1824|       |
 1825|  10.5k|	if (photometric_interpretation == PHOTOMETRIC_LOGLUV)
  ------------------
  |  |  233|  10.5k|#define PHOTOMETRIC_LOGLUV 32845           /* CIE Log2(L) (u',v') */
  ------------------
  |  Branch (1825:6): [True: 320, False: 10.1k]
  ------------------
 1826|    320|		return rtiff_parse_logluv;
 1827|       |
 1828|  10.1k|	if (photometric_interpretation == PHOTOMETRIC_MINISWHITE ||
  ------------------
  |  |  221|  20.3k|#define PHOTOMETRIC_MINISWHITE 0           /* min value is white */
  ------------------
  |  Branch (1828:6): [True: 4.83k, False: 5.35k]
  ------------------
 1829|  10.1k|		photometric_interpretation == PHOTOMETRIC_MINISBLACK) {
  ------------------
  |  |  222|  5.35k|#define PHOTOMETRIC_MINISBLACK 1           /* min value is black */
  ------------------
  |  Branch (1829:3): [True: 1.81k, False: 3.54k]
  ------------------
 1830|       |
 1831|  6.64k|		if (bits_per_sample == 1)
  ------------------
  |  Branch (1831:7): [True: 4.05k, False: 2.58k]
  ------------------
 1832|  4.05k|			return rtiff_parse_onebit;
 1833|  2.58k|		else if (bits_per_sample == 2)
  ------------------
  |  Branch (1833:12): [True: 184, False: 2.40k]
  ------------------
 1834|    184|			return rtiff_parse_twobit;
 1835|  2.40k|		else if (bits_per_sample == 4)
  ------------------
  |  Branch (1835:12): [True: 313, False: 2.09k]
  ------------------
 1836|    313|			return rtiff_parse_fourbit;
 1837|  2.09k|		else
 1838|  2.09k|			return rtiff_parse_greyscale;
 1839|  6.64k|	}
 1840|       |
 1841|  3.54k|	if (photometric_interpretation == PHOTOMETRIC_PALETTE)
  ------------------
  |  |  224|  3.54k|#define PHOTOMETRIC_PALETTE 3              /* color map indexed */
  ------------------
  |  Branch (1841:6): [True: 170, False: 3.37k]
  ------------------
 1842|    170|		return rtiff_parse_palette;
 1843|       |
 1844|  3.37k|	return rtiff_parse_copy;
 1845|  3.54k|}
tiff2vips.c:rtiff_parse_rgba:
 1781|  3.26k|{
 1782|  3.26k|	out->Bands = 4;
 1783|  3.26k|	out->Type = VIPS_INTERPRETATION_sRGB;
 1784|  3.26k|	out->BandFmt = VIPS_FORMAT_UCHAR;
 1785|  3.26k|	out->Coding = VIPS_CODING_NONE;
 1786|       |
 1787|  3.26k|	rtiff->client = out;
 1788|       |
 1789|       |	/* We'll have RGBA areas of exact size as we need, so we can just copy it
 1790|       |	 */
 1791|  3.26k|	rtiff->sfn = rtiff_memcpy_line;
 1792|  3.26k|	rtiff->memcpy = TRUE;
  ------------------
  |  |  209|  3.26k|#define TRUE    1
  ------------------
 1793|       |
 1794|  3.26k|	return 0;
 1795|  3.26k|}
tiff2vips.c:rtiff_memcpy_line:
 1686|  31.6k|{
 1687|  31.6k|	VipsImage *im = (VipsImage *) client;
 1688|  31.6k|	size_t len = n * VIPS_IMAGE_SIZEOF_PEL(im);
  ------------------
  |  |  384|  31.6k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|  31.6k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
 1689|       |
 1690|  31.6k|	memcpy(q, p, len);
 1691|  31.6k|}
tiff2vips.c:rtiff_parse_lab_with_alpha:
 1074|     62|{
 1075|     62|	if (rtiff_check_min_samples(rtiff, 4) ||
  ------------------
  |  Branch (1075:6): [True: 0, False: 62]
  ------------------
 1076|     62|		rtiff_check_bits(rtiff, 8) ||
  ------------------
  |  Branch (1076:3): [True: 0, False: 62]
  ------------------
 1077|     62|		rtiff_check_interpretation(rtiff, PHOTOMETRIC_CIELAB))
  ------------------
  |  |  228|     62|#define PHOTOMETRIC_CIELAB 8               /* !1976 CIE L*a*b* */
  ------------------
  |  Branch (1077:3): [True: 0, False: 62]
  ------------------
 1078|      0|		return -1;
 1079|       |
 1080|     62|	out->Bands = rtiff->header.samples_per_pixel;
 1081|     62|	out->BandFmt = VIPS_FORMAT_SHORT;
 1082|     62|	out->Coding = VIPS_CODING_NONE;
 1083|     62|	out->Type = VIPS_INTERPRETATION_LABS;
 1084|       |
 1085|     62|	rtiff->sfn = rtiff_lab_with_alpha_line;
 1086|       |
 1087|     62|	return 0;
 1088|     62|}
tiff2vips.c:rtiff_check_min_samples:
  878|  2.79k|{
  879|  2.79k|	if (rtiff->header.samples_per_pixel < samples_per_pixel) {
  ------------------
  |  Branch (879:6): [True: 11, False: 2.78k]
  ------------------
  880|     11|		vips_error("tiff2vips", _("not at least %d samples per pixel"),
  ------------------
  |  |   30|     11|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     11|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  881|     11|			samples_per_pixel);
  882|     11|		return -1;
  883|     11|	}
  884|       |
  885|  2.78k|	return 0;
  886|  2.79k|}
tiff2vips.c:rtiff_check_bits:
  918|  4.75k|{
  919|  4.75k|	if (rtiff->header.bits_per_sample != bits_per_sample) {
  ------------------
  |  Branch (919:6): [True: 0, False: 4.75k]
  ------------------
  920|      0|		vips_error("tiff2vips", _("not %d bits per sample"), bits_per_sample);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  921|      0|		return -1;
  922|      0|	}
  923|       |
  924|  4.75k|	return 0;
  925|  4.75k|}
tiff2vips.c:rtiff_check_interpretation:
  905|    522|{
  906|    522|	if (rtiff->header.photometric_interpretation !=
  ------------------
  |  Branch (906:6): [True: 0, False: 522]
  ------------------
  907|    522|		photometric_interpretation) {
  908|      0|		vips_error("tiff2vips", _("not photometric interpretation %d"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  909|      0|			photometric_interpretation);
  910|      0|		return -1;
  911|      0|	}
  912|       |
  913|    522|	return 0;
  914|    522|}
tiff2vips.c:rtiff_lab_with_alpha_line:
 1046|    449|{
 1047|    449|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1048|       |
 1049|    449|	unsigned char *p1;
 1050|    449|	short *q1;
 1051|    449|	int x;
 1052|       |
 1053|    449|	p1 = (unsigned char *) p;
 1054|    449|	q1 = (short *) q;
 1055|  10.7k|	for (x = 0; x < n; x++) {
  ------------------
  |  Branch (1055:14): [True: 10.3k, False: 449]
  ------------------
 1056|  10.3k|		int i;
 1057|       |
 1058|  10.3k|		q1[0] = ((unsigned int) p1[0]) * 32767 / 255;
 1059|  10.3k|		q1[1] = ((short) p1[1]) << 8;
 1060|  10.3k|		q1[2] = ((short) p1[2]) << 8;
 1061|       |
 1062|  20.6k|		for (i = 3; i < samples_per_pixel; i++)
  ------------------
  |  Branch (1062:15): [True: 10.3k, False: 10.3k]
  ------------------
 1063|  10.3k|			q1[i] = (p1[i] << 8) + p1[i];
 1064|       |
 1065|  10.3k|		q1 += samples_per_pixel;
 1066|  10.3k|		p1 += samples_per_pixel;
 1067|  10.3k|	}
 1068|    449|}
tiff2vips.c:rtiff_parse_labpack:
 1024|     76|{
 1025|     76|	if (rtiff_check_min_samples(rtiff, 3) ||
  ------------------
  |  Branch (1025:6): [True: 1, False: 75]
  ------------------
 1026|     76|		rtiff_check_bits(rtiff, 8) ||
  ------------------
  |  Branch (1026:3): [True: 0, False: 75]
  ------------------
 1027|     76|		rtiff_check_interpretation(rtiff, PHOTOMETRIC_CIELAB))
  ------------------
  |  |  228|     75|#define PHOTOMETRIC_CIELAB 8               /* !1976 CIE L*a*b* */
  ------------------
  |  Branch (1027:3): [True: 0, False: 75]
  ------------------
 1028|      1|		return -1;
 1029|       |
 1030|     75|	out->Bands = 4;
 1031|     75|	out->BandFmt = VIPS_FORMAT_UCHAR;
 1032|     75|	out->Coding = VIPS_CODING_LABQ;
 1033|     75|	out->Type = VIPS_INTERPRETATION_LAB;
 1034|       |
 1035|     75|	rtiff->sfn = rtiff_labpack_line;
 1036|       |
 1037|     75|	return 0;
 1038|     76|}
tiff2vips.c:rtiff_labpack_line:
 1004|  1.23k|{
 1005|  1.23k|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1006|       |
 1007|  1.23k|	int x;
 1008|       |
 1009|  32.1k|	for (x = 0; x < n; x++) {
  ------------------
  |  Branch (1009:14): [True: 30.9k, False: 1.23k]
  ------------------
 1010|  30.9k|		q[0] = p[0];
 1011|  30.9k|		q[1] = p[1];
 1012|  30.9k|		q[2] = p[2];
 1013|  30.9k|		q[3] = 0;
 1014|       |
 1015|  30.9k|		q += 4;
 1016|  30.9k|		p += samples_per_pixel;
 1017|  30.9k|	}
 1018|  1.23k|}
tiff2vips.c:rtiff_parse_labs:
 1121|     75|{
 1122|     75|	if (rtiff_check_min_samples(rtiff, 3) ||
  ------------------
  |  Branch (1122:6): [True: 1, False: 74]
  ------------------
 1123|     75|		rtiff_check_bits(rtiff, 16) ||
  ------------------
  |  Branch (1123:3): [True: 0, False: 74]
  ------------------
 1124|     75|		rtiff_check_interpretation(rtiff, PHOTOMETRIC_CIELAB))
  ------------------
  |  |  228|     74|#define PHOTOMETRIC_CIELAB 8               /* !1976 CIE L*a*b* */
  ------------------
  |  Branch (1124:3): [True: 0, False: 74]
  ------------------
 1125|      1|		return -1;
 1126|       |
 1127|     74|	out->Bands = rtiff->header.samples_per_pixel;
 1128|     74|	out->BandFmt = VIPS_FORMAT_SHORT;
 1129|     74|	out->Coding = VIPS_CODING_NONE;
 1130|     74|	out->Type = VIPS_INTERPRETATION_LABS;
 1131|       |
 1132|     74|	rtiff->sfn = rtiff_labs_line;
 1133|       |
 1134|     74|	return 0;
 1135|     75|}
tiff2vips.c:rtiff_labs_line:
 1094|    791|{
 1095|    791|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1096|       |
 1097|    791|	unsigned short *p1;
 1098|    791|	short *q1;
 1099|    791|	int x;
 1100|    791|	int i;
 1101|       |
 1102|    791|	p1 = (unsigned short *) p;
 1103|    791|	q1 = (short *) q;
 1104|  10.4k|	for (x = 0; x < n; x++) {
  ------------------
  |  Branch (1104:14): [True: 9.65k, False: 791]
  ------------------
 1105|       |		/* We use signed int16 for L.
 1106|       |		 */
 1107|  9.65k|		q1[0] = p1[0] >> 1;
 1108|       |
 1109|  35.7k|		for (i = 1; i < samples_per_pixel; i++)
  ------------------
  |  Branch (1109:15): [True: 26.1k, False: 9.65k]
  ------------------
 1110|  26.1k|			q1[i] = p1[i];
 1111|       |
 1112|  9.65k|		q1 += samples_per_pixel;
 1113|  9.65k|		p1 += samples_per_pixel;
 1114|  9.65k|	}
 1115|    791|}
tiff2vips.c:rtiff_parse_logluv:
 1168|    320|{
 1169|    320|	if (rtiff_check_min_samples(rtiff, 3) ||
  ------------------
  |  Branch (1169:6): [True: 9, False: 311]
  ------------------
 1170|    320|		rtiff_check_interpretation(rtiff, PHOTOMETRIC_LOGLUV))
  ------------------
  |  |  233|    311|#define PHOTOMETRIC_LOGLUV 32845           /* CIE Log2(L) (u',v') */
  ------------------
  |  Branch (1170:3): [True: 0, False: 311]
  ------------------
 1171|      9|		return -1;
 1172|       |
 1173|    311|	out->Bands = rtiff->header.samples_per_pixel;
 1174|    311|	out->BandFmt = VIPS_FORMAT_FLOAT;
 1175|    311|	out->Coding = VIPS_CODING_NONE;
 1176|    311|	out->Type = VIPS_INTERPRETATION_XYZ;
 1177|       |
 1178|    311|	rtiff->sfn = rtiff_logluv_line;
 1179|       |
 1180|    311|	return 0;
 1181|    320|}
tiff2vips.c:rtiff_logluv_line:
 1141|  10.8k|{
 1142|  10.8k|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1143|       |
 1144|  10.8k|	float *p1;
 1145|  10.8k|	float *q1;
 1146|  10.8k|	int x;
 1147|  10.8k|	int i;
 1148|       |
 1149|  10.8k|	p1 = (float *) p;
 1150|  10.8k|	q1 = (float *) q;
 1151|   210k|	for (x = 0; x < n; x++) {
  ------------------
  |  Branch (1151:14): [True: 200k, False: 10.8k]
  ------------------
 1152|   200k|		q1[0] = VIPS_D65_X0 * p1[0];
  ------------------
  |  |   58|   200k|#define VIPS_D65_X0 (95.0470)
  ------------------
 1153|   200k|		q1[1] = VIPS_D65_Y0 * p1[1];
  ------------------
  |  |   59|   200k|#define VIPS_D65_Y0 (100.0)
  ------------------
 1154|   200k|		q1[2] = VIPS_D65_Z0 * p1[2];
  ------------------
  |  |   60|   200k|#define VIPS_D65_Z0 (108.8827)
  ------------------
 1155|       |
 1156|   211k|		for (i = 3; i < samples_per_pixel; i++)
  ------------------
  |  Branch (1156:15): [True: 11.9k, False: 200k]
  ------------------
 1157|  11.9k|			q1[i] = p1[i];
 1158|       |
 1159|   200k|		q1 += samples_per_pixel;
 1160|   200k|		p1 += samples_per_pixel;
 1161|   200k|	}
 1162|  10.8k|}
tiff2vips.c:rtiff_parse_onebit:
 1252|  4.05k|{
 1253|  4.05k|	if (rtiff_check_samples(rtiff, 1) ||
  ------------------
  |  Branch (1253:6): [True: 4, False: 4.05k]
  ------------------
 1254|  4.05k|		rtiff_check_bits(rtiff, 1))
  ------------------
  |  Branch (1254:3): [True: 0, False: 4.05k]
  ------------------
 1255|      4|		return -1;
 1256|       |
 1257|  4.05k|	out->Bands = 1;
 1258|  4.05k|	out->BandFmt = VIPS_FORMAT_UCHAR;
 1259|  4.05k|	out->Coding = VIPS_CODING_NONE;
 1260|  4.05k|	out->Type = VIPS_INTERPRETATION_B_W;
 1261|       |
 1262|  4.05k|	rtiff->sfn = rtiff_1bit_line;
 1263|       |
 1264|  4.05k|	return 0;
 1265|  4.05k|}
tiff2vips.c:rtiff_check_samples:
  865|  4.55k|{
  866|  4.55k|	if (rtiff->header.samples_per_pixel != samples_per_pixel) {
  ------------------
  |  Branch (866:6): [True: 6, False: 4.54k]
  ------------------
  867|      6|		vips_error("tiff2vips", _("not %d bands"), samples_per_pixel);
  ------------------
  |  |   30|      6|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      6|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  868|      6|		return -1;
  869|      6|	}
  870|       |
  871|  4.54k|	return 0;
  872|  4.55k|}
tiff2vips.c:rtiff_1bit_line:
 1190|   493k|	{ \
 1191|   493k|		int photometric = rtiff->header.photometric_interpretation; \
 1192|   493k|		int mask = photometric == PHOTOMETRIC_MINISBLACK ? 0 : 0xff; \
  ------------------
  |  |  222|   493k|#define PHOTOMETRIC_MINISBLACK 1           /* min value is black */
  ------------------
  |  Branch (1192:14): [True: 8.62k, False: 485k]
  ------------------
 1193|   493k|		int bps = rtiff->header.bits_per_sample; \
 1194|   493k|		int load = 8 / bps - 1; \
 1195|   493k|\
 1196|   493k|		int x; \
 1197|   493k|		VipsPel bits; \
 1198|   493k|\
 1199|   493k|		/* Stop a compiler warning. \
 1200|   493k|		 */ \
 1201|   493k|		bits = 0; \
 1202|   493k|\
 1203|  11.5M|		for (x = 0; x < n; x++) { \
  ------------------
  |  Branch (1203:15): [True: 11.0M, False: 493k]
  ------------------
 1204|  11.0M|			if ((x & load) == 0) \
  ------------------
  |  Branch (1204:8): [True: 1.45M, False: 9.60M]
  ------------------
 1205|  11.0M|				/* Flip the bits for miniswhite. \
 1206|  11.0M|				 */ \
 1207|  11.0M|				bits = *p++ ^ mask; \
 1208|  11.0M|\
 1209|  11.0M|			EXPAND(q[x], bits); \
  ------------------
  |  | 1244|  11.0M|NBIT_LINE(1, EXPAND1)
  |  |  ------------------
  |  |  |  | 1218|  11.0M|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  11.0M|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  | 1219|  11.0M|	{ \
  |  |  |  | 1220|  11.0M|		(Q) = (((signed char) (BITS & 128)) >> 7); \
  |  |  |  | 1221|  11.0M|	} \
  |  |  |  | 1222|  11.0M|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  11.0M|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1210|  11.0M|\
 1211|  11.0M|			bits <<= bps; \
 1212|  11.0M|		} \
 1213|   493k|	}
tiff2vips.c:rtiff_parse_twobit:
 1271|    184|{
 1272|    184|	if (rtiff_check_samples(rtiff, 1) ||
  ------------------
  |  Branch (1272:6): [True: 1, False: 183]
  ------------------
 1273|    184|		rtiff_check_bits(rtiff, 2))
  ------------------
  |  Branch (1273:3): [True: 0, False: 183]
  ------------------
 1274|      1|		return -1;
 1275|       |
 1276|    183|	out->Bands = 1;
 1277|    183|	out->BandFmt = VIPS_FORMAT_UCHAR;
 1278|    183|	out->Coding = VIPS_CODING_NONE;
 1279|    183|	out->Type = VIPS_INTERPRETATION_B_W;
 1280|       |
 1281|    183|	rtiff->sfn = rtiff_2bit_line;
 1282|       |
 1283|    183|	return 0;
 1284|    184|}
tiff2vips.c:rtiff_2bit_line:
 1190|  6.26k|	{ \
 1191|  6.26k|		int photometric = rtiff->header.photometric_interpretation; \
 1192|  6.26k|		int mask = photometric == PHOTOMETRIC_MINISBLACK ? 0 : 0xff; \
  ------------------
  |  |  222|  6.26k|#define PHOTOMETRIC_MINISBLACK 1           /* min value is black */
  ------------------
  |  Branch (1192:14): [True: 534, False: 5.72k]
  ------------------
 1193|  6.26k|		int bps = rtiff->header.bits_per_sample; \
 1194|  6.26k|		int load = 8 / bps - 1; \
 1195|  6.26k|\
 1196|  6.26k|		int x; \
 1197|  6.26k|		VipsPel bits; \
 1198|  6.26k|\
 1199|  6.26k|		/* Stop a compiler warning. \
 1200|  6.26k|		 */ \
 1201|  6.26k|		bits = 0; \
 1202|  6.26k|\
 1203|   202k|		for (x = 0; x < n; x++) { \
  ------------------
  |  Branch (1203:15): [True: 195k, False: 6.26k]
  ------------------
 1204|   195k|			if ((x & load) == 0) \
  ------------------
  |  Branch (1204:8): [True: 51.4k, False: 144k]
  ------------------
 1205|   195k|				/* Flip the bits for miniswhite. \
 1206|   195k|				 */ \
 1207|   195k|				bits = *p++ ^ mask; \
 1208|   195k|\
 1209|   195k|			EXPAND(q[x], bits); \
  ------------------
  |  | 1245|   195k|NBIT_LINE(2, EXPAND2)
  |  |  ------------------
  |  |  |  | 1227|   195k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   195k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  | 1228|   195k|	{ \
  |  |  |  | 1229|   195k|		VipsPel twobits = BITS >> 6; \
  |  |  |  | 1230|   195k|		VipsPel fourbits = twobits | (twobits << 2); \
  |  |  |  | 1231|   195k|		Q = fourbits | (fourbits << 4); \
  |  |  |  | 1232|   195k|	} \
  |  |  |  | 1233|   195k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   195k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1210|   195k|\
 1211|   195k|			bits <<= bps; \
 1212|   195k|		} \
 1213|  6.26k|	}
tiff2vips.c:rtiff_parse_fourbit:
 1290|    313|{
 1291|    313|	if (rtiff_check_samples(rtiff, 1) ||
  ------------------
  |  Branch (1291:6): [True: 1, False: 312]
  ------------------
 1292|    313|		rtiff_check_bits(rtiff, 4))
  ------------------
  |  Branch (1292:3): [True: 0, False: 312]
  ------------------
 1293|      1|		return -1;
 1294|       |
 1295|    312|	out->Bands = 1;
 1296|    312|	out->BandFmt = VIPS_FORMAT_UCHAR;
 1297|    312|	out->Coding = VIPS_CODING_NONE;
 1298|    312|	out->Type = VIPS_INTERPRETATION_B_W;
 1299|       |
 1300|    312|	rtiff->sfn = rtiff_4bit_line;
 1301|       |
 1302|    312|	return 0;
 1303|    313|}
tiff2vips.c:rtiff_4bit_line:
 1190|  11.4k|	{ \
 1191|  11.4k|		int photometric = rtiff->header.photometric_interpretation; \
 1192|  11.4k|		int mask = photometric == PHOTOMETRIC_MINISBLACK ? 0 : 0xff; \
  ------------------
  |  |  222|  11.4k|#define PHOTOMETRIC_MINISBLACK 1           /* min value is black */
  ------------------
  |  Branch (1192:14): [True: 10.7k, False: 654]
  ------------------
 1193|  11.4k|		int bps = rtiff->header.bits_per_sample; \
 1194|  11.4k|		int load = 8 / bps - 1; \
 1195|  11.4k|\
 1196|  11.4k|		int x; \
 1197|  11.4k|		VipsPel bits; \
 1198|  11.4k|\
 1199|  11.4k|		/* Stop a compiler warning. \
 1200|  11.4k|		 */ \
 1201|  11.4k|		bits = 0; \
 1202|  11.4k|\
 1203|   617k|		for (x = 0; x < n; x++) { \
  ------------------
  |  Branch (1203:15): [True: 606k, False: 11.4k]
  ------------------
 1204|   606k|			if ((x & load) == 0) \
  ------------------
  |  Branch (1204:8): [True: 303k, False: 302k]
  ------------------
 1205|   606k|				/* Flip the bits for miniswhite. \
 1206|   606k|				 */ \
 1207|   606k|				bits = *p++ ^ mask; \
 1208|   606k|\
 1209|   606k|			EXPAND(q[x], bits); \
  ------------------
  |  | 1246|   606k|NBIT_LINE(4, EXPAND4)
  |  |  ------------------
  |  |  |  | 1238|   606k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   606k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  | 1239|   606k|	{ \
  |  |  |  | 1240|   606k|		Q = (BITS & 0xf0) | (BITS >> 4); \
  |  |  |  | 1241|   606k|	} \
  |  |  |  | 1242|   606k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   606k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1210|   606k|\
 1211|   606k|			bits <<= bps; \
 1212|   606k|		} \
 1213|  11.4k|	}
tiff2vips.c:rtiff_parse_greyscale:
 1419|  2.09k|{
 1420|  2.09k|	if (rtiff_check_min_samples(rtiff, 1) ||
  ------------------
  |  Branch (1420:6): [True: 0, False: 2.09k]
  ------------------
 1421|  2.09k|		rtiff_non_fractional(rtiff))
  ------------------
  |  Branch (1421:3): [True: 1, False: 2.09k]
  ------------------
 1422|      1|		return -1;
 1423|       |
 1424|  2.09k|	out->Bands = rtiff->header.samples_per_pixel;
 1425|  2.09k|	out->BandFmt = rtiff_guess_format(rtiff);
 1426|  2.09k|	if (out->BandFmt == VIPS_FORMAT_NOTSET)
  ------------------
  |  Branch (1426:6): [True: 3, False: 2.08k]
  ------------------
 1427|      3|		return -1;
 1428|  2.08k|	out->Coding = VIPS_CODING_NONE;
 1429|       |
 1430|  2.08k|	if (rtiff->header.bits_per_sample == 16)
  ------------------
  |  Branch (1430:6): [True: 780, False: 1.30k]
  ------------------
 1431|    780|		out->Type = VIPS_INTERPRETATION_GREY16;
 1432|  1.30k|	else
 1433|  1.30k|		out->Type = VIPS_INTERPRETATION_B_W;
 1434|       |
 1435|       |	/* rtiff_greyscale_line() doesn't do complex.
 1436|       |	 */
 1437|  2.08k|	if (vips_check_noncomplex("tiff2vips", out))
  ------------------
  |  Branch (1437:6): [True: 0, False: 2.08k]
  ------------------
 1438|      0|		return -1;
 1439|       |
 1440|  2.08k|	rtiff->sfn = rtiff_greyscale_line;
 1441|       |
 1442|  2.08k|	return 0;
 1443|  2.08k|}
tiff2vips.c:rtiff_non_fractional:
  892|  5.46k|{
  893|  5.46k|	if (rtiff->header.bits_per_sample % 8 != 0 ||
  ------------------
  |  Branch (893:6): [True: 135, False: 5.32k]
  ------------------
  894|  5.46k|		rtiff->header.bits_per_sample == 0) {
  ------------------
  |  Branch (894:3): [True: 0, False: 5.32k]
  ------------------
  895|    135|		vips_error("tiff2vips", "%s", _("samples_per_pixel "
  ------------------
  |  |   30|    135|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    135|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  896|    135|										"not a whole number of bytes"));
  897|    135|		return -1;
  898|    135|	}
  899|       |
  900|  5.32k|	return 0;
  901|  5.46k|}
tiff2vips.c:rtiff_guess_format:
  946|  38.4k|{
  947|  38.4k|	int bits_per_sample = rtiff->header.bits_per_sample;
  948|  38.4k|	int sample_format = rtiff->header.sample_format;
  949|       |
  950|  38.4k|	switch (bits_per_sample) {
  951|      0|	case 1:
  ------------------
  |  Branch (951:2): [True: 0, False: 38.4k]
  ------------------
  952|      0|	case 2:
  ------------------
  |  Branch (952:2): [True: 0, False: 38.4k]
  ------------------
  953|      0|	case 4:
  ------------------
  |  Branch (953:2): [True: 0, False: 38.4k]
  ------------------
  954|  12.3k|	case 8:
  ------------------
  |  Branch (954:2): [True: 12.3k, False: 26.0k]
  ------------------
  955|  12.3k|		if (sample_format == SAMPLEFORMAT_INT)
  ------------------
  |  |  335|  12.3k|#define SAMPLEFORMAT_INT 2                 /* !signed integer data */
  ------------------
  |  Branch (955:7): [True: 2.51k, False: 9.81k]
  ------------------
  956|  2.51k|			return VIPS_FORMAT_CHAR;
  957|  9.81k|		if (sample_format == SAMPLEFORMAT_UINT)
  ------------------
  |  |  334|  9.81k|#define SAMPLEFORMAT_UINT 1                /* !unsigned integer data */
  ------------------
  |  Branch (957:7): [True: 9.81k, False: 1]
  ------------------
  958|  9.81k|			return VIPS_FORMAT_UCHAR;
  959|      1|		break;
  960|       |
  961|  13.6k|	case 16:
  ------------------
  |  Branch (961:2): [True: 13.6k, False: 24.7k]
  ------------------
  962|  13.6k|		if (sample_format == SAMPLEFORMAT_INT)
  ------------------
  |  |  335|  13.6k|#define SAMPLEFORMAT_INT 2                 /* !signed integer data */
  ------------------
  |  Branch (962:7): [True: 1.56k, False: 12.0k]
  ------------------
  963|  1.56k|			return VIPS_FORMAT_SHORT;
  964|  12.0k|		if (sample_format == SAMPLEFORMAT_UINT)
  ------------------
  |  |  334|  12.0k|#define SAMPLEFORMAT_UINT 1                /* !unsigned integer data */
  ------------------
  |  Branch (964:7): [True: 8.93k, False: 3.14k]
  ------------------
  965|  8.93k|			return VIPS_FORMAT_USHORT;
  966|  3.14k|		if (sample_format == SAMPLEFORMAT_IEEEFP)
  ------------------
  |  |  336|  3.14k|#define SAMPLEFORMAT_IEEEFP 3              /* !IEEE floating point data */
  ------------------
  |  Branch (966:7): [True: 3.14k, False: 1]
  ------------------
  967|  3.14k|			return VIPS_FORMAT_FLOAT;
  968|      1|		break;
  969|       |
  970|  12.4k|	case 32:
  ------------------
  |  Branch (970:2): [True: 12.4k, False: 25.9k]
  ------------------
  971|  12.4k|		if (sample_format == SAMPLEFORMAT_INT)
  ------------------
  |  |  335|  12.4k|#define SAMPLEFORMAT_INT 2                 /* !signed integer data */
  ------------------
  |  Branch (971:7): [True: 1.98k, False: 10.4k]
  ------------------
  972|  1.98k|			return VIPS_FORMAT_INT;
  973|  10.4k|		if (sample_format == SAMPLEFORMAT_UINT)
  ------------------
  |  |  334|  10.4k|#define SAMPLEFORMAT_UINT 1                /* !unsigned integer data */
  ------------------
  |  Branch (973:7): [True: 5.90k, False: 4.53k]
  ------------------
  974|  5.90k|			return VIPS_FORMAT_UINT;
  975|  4.53k|		if (sample_format == SAMPLEFORMAT_IEEEFP)
  ------------------
  |  |  336|  4.53k|#define SAMPLEFORMAT_IEEEFP 3              /* !IEEE floating point data */
  ------------------
  |  Branch (975:7): [True: 4.53k, False: 2]
  ------------------
  976|  4.53k|			return VIPS_FORMAT_FLOAT;
  977|      2|		break;
  978|       |
  979|      2|	case 64:
  ------------------
  |  Branch (979:2): [True: 0, False: 38.4k]
  ------------------
  980|      0|		if (sample_format == SAMPLEFORMAT_IEEEFP)
  ------------------
  |  |  336|      0|#define SAMPLEFORMAT_IEEEFP 3              /* !IEEE floating point data */
  ------------------
  |  Branch (980:7): [True: 0, False: 0]
  ------------------
  981|      0|			return VIPS_FORMAT_DOUBLE;
  982|      0|		if (sample_format == SAMPLEFORMAT_COMPLEXIEEEFP)
  ------------------
  |  |  339|      0|#define SAMPLEFORMAT_COMPLEXIEEEFP 6       /* !complex ieee floating */
  ------------------
  |  Branch (982:7): [True: 0, False: 0]
  ------------------
  983|      0|			return VIPS_FORMAT_COMPLEX;
  984|      0|		break;
  985|       |
  986|      0|	case 128:
  ------------------
  |  Branch (986:2): [True: 0, False: 38.4k]
  ------------------
  987|      0|		if (sample_format == SAMPLEFORMAT_COMPLEXIEEEFP)
  ------------------
  |  |  339|      0|#define SAMPLEFORMAT_COMPLEXIEEEFP 6       /* !complex ieee floating */
  ------------------
  |  Branch (987:7): [True: 0, False: 0]
  ------------------
  988|      0|			return VIPS_FORMAT_DPCOMPLEX;
  989|      0|		break;
  990|       |
  991|      3|	default:
  ------------------
  |  Branch (991:2): [True: 3, False: 38.4k]
  ------------------
  992|      3|		break;
  993|  38.4k|	}
  994|       |
  995|      7|	vips_error("tiff2vips", "%s", _("unsupported tiff image type\n"));
  ------------------
  |  |   30|      7|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      7|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  996|       |
  997|      7|	return VIPS_FORMAT_NOTSET;
  998|  38.4k|}
tiff2vips.c:rtiff_greyscale_line:
 1356|  33.0k|{
 1357|  33.0k|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1358|  33.0k|	int bits_per_sample = rtiff->header.bits_per_sample;
 1359|  33.0k|	int photometric_interpretation =
 1360|  33.0k|		rtiff->header.photometric_interpretation;
 1361|  33.0k|	VipsBandFormat format = rtiff_guess_format(rtiff);
 1362|       |
 1363|       |	/* Swapping black and white doesn't make sense for the signed formats.
 1364|       |	 */
 1365|  33.0k|	gboolean invert =
 1366|  33.0k|		photometric_interpretation == PHOTOMETRIC_MINISWHITE &&
  ------------------
  |  |  221|  66.1k|#define PHOTOMETRIC_MINISWHITE 0           /* min value is white */
  ------------------
  |  Branch (1366:3): [True: 24.0k, False: 9.00k]
  ------------------
 1367|  33.0k|		vips_band_format_isuint(format);
  ------------------
  |  Branch (1367:3): [True: 15.0k, False: 9.08k]
  ------------------
 1368|       |
 1369|  33.0k|	int x, i;
 1370|       |
 1371|  33.0k|	switch (format) {
 1372|  2.32k|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (1372:2): [True: 2.32k, False: 30.7k]
  ------------------
 1373|  2.32k|		GREY_LOOP(gchar, 0);
  ------------------
  |  | 1308|  2.32k|	{ \
  |  | 1309|  2.32k|		TYPE *p1; \
  |  | 1310|  2.32k|		TYPE *q1; \
  |  | 1311|  2.32k|\
  |  | 1312|  2.32k|		p1 = (TYPE *) p; \
  |  | 1313|  2.32k|		q1 = (TYPE *) q; \
  |  | 1314|  61.6k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 59.3k, False: 2.32k]
  |  |  ------------------
  |  | 1315|  59.3k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 0, False: 59.3k]
  |  |  ------------------
  |  | 1316|  59.3k|				q1[0] = MAX - p1[0]; \
  |  | 1317|  59.3k|			else \
  |  | 1318|  59.3k|				q1[0] = p1[0]; \
  |  | 1319|  59.3k|\
  |  | 1320|   155k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 96.4k, False: 59.3k]
  |  |  ------------------
  |  | 1321|  96.4k|				q1[i] = p1[i]; \
  |  | 1322|  59.3k|\
  |  | 1323|  59.3k|			q1 += samples_per_pixel; \
  |  | 1324|  59.3k|			p1 += samples_per_pixel; \
  |  | 1325|  59.3k|		} \
  |  | 1326|  2.32k|	}
  ------------------
 1374|  2.32k|		break;
 1375|       |
 1376|  8.01k|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (1376:2): [True: 8.01k, False: 25.0k]
  ------------------
 1377|  8.01k|		GREY_LOOP(guchar, UCHAR_MAX);
  ------------------
  |  | 1308|  8.01k|	{ \
  |  | 1309|  8.01k|		TYPE *p1; \
  |  | 1310|  8.01k|		TYPE *q1; \
  |  | 1311|  8.01k|\
  |  | 1312|  8.01k|		p1 = (TYPE *) p; \
  |  | 1313|  8.01k|		q1 = (TYPE *) q; \
  |  | 1314|   217k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 209k, False: 8.01k]
  |  |  ------------------
  |  | 1315|   209k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 167k, False: 42.1k]
  |  |  ------------------
  |  | 1316|   209k|				q1[0] = MAX - p1[0]; \
  |  | 1317|   209k|			else \
  |  | 1318|   209k|				q1[0] = p1[0]; \
  |  | 1319|   209k|\
  |  | 1320|   357k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 147k, False: 209k]
  |  |  ------------------
  |  | 1321|   209k|				q1[i] = p1[i]; \
  |  | 1322|   209k|\
  |  | 1323|   209k|			q1 += samples_per_pixel; \
  |  | 1324|   209k|			p1 += samples_per_pixel; \
  |  | 1325|   209k|		} \
  |  | 1326|  8.01k|	}
  ------------------
 1378|  8.01k|		break;
 1379|       |
 1380|  1.28k|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (1380:2): [True: 1.28k, False: 31.7k]
  ------------------
 1381|  1.28k|		GREY_LOOP(gshort, 0);
  ------------------
  |  | 1308|  1.28k|	{ \
  |  | 1309|  1.28k|		TYPE *p1; \
  |  | 1310|  1.28k|		TYPE *q1; \
  |  | 1311|  1.28k|\
  |  | 1312|  1.28k|		p1 = (TYPE *) p; \
  |  | 1313|  1.28k|		q1 = (TYPE *) q; \
  |  | 1314|  25.4k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 24.2k, False: 1.28k]
  |  |  ------------------
  |  | 1315|  24.2k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 0, False: 24.2k]
  |  |  ------------------
  |  | 1316|  24.2k|				q1[0] = MAX - p1[0]; \
  |  | 1317|  24.2k|			else \
  |  | 1318|  24.2k|				q1[0] = p1[0]; \
  |  | 1319|  24.2k|\
  |  | 1320|  56.7k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 32.5k, False: 24.2k]
  |  |  ------------------
  |  | 1321|  32.5k|				q1[i] = p1[i]; \
  |  | 1322|  24.2k|\
  |  | 1323|  24.2k|			q1 += samples_per_pixel; \
  |  | 1324|  24.2k|			p1 += samples_per_pixel; \
  |  | 1325|  24.2k|		} \
  |  | 1326|  1.28k|	}
  ------------------
 1382|  1.28k|		break;
 1383|       |
 1384|  7.68k|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (1384:2): [True: 7.68k, False: 25.3k]
  ------------------
 1385|  7.68k|		GREY_LOOP(gushort, USHRT_MAX);
  ------------------
  |  | 1308|  7.68k|	{ \
  |  | 1309|  7.68k|		TYPE *p1; \
  |  | 1310|  7.68k|		TYPE *q1; \
  |  | 1311|  7.68k|\
  |  | 1312|  7.68k|		p1 = (TYPE *) p; \
  |  | 1313|  7.68k|		q1 = (TYPE *) q; \
  |  | 1314|   177k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 169k, False: 7.68k]
  |  |  ------------------
  |  | 1315|   169k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 100k, False: 68.5k]
  |  |  ------------------
  |  | 1316|   169k|				q1[0] = MAX - p1[0]; \
  |  | 1317|   169k|			else \
  |  | 1318|   169k|				q1[0] = p1[0]; \
  |  | 1319|   169k|\
  |  | 1320|   367k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 197k, False: 169k]
  |  |  ------------------
  |  | 1321|   197k|				q1[i] = p1[i]; \
  |  | 1322|   169k|\
  |  | 1323|   169k|			q1 += samples_per_pixel; \
  |  | 1324|   169k|			p1 += samples_per_pixel; \
  |  | 1325|   169k|		} \
  |  | 1326|  7.68k|	}
  ------------------
 1386|  7.68k|		break;
 1387|       |
 1388|  1.62k|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (1388:2): [True: 1.62k, False: 31.4k]
  ------------------
 1389|  1.62k|		GREY_LOOP(gint, 0);
  ------------------
  |  | 1308|  1.62k|	{ \
  |  | 1309|  1.62k|		TYPE *p1; \
  |  | 1310|  1.62k|		TYPE *q1; \
  |  | 1311|  1.62k|\
  |  | 1312|  1.62k|		p1 = (TYPE *) p; \
  |  | 1313|  1.62k|		q1 = (TYPE *) q; \
  |  | 1314|  19.1k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 17.5k, False: 1.62k]
  |  |  ------------------
  |  | 1315|  17.5k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 0, False: 17.5k]
  |  |  ------------------
  |  | 1316|  17.5k|				q1[0] = MAX - p1[0]; \
  |  | 1317|  17.5k|			else \
  |  | 1318|  17.5k|				q1[0] = p1[0]; \
  |  | 1319|  17.5k|\
  |  | 1320|  57.4k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 39.9k, False: 17.5k]
  |  |  ------------------
  |  | 1321|  39.9k|				q1[i] = p1[i]; \
  |  | 1322|  17.5k|\
  |  | 1323|  17.5k|			q1 += samples_per_pixel; \
  |  | 1324|  17.5k|			p1 += samples_per_pixel; \
  |  | 1325|  17.5k|		} \
  |  | 1326|  1.62k|	}
  ------------------
 1390|  1.62k|		break;
 1391|       |
 1392|  5.30k|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (1392:2): [True: 5.30k, False: 27.7k]
  ------------------
 1393|  5.30k|		GREY_LOOP(guint, UINT_MAX);
  ------------------
  |  | 1308|  5.30k|	{ \
  |  | 1309|  5.30k|		TYPE *p1; \
  |  | 1310|  5.30k|		TYPE *q1; \
  |  | 1311|  5.30k|\
  |  | 1312|  5.30k|		p1 = (TYPE *) p; \
  |  | 1313|  5.30k|		q1 = (TYPE *) q; \
  |  | 1314|  65.0k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 59.7k, False: 5.30k]
  |  |  ------------------
  |  | 1315|  59.7k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 49.8k, False: 9.86k]
  |  |  ------------------
  |  | 1316|  59.7k|				q1[0] = MAX - p1[0]; \
  |  | 1317|  59.7k|			else \
  |  | 1318|  59.7k|				q1[0] = p1[0]; \
  |  | 1319|  59.7k|\
  |  | 1320|  92.0k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 32.3k, False: 59.7k]
  |  |  ------------------
  |  | 1321|  59.7k|				q1[i] = p1[i]; \
  |  | 1322|  59.7k|\
  |  | 1323|  59.7k|			q1 += samples_per_pixel; \
  |  | 1324|  59.7k|			p1 += samples_per_pixel; \
  |  | 1325|  59.7k|		} \
  |  | 1326|  5.30k|	}
  ------------------
 1394|  5.30k|		break;
 1395|       |
 1396|  6.84k|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (1396:2): [True: 6.84k, False: 26.2k]
  ------------------
 1397|  6.84k|		if (bits_per_sample == 16) {
  ------------------
  |  Branch (1397:7): [True: 2.74k, False: 4.09k]
  ------------------
 1398|  2.74k|			GREY_LOOP_F16;
  ------------------
  |  | 1331|  2.74k|	{ \
  |  | 1332|  2.74k|		gushort *p1; \
  |  | 1333|  2.74k|		float *q1; \
  |  | 1334|  2.74k|\
  |  | 1335|  2.74k|		p1 = (gushort *) p; \
  |  | 1336|  2.74k|		q1 = (float *) q; \
  |  | 1337|  27.9k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1337:15): [True: 25.2k, False: 2.74k]
  |  |  ------------------
  |  | 1338|  25.2k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1338:8): [True: 0, False: 25.2k]
  |  |  ------------------
  |  | 1339|  25.2k|				q1[0] = 1.0 - half_2_float(p1[0]); \
  |  | 1340|  25.2k|			else \
  |  | 1341|  25.2k|				q1[0] = half_2_float(p1[0]); \
  |  | 1342|  25.2k|\
  |  | 1343|  73.1k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1343:16): [True: 47.9k, False: 25.2k]
  |  |  ------------------
  |  | 1344|  47.9k|				q1[i] = half_2_float(p1[i]); \
  |  | 1345|  25.2k|\
  |  | 1346|  25.2k|			q1 += samples_per_pixel; \
  |  | 1347|  25.2k|			p1 += samples_per_pixel; \
  |  | 1348|  25.2k|		} \
  |  | 1349|  2.74k|	}
  ------------------
 1399|  2.74k|		}
 1400|  4.09k|		else {
 1401|  4.09k|			GREY_LOOP(float, 1.0);
  ------------------
  |  | 1308|  4.09k|	{ \
  |  | 1309|  4.09k|		TYPE *p1; \
  |  | 1310|  4.09k|		TYPE *q1; \
  |  | 1311|  4.09k|\
  |  | 1312|  4.09k|		p1 = (TYPE *) p; \
  |  | 1313|  4.09k|		q1 = (TYPE *) q; \
  |  | 1314|  47.3k|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 43.2k, False: 4.09k]
  |  |  ------------------
  |  | 1315|  43.2k|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 0, False: 43.2k]
  |  |  ------------------
  |  | 1316|  43.2k|				q1[0] = MAX - p1[0]; \
  |  | 1317|  43.2k|			else \
  |  | 1318|  43.2k|				q1[0] = p1[0]; \
  |  | 1319|  43.2k|\
  |  | 1320|  81.1k|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 37.9k, False: 43.2k]
  |  |  ------------------
  |  | 1321|  43.2k|				q1[i] = p1[i]; \
  |  | 1322|  43.2k|\
  |  | 1323|  43.2k|			q1 += samples_per_pixel; \
  |  | 1324|  43.2k|			p1 += samples_per_pixel; \
  |  | 1325|  43.2k|		} \
  |  | 1326|  4.09k|	}
  ------------------
 1402|  4.09k|		}
 1403|  6.84k|		break;
 1404|       |
 1405|      0|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (1405:2): [True: 0, False: 33.0k]
  ------------------
 1406|      0|		GREY_LOOP(double, 1.0);
  ------------------
  |  | 1308|      0|	{ \
  |  | 1309|      0|		TYPE *p1; \
  |  | 1310|      0|		TYPE *q1; \
  |  | 1311|      0|\
  |  | 1312|      0|		p1 = (TYPE *) p; \
  |  | 1313|      0|		q1 = (TYPE *) q; \
  |  | 1314|      0|		for (x = 0; x < n; x++) { \
  |  |  ------------------
  |  |  |  Branch (1314:15): [True: 0, False: 0]
  |  |  ------------------
  |  | 1315|      0|			if (invert) \
  |  |  ------------------
  |  |  |  Branch (1315:8): [True: 0, False: 0]
  |  |  ------------------
  |  | 1316|      0|				q1[0] = MAX - p1[0]; \
  |  | 1317|      0|			else \
  |  | 1318|      0|				q1[0] = p1[0]; \
  |  | 1319|      0|\
  |  | 1320|      0|			for (i = 1; i < samples_per_pixel; i++) \
  |  |  ------------------
  |  |  |  Branch (1320:16): [True: 0, False: 0]
  |  |  ------------------
  |  | 1321|      0|				q1[i] = p1[i]; \
  |  | 1322|      0|\
  |  | 1323|      0|			q1 += samples_per_pixel; \
  |  | 1324|      0|			p1 += samples_per_pixel; \
  |  | 1325|      0|		} \
  |  | 1326|      0|	}
  ------------------
 1407|      0|		break;
 1408|       |
 1409|      0|	default:
  ------------------
  |  Branch (1409:2): [True: 0, False: 33.0k]
  ------------------
 1410|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1411|  33.0k|	}
 1412|  33.0k|}
tiff2vips.c:half_2_float:
  441|   237k|{
  442|   237k|	const float sign = (h >> 15) * -2 + 1;
  443|   237k|	const int exp = ((h & 0x7C00) >> 10) - 15;
  444|   237k|	const float prec = (h & 0x03FF);
  445|       |
  446|   237k|	switch (exp) {
  447|  6.29k|	case 16:
  ------------------
  |  Branch (447:2): [True: 6.29k, False: 230k]
  ------------------
  448|  6.29k|		return INFINITY * sign;
  449|   192k|	case -15:
  ------------------
  |  Branch (449:2): [True: 192k, False: 45.0k]
  ------------------
  450|   192k|		return sign / (float) (1 << 14) * (prec / 1024.0);
  451|  38.7k|	default:
  ------------------
  |  Branch (451:2): [True: 38.7k, False: 198k]
  ------------------
  452|  38.7k|		return exp > 0
  ------------------
  |  Branch (452:10): [True: 16.6k, False: 22.0k]
  ------------------
  453|  38.7k|			? sign * (float) (1 << exp) * (1.0 + prec / 1024.0)
  454|  38.7k|			: sign / (float) (1 << -exp) * (1.0 + prec / 1024.0);
  455|   237k|	}
  456|   237k|}
tiff2vips.c:rtiff_parse_palette:
 1579|    170|{
 1580|    170|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1581|    170|	int bits_per_sample = rtiff->header.bits_per_sample;
 1582|       |
 1583|    170|	int len;
 1584|    170|	PaletteRead *read;
 1585|    170|	int i;
 1586|       |
 1587|    170|	if (rtiff_check_bits_palette(rtiff) ||
  ------------------
  |  Branch (1587:6): [True: 0, False: 170]
  ------------------
 1588|    170|		rtiff_check_min_samples(rtiff, 1))
  ------------------
  |  Branch (1588:3): [True: 0, False: 170]
  ------------------
 1589|      0|		return -1;
 1590|    170|	len = 1 << bits_per_sample;
 1591|       |
 1592|    170|	if (!(read = VIPS_NEW(out, PaletteRead)) ||
  ------------------
  |  |   70|    170|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    170|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    170|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    170|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    170|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1592:6): [True: 0, False: 170]
  ------------------
 1593|    170|		!(read->red8 = VIPS_ARRAY(out, len, VipsPel)) ||
  ------------------
  |  |   72|    170|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    170|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    170|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    170|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    170|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1593:3): [True: 0, False: 170]
  ------------------
 1594|    170|		!(read->green8 = VIPS_ARRAY(out, len, VipsPel)) ||
  ------------------
  |  |   72|    170|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    170|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    170|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    170|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    170|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1594:3): [True: 0, False: 170]
  ------------------
 1595|    170|		!(read->blue8 = VIPS_ARRAY(out, len, VipsPel)))
  ------------------
  |  |   72|    170|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|    170|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|    170|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|    170|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|    170|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1595:3): [True: 0, False: 170]
  ------------------
 1596|      0|		return -1;
 1597|       |
 1598|       |	/* Get maps, convert to 8-bit data.
 1599|       |	 */
 1600|    170|	if (!TIFFGetField(rtiff->tiff,
  ------------------
  |  Branch (1600:6): [True: 0, False: 170]
  ------------------
 1601|    170|			TIFFTAG_COLORMAP,
  ------------------
  |  |  309|    170|#define TIFFTAG_COLORMAP 320               /* RGB map for palette image */
  ------------------
 1602|    170|			&read->red16, &read->green16, &read->blue16)) {
 1603|      0|		vips_error("tiff2vips", "%s", _("bad colormap"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1604|      0|		return -1;
 1605|      0|	}
 1606|       |
 1607|       |	/* Old-style colourmaps were 8-bit. If all the top bytes are zero,
 1608|       |	 * assume we have one of these.
 1609|       |	 *
 1610|       |	 * See: https://github.com/libvips/libvips/issues/220
 1611|       |	 */
 1612|  3.40k|	for (i = 0; i < len; i++)
  ------------------
  |  Branch (1612:14): [True: 3.37k, False: 28]
  ------------------
 1613|  3.37k|		if ((read->red16[i] >> 8) |
  ------------------
  |  Branch (1613:7): [True: 142, False: 3.23k]
  ------------------
 1614|  3.37k|			(read->green16[i] >> 8) |
 1615|  3.37k|			(read->blue16[i] >> 8))
 1616|    142|			break;
 1617|    170|	if (i < len)
  ------------------
  |  Branch (1617:6): [True: 142, False: 28]
  ------------------
 1618|  2.35k|		for (i = 0; i < len; i++) {
  ------------------
  |  Branch (1618:15): [True: 2.21k, False: 142]
  ------------------
 1619|  2.21k|			read->red8[i] = read->red16[i] >> 8;
 1620|  2.21k|			read->green8[i] = read->green16[i] >> 8;
 1621|  2.21k|			read->blue8[i] = read->blue16[i] >> 8;
 1622|  2.21k|		}
 1623|     28|	else {
 1624|     28|		g_warning("%s", _("assuming 8-bit palette"));
  ------------------
  |  |  338|     28|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|     28|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|     28|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|     28|                               __VA_ARGS__)
  ------------------
 1625|       |
 1626|  2.94k|		for (i = 0; i < len; i++) {
  ------------------
  |  Branch (1626:15): [True: 2.91k, False: 28]
  ------------------
 1627|  2.91k|			read->red8[i] = read->red16[i] & 0xff;
 1628|  2.91k|			read->green8[i] = read->green16[i] & 0xff;
 1629|  2.91k|			read->blue8[i] = read->blue16[i] & 0xff;
 1630|  2.91k|		}
 1631|     28|	}
 1632|       |
 1633|       |	/* Are all the maps equal? We have a mono image.
 1634|       |	 */
 1635|    170|	read->mono = TRUE;
  ------------------
  |  |  209|    170|#define TRUE    1
  ------------------
 1636|    621|	for (i = 0; i < len; i++)
  ------------------
  |  Branch (1636:14): [True: 602, False: 19]
  ------------------
 1637|    602|		if (read->red16[i] != read->green16[i] ||
  ------------------
  |  Branch (1637:7): [True: 142, False: 460]
  ------------------
 1638|    602|			read->green16[i] != read->blue16[i]) {
  ------------------
  |  Branch (1638:4): [True: 9, False: 451]
  ------------------
 1639|    151|			read->mono = FALSE;
  ------------------
  |  |  206|    151|#define FALSE   0               /* values of boolean */
  ------------------
 1640|    151|			break;
 1641|    151|		}
 1642|       |
 1643|       |	/* There's a TIFF extension, INDEXED, that is the preferred way to
 1644|       |	 * encode mono palette images, but few applications support it. So we
 1645|       |	 * just search the colormap.
 1646|       |	 */
 1647|       |
 1648|    170|	if (bits_per_sample <= 8)
  ------------------
  |  Branch (1648:6): [True: 170, False: 0]
  ------------------
 1649|    170|		out->BandFmt = VIPS_FORMAT_UCHAR;
 1650|      0|	else
 1651|      0|		out->BandFmt = VIPS_FORMAT_USHORT;
 1652|    170|	out->Coding = VIPS_CODING_NONE;
 1653|       |
 1654|    170|	if (read->mono) {
  ------------------
  |  Branch (1654:6): [True: 19, False: 151]
  ------------------
 1655|     19|		out->Bands = samples_per_pixel;
 1656|     19|		if (bits_per_sample <= 8)
  ------------------
  |  Branch (1656:7): [True: 19, False: 0]
  ------------------
 1657|     19|			out->Type = VIPS_INTERPRETATION_B_W;
 1658|      0|		else
 1659|      0|			out->Type = VIPS_INTERPRETATION_GREY16;
 1660|     19|	}
 1661|    151|	else {
 1662|    151|		out->Bands = samples_per_pixel + 2;
 1663|    151|		if (bits_per_sample <= 8)
  ------------------
  |  Branch (1663:7): [True: 151, False: 0]
  ------------------
 1664|    151|			out->Type = VIPS_INTERPRETATION_sRGB;
 1665|      0|		else
 1666|      0|			out->Type = VIPS_INTERPRETATION_RGB16;
 1667|    151|	}
 1668|       |
 1669|    170|	rtiff->client = read;
 1670|    170|	if (bits_per_sample < 8)
  ------------------
  |  Branch (1670:6): [True: 153, False: 17]
  ------------------
 1671|    153|		rtiff->sfn = rtiff_palette_line_bit;
 1672|     17|	else if (bits_per_sample == 8)
  ------------------
  |  Branch (1672:11): [True: 17, False: 0]
  ------------------
 1673|     17|		rtiff->sfn = rtiff_palette_line8;
 1674|      0|	else if (bits_per_sample == 16)
  ------------------
  |  Branch (1674:11): [True: 0, False: 0]
  ------------------
 1675|      0|		rtiff->sfn = rtiff_palette_line16;
 1676|      0|	else
 1677|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1678|       |
 1679|    170|	return 0;
 1680|    170|}
tiff2vips.c:rtiff_check_bits_palette:
  929|    170|{
  930|    170|	if (rtiff->header.bits_per_sample != 16 &&
  ------------------
  |  Branch (930:6): [True: 170, False: 0]
  ------------------
  931|    170|		rtiff->header.bits_per_sample != 8 &&
  ------------------
  |  Branch (931:3): [True: 153, False: 17]
  ------------------
  932|    170|		rtiff->header.bits_per_sample != 4 &&
  ------------------
  |  Branch (932:3): [True: 137, False: 16]
  ------------------
  933|    170|		rtiff->header.bits_per_sample != 2 &&
  ------------------
  |  Branch (933:3): [True: 14, False: 123]
  ------------------
  934|    170|		rtiff->header.bits_per_sample != 1) {
  ------------------
  |  Branch (934:3): [True: 0, False: 14]
  ------------------
  935|      0|		vips_error("tiff2vips",
  936|      0|			_("%d bits per sample palette image not supported"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  937|      0|			rtiff->header.bits_per_sample);
  938|      0|		return -1;
  939|      0|	}
  940|       |
  941|    170|	return 0;
  942|    170|}
tiff2vips.c:rtiff_palette_line_bit:
 1466|  1.35k|{
 1467|  1.35k|	PaletteRead *read = (PaletteRead *) client;
 1468|  1.35k|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1469|  1.35k|	int bits_per_sample = rtiff->header.bits_per_sample;
 1470|       |
 1471|  1.35k|	int bit;
 1472|  1.35k|	VipsPel data;
 1473|  1.35k|	int x;
 1474|       |
 1475|  1.35k|	bit = 0;
 1476|  1.35k|	data = 0;
 1477|  37.6k|	for (x = 0; x < n * samples_per_pixel; x++) {
  ------------------
  |  Branch (1477:14): [True: 36.2k, False: 1.35k]
  ------------------
 1478|  36.2k|		int i;
 1479|       |
 1480|  36.2k|		if (bit <= 0) {
  ------------------
  |  Branch (1480:7): [True: 9.32k, False: 26.9k]
  ------------------
 1481|  9.32k|			data = *p++;
 1482|  9.32k|			bit = 8;
 1483|  9.32k|		}
 1484|       |
 1485|  36.2k|		i = data >> (8 - bits_per_sample);
 1486|  36.2k|		data <<= bits_per_sample;
 1487|  36.2k|		bit -= bits_per_sample;
 1488|       |
 1489|       |		/* The first band goes through the LUT, subsequent bands are
 1490|       |		 * left-justified and copied.
 1491|       |		 */
 1492|  36.2k|		if (x % samples_per_pixel == 0) {
  ------------------
  |  Branch (1492:7): [True: 35.9k, False: 265]
  ------------------
 1493|  35.9k|			if (read->mono)
  ------------------
  |  Branch (1493:8): [True: 1.42k, False: 34.5k]
  ------------------
 1494|  1.42k|				*q++ = read->red8[i];
 1495|  34.5k|			else {
 1496|  34.5k|				q[0] = read->red8[i];
 1497|  34.5k|				q[1] = read->green8[i];
 1498|  34.5k|				q[2] = read->blue8[i];
 1499|  34.5k|				q += 3;
 1500|  34.5k|			}
 1501|  35.9k|		}
 1502|    265|		else
 1503|    265|			*q++ = VIPS_LSHIFT_INT(i, 8 - bits_per_sample);
  ------------------
  |  |   87|    265|#define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N)))
  ------------------
 1504|  36.2k|	}
 1505|  1.35k|}
tiff2vips.c:rtiff_palette_line8:
 1512|     32|{
 1513|     32|	PaletteRead *read = (PaletteRead *) client;
 1514|     32|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1515|       |
 1516|     32|	int x;
 1517|     32|	int s;
 1518|       |
 1519|    321|	for (x = 0; x < n; x++) {
  ------------------
  |  Branch (1519:14): [True: 289, False: 32]
  ------------------
 1520|    289|		int i = p[0];
 1521|       |
 1522|    289|		if (read->mono)
  ------------------
  |  Branch (1522:7): [True: 0, False: 289]
  ------------------
 1523|      0|			q[0] = read->red8[i];
 1524|    289|		else {
 1525|    289|			q[0] = read->red8[i];
 1526|    289|			q[1] = read->green8[i];
 1527|    289|			q[2] = read->blue8[i];
 1528|    289|			q += 2;
 1529|    289|		}
 1530|       |
 1531|    289|		for (s = 1; s < samples_per_pixel; s++)
  ------------------
  |  Branch (1531:15): [True: 0, False: 289]
  ------------------
 1532|      0|			q[s] = p[s];
 1533|       |
 1534|    289|		q += samples_per_pixel;
 1535|    289|		p += samples_per_pixel;
 1536|    289|	}
 1537|     32|}
tiff2vips.c:rtiff_parse_copy:
 1719|  3.37k|{
 1720|  3.37k|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 1721|  3.37k|	int photometric_interpretation =
 1722|  3.37k|		rtiff->header.photometric_interpretation;
 1723|  3.37k|	int bits_per_sample = rtiff->header.bits_per_sample;
 1724|  3.37k|	int sample_format = rtiff->header.sample_format;
 1725|  3.37k|	int inkset = rtiff->header.inkset;
 1726|       |
 1727|  3.37k|	if (rtiff_non_fractional(rtiff))
  ------------------
  |  Branch (1727:6): [True: 134, False: 3.23k]
  ------------------
 1728|    134|		return -1;
 1729|       |
 1730|  3.23k|	out->Bands = samples_per_pixel;
 1731|  3.23k|	out->BandFmt = rtiff_guess_format(rtiff);
 1732|  3.23k|	if (out->BandFmt == VIPS_FORMAT_NOTSET)
  ------------------
  |  Branch (1732:6): [True: 4, False: 3.23k]
  ------------------
 1733|      4|		return -1;
 1734|  3.23k|	out->Coding = VIPS_CODING_NONE;
 1735|       |
 1736|  3.23k|	if (samples_per_pixel >= 3 &&
  ------------------
  |  Branch (1736:6): [True: 2.21k, False: 1.01k]
  ------------------
 1737|  3.23k|		(photometric_interpretation == PHOTOMETRIC_RGB ||
  ------------------
  |  |  223|  4.42k|#define PHOTOMETRIC_RGB 2                  /* RGB color model */
  ------------------
  |  Branch (1737:4): [True: 524, False: 1.69k]
  ------------------
 1738|  2.21k|		photometric_interpretation == PHOTOMETRIC_YCBCR)) {
  ------------------
  |  |  227|  1.69k|#define PHOTOMETRIC_YCBCR 6                /* !CCIR 601 */
  ------------------
  |  Branch (1738:3): [True: 516, False: 1.17k]
  ------------------
 1739|  1.04k|		if (out->BandFmt == VIPS_FORMAT_USHORT)
  ------------------
  |  Branch (1739:7): [True: 273, False: 767]
  ------------------
 1740|    273|			out->Type = VIPS_INTERPRETATION_RGB16;
 1741|    767|		else if (!vips_band_format_isint(out->BandFmt))
  ------------------
  |  Branch (1741:12): [True: 112, False: 655]
  ------------------
 1742|       |			/* Most float images use 0 - 1 for black - white.
 1743|       |			 * Photoshop uses 0 - 1 and no gamma.
 1744|       |			 */
 1745|    112|			out->Type = VIPS_INTERPRETATION_scRGB;
 1746|    655|		else
 1747|    655|			out->Type = VIPS_INTERPRETATION_sRGB;
 1748|  1.04k|	}
 1749|  2.19k|	else if (samples_per_pixel >= 3 &&
  ------------------
  |  Branch (1749:11): [True: 1.17k, False: 1.01k]
  ------------------
 1750|  2.19k|		photometric_interpretation == PHOTOMETRIC_CIELAB)
  ------------------
  |  |  228|  1.17k|#define PHOTOMETRIC_CIELAB 8               /* !1976 CIE L*a*b* */
  ------------------
  |  Branch (1750:3): [True: 57, False: 1.11k]
  ------------------
 1751|     57|		out->Type = VIPS_INTERPRETATION_LAB;
 1752|  2.13k|	else if (photometric_interpretation == PHOTOMETRIC_SEPARATED &&
  ------------------
  |  |  226|  4.27k|#define PHOTOMETRIC_SEPARATED 5            /* !color separations */
  ------------------
  |  Branch (1752:11): [True: 540, False: 1.59k]
  ------------------
 1753|  2.13k|		samples_per_pixel >= 4 &&
  ------------------
  |  Branch (1753:3): [True: 425, False: 115]
  ------------------
 1754|  2.13k|		inkset == INKSET_CMYK)
  ------------------
  |  |  323|    425|#define INKSET_CMYK 1                      /* !cyan-magenta-yellow-black color */
  ------------------
  |  Branch (1754:3): [True: 422, False: 3]
  ------------------
 1755|    422|		out->Type = VIPS_INTERPRETATION_CMYK;
 1756|  1.71k|	else
 1757|  1.71k|		out->Type = VIPS_INTERPRETATION_MULTIBAND;
 1758|       |
 1759|  3.23k|	rtiff->client = out;
 1760|       |
 1761|  3.23k|	if (bits_per_sample == 16 && sample_format == SAMPLEFORMAT_IEEEFP) {
  ------------------
  |  |  336|  1.13k|#define SAMPLEFORMAT_IEEEFP 3              /* !IEEE floating point data */
  ------------------
  |  Branch (1761:6): [True: 1.13k, False: 2.09k]
  |  Branch (1761:31): [True: 220, False: 918]
  ------------------
 1762|    220|		rtiff->sfn = rtiff_memcpy_f16_line;
 1763|    220|	}
 1764|  3.01k|	else {
 1765|  3.01k|		rtiff->sfn = rtiff_memcpy_line;
 1766|       |
 1767|       |		/* We expand YCBCR images to RGB using JPEGCOLORMODE_RGB, and this
 1768|       |		 * means we need a slightly larger read buffer for the edge pixels. In
 1769|       |		 * turn, this means we can't just memcpy to libvips regions.
 1770|       |		 */
 1771|  3.01k|		rtiff->memcpy = photometric_interpretation != PHOTOMETRIC_YCBCR;
  ------------------
  |  |  227|  3.01k|#define PHOTOMETRIC_YCBCR 6                /* !CCIR 601 */
  ------------------
 1772|  3.01k|	}
 1773|       |
 1774|  3.23k|	return 0;
 1775|  3.23k|}
tiff2vips.c:rtiff_memcpy_f16_line:
 1697|  4.10k|{
 1698|  4.10k|	VipsImage *im = (VipsImage *) client;
 1699|  4.10k|	size_t len = n * im->Bands;
 1700|       |
 1701|  4.10k|	if (im->BandFmt == VIPS_FORMAT_COMPLEX ||
  ------------------
  |  Branch (1701:6): [True: 0, False: 4.10k]
  ------------------
 1702|  4.10k|		im->BandFmt == VIPS_FORMAT_DPCOMPLEX)
  ------------------
  |  Branch (1702:3): [True: 0, False: 4.10k]
  ------------------
 1703|      0|		len *= 2;
 1704|       |
 1705|  4.10k|	int i;
 1706|       |
 1707|  4.10k|	gushort *restrict hp = (gushort *) p;
 1708|  4.10k|	float *restrict fq = (float *) q;
 1709|       |
 1710|   168k|	for (i = 0; i < len; i++)
  ------------------
  |  Branch (1710:14): [True: 164k, False: 4.10k]
  ------------------
 1711|   164k|		fq[i] = half_2_float(hp[i]);
 1712|  4.10k|}
tiff2vips.c:get_resolution:
  509|  13.8k|{
  510|  13.8k|	float x, y;
  511|  13.8k|	int ru;
  512|       |
  513|  13.8k|	if (TIFFGetFieldDefaulted(tiff, TIFFTAG_XRESOLUTION, &x) &&
  ------------------
  |  |  262|  13.8k|#define TIFFTAG_XRESOLUTION 282            /* pixels/resolution in x */
  ------------------
  |  Branch (513:6): [True: 634, False: 13.1k]
  ------------------
  514|  13.8k|		TIFFGetFieldDefaulted(tiff, TIFFTAG_YRESOLUTION, &y) &&
  ------------------
  |  |  263|    634|#define TIFFTAG_YRESOLUTION 283            /* pixels/resolution in y */
  ------------------
  |  Branch (514:3): [True: 634, False: 0]
  ------------------
  515|  13.8k|		tfget16(tiff, TIFFTAG_RESOLUTIONUNIT, &ru)) {
  ------------------
  |  |  287|    634|#define TIFFTAG_RESOLUTIONUNIT 296         /* units of resolutions */
  ------------------
  |  Branch (515:3): [True: 634, False: 0]
  ------------------
  516|    634|		switch (ru) {
  517|    233|		case RESUNIT_NONE:
  ------------------
  |  |  288|    233|#define RESUNIT_NONE 1                     /* no meaningful units */
  ------------------
  |  Branch (517:3): [True: 233, False: 401]
  ------------------
  518|    233|			break;
  519|       |
  520|    398|		case RESUNIT_INCH:
  ------------------
  |  |  289|    398|#define RESUNIT_INCH 2                     /* english */
  ------------------
  |  Branch (520:3): [True: 398, False: 236]
  ------------------
  521|       |			/* In pixels-per-inch ... convert to mm.
  522|       |			 */
  523|    398|			x /= 10.0 * 2.54;
  524|    398|			y /= 10.0 * 2.54;
  525|    398|			vips_image_set_string(out,
  526|    398|				VIPS_META_RESOLUTION_UNIT, "in");
  ------------------
  |  |   93|    398|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
  527|    398|			break;
  528|       |
  529|      3|		case RESUNIT_CENTIMETER:
  ------------------
  |  |  290|      3|#define RESUNIT_CENTIMETER 3               /* metric */
  ------------------
  |  Branch (529:3): [True: 3, False: 631]
  ------------------
  530|       |			/* In pixels-per-centimetre ... convert to mm.
  531|       |			 */
  532|      3|			x /= 10.0;
  533|      3|			y /= 10.0;
  534|      3|			vips_image_set_string(out,
  535|      3|				VIPS_META_RESOLUTION_UNIT, "cm");
  ------------------
  |  |   93|      3|#define VIPS_META_RESOLUTION_UNIT "resolution-unit"
  ------------------
  536|      3|			break;
  537|       |
  538|      0|		default:
  ------------------
  |  Branch (538:3): [True: 0, False: 634]
  ------------------
  539|      0|			vips_error("tiff2vips",
  540|      0|				"%s", _("unknown resolution unit"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  541|      0|			return -1;
  542|    634|		}
  543|    634|	}
  544|  13.1k|	else {
  545|       |		/* We used to warn about missing res data, but it happens so
  546|       |		 * often and is so harmless, why bother.
  547|       |		 */
  548|  13.1k|		x = 1.0;
  549|  13.1k|		y = 1.0;
  550|  13.1k|	}
  551|       |
  552|  13.8k|	out->Xres = x;
  553|  13.8k|	out->Yres = y;
  554|       |
  555|  13.8k|	return 0;
  556|  13.8k|}
tiff2vips.c:rtiff_read_tilewise:
 2594|  1.41k|{
 2595|  1.41k|	int tile_width = rtiff->header.tile_width;
 2596|  1.41k|	int tile_height = rtiff->header.tile_height;
 2597|  1.41k|	VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 4);
  ------------------
  |  |  433|  1.41k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  1.41k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.41k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2598|       |
 2599|  1.41k|	VipsImage *in;
 2600|       |
 2601|       |#ifdef DEBUG
 2602|       |	printf("tiff2vips: rtiff_read_tilewise\n");
 2603|       |#endif /*DEBUG*/
 2604|       |
 2605|       |	/* I don't have a sample images for tiled + separate, ban it for now.
 2606|       |	 */
 2607|  1.41k|	if (rtiff->header.separate) {
  ------------------
  |  Branch (2607:6): [True: 6, False: 1.40k]
  ------------------
 2608|      6|		vips_error("tiff2vips", "%s", _("tiled separate planes not supported"));
  ------------------
  |  |   30|      6|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      6|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2609|      6|		return -1;
 2610|      6|	}
 2611|       |
 2612|       |	/* Read to this image, then cache to out, see below.
 2613|       |	 */
 2614|  1.40k|	t[0] = vips_image_new();
 2615|       |
 2616|  1.40k|	if (rtiff_set_header(rtiff, t[0]))
  ------------------
  |  Branch (2616:6): [True: 0, False: 1.40k]
  ------------------
 2617|      0|		return -1;
 2618|       |
 2619|       |	/* Double check: in memcpy mode, the vips tilesize should exactly
 2620|       |	 * match the tifftile size.
 2621|       |	 */
 2622|  1.40k|	if (rtiff->memcpy) {
  ------------------
  |  Branch (2622:6): [True: 282, False: 1.12k]
  ------------------
 2623|    282|		size_t vips_tile_size = VIPS_IMAGE_SIZEOF_PEL(t[0]) *
  ------------------
  |  |  384|    282|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|    282|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
 2624|    282|			tile_width * tile_height;
 2625|       |
 2626|    282|		if (rtiff->header.tile_size != vips_tile_size) {
  ------------------
  |  Branch (2626:7): [True: 0, False: 282]
  ------------------
 2627|      0|			vips_error("tiff2vips", "%s", _("unsupported tiff image type"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2628|      0|			return -1;
 2629|      0|		}
 2630|    282|	}
 2631|       |
 2632|       |	/* Generate to out, adding a cache. Enough tiles for two complete rows.
 2633|       |	 * Set "threaded", so we allow many tiles to be read at once. We lock
 2634|       |	 * around each tile read.
 2635|       |	 */
 2636|  1.40k|	if (
 2637|  1.40k|		vips_image_generate(t[0],
  ------------------
  |  Branch (2637:3): [True: 0, False: 1.40k]
  ------------------
 2638|  1.40k|			rtiff_seq_start, rtiff_fill_region, rtiff_seq_stop,
 2639|  1.40k|			rtiff, NULL) ||
 2640|  1.40k|		vips_tilecache(t[0], &t[1],
  ------------------
  |  Branch (2640:3): [True: 0, False: 1.40k]
  ------------------
 2641|  1.40k|			"tile_width", tile_width,
 2642|  1.40k|			"tile_height", tile_height,
 2643|  1.40k|			"max_tiles", 2 * (1 + t[0]->Xsize / tile_width),
 2644|  1.40k|			"threaded", TRUE,
  ------------------
  |  |  209|  1.40k|#define TRUE    1
  ------------------
 2645|  1.40k|			NULL) ||
 2646|  1.40k|		rtiff_unpremultiply(rtiff, t[1], &t[2]))
  ------------------
  |  Branch (2646:3): [True: 0, False: 1.40k]
  ------------------
 2647|      0|		return -1;
 2648|  1.40k|	in = t[2];
 2649|       |
 2650|       |	/* Only do this if we have to.
 2651|       |	 */
 2652|  1.40k|	if (rtiff->autorotate &&
  ------------------
  |  Branch (2652:6): [True: 0, False: 1.40k]
  ------------------
 2653|  1.40k|		vips_image_get_orientation(in) != 1) {
  ------------------
  |  Branch (2653:3): [True: 0, False: 0]
  ------------------
 2654|      0|		if (vips_autorot(in, &t[3], NULL))
  ------------------
  |  Branch (2654:7): [True: 0, False: 0]
  ------------------
 2655|      0|			return -1;
 2656|      0|		in = t[3];
 2657|      0|	}
 2658|       |
 2659|  1.40k|	if (vips_image_write(in, out))
  ------------------
  |  Branch (2659:6): [True: 0, False: 1.40k]
  ------------------
 2660|      0|		return -1;
 2661|       |
 2662|  1.40k|	return 0;
 2663|  1.40k|}
tiff2vips.c:rtiff_seq_start:
 1957|  1.40k|{
 1958|  1.40k|	Rtiff *rtiff = (Rtiff *) a;
 1959|  1.40k|	RtiffSeq *seq;
 1960|       |
 1961|  1.40k|	if (!(seq = VIPS_NEW(out, RtiffSeq)))
  ------------------
  |  |   70|  1.40k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  1.40k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  1.40k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  1.40k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  1.40k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1961:6): [True: 0, False: 1.40k]
  ------------------
 1962|      0|		return NULL;
 1963|  1.40k|	seq->rtiff = rtiff;
 1964|  1.40k|	if (!(seq->buf = vips_malloc(NULL, rtiff->header.tile_size)))
  ------------------
  |  Branch (1964:6): [True: 0, False: 1.40k]
  ------------------
 1965|      0|		return NULL;
 1966|       |
 1967|       |	/* If we will be decompressing, we need a buffer large enough to hold
 1968|       |	 * the largest compressed tile in any page.
 1969|       |	 *
 1970|       |	 * Allocate a buffer 2x the uncompressed tile size ... much simpler
 1971|       |	 * than searching every page for the largest tile with
 1972|       |	 * TIFFTAG_TILEBYTECOUNTS.
 1973|       |	 */
 1974|  1.40k|	if (rtiff->header.we_decompress) {
  ------------------
  |  Branch (1974:6): [True: 108, False: 1.30k]
  ------------------
 1975|    108|		seq->compressed_buf_length = 2 * rtiff->header.tile_size;
 1976|    108|		if (!(seq->compressed_buf = VIPS_MALLOC(NULL,
  ------------------
  |  |   68|    108|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  ------------------
  |  |  |  |  433|    108|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|    108|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|    108|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1976:7): [True: 0, False: 108]
  ------------------
 1977|    108|				  seq->compressed_buf_length)))
 1978|      0|			return NULL;
 1979|    108|	}
 1980|       |
 1981|  1.40k|	return (void *) seq;
 1982|  1.40k|}
tiff2vips.c:rtiff_fill_region:
 2503|  18.1k|{
 2504|  18.1k|	Rtiff *rtiff = (Rtiff *) a;
 2505|  18.1k|	int tile_width = rtiff->header.tile_width;
 2506|  18.1k|	int tile_height = rtiff->header.tile_height;
 2507|  18.1k|	int page_width = rtiff->header.width;
 2508|  18.1k|	int page_height = rtiff->header.height;
 2509|  18.1k|	VipsRect *r = &out->valid;
 2510|  18.1k|	int page_no = r->top / page_height;
 2511|  18.1k|	int page_y = r->top % page_height;
 2512|       |
 2513|  18.1k|	VipsGenerateFn generate;
 2514|       |
 2515|       |#ifdef DEBUG_VERBOSE
 2516|       |	printf("rtiff_fill_region: left = %d, top = %d, "
 2517|       |		   "width = %d, height = %d\n",
 2518|       |		r->left, r->top, r->width, r->height);
 2519|       |#endif /*DEBUG_VERBOSE*/
 2520|       |
 2521|       |	/* Special case: we are filling a single cache tile exactly sized to
 2522|       |	 * match the tiff tile, and we have no repacking to do for this format.
 2523|       |	 *
 2524|       |	 * If we are not on the first page, pages must be a multiple of the
 2525|       |	 * tile size of we'll miss alignment.
 2526|       |	 */
 2527|  18.1k|	if ((page_no == 0 || page_height % tile_height == 0) &&
  ------------------
  |  Branch (2527:7): [True: 18.1k, False: 0]
  |  Branch (2527:23): [True: 0, False: 0]
  ------------------
 2528|  18.1k|		r->left % tile_width == 0 &&
  ------------------
  |  Branch (2528:3): [True: 18.1k, False: 0]
  ------------------
 2529|  18.1k|		r->top % tile_height == 0 &&
  ------------------
  |  Branch (2529:3): [True: 18.1k, False: 0]
  ------------------
 2530|  18.1k|		r->width == tile_width &&
  ------------------
  |  Branch (2530:3): [True: 14.5k, False: 3.64k]
  ------------------
 2531|  18.1k|		r->height == tile_height &&
  ------------------
  |  Branch (2531:3): [True: 9.95k, False: 4.60k]
  ------------------
 2532|  18.1k|		r->left + tile_width <= page_width &&
  ------------------
  |  Branch (2532:3): [True: 9.95k, False: 0]
  ------------------
 2533|  18.1k|		page_y + tile_height <= page_height &&
  ------------------
  |  Branch (2533:3): [True: 9.95k, False: 0]
  ------------------
 2534|  18.1k|		VIPS_REGION_LSKIP(out) == VIPS_REGION_SIZEOF_LINE(out) &&
  ------------------
  |  |  195|  9.95k|	((size_t) ((R)->bpl))
  ------------------
              		VIPS_REGION_LSKIP(out) == VIPS_REGION_SIZEOF_LINE(out) &&
  ------------------
  |  |  203|  28.1k|	((size_t) ((R)->valid.width * VIPS_REGION_SIZEOF_PEL(R)))
  |  |  ------------------
  |  |  |  |  201|  9.95k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  9.95k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  9.95k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2534:3): [True: 9.95k, False: 0]
  ------------------
 2535|  18.1k|		rtiff->memcpy)
  ------------------
  |  Branch (2535:3): [True: 1.47k, False: 8.47k]
  ------------------
 2536|  1.47k|		generate = rtiff_fill_region_aligned;
 2537|  16.7k|	else
 2538|  16.7k|		generate = rtiff_fill_region_unaligned;
 2539|       |
 2540|  18.1k|	VIPS_GATE_START("rtiff_fill_region: work");
  ------------------
  |  |   41|  18.1k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  18.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  18.1k|	{ \
  |  |   43|  18.1k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 18.1k]
  |  |  ------------------
  |  |   44|  18.1k|			vips__thread_gate_start(NAME); \
  |  |   45|  18.1k|	} \
  |  |   46|  18.1k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  18.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2541|       |
 2542|  18.1k|	if (generate(out, vseq, a, b, stop)) {
  ------------------
  |  Branch (2542:6): [True: 108, False: 18.0k]
  ------------------
 2543|    108|		VIPS_GATE_STOP("rtiff_fill_region: work");
  ------------------
  |  |   49|    108|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    108|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|    108|	{ \
  |  |   51|    108|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 108]
  |  |  ------------------
  |  |   52|    108|			vips__thread_gate_stop(NAME); \
  |  |   53|    108|	} \
  |  |   54|    108|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    108|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2544|    108|		return -1;
 2545|    108|	}
 2546|       |
 2547|  18.1k|	VIPS_GATE_STOP("rtiff_fill_region: work");
  ------------------
  |  |   49|  18.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  18.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  18.0k|	{ \
  |  |   51|  18.0k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 18.0k]
  |  |  ------------------
  |  |   52|  18.0k|			vips__thread_gate_stop(NAME); \
  |  |   53|  18.0k|	} \
  |  |   54|  18.1k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  18.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2548|       |
 2549|  18.0k|	return 0;
 2550|  18.1k|}
tiff2vips.c:rtiff_fill_region_aligned:
 2367|  1.47k|{
 2368|  1.47k|	RtiffSeq *seq = (RtiffSeq *) vseq;
 2369|  1.47k|	Rtiff *rtiff = (Rtiff *) a;
 2370|  1.47k|	VipsRect *r = &out->valid;
 2371|  1.47k|	int page_height = rtiff->header.height;
 2372|  1.47k|	int page_no = r->top / page_height;
 2373|  1.47k|	int page_y = r->top % page_height;
 2374|       |
 2375|  1.47k|	g_assert((r->left % rtiff->header.tile_width) == 0);
  ------------------
  |  |  166|  1.47k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.47k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.47k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2376|  1.47k|	g_assert((r->top % rtiff->header.tile_height) == 0);
  ------------------
  |  |  166|  1.47k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.47k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.47k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2377|  1.47k|	g_assert(r->width == rtiff->header.tile_width);
  ------------------
  |  |  166|  1.47k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.47k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.47k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2378|  1.47k|	g_assert(r->height == rtiff->header.tile_height);
  ------------------
  |  |  166|  1.47k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.47k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.47k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2379|  1.47k|	g_assert(VIPS_REGION_LSKIP(out) == VIPS_REGION_SIZEOF_LINE(out));
  ------------------
  |  |  166|  1.47k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.47k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.47k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2380|       |
 2381|       |#ifdef DEBUG_VERBOSE
 2382|       |	printf("rtiff_fill_region_aligned:\n");
 2383|       |#endif /*DEBUG_VERBOSE*/
 2384|       |
 2385|       |	/* Read that tile directly into the vips tile.
 2386|       |	 */
 2387|  1.47k|	if (rtiff_read_tile(seq,
  ------------------
  |  Branch (2387:6): [True: 10, False: 1.46k]
  ------------------
 2388|  1.47k|			(tdata_t *) VIPS_REGION_ADDR(out, r->left, r->top),
  ------------------
  |  |  227|  1.47k|	((R)->data + \
  |  |  228|  1.47k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  1.47k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  1.47k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  1.47k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  1.47k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  1.47k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2389|  1.47k|			rtiff->page + page_no, r->left, page_y))
 2390|     10|		return -1;
 2391|       |
 2392|  1.46k|	return 0;
 2393|  1.47k|}
tiff2vips.c:rtiff_read_tile:
 2292|  18.1k|{
 2293|  18.1k|	Rtiff *rtiff = seq->rtiff;
 2294|       |
 2295|  18.1k|	tsize_t size;
 2296|       |
 2297|       |#ifdef DEBUG_VERBOSE
 2298|       |	printf("rtiff_read_tile: page = %d, x = %d, y = %d, "
 2299|       |		   "we_decompress = %d\n",
 2300|       |		page, x, y, rtiff->header.we_decompress);
 2301|       |#endif /*DEBUG_VERBOSE*/
 2302|       |
 2303|       |	/* Compressed tiles load to compressed_buf.
 2304|       |	 */
 2305|  18.1k|	if (rtiff->header.we_decompress) {
  ------------------
  |  Branch (2305:6): [True: 137, False: 18.0k]
  ------------------
 2306|    137|		ttile_t tile_no;
 2307|       |
 2308|    137|		g_rec_mutex_lock(&rtiff->lock);
 2309|       |
 2310|    137|		if (rtiff_set_page(rtiff, page)) {
  ------------------
  |  Branch (2310:7): [True: 0, False: 137]
  ------------------
 2311|      0|			g_rec_mutex_unlock(&rtiff->lock);
 2312|      0|			return -1;
 2313|      0|		}
 2314|       |
 2315|    137|		tile_no = TIFFComputeTile(rtiff->tiff, x, y, 0, 0);
 2316|       |
 2317|    137|		size = TIFFReadRawTile(rtiff->tiff, tile_no,
 2318|    137|			seq->compressed_buf, seq->compressed_buf_length);
 2319|    137|		if (size <= 0) {
  ------------------
  |  Branch (2319:7): [True: 37, False: 100]
  ------------------
 2320|     37|			vips_foreign_load_invalidate(rtiff->out);
 2321|     37|			g_rec_mutex_unlock(&rtiff->lock);
 2322|     37|			return -1;
 2323|     37|		}
 2324|       |
 2325|    100|		g_rec_mutex_unlock(&rtiff->lock);
 2326|       |
 2327|       |		/* Decompress outside the lock, so we get parallelism.
 2328|       |		 */
 2329|    100|		if (rtiff_decompress_tile(rtiff, seq->compressed_buf, size, buf)) {
  ------------------
  |  Branch (2329:7): [True: 71, False: 29]
  ------------------
 2330|     71|			vips_error("tiff2vips", _("decompress error tile %d x %d"), x, y);
  ------------------
  |  |   30|     71|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|     71|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2331|     71|			return -1;
 2332|     71|		}
 2333|    100|	}
 2334|  18.0k|	else {
 2335|  18.0k|		g_rec_mutex_lock(&rtiff->lock);
 2336|       |
 2337|  18.0k|		if (rtiff_set_page(rtiff, page)) {
  ------------------
  |  Branch (2337:7): [True: 0, False: 18.0k]
  ------------------
 2338|      0|			g_rec_mutex_unlock(&rtiff->lock);
 2339|      0|			return -1;
 2340|      0|		}
 2341|       |
 2342|  18.0k|		int result;
 2343|  18.0k|		if (rtiff->header.read_as_rgba)
  ------------------
  |  Branch (2343:7): [True: 2.29k, False: 15.7k]
  ------------------
 2344|  2.29k|			result = rtiff_read_rgba_tile(rtiff, x, y, buf);
 2345|  15.7k|		else
 2346|  15.7k|			result = TIFFReadTile(rtiff->tiff, buf, x, y, 0, 0) < 0;
 2347|  18.0k|		if (result && rtiff->fail_on >= VIPS_FAIL_ON_WARNING) {
  ------------------
  |  Branch (2347:7): [True: 7.70k, False: 10.3k]
  |  Branch (2347:17): [True: 0, False: 7.70k]
  ------------------
 2348|      0|			vips_foreign_load_invalidate(rtiff->out);
 2349|      0|			g_rec_mutex_unlock(&rtiff->lock);
 2350|      0|			return -1;
 2351|      0|		}
 2352|       |
 2353|  18.0k|		g_rec_mutex_unlock(&rtiff->lock);
 2354|  18.0k|	}
 2355|       |
 2356|  18.0k|	return 0;
 2357|  18.1k|}
tiff2vips.c:rtiff_decompress_tile:
 2226|    100|{
 2227|    100|	g_assert(rtiff->header.we_decompress);
  ------------------
  |  |  166|    100|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    100|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    100|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2228|       |
 2229|    100|	switch (rtiff->header.compression) {
 2230|      0|	case JP2K_YCC:
  ------------------
  |  |  277|      0|#define JP2K_YCC 33003
  ------------------
  |  Branch (2230:2): [True: 0, False: 100]
  ------------------
 2231|      0|	case JP2K_RGB:
  ------------------
  |  |  278|      0|#define JP2K_RGB 33005
  ------------------
  |  Branch (2231:2): [True: 0, False: 100]
  ------------------
 2232|      0|	case JP2K_LOSSY:
  ------------------
  |  |  282|      0|#define JP2K_LOSSY 33004
  ------------------
  |  Branch (2232:2): [True: 0, False: 100]
  ------------------
 2233|      0|		if (vips__foreign_load_jp2k_decompress(
  ------------------
  |  Branch (2233:7): [True: 0, False: 0]
  ------------------
 2234|      0|				rtiff->out,
 2235|      0|				rtiff->header.tile_width,
 2236|      0|				rtiff->header.tile_height,
 2237|      0|				TRUE,
  ------------------
  |  |  209|      0|#define TRUE    1
  ------------------
 2238|      0|				in, size,
 2239|      0|				out, rtiff->header.tile_size))
 2240|      0|			return -1;
 2241|      0|		break;
 2242|       |
 2243|      0|#ifdef HAVE_JPEG
 2244|    100|	case COMPRESSION_JPEG:
  ------------------
  |  |  190|    100|#define COMPRESSION_JPEG 7            /* %JPEG DCT compression */
  ------------------
  |  Branch (2244:2): [True: 100, False: 0]
  ------------------
 2245|    100|		if (rtiff_decompress_jpeg(rtiff, in, size, out))
  ------------------
  |  Branch (2245:7): [True: 71, False: 29]
  ------------------
 2246|     71|			return -1;
 2247|     29|		break;
 2248|     29|#endif /*HAVE_JPEG*/
 2249|       |
 2250|     29|	default:
  ------------------
  |  Branch (2250:2): [True: 0, False: 100]
  ------------------
 2251|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2252|      0|		break;
 2253|    100|	}
 2254|       |
 2255|     29|	return 0;
 2256|    100|}
tiff2vips.c:rtiff_decompress_jpeg:
 2187|    100|{
 2188|    100|	struct jpeg_decompress_struct cinfo = { 0 };
 2189|    100|	ErrorManager eman;
 2190|       |
 2191|    100|	if (setjmp(eman.jmp) == 0) {
  ------------------
  |  Branch (2191:6): [True: 100, False: 0]
  ------------------
 2192|    100|		cinfo.err = jpeg_std_error(&eman.pub);
 2193|    100|		cinfo.err->addon_message_table = vips__jpeg_message_table;
 2194|    100|		cinfo.err->first_addon_message = 1000;
 2195|    100|		cinfo.err->last_addon_message = 1001;
 2196|    100|		eman.pub.error_exit = vips__new_error_exit;
 2197|    100|		eman.pub.emit_message = rtiff_decompress_jpeg_emit_message;
 2198|    100|		eman.pub.output_message = vips__new_output_message;
 2199|    100|		eman.fp = NULL;
 2200|       |
 2201|    100|		jpeg_create_decompress(&cinfo);
  ------------------
  |  |  972|    100|  jpeg_CreateDecompress((cinfo), JPEG_LIB_VERSION, \
  |  |  ------------------
  |  |  |  |    4|    100|#define JPEG_LIB_VERSION  62
  |  |  ------------------
  |  |  973|    100|                        (size_t)sizeof(struct jpeg_decompress_struct))
  ------------------
 2202|       |
 2203|    100|		if (rtiff_decompress_jpeg_run(rtiff, &cinfo,
  ------------------
  |  Branch (2203:7): [True: 3, False: 97]
  ------------------
 2204|    100|				data, data_len, out)) {
 2205|      3|			jpeg_destroy_decompress(&cinfo);
 2206|      3|			return -1;
 2207|      3|		}
 2208|    100|	}
 2209|      0|	else {
 2210|       |#ifdef DEBUG_VERBOSE
 2211|       |		printf("rtiff_decompress_jpeg: error return\n");
 2212|       |#endif /*DEBUG_VERBOSE*/
 2213|       |
 2214|      0|		jpeg_destroy_decompress(&cinfo);
 2215|      0|		return -1;
 2216|      0|	}
 2217|       |
 2218|     97|	jpeg_destroy_decompress(&cinfo);
 2219|       |
 2220|     97|	return 0;
 2221|    100|}
tiff2vips.c:rtiff_decompress_jpeg_emit_message:
 2162|  30.3k|{
 2163|  30.3k|	if (msg_level < 0) {
  ------------------
  |  Branch (2163:6): [True: 28.9k, False: 1.43k]
  ------------------
 2164|  28.9k|		long num_warnings;
 2165|       |
 2166|       |		/* Always count warnings in num_warnings.
 2167|       |		 */
 2168|  28.9k|		num_warnings = ++cinfo->err->num_warnings;
 2169|       |
 2170|       |		/* Corrupt files may give many warnings, the policy here is to
 2171|       |		 * show only the first warning and treat many warnings as fatal,
 2172|       |		 * unless unlimited is set.
 2173|       |		 */
 2174|  28.9k|		if (num_warnings == 1)
  ------------------
  |  Branch (2174:7): [True: 111, False: 28.7k]
  ------------------
 2175|    111|			(*cinfo->err->output_message)(cinfo);
 2176|  28.9k|	}
 2177|  1.43k|	else if (cinfo->err->trace_level >= msg_level)
  ------------------
  |  Branch (2177:11): [True: 0, False: 1.43k]
  ------------------
 2178|       |		/* It's a trace message. Show it if trace_level >= msg_level.
 2179|       |		 */
 2180|      0|		(*cinfo->err->output_message)(cinfo);
 2181|  30.3k|}
tiff2vips.c:rtiff_decompress_jpeg_run:
 2071|    100|{
 2072|    100|	void *tables;
 2073|    100|	uint32_t tables_len;
 2074|    100|	int bytes_per_pixel;
 2075|    100|	size_t bytes_per_scanline;
 2076|    100|	VipsPel *q;
 2077|    100|	int y;
 2078|       |
 2079|       |#ifdef DEBUG_VERBOSE
 2080|       |	printf("rtiff_decompress_jpeg_run: decompressing %zd bytes of jpg\n",
 2081|       |		data_len);
 2082|       |#endif /*DEBUG_VERBOSE*/
 2083|       |
 2084|       |	/* Tables are optional.
 2085|       |	 */
 2086|    100|	tables = NULL;
 2087|    100|	tables_len = 0;
 2088|    100|	(void) TIFFGetField(rtiff->tiff,
 2089|    100|		TIFFTAG_JPEGTABLES, &tables_len, &tables);
  ------------------
  |  |  346|    100|#define TIFFTAG_JPEGTABLES 347             /* %JPEG table stream */
  ------------------
 2090|       |
 2091|    100|	if (tables) {
  ------------------
  |  Branch (2091:6): [True: 52, False: 48]
  ------------------
 2092|     52|		rtiff_decompress_jpeg_set_memory(cinfo, tables, tables_len);
 2093|     52|		if (jpeg_read_header(cinfo, FALSE) !=
  ------------------
  |  |  206|     52|#define FALSE   0               /* values of boolean */
  ------------------
  |  Branch (2093:7): [True: 0, False: 52]
  ------------------
 2094|     52|			JPEG_HEADER_TABLES_ONLY)
  ------------------
  |  | 1067|     52|#define JPEG_HEADER_TABLES_ONLY  2 /* Found valid table-specs-only datastream */
  ------------------
 2095|      0|			return -1;
 2096|     52|	}
 2097|       |
 2098|    100|	rtiff_decompress_jpeg_set_memory(cinfo, data, data_len);
 2099|       |
 2100|    100|	if (jpeg_read_header(cinfo, TRUE) != JPEG_HEADER_OK)
  ------------------
  |  |  209|    100|#define TRUE    1
  ------------------
              	if (jpeg_read_header(cinfo, TRUE) != JPEG_HEADER_OK)
  ------------------
  |  | 1066|    100|#define JPEG_HEADER_OK           1 /* Found valid image datastream */
  ------------------
  |  Branch (2100:6): [True: 0, False: 100]
  ------------------
 2101|      0|		return -1;
 2102|       |
 2103|       |	/* This isn't stored in the tile -- we have to set it from the
 2104|       |	 * enclosing TIFF.
 2105|       |	 */
 2106|    100|	switch (rtiff->header.photometric_interpretation) {
 2107|     29|	case PHOTOMETRIC_SEPARATED:
  ------------------
  |  |  226|     29|#define PHOTOMETRIC_SEPARATED 5            /* !color separations */
  ------------------
  |  Branch (2107:2): [True: 29, False: 71]
  ------------------
 2108|     29|		cinfo->jpeg_color_space = JCS_CMYK;
 2109|     29|		bytes_per_pixel = 4;
 2110|     29|		break;
 2111|       |
 2112|      1|	case PHOTOMETRIC_YCBCR:
  ------------------
  |  |  227|      1|#define PHOTOMETRIC_YCBCR 6                /* !CCIR 601 */
  ------------------
  |  Branch (2112:2): [True: 1, False: 99]
  ------------------
 2113|      1|		cinfo->jpeg_color_space = JCS_YCbCr;
 2114|      1|		bytes_per_pixel = 3;
 2115|      1|		break;
 2116|       |
 2117|      0|	case PHOTOMETRIC_RGB:
  ------------------
  |  |  223|      0|#define PHOTOMETRIC_RGB 2                  /* RGB color model */
  ------------------
  |  Branch (2117:2): [True: 0, False: 100]
  ------------------
 2118|      0|	case PHOTOMETRIC_CIELAB:
  ------------------
  |  |  228|      0|#define PHOTOMETRIC_CIELAB 8               /* !1976 CIE L*a*b* */
  ------------------
  |  Branch (2118:2): [True: 0, False: 100]
  ------------------
 2119|       |		// RGB-compressed CIELAB is a possibility, amazingly
 2120|      0|		cinfo->jpeg_color_space = JCS_RGB;
 2121|      0|		bytes_per_pixel = 3;
 2122|      0|		break;
 2123|       |
 2124|      0|	case PHOTOMETRIC_MINISWHITE:
  ------------------
  |  |  221|      0|#define PHOTOMETRIC_MINISWHITE 0           /* min value is white */
  ------------------
  |  Branch (2124:2): [True: 0, False: 100]
  ------------------
 2125|      7|	case PHOTOMETRIC_MINISBLACK:
  ------------------
  |  |  222|      7|#define PHOTOMETRIC_MINISBLACK 1           /* min value is black */
  ------------------
  |  Branch (2125:2): [True: 7, False: 93]
  ------------------
 2126|      7|		cinfo->jpeg_color_space = JCS_GRAYSCALE;
 2127|      7|		bytes_per_pixel = 1;
 2128|      7|		break;
 2129|       |
 2130|      3|	default:
  ------------------
  |  Branch (2130:2): [True: 3, False: 97]
  ------------------
 2131|      3|		cinfo->jpeg_color_space = JCS_UNKNOWN;
 2132|      3|		bytes_per_pixel = 1;
 2133|      3|		break;
 2134|    100|	}
 2135|       |
 2136|     40|	jpeg_calc_output_dimensions(cinfo);
 2137|     40|	bytes_per_scanline = cinfo->output_width * bytes_per_pixel;
 2138|       |
 2139|       |	/* Double-check tile dimensions.
 2140|       |	 */
 2141|     40|	if (cinfo->output_width > rtiff->header.tile_width ||
  ------------------
  |  Branch (2141:6): [True: 1, False: 39]
  ------------------
 2142|     40|		cinfo->output_height > rtiff->header.tile_height ||
  ------------------
  |  Branch (2142:3): [True: 1, False: 38]
  ------------------
 2143|     40|		bytes_per_scanline > rtiff->header.tile_row_size)
  ------------------
  |  Branch (2143:3): [True: 1, False: 37]
  ------------------
 2144|      3|		return -1;
 2145|       |
 2146|     37|	jpeg_start_decompress(cinfo);
 2147|       |
 2148|     37|	q = (VipsPel *) out;
 2149|    965|	for (y = 0; y < cinfo->output_height; y++) {
  ------------------
  |  Branch (2149:14): [True: 928, False: 37]
  ------------------
 2150|    928|		JSAMPROW row_pointer[1];
 2151|       |
 2152|    928|		row_pointer[0] = (JSAMPLE *) q;
 2153|    928|		jpeg_read_scanlines(cinfo, &row_pointer[0], 1);
 2154|    928|		q += bytes_per_scanline;
 2155|    928|	}
 2156|       |
 2157|     37|	return 0;
 2158|     40|}
tiff2vips.c:rtiff_decompress_jpeg_set_memory:
 2050|    147|{
 2051|    147|	if (!cinfo->src)
  ------------------
  |  Branch (2051:6): [True: 100, False: 47]
  ------------------
 2052|    100|		cinfo->src =
 2053|    100|			(struct jpeg_source_mgr *) (*cinfo->mem->alloc_small)(
 2054|    100|				(j_common_ptr) cinfo,
 2055|    100|				JPOOL_PERMANENT,
  ------------------
  |  |  888|    100|#define JPOOL_PERMANENT  0      /* lasts until master record is destroyed */
  ------------------
 2056|    100|				sizeof(struct jpeg_source_mgr));
 2057|       |
 2058|       |	/* Present the whole of data as one chunk.
 2059|       |	 */
 2060|    147|	cinfo->src->bytes_in_buffer = data_len;
 2061|    147|	cinfo->src->next_input_byte = (JOCTET *) data;
 2062|    147|	cinfo->src->init_source = rtiff_decompress_jpeg_init_source;
 2063|    147|	cinfo->src->fill_input_buffer = rtiff_decompress_jpeg_fill_input_buffer;
 2064|    147|	cinfo->src->skip_input_data = rtiff_decompress_jpeg_skip_input_data;
 2065|    147|	cinfo->src->resync_to_restart = jpeg_resync_to_restart;
 2066|    147|}
tiff2vips.c:rtiff_decompress_jpeg_init_source:
 1987|    147|{
 1988|       |	/* Nothing.
 1989|       |	 */
 1990|    147|}
tiff2vips.c:rtiff_decompress_jpeg_fill_input_buffer:
 1994|  28.2k|{
 1995|  28.2k|	static const JOCTET mybuffer[4] = {
 1996|  28.2k|		(JOCTET) 0xFF, (JOCTET) JPEG_EOI, 0, 0
  ------------------
  |  | 1167|  28.2k|#define JPEG_EOI        0xD9    /* EOI marker code */
  ------------------
 1997|  28.2k|	};
 1998|       |
 1999|       |	/* The whole JPEG data is expected to reside in the supplied memory
 2000|       |	 * buffer, so any request for more data beyond the given buffer size
 2001|       |	 * is treated as an error.
 2002|       |	 */
 2003|  28.2k|	WARNMS(cinfo, JWRN_VIPS_IMAGE_EOF);
  ------------------
  |  |  283|  28.2k|  ((cinfo)->err->msg_code = (code), \
  |  |  284|  28.2k|   (*(cinfo)->err->emit_message) ((j_common_ptr)(cinfo), -1))
  ------------------
 2004|       |
 2005|       |	/* Insert a fake EOI marker
 2006|       |	 */
 2007|  28.2k|	cinfo->src->next_input_byte = mybuffer;
 2008|  28.2k|	cinfo->src->bytes_in_buffer = 2;
 2009|       |
 2010|  28.2k|	return TRUE;
  ------------------
  |  |  209|  28.2k|#define TRUE    1
  ------------------
 2011|  28.2k|}
tiff2vips.c:rtiff_decompress_jpeg_skip_input_data:
 2026|    294|{
 2027|    294|	struct jpeg_source_mgr *src = cinfo->src;
 2028|       |
 2029|       |	/* Just a dumb implementation for now.  Could use fseek() except
 2030|       |	 * it doesn't work on pipes.  Not clear that being smart is worth
 2031|       |	 * any trouble anyway --- large skips are infrequent.
 2032|       |	 */
 2033|    294|	if (num_bytes > 0) {
  ------------------
  |  Branch (2033:6): [True: 294, False: 0]
  ------------------
 2034|  28.3k|		while (num_bytes > (long) src->bytes_in_buffer) {
  ------------------
  |  Branch (2034:10): [True: 28.0k, False: 294]
  ------------------
 2035|  28.0k|			num_bytes -= (long) src->bytes_in_buffer;
 2036|  28.0k|			(void) (*src->fill_input_buffer)(cinfo);
 2037|       |			/* note we assume that fill_input_buffer will never
 2038|       |			 * return FALSE, so suspension need not be handled.
 2039|       |			 */
 2040|  28.0k|		}
 2041|       |
 2042|    294|		src->next_input_byte += (size_t) num_bytes;
 2043|    294|		src->bytes_in_buffer -= (size_t) num_bytes;
 2044|    294|	}
 2045|    294|}
tiff2vips.c:rtiff_read_rgba_tile:
 2262|  2.29k|{
 2263|  2.29k|	guint32 *u32_buf = (guint32 *) buf;
 2264|       |
 2265|  2.29k|	if (!TIFFReadRGBATile(rtiff->tiff, x, y, u32_buf))
  ------------------
  |  Branch (2265:6): [True: 1.92k, False: 368]
  ------------------
 2266|  1.92k|		return -1;
 2267|       |
 2268|       |	/* For some reason TIFFReadRGBATile decodes tiles upside down,
 2269|       |	 * so we need to flip them.
 2270|       |	 */
 2271|    368|	guint32 tile_width = rtiff->header.tile_width;
 2272|    368|	guint32 tile_height = rtiff->header.tile_height;
 2273|       |
 2274|    368|	guint32 *up = u32_buf;
 2275|    368|	guint32 *down = u32_buf + (tile_height - 1) * tile_width;
 2276|  4.84k|	for (int yy = 0; yy < tile_height / 2; yy++) {
  ------------------
  |  Branch (2276:19): [True: 4.48k, False: 368]
  ------------------
 2277|   107k|		for (int xx = 0; xx < tile_width; xx++)
  ------------------
  |  Branch (2277:20): [True: 103k, False: 4.48k]
  ------------------
 2278|   103k|			VIPS_SWAP(guint32, up[xx], down[xx]);
  ------------------
  |  |  114|   103k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   103k|#define G_STMT_START  do
  |  |  ------------------
  |  |  115|   103k|	{ \
  |  |  116|   103k|		TYPE t = (A); \
  |  |  117|   103k|		(A) = (B); \
  |  |  118|   103k|		(B) = t; \
  |  |  119|   103k|	} \
  |  |  120|   103k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   103k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2279|       |
 2280|  4.48k|		up += tile_width;
 2281|  4.48k|		down -= tile_width;
 2282|  4.48k|	}
 2283|       |
 2284|    368|	return 0;
 2285|  2.29k|}
tiff2vips.c:rtiff_fill_region_unaligned:
 2400|  16.7k|{
 2401|  16.7k|	RtiffSeq *seq = (RtiffSeq *) vseq;
 2402|  16.7k|	Rtiff *rtiff = (Rtiff *) a;
 2403|  16.7k|	int tile_width = rtiff->header.tile_width;
 2404|  16.7k|	int tile_height = rtiff->header.tile_height;
 2405|  16.7k|	int page_height = rtiff->header.height;
 2406|  16.7k|	int tile_row_size = rtiff->header.tile_row_size;
 2407|  16.7k|	VipsRect *r = &out->valid;
 2408|       |
 2409|  16.7k|	int x, y, z;
 2410|       |
 2411|       |#ifdef DEBUG_VERBOSE
 2412|       |	printf("rtiff_fill_region_unaligned:\n");
 2413|       |#endif /*DEBUG_VERBOSE*/
 2414|       |
 2415|  16.7k|	y = 0;
 2416|  33.3k|	while (y < r->height) {
  ------------------
  |  Branch (2416:9): [True: 16.7k, False: 16.6k]
  ------------------
 2417|  16.7k|		VipsRect tile, page, hit;
 2418|       |
 2419|       |		/* Not necessary, but it stops static analyzers complaining
 2420|       |		 * about a used-before-set.
 2421|       |		 */
 2422|  16.7k|		hit.height = 0;
 2423|       |
 2424|  16.7k|		x = 0;
 2425|  33.3k|		while (x < r->width) {
  ------------------
  |  Branch (2425:10): [True: 16.7k, False: 16.6k]
  ------------------
 2426|       |			/* page_no is within this toilet roll image, not tiff
 2427|       |			 * file page number ... add the number of the start
 2428|       |			 * page to get that.
 2429|       |			 */
 2430|  16.7k|			int page_no = (r->top + y) / page_height;
 2431|  16.7k|			int page_y = (r->top + y) % page_height;
 2432|       |
 2433|       |			/* Coordinate of the tile on this page that xy falls in.
 2434|       |			 */
 2435|  16.7k|			int xs = ((r->left + x) / tile_width) * tile_width;
 2436|  16.7k|			int ys = (page_y / tile_height) * tile_height;
 2437|       |
 2438|  16.7k|			if (rtiff_read_tile(seq,
  ------------------
  |  Branch (2438:8): [True: 98, False: 16.6k]
  ------------------
 2439|  16.7k|					seq->buf, rtiff->page + page_no, xs, ys))
 2440|     98|				return -1;
 2441|       |
 2442|       |			/* Position of tile on the page.
 2443|       |			 */
 2444|  16.6k|			tile.left = xs;
 2445|  16.6k|			tile.top = ys;
 2446|  16.6k|			tile.width = tile_width;
 2447|  16.6k|			tile.height = tile_height;
 2448|       |
 2449|       |			/* It'll be clipped by this page.
 2450|       |			 */
 2451|  16.6k|			page.left = 0;
 2452|  16.6k|			page.top = 0;
 2453|  16.6k|			page.width = rtiff->header.width;
 2454|  16.6k|			page.height = rtiff->header.height;
 2455|  16.6k|			vips_rect_intersectrect(&tile, &page, &tile);
 2456|       |
 2457|       |			/* To image coordinates.
 2458|       |			 */
 2459|  16.6k|			tile.top += page_no * page_height;
 2460|       |
 2461|       |			/* And clip again by this region.
 2462|       |			 */
 2463|  16.6k|			vips_rect_intersectrect(&tile, r, &hit);
 2464|       |
 2465|       |			/* We are inside a tilecache, so requests will always
 2466|       |			 * be aligned left-right to tile boundaries.
 2467|       |			 *
 2468|       |			 * this is not true vertically for toilet-roll images.
 2469|       |			 */
 2470|  16.6k|			g_assert(hit.left == tile.left);
  ------------------
  |  |  166|  16.6k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  16.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  16.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2471|       |
 2472|       |			/* Unpack to VIPS format.
 2473|       |			 * Just unpack the section of the tile we need.
 2474|       |			 */
 2475|   473k|			for (z = 0; z < hit.height; z++) {
  ------------------
  |  Branch (2475:16): [True: 457k, False: 16.6k]
  ------------------
 2476|   457k|				VipsPel *p = (VipsPel *) seq->buf +
 2477|   457k|					(hit.top - tile.top + z) *
 2478|   457k|						tile_row_size;
 2479|   457k|				VipsPel *q = VIPS_REGION_ADDR(out,
  ------------------
  |  |  227|   457k|	((R)->data + \
  |  |  228|   457k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   457k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   457k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   457k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   457k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   457k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2480|   457k|					hit.left, hit.top + z);
 2481|       |
 2482|   457k|				rtiff->sfn(rtiff,
 2483|   457k|					q, p, hit.width, rtiff->client);
 2484|   457k|			}
 2485|       |
 2486|  16.6k|			x += hit.width;
 2487|  16.6k|		}
 2488|       |
 2489|       |		/* This will be the same for all tiles in the row we've just
 2490|       |		 * done.
 2491|       |		 */
 2492|  16.6k|		y += hit.height;
 2493|  16.6k|	}
 2494|       |
 2495|  16.6k|	return 0;
 2496|  16.7k|}
tiff2vips.c:rtiff_seq_stop:
 2554|  1.40k|{
 2555|  1.40k|	RtiffSeq *seq = (RtiffSeq *) vseq;
 2556|       |
 2557|  1.40k|	VIPS_FREE(seq->buf);
  ------------------
  |  |   50|  1.40k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  1.40k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  1.40k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  1.40k|	{ \
  |  |  |  |   43|  1.40k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 1.40k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  1.40k|			(void) F((S)); \
  |  |  |  |   45|  1.40k|			(S) = 0; \
  |  |  |  |   46|  1.40k|		} \
  |  |  |  |   47|  1.40k|	} \
  |  |  |  |   48|  1.40k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  1.40k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2558|  1.40k|	VIPS_FREE(seq->compressed_buf);
  ------------------
  |  |   50|  1.40k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  1.40k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  1.40k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  1.40k|	{ \
  |  |  |  |   43|  1.40k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 108, False: 1.30k]
  |  |  |  |  ------------------
  |  |  |  |   44|    108|			(void) F((S)); \
  |  |  |  |   45|    108|			(S) = 0; \
  |  |  |  |   46|    108|		} \
  |  |  |  |   47|  1.40k|	} \
  |  |  |  |   48|  1.40k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  1.40k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2559|       |
 2560|  1.40k|	return 0;
 2561|  1.40k|}
tiff2vips.c:rtiff_unpremultiply:
 2567|  6.72k|{
 2568|  6.72k|	if (rtiff->header.alpha_band != -1) {
  ------------------
  |  Branch (2568:6): [True: 949, False: 5.77k]
  ------------------
 2569|    949|		VipsImage *x;
 2570|       |
 2571|    949|		if (
 2572|    949|			vips_unpremultiply(in, &x,
  ------------------
  |  Branch (2572:4): [True: 0, False: 949]
  ------------------
 2573|    949|				"alpha_band", rtiff->header.alpha_band,
 2574|    949|				NULL) ||
 2575|    949|			vips_cast(x, out, in->BandFmt, NULL)) {
  ------------------
  |  Branch (2575:4): [True: 0, False: 949]
  ------------------
 2576|      0|			g_object_unref(x);
 2577|      0|			return -1;
 2578|      0|		}
 2579|    949|		g_object_unref(x);
 2580|    949|	}
 2581|  5.77k|	else {
 2582|  5.77k|		*out = in;
 2583|  5.77k|		g_object_ref(in);
 2584|  5.77k|	}
 2585|       |
 2586|  6.72k|	return 0;
 2587|  6.72k|}
tiff2vips.c:rtiff_read_stripwise:
 2876|  5.31k|{
 2877|  5.31k|	VipsImage **t = (VipsImage **)
 2878|  5.31k|		vips_object_local_array(VIPS_OBJECT(out), 4);
  ------------------
  |  |  433|  5.31k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  5.31k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  5.31k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2879|       |
 2880|  5.31k|	VipsImage *in;
 2881|  5.31k|	int tile_height;
 2882|       |
 2883|       |#ifdef DEBUG
 2884|       |	printf("tiff2vips: rtiff_read_stripwise\n");
 2885|       |#endif /*DEBUG*/
 2886|       |
 2887|  5.31k|	t[0] = vips_image_new();
 2888|  5.31k|	if (rtiff_set_header(rtiff, t[0]))
  ------------------
  |  Branch (2888:6): [True: 0, False: 5.31k]
  ------------------
 2889|      0|		return -1;
 2890|       |
 2891|       |	/* Double check: in memcpy mode, the vips linesize should exactly
 2892|       |	 * match the tiff line size.
 2893|       |	 */
 2894|  5.31k|	if (rtiff->memcpy) {
  ------------------
  |  Branch (2894:6): [True: 2.46k, False: 2.84k]
  ------------------
 2895|  2.46k|		size_t vips_line_size;
 2896|       |
 2897|       |		/* Lines are smaller in plane-separated mode.
 2898|       |		 */
 2899|  2.46k|		if (rtiff->header.separate)
  ------------------
  |  Branch (2899:7): [True: 47, False: 2.42k]
  ------------------
 2900|     47|			vips_line_size = VIPS_IMAGE_SIZEOF_ELEMENT(t[0]) *
  ------------------
  |  |  382|     47|	(vips_format_sizeof_unsafe((I)->BandFmt))
  ------------------
 2901|     47|				t[0]->Xsize;
 2902|  2.42k|		else
 2903|  2.42k|			vips_line_size = VIPS_IMAGE_SIZEOF_LINE(t[0]);
  ------------------
  |  |  386|  2.42k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|  2.42k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  2.42k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2904|       |
 2905|  2.46k|		if (rtiff->header.bits_per_sample == 16 &&
  ------------------
  |  Branch (2905:7): [True: 307, False: 2.16k]
  ------------------
 2906|  2.46k|			rtiff->header.sample_format == SAMPLEFORMAT_IEEEFP)
  ------------------
  |  |  336|    307|#define SAMPLEFORMAT_IEEEFP 3              /* !IEEE floating point data */
  ------------------
  |  Branch (2906:4): [True: 0, False: 307]
  ------------------
 2907|      0|			vips_line_size /= 2;
 2908|       |
 2909|  2.46k|		if (vips_line_size != rtiff->header.scanline_size) {
  ------------------
  |  Branch (2909:7): [True: 0, False: 2.46k]
  ------------------
 2910|      0|			vips_error("tiff2vips", "%s", _("unsupported tiff image type"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2911|      0|			return -1;
 2912|      0|		}
 2913|  2.46k|	}
 2914|       |
 2915|       |	/* If we have separate image planes, we must read to a plane buffer,
 2916|       |	 * then interleave to the output.
 2917|       |	 *
 2918|       |	 * We don't need a separate buffer per thread since the _generate()
 2919|       |	 * function runs inside the cache lock.
 2920|       |	 */
 2921|  5.31k|	if (rtiff->header.separate) {
  ------------------
  |  Branch (2921:6): [True: 107, False: 5.21k]
  ------------------
 2922|    107|		if (!(rtiff->plane_buf = VIPS_MALLOC(out,
  ------------------
  |  |   68|    107|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  ------------------
  |  |  |  |  433|    107|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|    107|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|    107|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2922:7): [True: 0, False: 107]
  ------------------
 2923|    107|				  rtiff->header.read_size)))
 2924|      0|			return -1;
 2925|    107|	}
 2926|       |
 2927|       |	/* If we need to manipulate pixels, we must read to an interleaved
 2928|       |	 * plane buffer before repacking to the output.
 2929|       |	 *
 2930|       |	 * If we are doing a multi-page read, we need a strip buffer, since
 2931|       |	 * strips may not be aligned on tile boundaries.
 2932|       |	 *
 2933|       |	 * We don't need a separate buffer per thread since the _generate()
 2934|       |	 * function runs inside the cache lock.
 2935|       |	 */
 2936|  5.31k|	if (!rtiff->memcpy ||
  ------------------
  |  Branch (2936:6): [True: 2.84k, False: 2.46k]
  ------------------
 2937|  5.31k|		rtiff->n > 1) {
  ------------------
  |  Branch (2937:3): [True: 0, False: 2.46k]
  ------------------
 2938|  2.84k|		tsize_t size;
 2939|       |
 2940|  2.84k|		size = rtiff->header.read_size;
 2941|  2.84k|		if (rtiff->header.separate)
  ------------------
  |  Branch (2941:7): [True: 60, False: 2.78k]
  ------------------
 2942|     60|			size *= rtiff->header.samples_per_pixel;
 2943|       |
 2944|  2.84k|		if (!(rtiff->contig_buf = VIPS_MALLOC(out, size)))
  ------------------
  |  |   68|  2.84k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  ------------------
  |  |  |  |  433|  2.84k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|  2.84k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|  2.84k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2944:7): [True: 0, False: 2.84k]
  ------------------
 2945|      0|			return -1;
 2946|  2.84k|	}
 2947|       |
 2948|       |	/* rows_per_strip can be very large if this is a separate plane image,
 2949|       |	 * beware.
 2950|       |	 *
 2951|       |	 * Some images have very small rowsperstrip which will cause a lot of
 2952|       |	 * work for the tilecache -- set a min size for tiles which is a
 2953|       |	 * multiple of rowsperstrip.
 2954|       |	 */
 2955|  5.31k|	tile_height = VIPS_MAX(
  ------------------
  |  |   54|  5.31k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 2.44k, False: 2.87k]
  |  |  ------------------
  ------------------
 2956|  5.31k|		VIPS_ROUND_DOWN(16, rtiff->header.read_height),
 2957|  5.31k|		rtiff->header.read_height);
 2958|       |
 2959|  5.31k|	if (
 2960|  5.31k|		vips_image_generate(t[0],
  ------------------
  |  Branch (2960:3): [True: 0, False: 5.31k]
  ------------------
 2961|  5.31k|			NULL, rtiff_stripwise_generate, NULL,
 2962|  5.31k|			rtiff, NULL) ||
 2963|  5.31k|		vips_sequential(t[0], &t[1],
  ------------------
  |  Branch (2963:3): [True: 0, False: 5.31k]
  ------------------
 2964|  5.31k|			"tile_height", tile_height,
 2965|  5.31k|			NULL) ||
 2966|  5.31k|		rtiff_unpremultiply(rtiff, t[1], &t[2]))
  ------------------
  |  Branch (2966:3): [True: 0, False: 5.31k]
  ------------------
 2967|      0|		return -1;
 2968|  5.31k|	in = t[2];
 2969|       |
 2970|       |	/* Only do this if we have to.
 2971|       |	 */
 2972|  5.31k|	if (rtiff->autorotate &&
  ------------------
  |  Branch (2972:6): [True: 0, False: 5.31k]
  ------------------
 2973|  5.31k|		vips_image_get_orientation(in) != 1) {
  ------------------
  |  Branch (2973:3): [True: 0, False: 0]
  ------------------
 2974|      0|		if (vips_autorot(in, &t[3], NULL))
  ------------------
  |  Branch (2974:7): [True: 0, False: 0]
  ------------------
 2975|      0|			return -1;
 2976|      0|		in = t[3];
 2977|      0|	}
 2978|       |
 2979|  5.31k|	if (vips_image_write(in, out))
  ------------------
  |  Branch (2979:6): [True: 1.10k, False: 4.21k]
  ------------------
 2980|  1.10k|		return -1;
 2981|       |
 2982|  4.21k|	return 0;
 2983|  5.31k|}
tiff2vips.c:rtiff_stripwise_generate:
 2729|  8.38k|{
 2730|  8.38k|	VipsImage *out = out_region->im;
 2731|  8.38k|	Rtiff *rtiff = (Rtiff *) a;
 2732|  8.38k|	int read_height = rtiff->header.read_height;
 2733|  8.38k|	int page_height = rtiff->header.height;
 2734|  8.38k|	tsize_t scanline_size = rtiff->header.scanline_size;
 2735|  8.38k|	VipsRect *r = &out_region->valid;
 2736|       |
 2737|  8.38k|	int y;
 2738|       |
 2739|       |#ifdef DEBUG_VERBOSE
 2740|       |	printf("rtiff_stripwise_generate: top = %d, height = %d\n",
 2741|       |		r->top, r->height);
 2742|       |	printf("rtiff_stripwise_generate: y_top = %d\n", rtiff->y_pos);
 2743|       |#endif /*DEBUG_VERBOSE*/
 2744|       |
 2745|       |	/* We're inside a tilecache where tiles are the full image width, so
 2746|       |	 * this should always be true.
 2747|       |	 */
 2748|  8.38k|	g_assert(r->left == 0);
  ------------------
  |  |  166|  8.38k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  8.38k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2749|  8.38k|	g_assert(r->width == out_region->im->Xsize);
  ------------------
  |  |  166|  8.38k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  8.38k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2750|  8.38k|	g_assert(VIPS_RECT_BOTTOM(r) <= out_region->im->Ysize);
  ------------------
  |  |  166|  8.38k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  8.38k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2751|       |
 2752|       |	/* If we're reading more than one page, tiles won't fall on strip
 2753|       |	 * boundaries. Tiles may be contain several strips.
 2754|       |	 */
 2755|       |
 2756|       |	/* Check that y_pos is correct. It should be, since we are inside
 2757|       |	 * a vips_sequential().
 2758|       |	 */
 2759|  8.38k|	if (r->top != rtiff->y_pos) {
  ------------------
  |  Branch (2759:6): [True: 0, False: 8.38k]
  ------------------
 2760|      0|		vips_error("tiff2vips",
 2761|      0|			_("out of order read -- at line %d, but line %d requested"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2762|      0|			rtiff->y_pos, r->top);
 2763|      0|		return -1;
 2764|      0|	}
 2765|       |
 2766|  8.38k|	VIPS_GATE_START("rtiff_stripwise_generate: work");
  ------------------
  |  |   41|  8.38k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  8.38k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  8.38k|	{ \
  |  |   43|  8.38k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 8.38k]
  |  |  ------------------
  |  |   44|  8.38k|			vips__thread_gate_start(NAME); \
  |  |   45|  8.38k|	} \
  |  |   46|  8.38k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2767|       |
 2768|  8.38k|	y = 0;
 2769|  51.5k|	while (y < r->height) {
  ------------------
  |  Branch (2769:9): [True: 44.2k, False: 7.28k]
  ------------------
 2770|       |		/* page_no is within this toilet roll image, not tiff
 2771|       |		 * file page number ... add the number of the start
 2772|       |		 * page to get that.
 2773|       |		 */
 2774|  44.2k|		int page_no = (r->top + y) / page_height;
 2775|  44.2k|		int y_page = (r->top + y) % page_height;
 2776|       |
 2777|       |		/* Strip number.
 2778|       |		 */
 2779|  44.2k|		tstrip_t strip_no = y_page / read_height;
 2780|       |
 2781|  44.2k|		VipsRect image, page, strip, hit;
 2782|       |
 2783|       |		/* Our four (including the output region) rects, all in
 2784|       |		 * output image coordinates.
 2785|       |		 */
 2786|  44.2k|		image.left = 0;
 2787|  44.2k|		image.top = 0;
 2788|  44.2k|		image.width = out->Xsize;
 2789|  44.2k|		image.height = out->Ysize;
 2790|       |
 2791|  44.2k|		page.left = 0;
 2792|  44.2k|		page.top = page_height * ((r->top + y) / page_height);
 2793|  44.2k|		page.width = out->Xsize;
 2794|  44.2k|		page.height = page_height;
 2795|       |
 2796|  44.2k|		strip.left = 0;
 2797|  44.2k|		strip.top = page.top + strip_no * read_height;
 2798|  44.2k|		strip.width = out->Xsize;
 2799|  44.2k|		strip.height = read_height;
 2800|       |
 2801|       |		/* Clip strip against page and image ... the final strip will
 2802|       |		 * be smaller.
 2803|       |		 */
 2804|  44.2k|		vips_rect_intersectrect(&strip, &image, &strip);
 2805|  44.2k|		vips_rect_intersectrect(&strip, &page, &strip);
 2806|       |
 2807|       |		/* Now the bit that overlaps with the region we are filling.
 2808|       |		 */
 2809|  44.2k|		vips_rect_intersectrect(&strip, r, &hit);
 2810|       |
 2811|  44.2k|		g_assert(hit.height > 0);
  ------------------
  |  |  166|  44.2k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  44.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  44.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2812|       |
 2813|       |		/* Read directly into the image if we can. Otherwise, we must
 2814|       |		 * read to a temp buffer then unpack into the image.
 2815|       |		 *
 2816|       |		 * We need to read via a buffer if we need to reformat pixels,
 2817|       |		 * or if this strip is not aligned on a tile boundary.
 2818|       |		 */
 2819|  44.2k|		if (rtiff->memcpy &&
  ------------------
  |  Branch (2819:7): [True: 22.2k, False: 21.9k]
  ------------------
 2820|  44.2k|			hit.top == strip.top &&
  ------------------
  |  Branch (2820:4): [True: 22.2k, False: 0]
  ------------------
 2821|  44.2k|			hit.height == strip.height) {
  ------------------
  |  Branch (2821:4): [True: 22.2k, False: 0]
  ------------------
 2822|  22.2k|			if (rtiff_strip_read_interleaved(rtiff,
  ------------------
  |  Branch (2822:8): [True: 1.10k, False: 21.1k]
  ------------------
 2823|  22.2k|					rtiff->page + page_no, strip_no,
 2824|  22.2k|					VIPS_REGION_ADDR(out_region, 0, r->top + y))) {
  ------------------
  |  |  227|  22.2k|	((R)->data + \
  |  |  228|  22.2k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  22.2k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  22.2k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  22.2k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  22.2k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  22.2k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2825|  1.10k|				VIPS_GATE_STOP(
  ------------------
  |  |   49|  1.10k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.10k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  1.10k|	{ \
  |  |   51|  1.10k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 1.10k]
  |  |  ------------------
  |  |   52|  1.10k|			vips__thread_gate_stop(NAME); \
  |  |   53|  1.10k|	} \
  |  |   54|  1.10k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.10k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2826|  1.10k|					"rtiff_stripwise_generate: work");
 2827|  1.10k|				return -1;
 2828|  1.10k|			}
 2829|  22.2k|		}
 2830|  21.9k|		else {
 2831|  21.9k|			VipsPel *p;
 2832|  21.9k|			VipsPel *q;
 2833|  21.9k|			int z;
 2834|       |
 2835|       |			/* Read and interleave the entire strip.
 2836|       |			 */
 2837|  21.9k|			if (rtiff_strip_read_interleaved(rtiff,
  ------------------
  |  Branch (2837:8): [True: 0, False: 21.9k]
  ------------------
 2838|  21.9k|					rtiff->page + page_no, strip_no,
 2839|  21.9k|					rtiff->contig_buf)) {
 2840|      0|				VIPS_GATE_STOP(
  ------------------
  |  |   49|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|      0|	{ \
  |  |   51|      0|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   52|      0|			vips__thread_gate_stop(NAME); \
  |  |   53|      0|	} \
  |  |   54|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2841|      0|					"rtiff_stripwise_generate: work");
 2842|      0|				return -1;
 2843|      0|			}
 2844|       |
 2845|       |			/* Do any repacking to generate pixels in vips layout.
 2846|       |			 */
 2847|  21.9k|			p = (VipsPel *) rtiff->contig_buf +
 2848|  21.9k|				(hit.top - strip.top) * scanline_size;
 2849|  21.9k|			q = VIPS_REGION_ADDR(out_region, 0, r->top + y);
  ------------------
  |  |  227|  21.9k|	((R)->data + \
  |  |  228|  21.9k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  21.9k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  21.9k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  21.9k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  21.9k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  21.9k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2850|   159k|			for (z = 0; z < hit.height; z++) {
  ------------------
  |  Branch (2850:16): [True: 137k, False: 21.9k]
  ------------------
 2851|   137k|				rtiff->sfn(rtiff,
 2852|   137k|					q, p, out_region->im->Xsize, rtiff->client);
 2853|       |
 2854|   137k|				p += scanline_size;
 2855|   137k|				q += VIPS_REGION_LSKIP(out_region);
  ------------------
  |  |  195|   137k|	((size_t) ((R)->bpl))
  ------------------
 2856|   137k|			}
 2857|  21.9k|		}
 2858|       |
 2859|  43.1k|		y += hit.height;
 2860|  43.1k|		rtiff->y_pos += hit.height;
 2861|  43.1k|	}
 2862|       |
 2863|  8.38k|	VIPS_GATE_STOP("rtiff_stripwise_generate: work");
  ------------------
  |  |   49|  7.28k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  7.28k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  7.28k|	{ \
  |  |   51|  7.28k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 7.28k]
  |  |  ------------------
  |  |   52|  7.28k|			vips__thread_gate_stop(NAME); \
  |  |   53|  7.28k|	} \
  |  |   54|  8.38k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2864|       |
 2865|  7.28k|	return 0;
 2866|  8.38k|}
tiff2vips.c:rtiff_strip_read_interleaved:
 2673|  44.2k|{
 2674|  44.2k|	int samples_per_pixel = rtiff->header.samples_per_pixel;
 2675|  44.2k|	int read_height = rtiff->header.read_height;
 2676|  44.2k|	int bits_per_sample = rtiff->header.bits_per_sample;
 2677|  44.2k|	int read_as_rgba = rtiff->header.read_as_rgba;
 2678|  44.2k|	int strip_y = strip * read_height;
 2679|       |
 2680|  44.2k|	if (rtiff_set_page(rtiff, page))
  ------------------
  |  Branch (2680:6): [True: 0, False: 44.2k]
  ------------------
 2681|      0|		return -1;
 2682|       |
 2683|  44.2k|	if (read_as_rgba) {
  ------------------
  |  Branch (2683:6): [True: 6.41k, False: 37.8k]
  ------------------
 2684|  6.41k|		if (rtiff_rgba_strip_read(rtiff, strip, buf))
  ------------------
  |  Branch (2684:7): [True: 1.10k, False: 5.31k]
  ------------------
 2685|  1.10k|			return -1;
 2686|  6.41k|	}
 2687|  37.8k|	else if (rtiff->header.separate) {
  ------------------
  |  Branch (2687:11): [True: 1.68k, False: 36.1k]
  ------------------
 2688|  1.68k|		int page_width = rtiff->header.width;
 2689|  1.68k|		int page_height = rtiff->header.height;
 2690|  1.68k|		int strips_per_plane = 1 + (page_height - 1) / read_height;
 2691|  1.68k|		int strip_height = VIPS_MIN(read_height,
  ------------------
  |  |   55|  1.68k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 1.57k, False: 107]
  |  |  ------------------
  ------------------
 2692|  1.68k|			page_height - strip_y);
 2693|  1.68k|		int pels_per_strip = page_width * strip_height;
 2694|  1.68k|		int bytes_per_sample = bits_per_sample >> 3;
 2695|       |
 2696|  1.68k|		int i, j, k;
 2697|       |
 2698|  7.76k|		for (i = 0; i < samples_per_pixel; i++) {
  ------------------
  |  Branch (2698:15): [True: 6.08k, False: 1.68k]
  ------------------
 2699|  6.08k|			VipsPel *p;
 2700|  6.08k|			VipsPel *q;
 2701|       |
 2702|  6.08k|			if (rtiff_strip_read(rtiff,
  ------------------
  |  Branch (2702:8): [True: 0, False: 6.08k]
  ------------------
 2703|  6.08k|					strips_per_plane * i + strip,
 2704|  6.08k|					rtiff->plane_buf))
 2705|      0|				return -1;
 2706|       |
 2707|  6.08k|			p = (VipsPel *) rtiff->plane_buf;
 2708|  6.08k|			q = i * bytes_per_sample + (VipsPel *) buf;
 2709|   170k|			for (j = 0; j < pels_per_strip; j++) {
  ------------------
  |  Branch (2709:16): [True: 164k, False: 6.08k]
  ------------------
 2710|   468k|				for (k = 0; k < bytes_per_sample; k++)
  ------------------
  |  Branch (2710:17): [True: 303k, False: 164k]
  ------------------
 2711|   303k|					q[k] = p[k];
 2712|       |
 2713|   164k|				p += bytes_per_sample;
 2714|   164k|				q += bytes_per_sample * samples_per_pixel;
 2715|   164k|			}
 2716|  6.08k|		}
 2717|  1.68k|	}
 2718|  36.1k|	else {
 2719|  36.1k|		if (rtiff_strip_read(rtiff, strip, buf))
  ------------------
  |  Branch (2719:7): [True: 0, False: 36.1k]
  ------------------
 2720|      0|			return -1;
 2721|  36.1k|	}
 2722|       |
 2723|  43.1k|	return 0;
 2724|  44.2k|}
tiff2vips.c:rtiff_rgba_strip_read:
  732|  6.41k|{
  733|  6.41k|	RtiffHeader *header = &rtiff->header;
  734|       |
  735|  6.41k|	TIFFRGBAImage img;
  736|  6.41k|	guint32 rows_to_read;
  737|  6.41k|	char err[1024] = "";
  738|       |
  739|       |#ifdef DEBUG_VERBOSE
  740|       |	printf("rtiff_rgba_strip_read: reading strip %d\n", strip);
  741|       |#endif /*DEBUG_VERBOSE*/
  742|       |
  743|  6.41k|	if (!TIFFRGBAImageOK(rtiff->tiff, err) ||
  ------------------
  |  Branch (743:6): [True: 30, False: 6.38k]
  ------------------
  744|  6.41k|		!TIFFRGBAImageBegin(&img, rtiff->tiff, 0, err)) {
  ------------------
  |  Branch (744:3): [True: 78, False: 6.30k]
  ------------------
  745|    108|		vips_foreign_load_invalidate(rtiff->out);
  746|    108|		vips_error("tiff2vips", "%s", err);
  747|    108|		return -1;
  748|    108|	}
  749|       |
  750|  6.30k|	img.req_orientation = header->orientation;
  751|  6.30k|	img.row_offset = strip * header->rows_per_strip;
  752|  6.30k|	img.col_offset = 0;
  753|       |
  754|  6.30k|	rows_to_read =
  755|  6.30k|		VIPS_MIN(header->rows_per_strip, header->height - img.row_offset);
  ------------------
  |  |   55|  6.30k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 5.36k, False: 943]
  |  |  ------------------
  ------------------
  756|       |
  757|  6.30k|	if (!TIFFRGBAImageGet(&img, buf, header->width, rows_to_read)) {
  ------------------
  |  Branch (757:6): [True: 992, False: 5.31k]
  ------------------
  758|    992|		TIFFRGBAImageEnd(&img);
  759|    992|		vips_foreign_load_invalidate(rtiff->out);
  760|    992|		vips_error("tiff2vips", "%s", _("read error"));
  ------------------
  |  |   30|    992|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    992|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  761|    992|		return -1;
  762|    992|	}
  763|       |
  764|  5.31k|	TIFFRGBAImageEnd(&img);
  765|       |
  766|  5.31k|	if (rtiff->failed) {
  ------------------
  |  Branch (766:6): [True: 0, False: 5.31k]
  ------------------
  767|      0|		vips_foreign_load_invalidate(rtiff->out);
  768|      0|		return -1;
  769|      0|	}
  770|       |
  771|  5.31k|	return 0;
  772|  5.31k|}
tiff2vips.c:rtiff_strip_read:
  704|  42.2k|{
  705|  42.2k|	tsize_t length;
  706|       |
  707|       |#ifdef DEBUG_VERBOSE
  708|       |	printf("rtiff_strip_read: reading strip %d\n", strip);
  709|       |#endif /*DEBUG_VERBOSE*/
  710|       |
  711|  42.2k|	if (rtiff->header.read_scanlinewise)
  ------------------
  |  Branch (711:6): [True: 0, False: 42.2k]
  ------------------
  712|      0|		length = TIFFReadScanline(rtiff->tiff, buf, strip, (tsample_t) 0);
  713|  42.2k|	else
  714|  42.2k|		length = TIFFReadEncodedStrip(rtiff->tiff, strip, buf, (tsize_t) -1);
  715|       |
  716|  42.2k|	if (length == -1 && rtiff->fail_on >= VIPS_FAIL_ON_WARNING) {
  ------------------
  |  Branch (716:6): [True: 22.9k, False: 19.2k]
  |  Branch (716:22): [True: 0, False: 22.9k]
  ------------------
  717|      0|		vips_foreign_load_invalidate(rtiff->out);
  718|      0|		vips_error("tiff2vips", "%s", _("read error"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  719|      0|		return -1;
  720|      0|	}
  721|       |
  722|  42.2k|	if (rtiff->failed) {
  ------------------
  |  Branch (722:6): [True: 0, False: 42.2k]
  ------------------
  723|      0|		vips_foreign_load_invalidate(rtiff->out);
  724|      0|		return -1;
  725|      0|	}
  726|       |
  727|  42.2k|	return 0;
  728|  42.2k|}

tiffload.c:vips_foreign_load_tiff_class_init:
  165|      1|{
  166|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  168|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  169|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  170|       |
  171|       |	/* Other libraries may be using libtiff, we want to capture tiff
  172|       |	 * warning and error as soon as we can.
  173|       |	 *
  174|       |	 * This class init will be triggered during startup.
  175|       |	 */
  176|      1|	vips__tiff_init();
  177|       |
  178|      1|	gobject_class->dispose = vips_foreign_load_tiff_dispose;
  179|      1|	gobject_class->set_property = vips_object_set_property;
  180|      1|	gobject_class->get_property = vips_object_get_property;
  181|       |
  182|      1|	object_class->nickname = "tiffload_base";
  183|      1|	object_class->description = _("load tiff");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  184|       |
  185|       |	/* We are fast, but must test after openslideload.
  186|       |	 */
  187|      1|	foreign_class->priority = 50;
  188|       |
  189|      1|	load_class->get_flags_filename =
  190|      1|		vips_foreign_load_tiff_get_flags_filename;
  191|      1|	load_class->get_flags = vips_foreign_load_tiff_get_flags;
  192|      1|	load_class->header = vips_foreign_load_tiff_header;
  193|      1|	load_class->load = vips_foreign_load_tiff_load;
  194|       |
  195|      1|	VIPS_ARG_INT(class, "page", 20,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  196|      1|		_("Page"),
  197|      1|		_("First page to load"),
  198|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  199|      1|		G_STRUCT_OFFSET(VipsForeignLoadTiff, page),
  200|      1|		0, 100000, 0);
  201|       |
  202|      1|	VIPS_ARG_INT(class, "n", 21,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  203|      1|		_("n"),
  204|      1|		_("Number of pages to load, -1 for all"),
  205|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  206|      1|		G_STRUCT_OFFSET(VipsForeignLoadTiff, n),
  207|      1|		-1, 100000, 1);
  208|       |
  209|      1|	VIPS_ARG_BOOL(class, "autorotate", 22,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  210|      1|		_("Autorotate"),
  211|      1|		_("Rotate image using orientation tag"),
  212|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  213|      1|		G_STRUCT_OFFSET(VipsForeignLoadTiff, autorotate),
  214|      1|		FALSE);
  215|       |
  216|      1|	VIPS_ARG_INT(class, "subifd", 23,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  217|      1|		_("subifd"),
  218|      1|		_("Subifd index"),
  219|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  220|      1|		G_STRUCT_OFFSET(VipsForeignLoadTiff, subifd),
  221|      1|		-1, 100000, -1);
  222|       |
  223|       |#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
  224|       |	VIPS_ARG_BOOL(class, "unlimited", 24,
  225|       |		_("Unlimited"),
  226|       |		_("Remove all denial of service limits"),
  227|       |		VIPS_ARGUMENT_OPTIONAL_INPUT,
  228|       |		G_STRUCT_OFFSET(VipsForeignLoadTiff, unlimited),
  229|       |		FALSE);
  230|       |#endif
  231|      1|}
tiffload.c:vips_foreign_load_tiff_dispose:
   93|  9.13k|{
   94|  9.13k|	VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) gobject;
   95|       |
   96|  9.13k|	VIPS_UNREF(tiff->source);
  ------------------
  |  |   57|  9.13k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  9.13k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  9.13k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  9.13k|	{ \
  |  |  |  |   43|  9.13k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 9.13k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  9.13k|			(void) F((S)); \
  |  |  |  |   45|  9.13k|			(S) = 0; \
  |  |  |  |   46|  9.13k|		} \
  |  |  |  |   47|  9.13k|	} \
  |  |  |  |   48|  9.13k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  9.13k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   97|       |
   98|  9.13k|	G_OBJECT_CLASS(vips_foreign_load_tiff_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  9.13k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  9.13k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  9.13k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|  9.13k|}
tiffload.c:vips_foreign_load_tiff_get_flags_source:
  103|  9.14k|{
  104|  9.14k|	VipsForeignFlags flags;
  105|       |
  106|  9.14k|	flags = 0;
  107|  9.14k|	if (vips__istifftiled_source(source))
  ------------------
  |  Branch (107:6): [True: 2.00k, False: 7.14k]
  ------------------
  108|  2.00k|		flags |= VIPS_FOREIGN_PARTIAL;
  109|  7.14k|	else
  110|  7.14k|		flags |= VIPS_FOREIGN_SEQUENTIAL;
  111|       |
  112|  9.14k|	return flags;
  113|  9.14k|}
tiffload.c:vips_foreign_load_tiff_get_flags:
  131|  9.14k|{
  132|  9.14k|	VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) load;
  133|       |
  134|  9.14k|	return vips_foreign_load_tiff_get_flags_source(tiff->source);
  135|  9.14k|}
tiffload.c:vips_foreign_load_tiff_header:
  139|  9.14k|{
  140|  9.14k|	VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) load;
  141|       |
  142|  9.14k|	if (vips__tiff_read_header_source(tiff->source, load->out,
  ------------------
  |  Branch (142:6): [True: 2.05k, False: 7.09k]
  ------------------
  143|  9.14k|			tiff->page, tiff->n, tiff->autorotate, tiff->subifd,
  144|  9.14k|			load->fail_on, tiff->unlimited))
  145|  2.05k|		return -1;
  146|       |
  147|  7.09k|	return 0;
  148|  9.14k|}
tiffload.c:vips_foreign_load_tiff_load:
  152|  6.73k|{
  153|  6.73k|	VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) load;
  154|       |
  155|  6.73k|	if (vips__tiff_read_source(tiff->source, load->real,
  ------------------
  |  Branch (155:6): [True: 1.10k, False: 5.62k]
  ------------------
  156|  6.73k|			tiff->page, tiff->n, tiff->autorotate, tiff->subifd,
  157|  6.73k|			load->fail_on, tiff->unlimited))
  158|  1.10k|		return -1;
  159|       |
  160|  5.62k|	return 0;
  161|  6.73k|}
tiffload.c:vips_foreign_load_tiff_init:
  235|  9.14k|{
  236|  9.14k|	tiff->page = 0;
  237|  9.14k|	tiff->n = 1;
  238|  9.14k|	tiff->subifd = -1;
  239|  9.14k|	tiff->unlimited = FALSE;
  ------------------
  |  |  794|  9.14k|#define	FALSE	(0)
  ------------------
  240|  9.14k|}
tiffload.c:vips_foreign_load_tiff_source_class_init:
  284|      1|{
  285|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  286|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  287|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  288|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  289|       |
  290|      1|	gobject_class->set_property = vips_object_set_property;
  291|      1|	gobject_class->get_property = vips_object_get_property;
  292|       |
  293|      1|	object_class->nickname = "tiffload_source";
  294|      1|	object_class->description = _("load tiff from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  295|      1|	object_class->build = vips_foreign_load_tiff_source_build;
  296|       |
  297|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  298|       |
  299|      1|	load_class->is_a_source = vips_foreign_load_tiff_source_is_a_source;
  300|       |
  301|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  302|      1|		_("Source"),
  303|      1|		_("Source to load from"),
  304|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  305|      1|		G_STRUCT_OFFSET(VipsForeignLoadTiffSource, source),
  306|      1|		VIPS_TYPE_SOURCE);
  307|      1|}
tiffload.c:vips_foreign_load_tiff_source_is_a_source:
  277|  24.9k|{
  278|  24.9k|	return vips__istiff_source(source);
  279|  24.9k|}
tiffload.c:vips_foreign_load_tiff_file_class_init:
  364|      1|{
  365|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  366|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  367|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  368|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  369|       |
  370|      1|	gobject_class->set_property = vips_object_set_property;
  371|      1|	gobject_class->get_property = vips_object_get_property;
  372|       |
  373|      1|	object_class->nickname = "tiffload";
  374|      1|	object_class->description = _("load tiff from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  375|      1|	object_class->build = vips_foreign_load_tiff_file_build;
  376|       |
  377|      1|	foreign_class->suffs = vips__foreign_tiff_suffs;
  378|       |
  379|      1|	load_class->is_a = vips_foreign_load_tiff_file_is_a;
  380|       |
  381|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  382|      1|		_("Filename"),
  383|      1|		_("Filename to load from"),
  384|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  385|      1|		G_STRUCT_OFFSET(VipsForeignLoadTiffFile, filename),
  386|      1|		NULL);
  387|      1|}
tiffload.c:vips_foreign_load_tiff_buffer_class_init:
  445|      1|{
  446|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  447|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  448|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  449|       |
  450|      1|	gobject_class->set_property = vips_object_set_property;
  451|      1|	gobject_class->get_property = vips_object_get_property;
  452|       |
  453|      1|	object_class->nickname = "tiffload_buffer";
  454|      1|	object_class->description = _("load tiff from buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  455|      1|	object_class->build = vips_foreign_load_tiff_buffer_build;
  456|       |
  457|      1|	load_class->is_a_buffer = vips_foreign_load_tiff_buffer_is_a_buffer;
  458|       |
  459|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  460|      1|		_("Buffer"),
  461|      1|		_("Buffer to load from"),
  462|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  463|      1|		G_STRUCT_OFFSET(VipsForeignLoadTiffBuffer, blob),
  464|      1|		VIPS_TYPE_BLOB);
  465|      1|}
tiffload.c:vips_foreign_load_tiff_buffer_build:
  410|  9.14k|{
  411|  9.14k|	VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) object;
  412|  9.14k|	VipsForeignLoadTiffBuffer *buffer =
  413|  9.14k|		(VipsForeignLoadTiffBuffer *) object;
  414|       |
  415|  9.14k|	if (buffer->blob &&
  ------------------
  |  Branch (415:6): [True: 9.14k, False: 0]
  ------------------
  416|  9.14k|		!(tiff->source = vips_source_new_from_memory(
  ------------------
  |  Branch (416:3): [True: 0, False: 9.14k]
  ------------------
  417|  9.14k|			  VIPS_AREA(buffer->blob)->data,
  ------------------
  |  |  137|  9.14k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  418|  9.14k|			  VIPS_AREA(buffer->blob)->length)))
  ------------------
  |  |  137|  9.14k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  419|      0|		return -1;
  420|       |
  421|  9.14k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_tiff_buffer_parent_class)
  ------------------
  |  |  435|  9.14k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  9.14k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  9.14k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (421:6): [True: 2.05k, False: 7.09k]
  ------------------
  422|  9.14k|			->build(object))
  423|  2.05k|		return -1;
  424|       |
  425|  7.09k|	return 0;
  426|  9.14k|}
tiffload.c:vips_foreign_load_tiff_buffer_is_a_buffer:
  430|  24.9k|{
  431|  24.9k|	VipsSource *source;
  432|  24.9k|	gboolean result;
  433|       |
  434|  24.9k|	if (!(source = vips_source_new_from_memory(buf, len)))
  ------------------
  |  Branch (434:6): [True: 0, False: 24.9k]
  ------------------
  435|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  436|  24.9k|	result = vips_foreign_load_tiff_source_is_a_source(source);
  437|  24.9k|	VIPS_UNREF(source);
  ------------------
  |  |   57|  24.9k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  24.9k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  24.9k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  24.9k|	{ \
  |  |  |  |   43|  24.9k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 24.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  24.9k|			(void) F((S)); \
  |  |  |  |   45|  24.9k|			(S) = 0; \
  |  |  |  |   46|  24.9k|		} \
  |  |  |  |   47|  24.9k|	} \
  |  |  |  |   48|  24.9k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  24.9k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  438|       |
  439|  24.9k|	return result;
  440|  24.9k|}
tiffload.c:vips_foreign_load_tiff_buffer_init:
  469|  9.14k|{
  470|  9.14k|}

tiffsave.c:vips_foreign_save_tiff_class_init:
  237|      1|{
  238|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  240|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  241|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  242|       |
  243|      1|	gobject_class->dispose = vips_foreign_save_tiff_dispose;
  244|      1|	gobject_class->set_property = vips_object_set_property;
  245|      1|	gobject_class->get_property = vips_object_get_property;
  246|       |
  247|      1|	object_class->nickname = "tiffsave_base";
  248|      1|	object_class->description = _("save image as tiff");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  249|      1|	object_class->build = vips_foreign_save_tiff_build;
  250|       |
  251|      1|	foreign_class->suffs = vips__foreign_tiff_suffs;
  252|       |
  253|      1|	save_class->saveable = VIPS_SAVEABLE_ANY;
  254|      1|	save_class->coding[VIPS_CODING_LABQ] = TRUE;
  ------------------
  |  |  798|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  255|       |
  256|      1|	VIPS_ARG_ENUM(class, "compression", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  257|      1|		_("Compression"),
  258|      1|		_("Compression for this file"),
  259|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  260|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, compression),
  261|      1|		VIPS_TYPE_FOREIGN_TIFF_COMPRESSION,
  262|      1|		VIPS_FOREIGN_TIFF_COMPRESSION_NONE);
  263|       |
  264|      1|	VIPS_ARG_INT(class, "Q", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  265|      1|		_("Q"),
  266|      1|		_("Q factor"),
  267|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  268|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, Q),
  269|      1|		1, 100, 75);
  270|       |
  271|      1|	VIPS_ARG_ENUM(class, "predictor", 8,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  272|      1|		_("Predictor"),
  273|      1|		_("Compression prediction"),
  274|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  275|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, predictor),
  276|      1|		VIPS_TYPE_FOREIGN_TIFF_PREDICTOR,
  277|      1|		VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL);
  278|       |
  279|      1|	VIPS_ARG_BOOL(class, "tile", 10,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  280|      1|		_("Tile"),
  281|      1|		_("Write a tiled tiff"),
  282|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  283|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, tile),
  284|      1|		FALSE);
  285|       |
  286|      1|	VIPS_ARG_INT(class, "tile_width", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  287|      1|		_("Tile width"),
  288|      1|		_("Tile width in pixels"),
  289|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  290|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, tile_width),
  291|      1|		1, 32768, 128);
  292|       |
  293|      1|	VIPS_ARG_INT(class, "tile_height", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  294|      1|		_("Tile height"),
  295|      1|		_("Tile height in pixels"),
  296|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  297|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, tile_height),
  298|      1|		1, 32768, 128);
  299|       |
  300|      1|	VIPS_ARG_BOOL(class, "pyramid", 13,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  301|      1|		_("Pyramid"),
  302|      1|		_("Write a pyramidal tiff"),
  303|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  304|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, pyramid),
  305|      1|		FALSE);
  306|       |
  307|      1|	VIPS_ARG_BOOL(class, "miniswhite", 14,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  308|      1|		_("Miniswhite"),
  309|      1|		_("Use 0 for white in 1-bit images"),
  310|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  311|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, miniswhite),
  312|      1|		FALSE);
  313|       |
  314|      1|	VIPS_ARG_INT(class, "bitdepth", 15,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  315|      1|		_("Bit depth"),
  316|      1|		_("Write as a 1, 2, 4 or 8 bit image"),
  317|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  318|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, bitdepth),
  319|      1|		0, 8, 0);
  320|       |
  321|      1|	VIPS_ARG_ENUM(class, "resunit", 16,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  322|      1|		_("Resolution unit"),
  323|      1|		_("Resolution unit"),
  324|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  325|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, resunit),
  326|      1|		VIPS_TYPE_FOREIGN_TIFF_RESUNIT, VIPS_FOREIGN_TIFF_RESUNIT_CM);
  327|       |
  328|      1|	VIPS_ARG_DOUBLE(class, "xres", 17,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  329|      1|		_("Xres"),
  330|      1|		_("Horizontal resolution in pixels/mm"),
  331|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  332|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, xres),
  333|      1|		0.001, 1000000, 1);
  334|       |
  335|      1|	VIPS_ARG_DOUBLE(class, "yres", 18,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  336|      1|		_("Yres"),
  337|      1|		_("Vertical resolution in pixels/mm"),
  338|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  339|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, yres),
  340|      1|		0.001, 1000000, 1);
  341|       |
  342|      1|	VIPS_ARG_BOOL(class, "bigtiff", 19,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  343|      1|		_("Bigtiff"),
  344|      1|		_("Write a bigtiff image"),
  345|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  346|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, bigtiff),
  347|      1|		FALSE);
  348|       |
  349|      1|	VIPS_ARG_BOOL(class, "properties", 21,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  350|      1|		_("Properties"),
  351|      1|		_("Write a properties document to IMAGEDESCRIPTION"),
  352|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  353|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, properties),
  354|      1|		FALSE);
  355|       |
  356|      1|	VIPS_ARG_ENUM(class, "region_shrink", 22,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  357|      1|		_("Region shrink"),
  358|      1|		_("Method to shrink regions"),
  359|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  360|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, region_shrink),
  361|      1|		VIPS_TYPE_REGION_SHRINK, VIPS_REGION_SHRINK_MEAN);
  362|       |
  363|      1|	VIPS_ARG_INT(class, "level", 23,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  364|      1|		_("Level"),
  365|      1|		_("Deflate (1-9, default 6) or ZSTD (1-22, default 9) compression level"),
  366|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  367|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, level),
  368|      1|		0, 22, 0);
  369|       |
  370|      1|	VIPS_ARG_BOOL(class, "lossless", 24,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  371|      1|		_("Lossless"),
  372|      1|		_("Enable WEBP lossless mode"),
  373|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  374|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, lossless),
  375|      1|		FALSE);
  376|       |
  377|      1|	VIPS_ARG_ENUM(class, "depth", 25,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  378|      1|		_("Depth"),
  379|      1|		_("Pyramid depth"),
  380|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  381|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, depth),
  382|      1|		VIPS_TYPE_FOREIGN_DZ_DEPTH, VIPS_FOREIGN_DZ_DEPTH_ONETILE);
  383|       |
  384|      1|	VIPS_ARG_BOOL(class, "subifd", 26,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  385|      1|		_("Sub-IFD"),
  386|      1|		_("Save pyr layers as sub-IFDs"),
  387|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  388|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, subifd),
  389|      1|		FALSE);
  390|       |
  391|      1|	VIPS_ARG_BOOL(class, "premultiply", 27,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  392|      1|		_("Premultiply"),
  393|      1|		_("Save with premultiplied alpha"),
  394|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  395|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, premultiply),
  396|      1|		FALSE);
  397|       |
  398|      1|	VIPS_ARG_BOOL(class, "rgbjpeg", 28,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  399|      1|		_("RGB JPEG"),
  400|      1|		_("Output RGB JPEG rather than YCbCr"),
  401|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  402|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, rgbjpeg),
  403|      1|		FALSE);
  404|       |
  405|      1|	VIPS_ARG_BOOL(class, "squash", 29,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  406|      1|		_("Squash"),
  407|      1|		_("Squash images down to 1 bit"),
  408|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  409|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiff, squash),
  410|      1|		FALSE);
  411|      1|}
tiffsave.c:vips_foreign_save_tiff_target_class_init:
  462|      1|{
  463|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  464|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  465|       |
  466|      1|	gobject_class->set_property = vips_object_set_property;
  467|      1|	gobject_class->get_property = vips_object_get_property;
  468|       |
  469|      1|	object_class->nickname = "tiffsave_target";
  470|      1|	object_class->description = _("save image to tiff target");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  471|      1|	object_class->build = vips_foreign_save_tiff_target_build;
  472|       |
  473|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  474|      1|		_("Target"),
  475|      1|		_("Target to save to"),
  476|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  477|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiffTarget, target),
  478|      1|		VIPS_TYPE_TARGET);
  479|      1|}
tiffsave.c:vips_foreign_save_tiff_file_class_init:
  515|      1|{
  516|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  518|       |
  519|      1|	gobject_class->set_property = vips_object_set_property;
  520|      1|	gobject_class->get_property = vips_object_get_property;
  521|       |
  522|      1|	object_class->nickname = "tiffsave";
  523|      1|	object_class->description = _("save image to tiff file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  524|      1|	object_class->build = vips_foreign_save_tiff_file_build;
  525|       |
  526|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  527|      1|		_("Filename"),
  528|      1|		_("Filename to save to"),
  529|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  530|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiffFile, filename),
  531|      1|		NULL);
  532|      1|}
tiffsave.c:vips_foreign_save_tiff_buffer_class_init:
  576|      1|{
  577|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  578|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  579|       |
  580|      1|	gobject_class->set_property = vips_object_set_property;
  581|      1|	gobject_class->get_property = vips_object_get_property;
  582|       |
  583|      1|	object_class->nickname = "tiffsave_buffer";
  584|      1|	object_class->description = _("save image to tiff buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  585|      1|	object_class->build = vips_foreign_save_tiff_buffer_build;
  586|       |
  587|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  588|      1|		_("Buffer"),
  589|      1|		_("Buffer to save to"),
  590|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  591|      1|		G_STRUCT_OFFSET(VipsForeignSaveTiffBuffer, buf),
  592|      1|		VIPS_TYPE_BLOB);
  593|      1|}

vips__new_output_message:
  172|  14.5k|{
  173|  14.5k|	char buffer[JMSG_LENGTH_MAX];
  174|       |
  175|  14.5k|	(*cinfo->err->format_message)(cinfo, buffer);
  176|  14.5k|	vips_error("VipsJpeg", _("%s"), buffer);
  ------------------
  |  |   30|  14.5k|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|  14.5k|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  177|       |
  178|       |#ifdef DEBUG
  179|       |	printf("vips__new_output_message: \"%s\"\n", buffer);
  180|       |#endif /*DEBUG*/
  181|  14.5k|}
vips__new_error_exit:
  187|  4.11k|{
  188|  4.11k|	ErrorManager *eman = (ErrorManager *) cinfo->err;
  189|       |
  190|       |#ifdef DEBUG
  191|       |	printf("vips__new_error_exit:\n");
  192|       |#endif /*DEBUG*/
  193|       |
  194|       |	/* Close the fp if necessary.
  195|       |	 */
  196|  4.11k|	if (eman->fp) {
  ------------------
  |  Branch (196:6): [True: 0, False: 4.11k]
  ------------------
  197|      0|		(void) fclose(eman->fp);
  198|      0|		eman->fp = NULL;
  199|      0|	}
  200|       |
  201|       |	/* Send the error message to VIPS. This method is overridden above.
  202|       |	 */
  203|  4.11k|	(*cinfo->err->output_message)(cinfo);
  204|       |
  205|       |	/* Jump back.
  206|       |	 */
  207|  4.11k|	longjmp(eman->jmp, 1);
  208|  4.11k|}

vipsload.c:vips_foreign_load_vips_class_init:
  147|      1|{
  148|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  150|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  151|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  152|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  153|       |
  154|      1|	gobject_class->dispose = vips_foreign_load_vips_dispose;
  155|       |
  156|      1|	object_class->nickname = "vipsload_base";
  157|      1|	object_class->description = _("load vips base class");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  158|       |
  159|       |	/* You're unlikely to want to use this on untrusted files.
  160|       |	 */
  161|      1|	operation_class->flags |= VIPS_OPERATION_UNTRUSTED;
  162|       |
  163|       |	/* We are fast at is_a(), so high priority.
  164|       |	 */
  165|      1|	foreign_class->priority = 200;
  166|       |
  167|      1|	load_class->get_flags = vips_foreign_load_vips_get_flags;
  168|      1|	load_class->get_flags_filename =
  169|      1|		vips_foreign_load_vips_get_flags_filename;
  170|      1|	load_class->header = vips_foreign_load_vips_header;
  171|      1|	load_class->load = NULL;
  172|      1|}
vipsload.c:vips_foreign_load_vips_file_class_init:
  218|      1|{
  219|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  221|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  222|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  223|       |
  224|      1|	gobject_class->set_property = vips_object_set_property;
  225|      1|	gobject_class->get_property = vips_object_get_property;
  226|       |
  227|      1|	object_class->nickname = "vipsload";
  228|      1|	object_class->description = _("load vips from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  229|      1|	object_class->build = vips_foreign_load_vips_file_build;
  230|       |
  231|      1|	foreign_class->suffs = vips__suffs;
  232|       |
  233|      1|	load_class->is_a = vips_foreign_load_vips_file_is_a;
  234|       |
  235|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  236|      1|		_("Filename"),
  237|      1|		_("Filename to load from"),
  238|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  239|      1|		G_STRUCT_OFFSET(VipsForeignLoadVipsFile, filename),
  240|      1|		NULL);
  241|      1|}
vipsload.c:vips_foreign_load_vips_source_class_init:
  293|      1|{
  294|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  295|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  296|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  297|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  298|       |
  299|      1|	gobject_class->set_property = vips_object_set_property;
  300|      1|	gobject_class->get_property = vips_object_get_property;
  301|       |
  302|      1|	object_class->nickname = "vipsload_source";
  303|      1|	object_class->description = _("load vips from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  304|      1|	object_class->build = vips_foreign_load_vips_source_build;
  305|       |
  306|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  307|       |
  308|      1|	load_class->is_a_source =
  309|      1|		vips_foreign_load_vips_source_is_a_source;
  310|       |
  311|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  312|      1|		_("Source"),
  313|      1|		_("Source to load from"),
  314|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  315|      1|		G_STRUCT_OFFSET(VipsForeignLoadVipsSource, source),
  316|      1|		VIPS_TYPE_SOURCE);
  317|      1|}

vipssave.c:vips_foreign_save_vips_class_init:
  130|      1|{
  131|      1|	int i;
  132|       |
  133|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  134|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  135|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  136|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  137|       |
  138|      1|	gobject_class->dispose = vips_foreign_save_vips_dispose;
  139|       |
  140|      1|	object_class->nickname = "vipssave_base";
  141|      1|	object_class->description = _("save vips base class");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  142|      1|	object_class->build = vips_foreign_save_vips_build;
  143|       |
  144|      1|	foreign_class->suffs = vips__suffs;
  145|       |
  146|      1|	save_class->saveable = VIPS_SAVEABLE_ANY;
  147|      8|	for (i = 0; i < VIPS_CODING_LAST; i++)
  ------------------
  |  Branch (147:14): [True: 7, False: 1]
  ------------------
  148|      7|		save_class->coding[i] = TRUE;
  ------------------
  |  |  798|      7|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      7|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  149|      1|}
vipssave.c:vips_foreign_save_vips_file_class_init:
  185|      1|{
  186|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  188|       |
  189|      1|	gobject_class->set_property = vips_object_set_property;
  190|      1|	gobject_class->get_property = vips_object_get_property;
  191|       |
  192|      1|	object_class->nickname = "vipssave";
  193|      1|	object_class->description = _("save image to file in vips format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  194|      1|	object_class->build = vips_foreign_save_vips_file_build;
  195|       |
  196|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  197|      1|		_("Filename"),
  198|      1|		_("Filename to save to"),
  199|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  200|      1|		G_STRUCT_OFFSET(VipsForeignSaveVipsFile, filename),
  201|      1|		NULL);
  202|      1|}
vipssave.c:vips_foreign_save_vips_target_class_init:
  241|      1|{
  242|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  244|       |
  245|      1|	gobject_class->set_property = vips_object_set_property;
  246|      1|	gobject_class->get_property = vips_object_get_property;
  247|       |
  248|      1|	object_class->nickname = "vipssave_target";
  249|      1|	object_class->description = _("save image to target in vips format");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  250|      1|	object_class->build = vips_foreign_save_vips_target_build;
  251|       |
  252|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  253|      1|		_("Target"),
  254|      1|		_("Target to save to"),
  255|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  256|      1|		G_STRUCT_OFFSET(VipsForeignSaveVipsTarget, target),
  257|      1|		VIPS_TYPE_TARGET);
  258|      1|}

vips__iswebp_source:
  318|  33.7k|{
  319|  33.7k|	const unsigned char *p;
  320|       |
  321|       |	/* WebP is "RIFF xxxx WEBP" at the start, so we need 12 bytes.
  322|       |	 */
  323|  33.7k|	if ((p = vips_source_sniff(source, 12)) &&
  ------------------
  |  Branch (323:6): [True: 33.1k, False: 652]
  ------------------
  324|  33.7k|		vips_isprefix("RIFF", (char *) p) &&
  ------------------
  |  Branch (324:3): [True: 1.92k, False: 31.2k]
  ------------------
  325|  33.7k|		vips_isprefix("WEBP", (char *) p + 8))
  ------------------
  |  Branch (325:3): [True: 1.92k, False: 1]
  ------------------
  326|  1.92k|		return 1;
  327|       |
  328|  31.8k|	return 0;
  329|  33.7k|}
vips__webp_read_header_source:
  808|  1.92k|{
  809|  1.92k|	Read *read;
  810|       |
  811|  1.92k|	if (!(read = read_new(out, source, page, n, scale)) ||
  ------------------
  |  Branch (811:6): [True: 0, False: 1.92k]
  ------------------
  812|  1.92k|		read_header(read, out))
  ------------------
  |  Branch (812:3): [True: 238, False: 1.68k]
  ------------------
  813|    238|		return -1;
  814|       |
  815|  1.68k|	return 0;
  816|  1.92k|}
vips__webp_read_source:
  821|  1.55k|{
  822|  1.55k|	Read *read;
  823|       |
  824|  1.55k|	if (!(read = read_new(out, source, page, n, scale)) ||
  ------------------
  |  Branch (824:6): [True: 0, False: 1.55k]
  ------------------
  825|  1.55k|		read_image(read, out))
  ------------------
  |  Branch (825:3): [True: 1.09k, False: 459]
  ------------------
  826|  1.09k|		return -1;
  827|       |
  828|    459|	return 0;
  829|  1.55k|}
webp2vips.c:read_new:
  354|  3.47k|{
  355|  3.47k|	Read *read;
  356|       |
  357|  3.47k|	if (!(read = VIPS_NEW(NULL, Read)))
  ------------------
  |  |   70|  3.47k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  3.47k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  3.47k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  3.47k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  3.47k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (357:6): [True: 0, False: 3.47k]
  ------------------
  358|      0|		return NULL;
  359|       |
  360|  3.47k|	read->out = out;
  361|  3.47k|	read->source = source;
  362|  3.47k|	g_object_ref(source);
  363|  3.47k|	read->page = page;
  364|  3.47k|	read->n = n;
  365|  3.47k|	read->scale = scale;
  366|  3.47k|	read->delays = NULL;
  367|  3.47k|	read->demux = NULL;
  368|  3.47k|	read->frame = NULL;
  369|  3.47k|	read->dispose_method = WEBP_MUX_DISPOSE_NONE;
  370|  3.47k|	read->frame_no = 0;
  371|       |
  372|       |	/* Everything has to stay open until read has finished, unfortunately,
  373|       |	 * since webp relies on us mapping the whole source.
  374|       |	 */
  375|  3.47k|	g_signal_connect(out, "close",
  ------------------
  |  |  491|  3.47k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  376|  3.47k|		G_CALLBACK(read_close_cb), read);
  377|       |
  378|  3.47k|	WebPInitDecoderConfig(&read->config);
  379|  3.47k|	read->config.options.use_threads = 1;
  380|  3.47k|	read->config.output.is_external_memory = 1;
  381|       |
  382|       |	/* Map the whole source into memory.
  383|       |	 */
  384|  3.47k|	if (!(read->data.bytes =
  ------------------
  |  Branch (384:6): [True: 0, False: 3.47k]
  ------------------
  385|  3.47k|				vips_source_map(source, &read->data.size)))
  386|      0|		return NULL;
  387|       |
  388|  3.47k|	return read;
  389|  3.47k|}
webp2vips.c:read_close_cb:
  348|  3.47k|{
  349|  3.47k|	read_free(read);
  350|  3.47k|}
webp2vips.c:read_free:
  333|  3.47k|{
  334|  3.47k|	WebPDemuxReleaseIterator(&read->iter);
  335|  3.47k|	VIPS_UNREF(read->frame);
  ------------------
  |  |   57|  3.47k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  3.47k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  3.47k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  3.47k|	{ \
  |  |  |  |   43|  3.47k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 3.23k, False: 238]
  |  |  |  |  ------------------
  |  |  |  |   44|  3.23k|			(void) F((S)); \
  |  |  |  |   45|  3.23k|			(S) = 0; \
  |  |  |  |   46|  3.23k|		} \
  |  |  |  |   47|  3.47k|	} \
  |  |  |  |   48|  3.47k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  3.47k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  336|  3.47k|	VIPS_FREEF(WebPDemuxDelete, read->demux);
  ------------------
  |  |   41|  3.47k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  3.47k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  3.47k|	{ \
  |  |   43|  3.47k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 3.23k, False: 236]
  |  |  ------------------
  |  |   44|  3.23k|			(void) F((S)); \
  |  |   45|  3.23k|			(S) = 0; \
  |  |   46|  3.23k|		} \
  |  |   47|  3.47k|	} \
  |  |   48|  3.47k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  3.47k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  337|  3.47k|	WebPFreeDecBuffer(&read->config.output);
  338|       |
  339|  3.47k|	VIPS_UNREF(read->source);
  ------------------
  |  |   57|  3.47k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  3.47k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  3.47k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  3.47k|	{ \
  |  |  |  |   43|  3.47k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 3.47k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  3.47k|			(void) F((S)); \
  |  |  |  |   45|  3.47k|			(S) = 0; \
  |  |  |  |   46|  3.47k|		} \
  |  |  |  |   47|  3.47k|	} \
  |  |  |  |   48|  3.47k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  3.47k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  340|  3.47k|	VIPS_FREE(read->delays);
  ------------------
  |  |   50|  3.47k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  3.47k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  3.47k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  3.47k|	{ \
  |  |  |  |   43|  3.47k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|  3.47k|	} \
  |  |  |  |   48|  3.47k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  3.47k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  341|  3.47k|	VIPS_FREE(read);
  ------------------
  |  |   50|  3.47k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  3.47k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  3.47k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  3.47k|	{ \
  |  |  |  |   43|  3.47k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 3.47k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  3.47k|			(void) F((S)); \
  |  |  |  |   45|  3.47k|			(S) = 0; \
  |  |  |  |   46|  3.47k|		} \
  |  |  |  |   47|  3.47k|	} \
  |  |  |  |   48|  3.47k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  3.47k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  342|       |
  343|  3.47k|	return 0;
  344|  3.47k|}
webp2vips.c:read_header:
  402|  3.47k|{
  403|  3.47k|	int flags;
  404|  3.47k|	int i;
  405|       |
  406|  3.47k|	if (!(read->demux = WebPDemux(&read->data))) {
  ------------------
  |  Branch (406:6): [True: 236, False: 3.23k]
  ------------------
  407|    236|		vips_error("webp", "%s", _("unable to parse image"));
  ------------------
  |  |   30|    236|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    236|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  408|    236|		return -1;
  409|    236|	}
  410|       |
  411|  3.23k|	flags = WebPDemuxGetI(read->demux, WEBP_FF_FORMAT_FLAGS);
  412|       |
  413|  3.23k|	read->alpha = flags & ALPHA_FLAG;
  414|       |
  415|       |	/* We do everything as RGBA and then, if we can, drop the alpha on
  416|       |	 * save.
  417|       |	 */
  418|  3.23k|	read->config.output.colorspace = MODE_RGBA;
  419|       |
  420|  3.23k|	read->canvas_width =
  421|  3.23k|		WebPDemuxGetI(read->demux, WEBP_FF_CANVAS_WIDTH);
  422|  3.23k|	read->canvas_height =
  423|  3.23k|		WebPDemuxGetI(read->demux, WEBP_FF_CANVAS_HEIGHT);
  424|       |
  425|  3.23k|	if (flags & ANIMATION_FLAG) {
  ------------------
  |  Branch (425:6): [True: 0, False: 3.23k]
  ------------------
  426|      0|		int loop_count;
  427|      0|		WebPIterator iter;
  428|       |
  429|      0|		loop_count = WebPDemuxGetI(read->demux, WEBP_FF_LOOP_COUNT);
  430|      0|		read->frame_count = WebPDemuxGetI(read->demux,
  431|      0|			WEBP_FF_FRAME_COUNT);
  432|       |
  433|       |#ifdef DEBUG
  434|       |		printf("webp2vips: animation\n");
  435|       |		printf("webp2vips: loop_count = %d\n", loop_count);
  436|       |		printf("webp2vips: frame_count = %d\n", read->frame_count);
  437|       |#endif /*DEBUG*/
  438|       |
  439|      0|		vips_image_set_int(out, "loop", loop_count);
  440|       |
  441|       |		/* DEPRECATED "gif-loop"
  442|       |		 *
  443|       |		 * Not the correct behavior as loop=1 became gif-loop=0
  444|       |		 * but we want to keep the old behavior untouched!
  445|       |		 */
  446|      0|		vips_image_set_int(out, "gif-loop",
  447|      0|			loop_count == 0 ? 0 : loop_count - 1);
  ------------------
  |  Branch (447:4): [True: 0, False: 0]
  ------------------
  448|       |
  449|      0|		if (WebPDemuxGetFrame(read->demux, 1, &iter)) {
  ------------------
  |  Branch (449:7): [True: 0, False: 0]
  ------------------
  450|      0|			int i;
  451|       |
  452|      0|			read->delays = (int *)
  453|      0|				g_malloc0(read->frame_count * sizeof(int));
  454|      0|			for (i = 0; i < read->frame_count; i++)
  ------------------
  |  Branch (454:16): [True: 0, False: 0]
  ------------------
  455|      0|				read->delays[i] = 40;
  456|       |
  457|      0|			do {
  458|      0|				g_assert(iter.frame_num >= 1 &&
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  459|      0|					iter.frame_num <= read->frame_count);
  460|       |
  461|      0|				read->delays[iter.frame_num - 1] =
  462|      0|					iter.duration;
  463|       |
  464|       |				/* We need the alpha in an animation if:
  465|       |				 *   - any frame has transparent pixels
  466|       |				 *   - any frame doesn't fill the whole canvas.
  467|       |				 */
  468|      0|				if (iter.has_alpha ||
  ------------------
  |  Branch (468:9): [True: 0, False: 0]
  ------------------
  469|      0|					iter.width != read->canvas_width ||
  ------------------
  |  Branch (469:6): [True: 0, False: 0]
  ------------------
  470|      0|					iter.height != read->canvas_height)
  ------------------
  |  Branch (470:6): [True: 0, False: 0]
  ------------------
  471|      0|					read->alpha = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  472|       |
  473|       |				/* We must disable shrink-on-load if any frame
  474|       |				 * does not fill the whole canvas. We won't be
  475|       |				 * able to shrink-on-load it to the exact
  476|       |				 * position in a downsized canvas.
  477|       |				 */
  478|      0|				if (iter.width != read->canvas_width ||
  ------------------
  |  Branch (478:9): [True: 0, False: 0]
  ------------------
  479|      0|					iter.height != read->canvas_height)
  ------------------
  |  Branch (479:6): [True: 0, False: 0]
  ------------------
  480|      0|					read->scale = 1.0;
  481|      0|			} while (WebPDemuxNextFrame(&iter));
  ------------------
  |  Branch (481:13): [True: 0, False: 0]
  ------------------
  482|       |
  483|      0|			vips_image_set_array_int(out,
  484|      0|				"delay", read->delays, read->frame_count);
  485|       |
  486|       |			/* webp uses ms for delays, gif uses centiseconds.
  487|       |			 */
  488|      0|			vips_image_set_int(out, "gif-delay",
  489|      0|				VIPS_RINT(read->delays[0] / 10.0));
  ------------------
  |  |   74|      0|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  490|      0|		}
  491|       |
  492|      0|		WebPDemuxReleaseIterator(&iter);
  493|       |
  494|      0|		if (read->n == -1)
  ------------------
  |  Branch (494:7): [True: 0, False: 0]
  ------------------
  495|      0|			read->n = read->frame_count - read->page;
  496|       |
  497|      0|		if (read->page < 0 ||
  ------------------
  |  Branch (497:7): [True: 0, False: 0]
  ------------------
  498|      0|			read->n <= 0 ||
  ------------------
  |  Branch (498:4): [True: 0, False: 0]
  ------------------
  499|      0|			read->page + read->n > read->frame_count) {
  ------------------
  |  Branch (499:4): [True: 0, False: 0]
  ------------------
  500|      0|			vips_error("webp",
  501|      0|				"%s", _("bad page number"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  502|      0|			return -1;
  503|      0|		}
  504|       |
  505|       |		/* Note that n-pages is the number of pages in the original,
  506|       |		 * not the number of pages in the image we are writing.
  507|       |		 */
  508|      0|		vips_image_set_int(out, VIPS_META_N_PAGES, read->frame_count);
  ------------------
  |  |  165|      0|#define VIPS_META_N_PAGES "n-pages"
  ------------------
  509|      0|	}
  510|       |
  511|       |	/* We round-to-nearest cf. pdfload etc.
  512|       |	 */
  513|  3.23k|	read->frame_width = VIPS_RINT(read->canvas_width * read->scale);
  ------------------
  |  |   74|  3.23k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  514|  3.23k|	read->frame_height = VIPS_RINT(read->canvas_height * read->scale);
  ------------------
  |  |   74|  3.23k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  515|       |
  516|       |#ifdef DEBUG
  517|       |	printf("webp2vips: canvas_width = %d\n", read->canvas_width);
  518|       |	printf("webp2vips: canvas_height = %d\n", read->canvas_height);
  519|       |	printf("webp2vips: frame_width = %d\n", read->frame_width);
  520|       |	printf("webp2vips: frame_height = %d\n", read->frame_height);
  521|       |#endif /*DEBUG*/
  522|       |
  523|  3.23k|	if (flags & ANIMATION_FLAG) {
  ------------------
  |  Branch (523:6): [True: 0, False: 3.23k]
  ------------------
  524|       |		/* Only set page-height if we have more than one page, or
  525|       |		 * this could accidentally turn into an animated image later.
  526|       |		 */
  527|      0|		if (read->n > 1)
  ------------------
  |  Branch (527:7): [True: 0, False: 0]
  ------------------
  528|      0|			vips_image_set_int(out,
  529|      0|				VIPS_META_PAGE_HEIGHT, read->frame_height);
  ------------------
  |  |  158|      0|#define VIPS_META_PAGE_HEIGHT "page-height"
  ------------------
  530|       |
  531|      0|		read->width = read->frame_width;
  532|      0|		read->height = read->n * read->frame_height;
  533|      0|	}
  534|  3.23k|	else {
  535|  3.23k|		read->width = read->frame_width;
  536|  3.23k|		read->height = read->frame_height;
  537|  3.23k|		read->frame_count = 1;
  538|  3.23k|	}
  539|       |
  540|       |	/* height can be huge if this is an animated webp image.
  541|       |	 */
  542|  3.23k|	if (read->width <= 0 ||
  ------------------
  |  Branch (542:6): [True: 0, False: 3.23k]
  ------------------
  543|  3.23k|		read->height <= 0 ||
  ------------------
  |  Branch (543:3): [True: 0, False: 3.23k]
  ------------------
  544|  3.23k|		read->width > 0x3FFF ||
  ------------------
  |  Branch (544:3): [True: 1, False: 3.23k]
  ------------------
  545|  3.23k|		read->height >= VIPS_MAX_COORD ||
  ------------------
  |  |   69|  6.47k|#define VIPS_MAX_COORD (vips_max_coord_get())
  ------------------
  |  Branch (545:3): [True: 0, False: 3.23k]
  ------------------
  546|  3.23k|		read->frame_width <= 0 ||
  ------------------
  |  Branch (546:3): [True: 0, False: 3.23k]
  ------------------
  547|  3.23k|		read->frame_height <= 0 ||
  ------------------
  |  Branch (547:3): [True: 0, False: 3.23k]
  ------------------
  548|  3.23k|		read->frame_width > 0x3FFF ||
  ------------------
  |  Branch (548:3): [True: 0, False: 3.23k]
  ------------------
  549|  3.23k|		read->frame_height > 0x3FFF) {
  ------------------
  |  Branch (549:3): [True: 1, False: 3.23k]
  ------------------
  550|      2|		vips_error("webp", "%s", _("bad image dimensions"));
  ------------------
  |  |   30|      2|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      2|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  551|      2|		return -1;
  552|      2|	}
  553|       |
  554|  12.9k|	for (i = 0; i < vips__n_webp_names; i++) {
  ------------------
  |  Branch (554:14): [True: 9.71k, False: 3.23k]
  ------------------
  555|  9.71k|		const char *vips = vips__webp_names[i].vips;
  556|  9.71k|		const char *webp = vips__webp_names[i].webp;
  557|       |
  558|  9.71k|		if (flags & vips__webp_names[i].flags) {
  ------------------
  |  Branch (558:7): [True: 28, False: 9.68k]
  ------------------
  559|     28|			WebPChunkIterator iter;
  560|       |
  561|     28|			WebPDemuxGetChunk(read->demux, webp, 1, &iter);
  562|     28|			vips_image_set_blob_copy(out,
  563|     28|				vips, iter.chunk.bytes, iter.chunk.size);
  564|     28|			WebPDemuxReleaseChunkIterator(&iter);
  565|     28|		}
  566|  9.71k|	}
  567|       |
  568|       |	/* The canvas is always RGBA, we drop alpha to RGB on output if we
  569|       |	 * can.
  570|       |	 */
  571|  3.23k|	read->frame = vips_image_new_memory();
  572|  3.23k|	vips_image_init_fields(read->frame,
  573|  3.23k|		read->frame_width, read->frame_height, 4,
  574|  3.23k|		VIPS_FORMAT_UCHAR, VIPS_CODING_NONE,
  575|  3.23k|		VIPS_INTERPRETATION_sRGB,
  576|  3.23k|		1.0, 1.0);
  577|  3.23k|	if (vips_image_pipelinev(read->frame,
  ------------------
  |  Branch (577:6): [True: 0, False: 3.23k]
  ------------------
  578|  3.23k|			VIPS_DEMAND_STYLE_THINSTRIP, NULL) ||
  579|  3.23k|		vips_image_write_prepare(read->frame))
  ------------------
  |  Branch (579:3): [True: 0, False: 3.23k]
  ------------------
  580|      0|		return -1;
  581|       |
  582|  3.23k|	vips_image_init_fields(out,
  583|  3.23k|		read->width, read->height,
  584|  3.23k|		read->alpha ? 4 : 3,
  ------------------
  |  Branch (584:3): [True: 805, False: 2.43k]
  ------------------
  585|  3.23k|		VIPS_FORMAT_UCHAR, VIPS_CODING_NONE,
  586|  3.23k|		VIPS_INTERPRETATION_sRGB,
  587|  3.23k|		1.0, 1.0);
  588|  3.23k|	if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, NULL))
  ------------------
  |  Branch (588:6): [True: 0, False: 3.23k]
  ------------------
  589|      0|		return -1;
  590|  3.23k|	VIPS_SETSTR(out->filename,
  ------------------
  |  |   53|  3.23k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  3.23k|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|  3.23k|	{ \
  |  |   55|  3.23k|		const char *sst = (V); \
  |  |   56|  3.23k|		\
  |  |   57|  3.23k|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 3.23k, False: 0]
  |  |  ------------------
  |  |   58|  3.23k|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 0, False: 3.23k]
  |  |  |  Branch (58:16): [True: 3.23k, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|  3.23k|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|  3.23k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  3.23k|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|  3.23k|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  3.23k|	{ \
  |  |  |  |  |  |   43|  3.23k|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 3.23k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  3.23k|			(void) F((S)); \
  |  |  |  |  |  |   45|  3.23k|			(S) = 0; \
  |  |  |  |  |  |   46|  3.23k|		} \
  |  |  |  |  |  |   47|  3.23k|	} \
  |  |  |  |  |  |   48|  3.23k|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|  3.23k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|  3.23k|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 0, False: 3.23k]
  |  |  ------------------
  |  |   61|  3.23k|					(S) = g_strdup(sst); \
  |  |   62|  3.23k|			} \
  |  |   63|  3.23k|		} \
  |  |   64|  3.23k|	} \
  |  |   65|  3.23k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  3.23k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  591|  3.23k|		vips_connection_filename(VIPS_CONNECTION(read->source)));
  592|       |
  593|  3.23k|	if (!WebPDemuxGetFrame(read->demux, 1, &read->iter)) {
  ------------------
  |  Branch (593:6): [True: 0, False: 3.23k]
  ------------------
  594|      0|		vips_error("webp",
  595|      0|			"%s", _("unable to loop through frames"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  596|      0|		return -1;
  597|      0|	}
  598|       |
  599|  3.23k|	return 0;
  600|  3.23k|}
webp2vips.c:read_image:
  786|  1.55k|{
  787|  1.55k|	VipsImage **t = (VipsImage **)
  788|  1.55k|		vips_object_local_array(VIPS_OBJECT(out), 2);
  ------------------
  |  |  433|  1.55k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  1.55k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.55k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  789|       |
  790|       |	/* Make the output pipeline.
  791|       |	 */
  792|  1.55k|	t[0] = vips_image_new();
  793|  1.55k|	if (read_header(read, t[0]))
  ------------------
  |  Branch (793:6): [True: 0, False: 1.55k]
  ------------------
  794|      0|		return -1;
  795|       |
  796|  1.55k|	if (vips_image_generate(t[0],
  ------------------
  |  Branch (796:6): [True: 0, False: 1.55k]
  ------------------
  797|  1.55k|			NULL, read_webp_generate, NULL, read, NULL) ||
  798|  1.55k|		vips_sequential(t[0], &t[1], NULL) ||
  ------------------
  |  Branch (798:3): [True: 0, False: 1.55k]
  ------------------
  799|  1.55k|		vips_image_write(t[1], out))
  ------------------
  |  Branch (799:3): [True: 1.09k, False: 459]
  ------------------
  800|  1.09k|		return -1;
  801|       |
  802|    459|	return 0;
  803|  1.55k|}
webp2vips.c:read_webp_generate:
  735|  25.1k|{
  736|  25.1k|	VipsRect *r = &out_region->valid;
  737|  25.1k|	Read *read = (Read *) a;
  738|       |
  739|       |	/* iter.frame_num numbers from 1.
  740|       |	 */
  741|  25.1k|	int frame = 1 + r->top / read->frame_height + read->page;
  742|  25.1k|	int line = r->top % read->frame_height;
  743|       |
  744|       |#ifdef DEBUG_VERBOSE
  745|       |	printf("read_webp_generate: line %d\n", r->top);
  746|       |#endif /*DEBUG_VERBOSE*/
  747|       |
  748|  25.1k|	g_assert(r->height == 1);
  ------------------
  |  |  166|  25.1k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  25.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|       |
  750|  25.6k|	while (read->frame_no < frame) {
  ------------------
  |  Branch (750:9): [True: 1.55k, False: 24.0k]
  ------------------
  751|  1.55k|		if (read_next_frame(read))
  ------------------
  |  Branch (751:7): [True: 1.09k, False: 459]
  ------------------
  752|  1.09k|			return -1;
  753|       |
  754|    459|		read->frame_no += 1;
  755|    459|	}
  756|       |
  757|  24.0k|	if (out_region->im->Bands == 4)
  ------------------
  |  Branch (757:6): [True: 2.19k, False: 21.8k]
  ------------------
  758|  2.19k|		memcpy(VIPS_REGION_ADDR(out_region, 0, r->top),
  ------------------
  |  |  227|  2.19k|	((R)->data + \
  |  |  228|  2.19k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  2.19k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  2.19k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  2.19k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  2.19k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  2.19k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  759|  2.19k|			VIPS_IMAGE_ADDR(read->frame, 0, line),
  ------------------
  |  |  418|  2.19k|	((I)->data + \
  |  |  419|  2.19k|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|  2.19k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  2.19k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  2.19k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|  2.19k|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|  2.19k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  2.19k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  760|  2.19k|			VIPS_IMAGE_SIZEOF_LINE(read->frame));
  ------------------
  |  |  386|  2.19k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|  2.19k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  2.19k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  761|  21.8k|	else {
  762|  21.8k|		int x;
  763|  21.8k|		VipsPel *p;
  764|  21.8k|		VipsPel *q;
  765|       |
  766|       |		/* We know that alpha is solid, so we can just drop the 4th
  767|       |		 * band.
  768|       |		 */
  769|  21.8k|		p = VIPS_IMAGE_ADDR(read->frame, 0, line);
  ------------------
  |  |  418|  21.8k|	((I)->data + \
  |  |  419|  21.8k|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|  21.8k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  21.8k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  21.8k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|  21.8k|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|  21.8k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  21.8k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  770|  21.8k|		q = VIPS_REGION_ADDR(out_region, 0, r->top);
  ------------------
  |  |  227|  21.8k|	((R)->data + \
  |  |  228|  21.8k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|  21.8k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|  21.8k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|  21.8k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  21.8k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  21.8k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  771|  1.57M|		for (x = 0; x < r->width; x++) {
  ------------------
  |  Branch (771:15): [True: 1.55M, False: 21.8k]
  ------------------
  772|  1.55M|			q[0] = p[0];
  773|  1.55M|			q[1] = p[1];
  774|  1.55M|			q[2] = p[2];
  775|       |
  776|  1.55M|			q += 3;
  777|  1.55M|			p += 4;
  778|  1.55M|		}
  779|  21.8k|	}
  780|       |
  781|  24.0k|	return 0;
  782|  25.1k|}
webp2vips.c:read_next_frame:
  647|  1.55k|{
  648|  1.55k|	VipsImage *frame;
  649|  1.55k|	VipsRect area;
  650|       |
  651|       |#ifdef DEBUG
  652|       |	printf("read_next_frame:\n");
  653|       |#endif /*DEBUG*/
  654|       |
  655|       |	/* Area of this frame, in output image coordinates. We must rint(),
  656|       |	 * since we need the same rules as the overall image scale, or we'll
  657|       |	 * sometimes have missing pixels on edges.
  658|       |	 */
  659|  1.55k|	area.left = VIPS_RINT(read->iter.x_offset * read->scale);
  ------------------
  |  |   74|  1.55k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  660|  1.55k|	area.top = VIPS_RINT(read->iter.y_offset * read->scale);
  ------------------
  |  |   74|  1.55k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  661|  1.55k|	area.width = VIPS_RINT(read->iter.width * read->scale);
  ------------------
  |  |   74|  1.55k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  662|  1.55k|	area.height = VIPS_RINT(read->iter.height * read->scale);
  ------------------
  |  |   74|  1.55k|#define VIPS_RINT(V) __builtin_rint(V)
  ------------------
  663|       |
  664|       |	/* Dispose from the previous frame.
  665|       |	 */
  666|  1.55k|	if (read->dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) {
  ------------------
  |  Branch (666:6): [True: 0, False: 1.55k]
  ------------------
  667|       |		/* We must clear the pixels occupied by the previous webp
  668|       |		 * frame (not the whole of the read frame) to 0 (transparent).
  669|       |		 *
  670|       |		 * We do not clear to WEBP_FF_BACKGROUND_COLOR. That's only
  671|       |		 * used to composite down to RGB. Perhaps we
  672|       |		 * should attach background as metadata.
  673|       |		 */
  674|      0|		guint32 zero = 0;
  675|       |
  676|      0|		vips_image_paint_area(read->frame,
  677|      0|			&read->dispose_rect, (VipsPel *) &zero);
  678|      0|	}
  679|       |
  680|       |	/* Note this frame's dispose for next time.
  681|       |	 */
  682|  1.55k|	read->dispose_method = read->iter.dispose_method;
  683|  1.55k|	read->dispose_rect = area;
  684|       |
  685|       |#ifdef DEBUG
  686|       |	printf("webp2vips: frame_num = %d\n", read->iter.frame_num);
  687|       |	printf("   left = %d\n", area.left);
  688|       |	printf("   top = %d\n", area.top);
  689|       |	printf("   width = %d\n", area.width);
  690|       |	printf("   height = %d\n", area.height);
  691|       |	printf("   duration = %d\n", read->iter.duration);
  692|       |	printf("   dispose = ");
  693|       |	if (read->iter.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND)
  694|       |		printf("clear to background\n");
  695|       |	else
  696|       |		printf("none\n");
  697|       |	printf("   has_alpha = %d\n", read->iter.has_alpha);
  698|       |	printf("   blend_method = ");
  699|       |	if (read->iter.blend_method == WEBP_MUX_BLEND)
  700|       |		printf("blend with previous\n");
  701|       |	else
  702|       |		printf("don't blend\n");
  703|       |#endif /*DEBUG*/
  704|       |
  705|  1.55k|	if (!(frame = read_frame(read,
  ------------------
  |  Branch (705:6): [True: 1.09k, False: 459]
  ------------------
  706|  1.55k|			  area.width, area.height,
  707|  1.55k|			  read->iter.fragment.bytes, read->iter.fragment.size)))
  708|  1.09k|		return -1;
  709|       |
  710|       |	/* Now blend or copy the new pixels into our accumulator.
  711|       |	 */
  712|    459|	vips_image_paint_image(read->frame, frame,
  713|    459|		area.left, area.top,
  714|    459|		read->iter.frame_num > 1 &&
  ------------------
  |  Branch (714:3): [True: 0, False: 459]
  ------------------
  715|    459|			read->iter.blend_method == WEBP_MUX_BLEND);
  ------------------
  |  Branch (715:4): [True: 0, False: 0]
  ------------------
  716|       |
  717|    459|	g_object_unref(frame);
  718|       |
  719|       |	/* If there's another frame, move on.
  720|       |	 */
  721|    459|	if (read->iter.frame_num < read->frame_count) {
  ------------------
  |  Branch (721:6): [True: 0, False: 459]
  ------------------
  722|      0|		if (!WebPDemuxNextFrame(&read->iter)) {
  ------------------
  |  Branch (722:7): [True: 0, False: 0]
  ------------------
  723|      0|			vips_error("webp2vips",
  724|      0|				"%s", _("not enough frames"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  725|      0|			return -1;
  726|      0|		}
  727|      0|	}
  728|       |
  729|    459|	return 0;
  730|    459|}
webp2vips.c:read_frame:
  608|  1.55k|{
  609|  1.55k|	VipsImage *frame;
  610|       |
  611|       |#ifdef DEBUG
  612|       |	printf("read_frame:\n");
  613|       |#endif /*DEBUG*/
  614|       |
  615|  1.55k|	frame = vips_image_new_memory();
  616|  1.55k|	vips_image_init_fields(frame,
  617|  1.55k|		width, height, 4,
  618|  1.55k|		VIPS_FORMAT_UCHAR, VIPS_CODING_NONE,
  619|  1.55k|		VIPS_INTERPRETATION_sRGB,
  620|  1.55k|		1.0, 1.0);
  621|  1.55k|	if (vips_image_pipelinev(frame, VIPS_DEMAND_STYLE_THINSTRIP, NULL) ||
  ------------------
  |  Branch (621:6): [True: 0, False: 1.55k]
  ------------------
  622|  1.55k|		vips_image_write_prepare(frame)) {
  ------------------
  |  Branch (622:3): [True: 0, False: 1.55k]
  ------------------
  623|      0|		g_object_unref(frame);
  624|      0|		return NULL;
  625|      0|	}
  626|       |
  627|  1.55k|	read->config.output.u.RGBA.rgba = VIPS_IMAGE_ADDR(frame, 0, 0);
  ------------------
  |  |  418|  1.55k|	((I)->data + \
  |  |  419|  1.55k|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|  1.55k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  1.55k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  1.55k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|  1.55k|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|  1.55k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  1.55k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  628|  1.55k|	read->config.output.u.RGBA.stride = VIPS_IMAGE_SIZEOF_LINE(frame);
  ------------------
  |  |  386|  1.55k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|  1.55k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  1.55k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  629|  1.55k|	read->config.output.u.RGBA.size = VIPS_IMAGE_SIZEOF_IMAGE(frame);
  ------------------
  |  |  388|  1.55k|	(VIPS_IMAGE_SIZEOF_LINE(I) * (I)->Ysize)
  |  |  ------------------
  |  |  |  |  386|  1.55k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  1.55k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  1.55k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  630|  1.55k|	if (read->scale != 1.0) {
  ------------------
  |  Branch (630:6): [True: 0, False: 1.55k]
  ------------------
  631|      0|		read->config.options.use_scaling = 1;
  632|      0|		read->config.options.scaled_width = width;
  633|      0|		read->config.options.scaled_height = height;
  634|      0|	}
  635|       |
  636|  1.55k|	if (WebPDecode(data, length, &read->config) != VP8_STATUS_OK) {
  ------------------
  |  Branch (636:6): [True: 1.09k, False: 459]
  ------------------
  637|  1.09k|		g_object_unref(frame);
  638|  1.09k|		vips_error("webp2vips", "%s", _("unable to read pixels"));
  ------------------
  |  |   30|  1.09k|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|  1.09k|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  639|  1.09k|		return NULL;
  640|  1.09k|	}
  641|       |
  642|    459|	return frame;
  643|  1.55k|}
webp2vips.c:vips_image_paint_image:
  281|    459|{
  282|    459|	VipsRect frame_rect = { 0, 0, frame->Xsize, frame->Ysize };
  283|    459|	VipsRect sub_rect = { left, top, sub->Xsize, sub->Ysize };
  284|    459|	int ps = VIPS_IMAGE_SIZEOF_PEL(frame);
  ------------------
  |  |  384|    459|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|    459|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  285|       |
  286|    459|	VipsRect ovl;
  287|       |
  288|    459|	g_assert(VIPS_IMAGE_SIZEOF_PEL(sub) == ps);
  ------------------
  |  |  166|    459|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    459|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    459|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  289|       |
  290|    459|	vips_rect_intersectrect(&frame_rect, &sub_rect, &ovl);
  291|    459|	if (!vips_rect_isempty(&ovl)) {
  ------------------
  |  Branch (291:6): [True: 459, False: 0]
  ------------------
  292|    459|		VipsPel *p, *q;
  293|    459|		int x, y;
  294|       |
  295|    459|		p = VIPS_IMAGE_ADDR(sub, ovl.left - left, ovl.top - top);
  ------------------
  |  |  418|    459|	((I)->data + \
  |  |  419|    459|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|    459|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|    459|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|    459|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|    459|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|    459|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|    459|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  296|    459|		q = VIPS_IMAGE_ADDR(frame, ovl.left, ovl.top);
  ------------------
  |  |  418|    459|	((I)->data + \
  |  |  419|    459|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|    459|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|    459|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|    459|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|    459|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|    459|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|    459|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|       |
  298|  24.5k|		for (y = 0; y < ovl.height; y++) {
  ------------------
  |  Branch (298:15): [True: 24.0k, False: 459]
  ------------------
  299|  24.0k|			if (blend) {
  ------------------
  |  Branch (299:8): [True: 0, False: 24.0k]
  ------------------
  300|      0|				guint32 *A = (guint32 *) p;
  301|      0|				guint32 *B = (guint32 *) q;
  302|       |
  303|      0|				for (x = 0; x < ovl.width; x++)
  ------------------
  |  Branch (303:17): [True: 0, False: 0]
  ------------------
  304|      0|					B[x] = blend_pixel(A[x], B[x]);
  305|      0|			}
  306|  24.0k|			else
  307|  24.0k|				memcpy((char *) q, (char *) p,
  308|  24.0k|					ovl.width * ps);
  309|       |
  310|  24.0k|			p += VIPS_IMAGE_SIZEOF_LINE(sub);
  ------------------
  |  |  386|  24.0k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|  24.0k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  24.0k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  311|  24.0k|			q += VIPS_IMAGE_SIZEOF_LINE(frame);
  ------------------
  |  |  386|  24.0k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|  24.0k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  24.0k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  312|  24.0k|		}
  313|    459|	}
  314|    459|}

webpload.c:vips_foreign_load_webp_class_init:
  153|      1|{
  154|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  156|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  157|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  158|       |
  159|      1|	gobject_class->dispose = vips_foreign_load_webp_dispose;
  160|      1|	gobject_class->set_property = vips_object_set_property;
  161|      1|	gobject_class->get_property = vips_object_get_property;
  162|       |
  163|      1|	object_class->nickname = "webpload_base";
  164|      1|	object_class->description = _("load webp");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  165|      1|	object_class->build = vips_foreign_load_webp_build;
  166|       |
  167|       |	/* We are fast at is_a(), so high priority.
  168|       |	 */
  169|      1|	foreign_class->priority = 200;
  170|       |
  171|      1|	load_class->get_flags_filename =
  172|      1|		vips_foreign_load_webp_get_flags_filename;
  173|      1|	load_class->get_flags = vips_foreign_load_webp_get_flags;
  174|      1|	load_class->header = vips_foreign_load_webp_header;
  175|      1|	load_class->load = vips_foreign_load_webp_load;
  176|       |
  177|      1|	VIPS_ARG_INT(class, "page", 20,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  178|      1|		_("Page"),
  179|      1|		_("First page to load"),
  180|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  181|      1|		G_STRUCT_OFFSET(VipsForeignLoadWebp, page),
  182|      1|		0, 100000, 0);
  183|       |
  184|      1|	VIPS_ARG_INT(class, "n", 21,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  185|      1|		_("n"),
  186|      1|		_("Number of pages to load, -1 for all"),
  187|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  188|      1|		G_STRUCT_OFFSET(VipsForeignLoadWebp, n),
  189|      1|		-1, 100000, 1);
  190|       |
  191|      1|	VIPS_ARG_DOUBLE(class, "scale", 22,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  192|      1|		_("Scale"),
  193|      1|		_("Factor to scale by"),
  194|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  195|      1|		G_STRUCT_OFFSET(VipsForeignLoadWebp, scale),
  196|      1|		0.0, 1024.0, 1.0);
  197|       |
  198|      1|	VIPS_ARG_INT(class, "shrink", 23,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  199|      1|		_("Shrink"),
  200|      1|		_("Shrink factor on load"),
  201|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  202|      1|		G_STRUCT_OFFSET(VipsForeignLoadWebp, shrink),
  203|      1|		1, 1024, 1);
  204|      1|}
webpload.c:vips_foreign_load_webp_dispose:
   89|  1.92k|{
   90|  1.92k|	VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) gobject;
   91|       |
   92|  1.92k|	VIPS_UNREF(webp->source);
  ------------------
  |  |   57|  1.92k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  1.92k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  1.92k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  1.92k|	{ \
  |  |  |  |   43|  1.92k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 1.92k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  1.92k|			(void) F((S)); \
  |  |  |  |   45|  1.92k|			(S) = 0; \
  |  |  |  |   46|  1.92k|		} \
  |  |  |  |   47|  1.92k|	} \
  |  |  |  |   48|  1.92k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  1.92k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   93|       |
   94|  1.92k|	G_OBJECT_CLASS(vips_foreign_load_webp_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  1.92k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.92k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.92k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|  1.92k|}
webpload.c:vips_foreign_load_webp_build:
   99|  1.92k|{
  100|  1.92k|	VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) object;
  101|       |
  102|       |	/* BC for the old API.
  103|       |	 */
  104|  1.92k|	if (!vips_object_argument_isset(VIPS_OBJECT(webp), "scale") &&
  ------------------
  |  |  433|  1.92k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  1.92k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.92k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (104:6): [True: 1.92k, False: 0]
  ------------------
  105|  1.92k|		vips_object_argument_isset(VIPS_OBJECT(webp), "shrink") &&
  ------------------
  |  |  433|  1.92k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  1.92k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.92k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (105:3): [True: 0, False: 1.92k]
  ------------------
  106|  1.92k|		webp->shrink != 0)
  ------------------
  |  Branch (106:3): [True: 0, False: 0]
  ------------------
  107|      0|		webp->scale = 1.0 / webp->shrink; // FIXME: Invalidates operation cache
  108|       |
  109|  1.92k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_webp_parent_class)->build(object))
  ------------------
  |  |  435|  1.92k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.92k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.92k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (109:6): [True: 238, False: 1.68k]
  ------------------
  110|    238|		return -1;
  111|       |
  112|  1.68k|	return 0;
  113|  1.92k|}
webpload.c:vips_foreign_load_webp_get_flags:
  117|  1.92k|{
  118|  1.92k|	return 0;
  119|  1.92k|}
webpload.c:vips_foreign_load_webp_header:
  129|  1.92k|{
  130|  1.92k|	VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) load;
  131|       |
  132|  1.92k|	if (vips__webp_read_header_source(webp->source, load->out,
  ------------------
  |  Branch (132:6): [True: 238, False: 1.68k]
  ------------------
  133|  1.92k|			webp->page, webp->n, webp->scale))
  134|    238|		return -1;
  135|       |
  136|  1.68k|	return 0;
  137|  1.92k|}
webpload.c:vips_foreign_load_webp_load:
  141|  1.55k|{
  142|  1.55k|	VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) load;
  143|       |
  144|  1.55k|	if (vips__webp_read_source(webp->source, load->real,
  ------------------
  |  Branch (144:6): [True: 1.09k, False: 459]
  ------------------
  145|  1.55k|			webp->page, webp->n, webp->scale))
  146|  1.09k|		return -1;
  147|       |
  148|    459|	return 0;
  149|  1.55k|}
webpload.c:vips_foreign_load_webp_init:
  208|  1.92k|{
  209|  1.92k|	webp->n = 1;
  210|  1.92k|	webp->shrink = 1;
  211|  1.92k|	webp->scale = 1.0;
  212|  1.92k|}
webpload.c:vips_foreign_load_webp_source_class_init:
  248|      1|{
  249|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  251|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  252|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  253|       |
  254|      1|	gobject_class->set_property = vips_object_set_property;
  255|      1|	gobject_class->get_property = vips_object_get_property;
  256|       |
  257|      1|	object_class->nickname = "webpload_source";
  258|      1|	object_class->description = _("load webp from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  259|      1|	object_class->build = vips_foreign_load_webp_source_build;
  260|       |
  261|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  262|       |
  263|      1|	load_class->is_a_source = vips__iswebp_source;
  264|       |
  265|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  266|      1|		_("Source"),
  267|      1|		_("Source to load from"),
  268|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  269|      1|		G_STRUCT_OFFSET(VipsForeignLoadWebpSource, source),
  270|      1|		VIPS_TYPE_SOURCE);
  271|      1|}
webpload.c:vips_foreign_load_webp_file_class_init:
  328|      1|{
  329|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  331|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  332|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  333|       |
  334|      1|	gobject_class->set_property = vips_object_set_property;
  335|      1|	gobject_class->get_property = vips_object_get_property;
  336|       |
  337|      1|	object_class->nickname = "webpload";
  338|      1|	object_class->description = _("load webp from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  339|      1|	object_class->build = vips_foreign_load_webp_file_build;
  340|       |
  341|      1|	foreign_class->suffs = vips__webp_suffs;
  342|       |
  343|      1|	load_class->is_a = vips_foreign_load_webp_file_is_a;
  344|       |
  345|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  346|      1|		_("Filename"),
  347|      1|		_("Filename to load from"),
  348|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  349|      1|		G_STRUCT_OFFSET(VipsForeignLoadWebpFile, filename),
  350|      1|		NULL);
  351|      1|}
webpload.c:vips_foreign_load_webp_buffer_class_init:
  409|      1|{
  410|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  411|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  412|      1|	VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
  413|       |
  414|      1|	gobject_class->set_property = vips_object_set_property;
  415|      1|	gobject_class->get_property = vips_object_get_property;
  416|       |
  417|      1|	object_class->nickname = "webpload_buffer";
  418|      1|	object_class->description = _("load webp from buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  419|      1|	object_class->build = vips_foreign_load_webp_buffer_build;
  420|       |
  421|      1|	load_class->is_a_buffer = vips_foreign_load_webp_buffer_is_a_buffer;
  422|       |
  423|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  424|      1|		_("Buffer"),
  425|      1|		_("Buffer to load from"),
  426|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  427|      1|		G_STRUCT_OFFSET(VipsForeignLoadWebpBuffer, blob),
  428|      1|		VIPS_TYPE_BLOB);
  429|      1|}
webpload.c:vips_foreign_load_webp_buffer_build:
  374|  1.92k|{
  375|  1.92k|	VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) object;
  376|  1.92k|	VipsForeignLoadWebpBuffer *buffer =
  377|  1.92k|		(VipsForeignLoadWebpBuffer *) object;
  378|       |
  379|  1.92k|	if (buffer->blob &&
  ------------------
  |  Branch (379:6): [True: 1.92k, False: 0]
  ------------------
  380|  1.92k|		!(webp->source = vips_source_new_from_memory(
  ------------------
  |  Branch (380:3): [True: 0, False: 1.92k]
  ------------------
  381|  1.92k|			  VIPS_AREA(buffer->blob)->data,
  ------------------
  |  |  137|  1.92k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  382|  1.92k|			  VIPS_AREA(buffer->blob)->length)))
  ------------------
  |  |  137|  1.92k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  383|      0|		return -1;
  384|       |
  385|  1.92k|	if (VIPS_OBJECT_CLASS(vips_foreign_load_webp_buffer_parent_class)
  ------------------
  |  |  435|  1.92k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.92k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.92k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (385:6): [True: 238, False: 1.68k]
  ------------------
  386|  1.92k|			->build(object))
  387|    238|		return -1;
  388|       |
  389|  1.68k|	return 0;
  390|  1.92k|}
webpload.c:vips_foreign_load_webp_buffer_is_a_buffer:
  394|  33.7k|{
  395|  33.7k|	VipsSource *source;
  396|  33.7k|	gboolean result;
  397|       |
  398|  33.7k|	if (!(source = vips_source_new_from_memory(buf, len)))
  ------------------
  |  Branch (398:6): [True: 0, False: 33.7k]
  ------------------
  399|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  400|  33.7k|	result = vips__iswebp_source(source);
  401|  33.7k|	VIPS_UNREF(source);
  ------------------
  |  |   57|  33.7k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  33.7k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  33.7k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  33.7k|	{ \
  |  |  |  |   43|  33.7k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 33.7k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  33.7k|			(void) F((S)); \
  |  |  |  |   45|  33.7k|			(S) = 0; \
  |  |  |  |   46|  33.7k|		} \
  |  |  |  |   47|  33.7k|	} \
  |  |  |  |   48|  33.7k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  33.7k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  402|       |
  403|  33.7k|	return result;
  404|  33.7k|}
webpload.c:vips_foreign_load_webp_buffer_init:
  433|  1.92k|{
  434|  1.92k|}

webpsave.c:vips_foreign_save_webp_class_init:
  806|      1|{
  807|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  808|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  809|      1|	VipsForeignClass *foreign_class = (VipsForeignClass *) class;
  810|      1|	VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class;
  811|       |
  812|      1|	gobject_class->dispose = vips_foreign_save_webp_dispose;
  813|      1|	gobject_class->set_property = vips_object_set_property;
  814|      1|	gobject_class->get_property = vips_object_get_property;
  815|       |
  816|      1|	object_class->nickname = "webpsave_base";
  817|      1|	object_class->description = _("save as WebP");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  818|      1|	object_class->build = vips_foreign_save_webp_build;
  819|       |
  820|      1|	foreign_class->suffs = vips__save_webp_suffs;
  821|       |
  822|      1|	save_class->saveable = VIPS_SAVEABLE_RGBA_ONLY;
  823|      1|	save_class->format_table = bandfmt_webp;
  824|       |
  825|      1|	VIPS_ARG_INT(class, "Q", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  826|      1|		_("Q"),
  827|      1|		_("Q factor"),
  828|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  829|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, Q),
  830|      1|		0, 100, 75);
  831|       |
  832|      1|	VIPS_ARG_BOOL(class, "lossless", 11,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  833|      1|		_("Lossless"),
  834|      1|		_("Enable lossless compression"),
  835|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  836|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, lossless),
  837|      1|		FALSE);
  838|       |
  839|      1|	VIPS_ARG_ENUM(class, "preset", 12,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  840|      1|		_("Preset"),
  841|      1|		_("Preset for lossy compression"),
  842|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  843|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, preset),
  844|      1|		VIPS_TYPE_FOREIGN_WEBP_PRESET,
  845|      1|		VIPS_FOREIGN_WEBP_PRESET_DEFAULT);
  846|       |
  847|      1|	VIPS_ARG_BOOL(class, "smart_subsample", 13,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  848|      1|		_("Smart subsampling"),
  849|      1|		_("Enable high quality chroma subsampling"),
  850|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  851|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, smart_subsample),
  852|      1|		FALSE);
  853|       |
  854|      1|	VIPS_ARG_BOOL(class, "near_lossless", 14,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  855|      1|		_("Near lossless"),
  856|      1|		_("Enable preprocessing in lossless mode (uses Q)"),
  857|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  858|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, near_lossless),
  859|      1|		FALSE);
  860|       |
  861|      1|	VIPS_ARG_INT(class, "alpha_q", 15,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  862|      1|		_("Alpha quality"),
  863|      1|		_("Change alpha plane fidelity for lossy compression"),
  864|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  865|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, alpha_q),
  866|      1|		0, 100, 100);
  867|       |
  868|      1|	VIPS_ARG_BOOL(class, "min_size", 16,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  869|      1|		_("Minimise size"),
  870|      1|		_("Optimise for minimum size"),
  871|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  872|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, min_size),
  873|      1|		FALSE);
  874|       |
  875|      1|	VIPS_ARG_INT(class, "kmin", 17,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  876|      1|		_("Minimum keyframe spacing"),
  877|      1|		_("Minimum number of frames between key frames"),
  878|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  879|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, kmin),
  880|      1|		0, INT_MAX, INT_MAX - 1);
  881|       |
  882|      1|	VIPS_ARG_INT(class, "kmax", 18,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  883|      1|		_("Maximum keyframe spacing"),
  884|      1|		_("Maximum number of frames between key frames"),
  885|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  886|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, kmax),
  887|      1|		0, INT_MAX, INT_MAX);
  888|       |
  889|      1|	VIPS_ARG_INT(class, "effort", 19,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  890|      1|		_("Effort"),
  891|      1|		_("Level of CPU effort to reduce file size"),
  892|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  893|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, effort),
  894|      1|		0, 6, 4);
  895|       |
  896|      1|	VIPS_ARG_INT(class, "target_size", 20,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  897|      1|		_("Target size"),
  898|      1|		_("Desired target size in bytes"),
  899|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  900|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, target_size),
  901|      1|		0, INT_MAX, 0);
  902|       |
  903|      1|	VIPS_ARG_INT(class, "passes", 23,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  904|      1|		_("Passes"),
  905|      1|		_("Number of entropy-analysis passes (in [1..10])"),
  906|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  907|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, passes),
  908|      1|		1, 10, 1);
  909|       |
  910|      1|	VIPS_ARG_INT(class, "reduction_effort", 21,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  911|      1|		_("Reduction effort"),
  912|      1|		_("Level of CPU effort to reduce file size"),
  913|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  914|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, effort),
  915|      1|		0, 6, 4);
  916|       |
  917|      1|	VIPS_ARG_BOOL(class, "mixed", 22,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  918|      1|		_("Mixed encoding"),
  919|      1|		_("Allow mixed encoding (might reduce file size)"),
  920|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  921|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, mixed),
  922|      1|		FALSE);
  923|       |
  924|      1|	VIPS_ARG_BOOL(class, "smart_deblock", 23,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  925|      1|		_("Smart deblocking"),
  926|      1|		_("Enable auto-adjusting of the deblocking filter"),
  927|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  928|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebp, smart_deblock),
  929|      1|		FALSE);
  930|      1|}
webpsave.c:vips_foreign_save_webp_target_class_init:
  976|      1|{
  977|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  978|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  979|       |
  980|      1|	gobject_class->set_property = vips_object_set_property;
  981|      1|	gobject_class->get_property = vips_object_get_property;
  982|       |
  983|      1|	object_class->nickname = "webpsave_target";
  984|      1|	object_class->build = vips_foreign_save_webp_target_build;
  985|       |
  986|      1|	VIPS_ARG_OBJECT(class, "target", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
  987|      1|		_("Target"),
  988|      1|		_("Target to save to"),
  989|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  990|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebpTarget, target),
  991|      1|		VIPS_TYPE_TARGET);
  992|      1|}
webpsave.c:vips_foreign_save_webp_file_class_init:
 1027|      1|{
 1028|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1029|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1030|       |
 1031|      1|	gobject_class->set_property = vips_object_set_property;
 1032|      1|	gobject_class->get_property = vips_object_get_property;
 1033|       |
 1034|      1|	object_class->nickname = "webpsave";
 1035|      1|	object_class->build = vips_foreign_save_webp_file_build;
 1036|       |
 1037|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1038|      1|		_("Filename"),
 1039|      1|		_("Filename to save to"),
 1040|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1041|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebpFile, filename),
 1042|      1|		NULL);
 1043|      1|}
webpsave.c:vips_foreign_save_webp_buffer_class_init:
 1085|      1|{
 1086|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1087|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1088|       |
 1089|      1|	gobject_class->set_property = vips_object_set_property;
 1090|      1|	gobject_class->get_property = vips_object_get_property;
 1091|       |
 1092|      1|	object_class->nickname = "webpsave_buffer";
 1093|      1|	object_class->build = vips_foreign_save_webp_buffer_build;
 1094|       |
 1095|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1096|      1|		_("Buffer"),
 1097|      1|		_("Buffer to save to"),
 1098|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
 1099|      1|		G_STRUCT_OFFSET(VipsForeignSaveWebpBuffer, buf),
 1100|      1|		VIPS_TYPE_BLOB);
 1101|      1|}
webpsave.c:vips_foreign_save_webp_mime_class_init:
 1152|      1|{
 1153|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1154|       |
 1155|      1|	object_class->nickname = "webpsave_mime";
 1156|      1|	object_class->description = _("save image to webp mime");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1157|      1|	object_class->build = vips_foreign_save_webp_mime_build;
 1158|      1|}

vips_freqfilt_operation_init:
  163|      2|{
  164|      2|#ifdef HAVE_FFTW
  165|      2|	extern GType vips_fwfft_get_type(void);
  166|      2|	extern GType vips_invfft_get_type(void);
  167|      2|#endif /*HAVE_FFTW*/
  168|      2|	extern GType vips_freqmult_get_type(void);
  169|      2|	extern GType vips_spectrum_get_type(void);
  170|      2|	extern GType vips_phasecor_get_type(void);
  171|       |
  172|      2|#ifdef HAVE_FFTW
  173|      2|	vips_fwfft_get_type();
  174|      2|	vips_invfft_get_type();
  175|      2|#endif /*HAVE_FFTW*/
  176|      2|	vips_freqmult_get_type();
  177|      2|	vips_spectrum_get_type();
  178|      2|	vips_phasecor_get_type();
  179|      2|}
freqfilt.c:vips_freqfilt_class_init:
   86|      1|{
   87|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   88|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|       |
   90|      1|	gobject_class->set_property = vips_object_set_property;
   91|      1|	gobject_class->get_property = vips_object_get_property;
   92|       |
   93|      1|	vobject_class->nickname = "freqfilt";
   94|      1|	vobject_class->description = _("frequency-domain filter operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   95|      1|	vobject_class->build = vips_freqfilt_build;
   96|       |
   97|      1|	VIPS_ARG_IMAGE(class, "in", -1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
   98|      1|		_("Input"),
   99|      1|		_("Input image"),
  100|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  101|      1|		G_STRUCT_OFFSET(VipsFreqfilt, in));
  102|       |
  103|      1|	VIPS_ARG_IMAGE(class, "out", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  104|      1|		_("Output"),
  105|      1|		_("Output image"),
  106|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  107|      1|		G_STRUCT_OFFSET(VipsFreqfilt, out));
  108|      1|}

freqmult.c:vips_freqmult_class_init:
  118|      1|{
  119|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  120|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  121|       |
  122|      1|	gobject_class->set_property = vips_object_set_property;
  123|      1|	gobject_class->get_property = vips_object_get_property;
  124|       |
  125|      1|	vobject_class->nickname = "freqmult";
  126|      1|	vobject_class->description = _("frequency-domain filtering");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  127|      1|	vobject_class->build = vips_freqmult_build;
  128|       |
  129|      1|	VIPS_ARG_IMAGE(class, "mask", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  130|      1|		_("Mask"),
  131|      1|		_("Input mask image"),
  132|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  133|      1|		G_STRUCT_OFFSET(VipsFreqmult, mask));
  134|      1|}

fwfft.c:vips_fwfft_class_init:
  347|      1|{
  348|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  349|       |
  350|      1|	vobject_class->nickname = "fwfft";
  351|      1|	vobject_class->description = _("forward FFT");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  352|      1|	vobject_class->build = vips_fwfft_build;
  353|      1|}

invfft.c:vips_invfft_class_init:
  255|      1|{
  256|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  257|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  258|       |
  259|      1|	gobject_class->set_property = vips_object_set_property;
  260|      1|	gobject_class->get_property = vips_object_get_property;
  261|       |
  262|      1|	vobject_class->nickname = "invfft";
  263|      1|	vobject_class->description = _("inverse FFT");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  264|      1|	vobject_class->build = vips_invfft_build;
  265|       |
  266|      1|	VIPS_ARG_BOOL(class, "real", 4,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  267|      1|		_("Real"),
  268|      1|		_("Output only the real part of the transform"),
  269|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  270|      1|		G_STRUCT_OFFSET(VipsInvfft, real),
  271|      1|		FALSE);
  272|      1|}

phasecor.c:vips_phasecor_class_init:
   99|      1|{
  100|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  101|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  102|       |
  103|      1|	gobject_class->set_property = vips_object_set_property;
  104|      1|	gobject_class->get_property = vips_object_get_property;
  105|       |
  106|      1|	vobject_class->nickname = "phasecor";
  107|      1|	vobject_class->description = _("calculate phase correlation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  108|      1|	vobject_class->build = vips_phasecor_build;
  109|       |
  110|      1|	VIPS_ARG_IMAGE(class, "in2", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  111|      1|		_("in2"),
  112|      1|		_("Second input image"),
  113|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  114|      1|		G_STRUCT_OFFSET(VipsPhasecor, in2));
  115|      1|}

spectrum.c:vips_spectrum_class_init:
   96|      1|{
   97|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|       |
   99|      1|	vobject_class->nickname = "spectrum";
  100|      1|	vobject_class->description = _("make displayable power spectrum");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  101|      1|	vobject_class->build = vips_spectrum_build;
  102|      1|}

case.c:vips_case_class_init:
  223|      1|{
  224|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  225|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  226|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  227|       |
  228|      1|	gobject_class->set_property = vips_object_set_property;
  229|      1|	gobject_class->get_property = vips_object_get_property;
  230|       |
  231|      1|	object_class->nickname = "case";
  232|      1|	object_class->description =
  233|      1|		_("use pixel values to pick cases from an array of images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  234|      1|	object_class->build = vips_case_build;
  235|       |
  236|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  237|       |
  238|      1|	VIPS_ARG_IMAGE(class, "index", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  239|      1|		_("Index"),
  240|      1|		_("Index image"),
  241|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  242|      1|		G_STRUCT_OFFSET(VipsCase, index));
  243|       |
  244|      1|	VIPS_ARG_BOXED(class, "cases", 2,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  245|      1|		_("Cases"),
  246|      1|		_("Array of case images"),
  247|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  248|      1|		G_STRUCT_OFFSET(VipsCase, cases),
  249|      1|		VIPS_TYPE_ARRAY_IMAGE);
  250|       |
  251|      1|	VIPS_ARG_IMAGE(class, "out", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  252|      1|		_("Output"),
  253|      1|		_("Output image"),
  254|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  255|      1|		G_STRUCT_OFFSET(VipsCase, out));
  256|      1|}

hist_cum.c:vips_hist_cum_class_init:
  153|      1|{
  154|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  155|      1|	VipsHistogramClass *hclass = VIPS_HISTOGRAM_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_HISTOGRAM, VipsHistogramClass))
  ------------------
  156|       |
  157|      1|	object_class->nickname = "hist_cum";
  158|      1|	object_class->description = _("form cumulative histogram");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  159|       |
  160|      1|	hclass->format_table = vips_hist_cum_format_table;
  161|      1|	hclass->process = vips_hist_cum_process;
  162|      1|}

hist_entropy.c:vips_hist_entropy_class_init:
   99|      1|{
  100|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  101|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  102|       |
  103|      1|	gobject_class->set_property = vips_object_set_property;
  104|      1|	gobject_class->get_property = vips_object_get_property;
  105|       |
  106|      1|	object_class->nickname = "hist_entropy";
  107|      1|	object_class->description = _("estimate image entropy");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  108|      1|	object_class->build = vips_hist_entropy_build;
  109|       |
  110|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  111|      1|		_("Input"),
  112|      1|		_("Input histogram image"),
  113|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  114|      1|		G_STRUCT_OFFSET(VipsHistEntropy, in));
  115|       |
  116|      1|	VIPS_ARG_DOUBLE(class, "out", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  117|      1|		_("Output"),
  118|      1|		_("Output value"),
  119|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  120|      1|		G_STRUCT_OFFSET(VipsHistEntropy, out),
  121|      1|		-INFINITY, INFINITY, 0.0);
  122|      1|}

hist_equal.c:vips_hist_equal_class_init:
  102|      1|{
  103|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  104|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  105|       |
  106|      1|	gobject_class->set_property = vips_object_set_property;
  107|      1|	gobject_class->get_property = vips_object_get_property;
  108|       |
  109|      1|	object_class->nickname = "hist_equal";
  110|      1|	object_class->description = _("histogram equalisation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  111|      1|	object_class->build = vips_hist_equal_build;
  112|       |
  113|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  114|      1|		_("Input"),
  115|      1|		_("Input image"),
  116|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  117|      1|		G_STRUCT_OFFSET(VipsHistEqual, in));
  118|       |
  119|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  120|      1|		_("Output"),
  121|      1|		_("Output image"),
  122|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  123|      1|		G_STRUCT_OFFSET(VipsHistEqual, out));
  124|       |
  125|      1|	VIPS_ARG_INT(class, "band", 110,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  126|      1|		_("Band"),
  127|      1|		_("Equalise with this band"),
  128|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  129|      1|		G_STRUCT_OFFSET(VipsHistEqual, which),
  130|      1|		-1, 100000, -1);
  131|      1|}

hist_ismonotonic.c:vips_hist_ismonotonic_class_init:
  106|      1|{
  107|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  108|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  109|       |
  110|      1|	gobject_class->set_property = vips_object_set_property;
  111|      1|	gobject_class->get_property = vips_object_get_property;
  112|       |
  113|      1|	object_class->nickname = "hist_ismonotonic";
  114|      1|	object_class->description = _("test for monotonicity");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  115|      1|	object_class->build = vips_hist_ismonotonic_build;
  116|       |
  117|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  118|      1|		_("Input"),
  119|      1|		_("Input histogram image"),
  120|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  121|      1|		G_STRUCT_OFFSET(VipsHistIsmonotonic, in));
  122|       |
  123|      1|	VIPS_ARG_BOOL(class, "monotonic", 2,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  124|      1|		_("Monotonic"),
  125|      1|		_("true if in is monotonic"),
  126|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  127|      1|		G_STRUCT_OFFSET(VipsHistIsmonotonic, monotonic),
  128|      1|		FALSE);
  129|      1|}

hist_local.c:vips_hist_local_class_init:
  346|      1|{
  347|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  348|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  349|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  350|       |
  351|      1|	gobject_class->set_property = vips_object_set_property;
  352|      1|	gobject_class->get_property = vips_object_get_property;
  353|       |
  354|      1|	object_class->nickname = "hist_local";
  355|      1|	object_class->description = _("local histogram equalisation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  356|      1|	object_class->build = vips_hist_local_build;
  357|       |
  358|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  359|       |
  360|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  361|      1|		_("Input"),
  362|      1|		_("Input image"),
  363|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  364|      1|		G_STRUCT_OFFSET(VipsHistLocal, in));
  365|       |
  366|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  367|      1|		_("Output"),
  368|      1|		_("Output image"),
  369|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  370|      1|		G_STRUCT_OFFSET(VipsHistLocal, out));
  371|       |
  372|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  373|      1|		_("Width"),
  374|      1|		_("Window width in pixels"),
  375|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  376|      1|		G_STRUCT_OFFSET(VipsHistLocal, width),
  377|      1|		1, VIPS_MAX_COORD, 1);
  378|       |
  379|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  380|      1|		_("Height"),
  381|      1|		_("Window height in pixels"),
  382|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  383|      1|		G_STRUCT_OFFSET(VipsHistLocal, height),
  384|      1|		1, VIPS_MAX_COORD, 1);
  385|       |
  386|      1|	VIPS_ARG_INT(class, "max_slope", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  387|      1|		_("Max slope"),
  388|      1|		_("Maximum slope (CLAHE)"),
  389|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  390|      1|		G_STRUCT_OFFSET(VipsHistLocal, max_slope),
  391|      1|		0, 100, 0);
  392|      1|}

hist_match.c:vips_hist_match_class_init:
  145|      1|{
  146|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  147|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  148|      1|	VipsHistogramClass *hclass = VIPS_HISTOGRAM_CLASS(class);
  ------------------
  |  |   45|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   46|      1|		VIPS_TYPE_HISTOGRAM, VipsHistogramClass))
  ------------------
  149|       |
  150|      1|	gobject_class->set_property = vips_object_set_property;
  151|      1|	gobject_class->get_property = vips_object_get_property;
  152|       |
  153|      1|	vobject_class->nickname = "hist_match";
  154|      1|	vobject_class->description = _("match two histograms");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  155|      1|	vobject_class->build = vips_hist_match_build;
  156|       |
  157|      1|	hclass->input_format = VIPS_FORMAT_UINT;
  158|      1|	hclass->process = vips_hist_match_process;
  159|       |
  160|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  161|      1|		_("Input"),
  162|      1|		_("Input histogram"),
  163|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  164|      1|		G_STRUCT_OFFSET(VipsHistMatch, in));
  165|       |
  166|      1|	VIPS_ARG_IMAGE(class, "ref", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  167|      1|		_("Reference"),
  168|      1|		_("Reference histogram"),
  169|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  170|      1|		G_STRUCT_OFFSET(VipsHistMatch, ref));
  171|      1|}

hist_norm.c:vips_hist_norm_class_init:
  129|      1|{
  130|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  131|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  132|       |
  133|      1|	gobject_class->set_property = vips_object_set_property;
  134|      1|	gobject_class->get_property = vips_object_get_property;
  135|       |
  136|      1|	object_class->nickname = "hist_norm";
  137|      1|	object_class->description = _("normalise histogram");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  138|      1|	object_class->build = vips_hist_norm_build;
  139|       |
  140|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  141|      1|		_("Input"),
  142|      1|		_("Input image"),
  143|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  144|      1|		G_STRUCT_OFFSET(VipsHistNorm, in));
  145|       |
  146|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  147|      1|		_("Output"),
  148|      1|		_("Output image"),
  149|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  150|      1|		G_STRUCT_OFFSET(VipsHistNorm, out));
  151|      1|}

hist_plot.c:vips_hist_plot_class_init:
  321|      1|{
  322|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  323|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  324|       |
  325|      1|	gobject_class->set_property = vips_object_set_property;
  326|      1|	gobject_class->get_property = vips_object_get_property;
  327|       |
  328|      1|	object_class->nickname = "hist_plot";
  329|      1|	object_class->description = _("plot histogram");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  330|      1|	object_class->build = vips_hist_plot_build;
  331|       |
  332|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  333|      1|		_("Input"),
  334|      1|		_("Input image"),
  335|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  336|      1|		G_STRUCT_OFFSET(VipsHistPlot, in));
  337|       |
  338|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  339|      1|		_("Output"),
  340|      1|		_("Output image"),
  341|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  342|      1|		G_STRUCT_OFFSET(VipsHistPlot, out));
  343|      1|}

hist_unary.c:vips_hist_unary_class_init:
   76|      1|{
   77|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   78|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   79|       |
   80|      1|	gobject_class->set_property = vips_object_set_property;
   81|      1|	gobject_class->get_property = vips_object_get_property;
   82|       |
   83|      1|	vobject_class->nickname = "hist_unary";
   84|      1|	vobject_class->description = _("hist_unary operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   85|      1|	vobject_class->build = vips_hist_unary_build;
   86|       |
   87|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
   88|      1|		_("Input"),
   89|      1|		_("Input image"),
   90|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   91|      1|		G_STRUCT_OFFSET(VipsHistUnary, in));
   92|      1|}

vips_histogram_operation_init:
  251|      2|{
  252|      2|	extern GType vips_maplut_get_type(void);
  253|      2|	extern GType vips_case_get_type(void);
  254|      2|	extern GType vips_percent_get_type(void);
  255|      2|	extern GType vips_hist_cum_get_type(void);
  256|      2|	extern GType vips_hist_norm_get_type(void);
  257|      2|	extern GType vips_hist_equal_get_type(void);
  258|      2|	extern GType vips_hist_plot_get_type(void);
  259|      2|	extern GType vips_hist_match_get_type(void);
  260|      2|	extern GType vips_hist_local_get_type(void);
  261|      2|	extern GType vips_hist_ismonotonic_get_type(void);
  262|      2|	extern GType vips_hist_entropy_get_type(void);
  263|      2|	extern GType vips_stdif_get_type(void);
  264|       |
  265|      2|	vips_maplut_get_type();
  266|      2|	vips_case_get_type();
  267|      2|	vips_percent_get_type();
  268|      2|	vips_stdif_get_type();
  269|      2|	vips_hist_cum_get_type();
  270|      2|	vips_hist_norm_get_type();
  271|      2|	vips_hist_equal_get_type();
  272|      2|	vips_hist_plot_get_type();
  273|      2|	vips_hist_match_get_type();
  274|      2|	vips_hist_local_get_type();
  275|      2|	vips_hist_ismonotonic_get_type();
  276|      2|	vips_hist_entropy_get_type();
  277|      2|}
histogram.c:vips_histogram_class_init:
  215|      1|{
  216|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  217|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  218|       |
  219|      1|	gobject_class->set_property = vips_object_set_property;
  220|      1|	gobject_class->get_property = vips_object_get_property;
  221|       |
  222|      1|	vobject_class->nickname = "histogram";
  223|      1|	vobject_class->description = _("histogram operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  224|      1|	vobject_class->build = vips_histogram_build;
  225|       |
  226|      1|	class->input_format = VIPS_FORMAT_NOTSET;
  227|       |
  228|       |	/* Inputs set by subclassess.
  229|       |	 */
  230|       |
  231|      1|	VIPS_ARG_IMAGE(class, "out", 10,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  232|      1|		_("Output"),
  233|      1|		_("Output image"),
  234|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  235|      1|		G_STRUCT_OFFSET(VipsHistogram, out));
  236|      1|}

maplut.c:vips_maplut_class_init:
  729|      1|{
  730|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  731|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  732|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  733|       |
  734|      1|	gobject_class->set_property = vips_object_set_property;
  735|      1|	gobject_class->get_property = vips_object_get_property;
  736|       |
  737|      1|	object_class->nickname = "maplut";
  738|      1|	object_class->description = _("map an image though a lut");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  739|      1|	object_class->build = vips_maplut_build;
  740|       |
  741|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  742|       |
  743|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  744|      1|		_("Input"),
  745|      1|		_("Input image"),
  746|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  747|      1|		G_STRUCT_OFFSET(VipsMaplut, in));
  748|       |
  749|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  750|      1|		_("Output"),
  751|      1|		_("Output image"),
  752|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  753|      1|		G_STRUCT_OFFSET(VipsMaplut, out));
  754|       |
  755|      1|	VIPS_ARG_IMAGE(class, "lut", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  756|      1|		_("LUT"),
  757|      1|		_("Look-up table image"),
  758|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  759|      1|		G_STRUCT_OFFSET(VipsMaplut, lut));
  760|       |
  761|      1|	VIPS_ARG_INT(class, "band", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  762|      1|		_("Band"),
  763|      1|		_("Apply one-band lut to this band of in"),
  764|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  765|      1|		G_STRUCT_OFFSET(VipsMaplut, band),
  766|      1|		-1, 10000, -1);
  767|      1|}

percent.c:vips_percent_class_init:
   97|      1|{
   98|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  100|       |
  101|      1|	gobject_class->set_property = vips_object_set_property;
  102|      1|	gobject_class->get_property = vips_object_get_property;
  103|       |
  104|      1|	object_class->nickname = "percent";
  105|      1|	object_class->description = _("find threshold for percent of pixels");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  106|      1|	object_class->build = vips_percent_build;
  107|       |
  108|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  109|      1|		_("Input"),
  110|      1|		_("Input image"),
  111|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  112|      1|		G_STRUCT_OFFSET(VipsPercent, in));
  113|       |
  114|      1|	VIPS_ARG_DOUBLE(class, "percent", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  115|      1|		_("Percent"),
  116|      1|		_("Percent of pixels"),
  117|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  118|      1|		G_STRUCT_OFFSET(VipsPercent, percent),
  119|      1|		0, 100, 50);
  120|       |
  121|      1|	VIPS_ARG_INT(class, "threshold", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  122|      1|		_("Threshold"),
  123|      1|		_("Threshold above which lie percent of pixels"),
  124|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  125|      1|		G_STRUCT_OFFSET(VipsPercent, threshold),
  126|      1|		0, 65535, 0);
  127|      1|}

stdif.c:vips_stdif_class_init:
  282|      1|{
  283|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  285|       |
  286|      1|	gobject_class->set_property = vips_object_set_property;
  287|      1|	gobject_class->get_property = vips_object_get_property;
  288|       |
  289|      1|	object_class->nickname = "stdif";
  290|      1|	object_class->description = _("statistical difference");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  291|      1|	object_class->build = vips_stdif_build;
  292|       |
  293|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  294|      1|		_("Input"),
  295|      1|		_("Input image"),
  296|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  297|      1|		G_STRUCT_OFFSET(VipsStdif, in));
  298|       |
  299|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  300|      1|		_("Output"),
  301|      1|		_("Output image"),
  302|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  303|      1|		G_STRUCT_OFFSET(VipsStdif, out));
  304|       |
  305|       |	/* Windows larger than 256x256 will overflow sum2, see above.
  306|       |	 */
  307|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  308|      1|		_("Width"),
  309|      1|		_("Window width in pixels"),
  310|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  311|      1|		G_STRUCT_OFFSET(VipsStdif, width),
  312|      1|		1, 256, 11);
  313|       |
  314|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  315|      1|		_("Height"),
  316|      1|		_("Window height in pixels"),
  317|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  318|      1|		G_STRUCT_OFFSET(VipsStdif, height),
  319|      1|		1, 256, 11);
  320|       |
  321|      1|	VIPS_ARG_DOUBLE(class, "a", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  322|      1|		_("Mean weight"),
  323|      1|		_("Weight of new mean"),
  324|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  325|      1|		G_STRUCT_OFFSET(VipsStdif, a),
  326|      1|		0.0, 1.0, 0.5);
  327|       |
  328|      1|	VIPS_ARG_DOUBLE(class, "m0", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  329|      1|		_("Mean"),
  330|      1|		_("New mean"),
  331|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  332|      1|		G_STRUCT_OFFSET(VipsStdif, m0),
  333|      1|		-INFINITY, INFINITY, 128);
  334|       |
  335|      1|	VIPS_ARG_DOUBLE(class, "b", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  336|      1|		_("Deviation weight"),
  337|      1|		_("Weight of new deviation"),
  338|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  339|      1|		G_STRUCT_OFFSET(VipsStdif, b),
  340|      1|		0.0, 2.0, 0.5);
  341|       |
  342|      1|	VIPS_ARG_DOUBLE(class, "s0", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  343|      1|		_("Deviation"),
  344|      1|		_("New deviation"),
  345|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  346|      1|		G_STRUCT_OFFSET(VipsStdif, s0),
  347|      1|		-INFINITY, INFINITY, 50);
  348|      1|}

vips_buf_rewind:
   96|  15.8k|{
   97|  15.8k|	buf->i = 0;
   98|  15.8k|	buf->lasti = 0;
   99|  15.8k|	buf->full = FALSE;
  ------------------
  |  |  794|  15.8k|#define	FALSE	(0)
  ------------------
  100|       |
  101|  15.8k|	if (buf->base)
  ------------------
  |  Branch (101:6): [True: 15.8k, False: 0]
  ------------------
  102|  15.8k|		buf->base[0] = '\0';
  103|  15.8k|}
vips_buf_appendns:
  257|  1.62M|{
  258|  1.62M|	int len;
  259|  1.62M|	int n;
  260|  1.62M|	int avail;
  261|  1.62M|	int cpy;
  262|       |
  263|  1.62M|	if (buf->full)
  ------------------
  |  Branch (263:6): [True: 1.36M, False: 255k]
  ------------------
  264|  1.36M|		return FALSE;
  ------------------
  |  |  794|  1.36M|#define	FALSE	(0)
  ------------------
  265|   255k|	if (!str)
  ------------------
  |  Branch (265:6): [True: 0, False: 255k]
  ------------------
  266|      0|		return TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  267|       |
  268|       |	/* Amount we want to copy.
  269|       |	 */
  270|   255k|	len = strlen(str);
  271|   255k|	if (sz >= 0)
  ------------------
  |  Branch (271:6): [True: 0, False: 255k]
  ------------------
  272|      0|		n = VIPS_MIN(sz, len);
  ------------------
  |  |   55|      0|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  273|   255k|	else
  274|   255k|		n = len;
  275|       |
  276|       |	/* Space available.
  277|       |	 */
  278|   255k|	avail = buf->mx - buf->i - 4;
  279|       |
  280|   255k|	cpy = VIPS_MIN(n, avail);
  ------------------
  |  |   55|   255k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 254k, False: 924]
  |  |  ------------------
  ------------------
  281|       |
  282|       |	/* Can't use g_strlcpy() here, we don't want to drop the end of the
  283|       |	 * string.
  284|       |	 *
  285|       |	 * gcc10.3 (I think?) issues a false-positive warning about this.
  286|       |	 */
  287|   255k|	strncpy(buf->base + buf->i, str, cpy);
  288|   255k|	buf->i += cpy;
  289|       |
  290|   255k|	if (buf->i >= buf->mx - 4) {
  ------------------
  |  Branch (290:6): [True: 924, False: 254k]
  ------------------
  291|    924|		buf->full = TRUE;
  ------------------
  |  |  798|    924|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    924|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  292|    924|		strcpy(buf->base + buf->mx - 4, "...");
  293|    924|		buf->i = buf->mx - 1;
  294|    924|		return FALSE;
  ------------------
  |  |  794|    924|#define	FALSE	(0)
  ------------------
  295|    924|	}
  296|       |
  297|   254k|	return TRUE;
  ------------------
  |  |  798|   254k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   254k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  298|   255k|}
vips_buf_appends:
  311|  1.62M|{
  312|  1.62M|	return vips_buf_appendns(buf, str, -1);
  313|  1.62M|}
vips_buf_vappendf:
  413|  3.54M|{
  414|  3.54M|	int avail;
  415|  3.54M|	char *p;
  416|       |
  417|  3.54M|	if (buf->full)
  ------------------
  |  Branch (417:6): [True: 2.73M, False: 809k]
  ------------------
  418|  2.73M|		return FALSE;
  ------------------
  |  |  794|  2.73M|#define	FALSE	(0)
  ------------------
  419|       |
  420|   809k|	avail = buf->mx - buf->i - 4;
  421|   809k|	p = buf->base + buf->i;
  422|   809k|	(void) g_vsnprintf(p, avail, fmt, ap);
  423|   809k|	buf->i += strlen(p);
  424|       |
  425|   809k|	if (buf->i >= buf->mx - 4) {
  ------------------
  |  Branch (425:6): [True: 0, False: 809k]
  ------------------
  426|      0|		buf->full = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  427|      0|		strcpy(buf->base + buf->mx - 4, "...");
  428|      0|		buf->i = buf->mx - 1;
  429|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  430|      0|	}
  431|       |
  432|   809k|	return TRUE;
  ------------------
  |  |  798|   809k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   809k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  433|   809k|}
vips_buf_appendf:
  447|  1.92M|{
  448|  1.92M|	va_list ap;
  449|  1.92M|	gboolean result;
  450|       |
  451|  1.92M|	va_start(ap, fmt);
  452|  1.92M|	result = vips_buf_vappendf(buf, fmt, ap);
  453|  1.92M|	va_end(ap);
  454|       |
  455|  1.92M|	return result;
  456|  1.92M|}
vips_buf_all:
  724|   309k|{
  725|   309k|	buf->base[buf->i] = '\0';
  726|       |
  727|   309k|	return buf->base;
  728|   309k|}

vips_buffer_done:
  368|  51.3k|{
  369|  51.3k|	VipsImage *im = buffer->im;
  370|  51.3k|	VipsBufferCache *cache;
  371|       |
  372|  51.3k|	if (!buffer->done &&
  ------------------
  |  Branch (372:6): [True: 51.3k, False: 0]
  ------------------
  373|  51.3k|		(cache = buffer_cache_get(im))) {
  ------------------
  |  Branch (373:3): [True: 51.3k, False: 0]
  ------------------
  374|  51.3k|		g_assert(!g_slist_find(cache->buffers, buffer));
  ------------------
  |  |  166|  51.3k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  51.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  51.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  375|  51.3k|		g_assert(!buffer->cache);
  ------------------
  |  |  166|  51.3k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  51.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  51.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  376|       |
  377|  51.3k|		buffer->done = TRUE;
  ------------------
  |  |  798|  51.3k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  51.3k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  378|  51.3k|		buffer->cache = cache;
  379|       |
  380|  51.3k|		cache->buffers = g_slist_prepend(cache->buffers, buffer);
  381|       |
  382|       |#ifdef DEBUG_VERBOSE
  383|       |		printf("vips_buffer_done: thread %p adding buffer %p to cache %p\n",
  384|       |			g_thread_self(), buffer, cache);
  385|       |		vips_buffer_print(buffer);
  386|       |#endif /*DEBUG_VERBOSE*/
  387|  51.3k|	}
  388|  51.3k|}
vips_buffer_undone:
  394|   947k|{
  395|   947k|	if (buffer->done) {
  ------------------
  |  Branch (395:6): [True: 51.3k, False: 895k]
  ------------------
  396|  51.3k|		VipsBufferCache *cache = buffer->cache;
  397|       |
  398|       |#ifdef DEBUG_VERBOSE
  399|       |		printf("vips_buffer_undone: thread %p removing "
  400|       |			   "buffer %p from cache %p\n",
  401|       |			g_thread_self(), buffer, cache);
  402|       |#endif /*DEBUG_VERBOSE*/
  403|       |
  404|  51.3k|		g_assert(cache->thread == g_thread_self());
  ------------------
  |  |  166|  51.3k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  51.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  51.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  405|  51.3k|		g_assert(cache->buffer_thread->thread == cache->thread);
  ------------------
  |  |  166|  51.3k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  51.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  51.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|  51.3k|		g_assert(g_slist_find(cache->buffers, buffer));
  ------------------
  |  |  166|  51.3k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  51.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  51.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  407|  51.3k|		g_assert(buffer_thread_get());
  ------------------
  |  |  166|  51.3k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  51.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  51.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|  51.3k|		g_assert(cache->buffer_thread == buffer_thread_get());
  ------------------
  |  |  166|  51.3k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  51.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  51.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  409|       |
  410|  51.3k|		cache->buffers = g_slist_remove(cache->buffers, buffer);
  411|  51.3k|		buffer->done = FALSE;
  ------------------
  |  |  794|  51.3k|#define	FALSE	(0)
  ------------------
  412|       |
  413|       |#ifdef DEBUG_VERBOSE
  414|       |		printf("vips_buffer_undone: %d buffers left\n",
  415|       |			g_slist_length(cache->buffers));
  416|       |#endif /*DEBUG_VERBOSE*/
  417|  51.3k|	}
  418|       |
  419|   947k|	buffer->cache = NULL;
  420|   947k|	buffer->area.width = 0;
  421|   947k|	buffer->area.height = 0;
  422|   947k|}
vips_buffer_unref:
  426|   447k|{
  427|       |#ifdef DEBUG_VERBOSE
  428|       |	printf("** vips_buffer_unref: left = %d, top = %d, "
  429|       |		   "width = %d, height = %d (%p)\n",
  430|       |		buffer->area.left, buffer->area.top,
  431|       |		buffer->area.width, buffer->area.height,
  432|       |		buffer);
  433|       |#endif /*DEBUG_VERBOSE*/
  434|       |
  435|   447k|	g_assert(buffer->ref_count > 0);
  ------------------
  |  |  166|   447k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   447k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   447k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  436|       |
  437|   447k|	buffer->ref_count -= 1;
  438|       |
  439|   447k|	if (buffer->ref_count == 0) {
  ------------------
  |  Branch (439:6): [True: 445k, False: 2.37k]
  ------------------
  440|   445k|		VipsBufferCache *cache;
  441|       |
  442|       |#ifdef DEBUG_VERBOSE
  443|       |		if (!buffer->done)
  444|       |			printf("vips_buffer_unref: buffer was not done\n");
  445|       |#endif /*DEBUG_VERBOSE*/
  446|       |
  447|   445k|		vips_buffer_undone(buffer);
  448|       |
  449|       |		/* Place on this thread's reserve list for reuse.
  450|       |		 */
  451|   445k|		if ((cache = buffer_cache_get(buffer->im)) &&
  ------------------
  |  Branch (451:7): [True: 405k, False: 40.1k]
  ------------------
  452|   445k|			cache->n_reserve < buffer_cache_max_reserve) {
  ------------------
  |  Branch (452:4): [True: 267k, False: 137k]
  ------------------
  453|   267k|			g_assert(!buffer->cache);
  ------------------
  |  |  166|   267k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   267k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   267k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  454|       |
  455|   267k|			cache->reserve =
  456|   267k|				g_slist_prepend(cache->reserve, buffer);
  457|   267k|			cache->n_reserve += 1;
  458|       |
  459|   267k|			buffer->cache = cache;
  460|   267k|			buffer->area.width = 0;
  461|   267k|			buffer->area.height = 0;
  462|   267k|		}
  463|   178k|		else
  464|   178k|			vips_buffer_free(buffer);
  465|   445k|	}
  466|   447k|}
vips_buffer_new:
  512|   445k|{
  513|   445k|	VipsBufferCache *cache;
  514|   445k|	VipsBuffer *buffer;
  515|       |
  516|   445k|	if ((cache = buffer_cache_get(im)) &&
  ------------------
  |  Branch (516:6): [True: 423k, False: 21.6k]
  ------------------
  517|   445k|		cache->reserve) {
  ------------------
  |  Branch (517:3): [True: 107k, False: 316k]
  ------------------
  518|   107k|		buffer = (VipsBuffer *) cache->reserve->data;
  519|   107k|		cache->reserve = g_slist_remove(cache->reserve, buffer);
  520|   107k|		cache->n_reserve -= 1;
  521|       |
  522|   107k|		g_assert(buffer->im == im);
  ------------------
  |  |  166|   107k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   107k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   107k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  523|   107k|		g_assert(buffer->done == FALSE);
  ------------------
  |  |  166|   107k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   107k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   107k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  524|   107k|		g_assert(buffer->cache);
  ------------------
  |  |  166|   107k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   107k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   107k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  525|       |
  526|   107k|		buffer->ref_count = 1;
  527|   107k|		buffer->done = FALSE;
  ------------------
  |  |  794|   107k|#define	FALSE	(0)
  ------------------
  528|   107k|		buffer->cache = NULL;
  529|   107k|	}
  530|   337k|	else {
  531|   337k|		buffer = g_new0(VipsBuffer, 1);
  ------------------
  |  |  299|   337k|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|   337k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|   337k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|   337k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|   337k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|   337k|	  gpointer __p;						\
  |  |  |  |  231|   337k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 337k]
  |  |  |  |  ------------------
  |  |  |  |  232|   337k|	    __p = g_##func (__n);				\
  |  |  |  |  233|   337k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 337k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|   337k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 337k]
  |  |  |  |  |  Branch (234:26): [True: 337k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|   337k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|   337k|	  else							\
  |  |  |  |  237|   337k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|   337k|	  __p;							\
  |  |  |  |  239|   337k|	}))
  |  |  ------------------
  ------------------
  532|   337k|		buffer->ref_count = 1;
  533|   337k|		buffer->im = im;
  534|   337k|		buffer->done = FALSE;
  ------------------
  |  |  794|   337k|#define	FALSE	(0)
  ------------------
  535|   337k|		buffer->cache = NULL;
  536|   337k|		buffer->buf = NULL;
  537|   337k|		buffer->bsize = 0;
  538|       |
  539|       |#ifdef DEBUG
  540|       |		g_mutex_lock(&vips__global_lock);
  541|       |		vips__buffer_all =
  542|       |			g_slist_prepend(vips__buffer_all, buffer);
  543|       |		g_mutex_unlock(&vips__global_lock);
  544|       |#endif /*DEBUG*/
  545|   337k|	}
  546|       |
  547|   445k|	if (buffer_move(buffer, area)) {
  ------------------
  |  Branch (547:6): [True: 0, False: 445k]
  ------------------
  548|      0|		vips_buffer_free(buffer);
  549|      0|		return NULL;
  550|      0|	}
  551|       |
  552|   445k|	return buffer;
  553|   445k|}
vips_buffer_unref_ref:
  621|   482k|{
  622|   482k|	VipsBuffer *buffer;
  623|       |
  624|   482k|	g_assert(!old_buffer ||
  ------------------
  |  |  166|   482k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   482k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   482k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  625|   482k|		old_buffer->im == im);
  626|       |
  627|       |	/* Is the current buffer OK?
  628|       |	 */
  629|   482k|	if (old_buffer &&
  ------------------
  |  Branch (629:6): [True: 36.4k, False: 445k]
  ------------------
  630|   482k|		vips_rect_includesrect(&old_buffer->area, area))
  ------------------
  |  Branch (630:3): [True: 0, False: 36.4k]
  ------------------
  631|      0|		return old_buffer;
  632|       |
  633|       |	/* Does the new area already have a buffer?
  634|       |	 */
  635|   482k|	if ((buffer = buffer_find(im, area))) {
  ------------------
  |  Branch (635:6): [True: 2.37k, False: 479k]
  ------------------
  636|  2.37k|		VIPS_FREEF(vips_buffer_unref, old_buffer);
  ------------------
  |  |   41|  2.37k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  2.37k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  2.37k|	{ \
  |  |   43|  2.37k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 1.37k, False: 997]
  |  |  ------------------
  |  |   44|  1.37k|			(void) F((S)); \
  |  |   45|  1.37k|			(S) = 0; \
  |  |   46|  1.37k|		} \
  |  |   47|  2.37k|	} \
  |  |   48|  2.37k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.37k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  637|  2.37k|		return buffer;
  638|  2.37k|	}
  639|       |
  640|       |	/* Is the current buffer unshared? We can just move it.
  641|       |	 */
  642|   479k|	if (old_buffer &&
  ------------------
  |  Branch (642:6): [True: 35.0k, False: 444k]
  ------------------
  643|   479k|		old_buffer->ref_count == 1) {
  ------------------
  |  Branch (643:3): [True: 34.3k, False: 730]
  ------------------
  644|  34.3k|		if (buffer_move(old_buffer, area)) {
  ------------------
  |  Branch (644:7): [True: 0, False: 34.3k]
  ------------------
  645|      0|			vips_buffer_unref(old_buffer);
  646|      0|			return NULL;
  647|      0|		}
  648|       |
  649|  34.3k|		return old_buffer;
  650|  34.3k|	}
  651|       |
  652|       |	/* Fallback ... unref the old one, make a new one.
  653|       |	 */
  654|   479k|	VIPS_FREEF(vips_buffer_unref, old_buffer);
  ------------------
  |  |   41|   445k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   445k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   445k|	{ \
  |  |   43|   445k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 730, False: 444k]
  |  |  ------------------
  |  |   44|    730|			(void) F((S)); \
  |  |   45|    730|			(S) = 0; \
  |  |   46|    730|		} \
  |  |   47|   445k|	} \
  |  |   48|   479k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   479k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  655|   445k|	if (!(buffer = vips_buffer_new(im, area)))
  ------------------
  |  Branch (655:6): [True: 0, False: 445k]
  ------------------
  656|      0|		return NULL;
  657|       |
  658|   445k|	return buffer;
  659|   445k|}
vips__buffer_init:
  677|      2|{
  678|      2|	if (buffer_cache_max_reserve < 1)
  ------------------
  |  Branch (678:6): [Folded - Ignored]
  ------------------
  679|      0|		printf("vips__buffer_init: buffer reserve disabled\n");
  680|       |
  681|       |#ifdef DEBUG
  682|       |	printf("vips__buffer_init: DEBUG enabled\n");
  683|       |#endif /*DEBUG*/
  684|       |
  685|       |#ifdef DEBUG_CREATE
  686|       |	printf("vips__buffer_init: DEBUG_CREATE enabled\n");
  687|       |#endif /*DEBUG_CREATE*/
  688|      2|}
vips__buffer_shutdown:
  692|  82.8k|{
  693|  82.8k|	VipsBufferThread *buffer_thread;
  694|       |
  695|  82.8k|	if ((buffer_thread = g_private_get(&buffer_thread_key))) {
  ------------------
  |  Branch (695:6): [True: 39.5k, False: 43.2k]
  ------------------
  696|  39.5k|		buffer_thread_free(buffer_thread);
  697|  39.5k|		g_private_set(&buffer_thread_key, NULL);
  698|  39.5k|	}
  699|  82.8k|}
buffer.c:buffer_cache_get:
  345|  1.42M|{
  346|  1.42M|	VipsBufferThread *buffer_thread;
  347|  1.42M|	VipsBufferCache *cache;
  348|       |
  349|  1.42M|	if ((buffer_thread = buffer_thread_get())) {
  ------------------
  |  Branch (349:6): [True: 1.34M, False: 83.4k]
  ------------------
  350|  1.34M|		if (!(cache = (VipsBufferCache *)
  ------------------
  |  Branch (350:7): [True: 166k, False: 1.17M]
  ------------------
  351|  1.34M|					g_hash_table_lookup(buffer_thread->hash, im))) {
  352|   166k|			cache = buffer_cache_new(buffer_thread, im);
  353|   166k|			g_hash_table_insert(buffer_thread->hash, im, cache);
  354|   166k|		}
  355|       |
  356|  1.34M|		g_assert(cache->thread == g_thread_self());
  ------------------
  |  |  166|  1.34M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.34M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.34M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|  1.34M|	}
  358|  83.4k|	else
  359|  83.4k|		cache = NULL;
  360|       |
  361|  1.42M|	return cache;
  362|  1.42M|}
buffer.c:buffer_thread_get:
  318|  1.42M|{
  319|  1.42M|	VipsBufferThread *buffer_thread;
  320|       |
  321|  1.42M|	if (vips_thread_isvips()) {
  ------------------
  |  Branch (321:6): [True: 1.34M, False: 83.4k]
  ------------------
  322|       |		/* Our threads get a set of private buffers, since we know we
  323|       |		 * will be calling vips_thread_shutdown() on thread
  324|       |		 * termination.
  325|       |		 */
  326|  1.34M|		if (!(buffer_thread = g_private_get(&buffer_thread_key))) {
  ------------------
  |  Branch (326:7): [True: 39.5k, False: 1.30M]
  ------------------
  327|  39.5k|			buffer_thread = buffer_thread_new();
  328|  39.5k|			g_private_set(&buffer_thread_key, buffer_thread);
  329|  39.5k|		}
  330|       |
  331|  1.34M|		g_assert(buffer_thread->thread == g_thread_self());
  ------------------
  |  |  166|  1.34M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.34M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.34M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|  1.34M|	}
  333|  83.4k|	else
  334|       |		/* Non-vips threads don't have one.
  335|       |		 */
  336|  83.4k|		buffer_thread = NULL;
  337|       |
  338|  1.42M|	return buffer_thread;
  339|  1.42M|}
buffer.c:buffer_thread_new:
  302|  39.5k|{
  303|  39.5k|	VipsBufferThread *buffer_thread;
  304|       |
  305|  39.5k|	buffer_thread = g_new(VipsBufferThread, 1);
  ------------------
  |  |  282|  39.5k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|  39.5k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  39.5k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  39.5k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  39.5k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  39.5k|	  gpointer __p;						\
  |  |  |  |  231|  39.5k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 39.5k]
  |  |  |  |  ------------------
  |  |  |  |  232|  39.5k|	    __p = g_##func (__n);				\
  |  |  |  |  233|  39.5k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 39.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|  39.5k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 39.5k]
  |  |  |  |  |  Branch (234:26): [True: 39.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  39.5k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  39.5k|	  else							\
  |  |  |  |  237|  39.5k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  39.5k|	  __p;							\
  |  |  |  |  239|  39.5k|	}))
  |  |  ------------------
  ------------------
  306|  39.5k|	buffer_thread->hash = g_hash_table_new_full(
  307|  39.5k|		g_direct_hash, g_direct_equal,
  308|  39.5k|		NULL, (GDestroyNotify) buffer_cache_free);
  309|  39.5k|	buffer_thread->thread = g_thread_self();
  310|       |
  311|  39.5k|	return buffer_thread;
  312|  39.5k|}
buffer.c:buffer_cache_free:
  233|   166k|{
  234|   166k|	GSList *p;
  235|       |
  236|       |#ifdef DEBUG_CREATE
  237|       |	g_mutex_lock(&vips__global_lock);
  238|       |	vips__buffer_cache_all =
  239|       |		g_slist_remove(vips__buffer_cache_all, cache);
  240|       |	g_mutex_unlock(&vips__global_lock);
  241|       |
  242|       |	printf("buffer_cache_free: freeing cache %p on thread %p\n",
  243|       |		cache, g_thread_self());
  244|       |	printf("\t(%d caches left)\n",
  245|       |		g_slist_length(vips__buffer_cache_all));
  246|       |#endif /*DEBUG_CREATE*/
  247|       |
  248|       |	/* Need to mark undone so we don't try and take them off this cache on
  249|       |	 * unref.
  250|       |	 */
  251|   166k|	for (p = cache->buffers; p; p = p->next) {
  ------------------
  |  Branch (251:27): [True: 0, False: 166k]
  ------------------
  252|      0|		VipsBuffer *buffer = (VipsBuffer *) p->data;
  253|       |
  254|      0|		g_assert(buffer->done);
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|      0|		g_assert(buffer->cache == cache);
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|       |
  257|      0|		buffer->done = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  258|      0|		buffer->cache = NULL;
  259|      0|	}
  260|   166k|	VIPS_FREEF(g_slist_free, cache->buffers);
  ------------------
  |  |   41|   166k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   166k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   166k|	{ \
  |  |   43|   166k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 166k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   166k|	} \
  |  |   48|   166k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   166k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  261|       |
  262|   326k|	for (p = cache->reserve; p; p = p->next) {
  ------------------
  |  Branch (262:27): [True: 159k, False: 166k]
  ------------------
  263|   159k|		VipsBuffer *buffer = (VipsBuffer *) p->data;
  264|       |
  265|   159k|		vips_buffer_free(buffer);
  266|   159k|	}
  267|   166k|	VIPS_FREEF(g_slist_free, cache->reserve);
  ------------------
  |  |   41|   166k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   166k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   166k|	{ \
  |  |   43|   166k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 147k, False: 19.2k]
  |  |  ------------------
  |  |   44|   147k|			(void) F((S)); \
  |  |   45|   147k|			(S) = 0; \
  |  |   46|   147k|		} \
  |  |   47|   166k|	} \
  |  |   48|   166k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   166k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|       |
  269|   166k|	g_free(cache);
  270|   166k|}
buffer.c:buffer_cache_new:
  274|   166k|{
  275|   166k|	VipsBufferCache *cache;
  276|       |
  277|   166k|	cache = g_new(VipsBufferCache, 1);
  ------------------
  |  |  282|   166k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|   166k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|   166k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|   166k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|   166k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|   166k|	  gpointer __p;						\
  |  |  |  |  231|   166k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 166k]
  |  |  |  |  ------------------
  |  |  |  |  232|   166k|	    __p = g_##func (__n);				\
  |  |  |  |  233|   166k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 166k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|   166k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 166k]
  |  |  |  |  |  Branch (234:26): [True: 166k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|   166k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|   166k|	  else							\
  |  |  |  |  237|   166k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|   166k|	  __p;							\
  |  |  |  |  239|   166k|	}))
  |  |  ------------------
  ------------------
  278|   166k|	cache->buffers = NULL;
  279|   166k|	cache->thread = g_thread_self();
  280|   166k|	cache->im = im;
  281|   166k|	cache->buffer_thread = buffer_thread;
  282|   166k|	cache->reserve = NULL;
  283|   166k|	cache->n_reserve = 0;
  284|       |
  285|       |#ifdef DEBUG_CREATE
  286|       |	g_mutex_lock(&vips__global_lock);
  287|       |	vips__buffer_cache_all =
  288|       |		g_slist_prepend(vips__buffer_cache_all, cache);
  289|       |	g_mutex_unlock(&vips__global_lock);
  290|       |
  291|       |	printf("buffer_cache_new: new cache %p for thread %p on image %p\n",
  292|       |		cache, g_thread_self(), im);
  293|       |	printf("\t(%d caches now)\n",
  294|       |		g_slist_length(vips__buffer_cache_all));
  295|       |#endif /*DEBUG_CREATE*/
  296|       |
  297|   166k|	return cache;
  298|   166k|}
buffer.c:vips_buffer_free:
  203|   337k|{
  204|   337k|	VIPS_FREEF(vips_tracked_aligned_free, buffer->buf);
  ------------------
  |  |   41|   337k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   337k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   337k|	{ \
  |  |   43|   337k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 337k, False: 0]
  |  |  ------------------
  |  |   44|   337k|			(void) F((S)); \
  |  |   45|   337k|			(S) = 0; \
  |  |   46|   337k|		} \
  |  |   47|   337k|	} \
  |  |   48|   337k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   337k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|   337k|	buffer->bsize = 0;
  206|   337k|	g_free(buffer);
  207|       |
  208|       |#ifdef DEBUG
  209|       |	g_mutex_lock(&vips__global_lock);
  210|       |
  211|       |	g_assert(g_slist_find(vips__buffer_all, buffer));
  212|       |	vips__buffer_all = g_slist_remove(vips__buffer_all, buffer);
  213|       |
  214|       |	g_mutex_unlock(&vips__global_lock);
  215|       |#endif /*DEBUG*/
  216|       |
  217|       |#ifdef DEBUG_VERBOSE
  218|       |	printf("vips_buffer_free: freeing buffer %p\n", buffer);
  219|       |#endif /*DEBUG_VERBOSE*/
  220|   337k|}
buffer.c:buffer_move:
  470|   479k|{
  471|   479k|	VipsImage *im = buffer->im;
  472|   479k|	size_t new_bsize;
  473|   479k|	size_t align;
  474|       |
  475|   479k|	g_assert(buffer->ref_count == 1);
  ------------------
  |  |  166|   479k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   479k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   479k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  476|       |
  477|   479k|	vips_buffer_undone(buffer);
  478|   479k|	g_assert(!buffer->done);
  ------------------
  |  |  166|   479k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   479k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   479k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  479|       |
  480|   479k|	buffer->area = *area;
  481|       |
  482|   479k|	new_bsize = (size_t) VIPS_IMAGE_SIZEOF_PEL(im) *
  ------------------
  |  |  384|   479k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|   479k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  483|   479k|		area->width * area->height;
  484|       |
  485|       |	/* Need to pad buffer size to be aligned-up to
  486|       |	 * 64 bytes for the vips_reduce{h,v} highway path.
  487|       |	 */
  488|   479k|#ifdef HAVE_HWY
  489|   479k|	if (im->BandFmt == VIPS_FORMAT_UCHAR) {
  ------------------
  |  Branch (489:6): [True: 350k, False: 129k]
  ------------------
  490|   350k|		new_bsize += /*HWY_ALIGNMENT*/ 64 - 1;
  491|   350k|		align = /*HWY_ALIGNMENT*/ 64;
  492|   350k|	}
  493|   129k|	else
  494|   129k|#endif /*HAVE_HWY*/
  495|   129k|		align = 16;
  496|       |
  497|   479k|	if (buffer->bsize < new_bsize ||
  ------------------
  |  Branch (497:6): [True: 337k, False: 142k]
  ------------------
  498|   479k|		!buffer->buf) {
  ------------------
  |  Branch (498:3): [True: 0, False: 142k]
  ------------------
  499|   337k|		buffer->bsize = new_bsize;
  500|   337k|		VIPS_FREEF(vips_tracked_aligned_free, buffer->buf);
  ------------------
  |  |   41|   337k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   337k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   337k|	{ \
  |  |   43|   337k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 337k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   337k|	} \
  |  |   48|   337k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   337k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  501|   337k|		if (!(buffer->buf = vips_tracked_aligned_alloc(buffer->bsize, align)))
  ------------------
  |  Branch (501:7): [True: 0, False: 337k]
  ------------------
  502|      0|			return -1;
  503|   337k|	}
  504|       |
  505|   479k|	return 0;
  506|   479k|}
buffer.c:buffer_find:
  560|   482k|{
  561|   482k|	VipsBufferCache *cache;
  562|   482k|	VipsBuffer *buffer;
  563|   482k|	GSList *p;
  564|   482k|	VipsRect *area;
  565|       |
  566|   482k|	if (!(cache = buffer_cache_get(im)))
  ------------------
  |  Branch (566:6): [True: 21.6k, False: 460k]
  ------------------
  567|  21.6k|		return NULL;
  568|       |
  569|       |	/* This needs to be quick :-( don't use
  570|       |	 * vips_slist_map2()/vips_rect_includesrect(), do the search
  571|       |	 * inline.
  572|       |	 *
  573|       |	 * FIXME we return the first enclosing buffer, perhaps we should
  574|       |	 * search for the largest?
  575|       |	 */
  576|   495k|	for (p = cache->buffers; p; p = p->next) {
  ------------------
  |  Branch (576:27): [True: 37.4k, False: 458k]
  ------------------
  577|  37.4k|		buffer = (VipsBuffer *) p->data;
  578|  37.4k|		area = &buffer->area;
  579|       |
  580|  37.4k|		if (area->left <= r->left &&
  ------------------
  |  Branch (580:7): [True: 37.4k, False: 0]
  ------------------
  581|  37.4k|			area->top <= r->top &&
  ------------------
  |  Branch (581:4): [True: 37.4k, False: 0]
  ------------------
  582|  37.4k|			area->left + area->width >= r->left + r->width &&
  ------------------
  |  Branch (582:4): [True: 37.4k, False: 0]
  ------------------
  583|  37.4k|			area->top + area->height >= r->top + r->height) {
  ------------------
  |  Branch (583:4): [True: 2.37k, False: 35.0k]
  ------------------
  584|  2.37k|			buffer->ref_count += 1;
  585|       |
  586|       |#ifdef DEBUG_VERBOSE
  587|       |			printf("buffer_find: left = %d, top = %d, "
  588|       |				   "width = %d, height = %d, count = %d (%p)\n",
  589|       |				buffer->area.left, buffer->area.top,
  590|       |				buffer->area.width, buffer->area.height,
  591|       |				buffer->ref_count,
  592|       |				buffer);
  593|       |#endif /*DEBUG_VERBOSE*/
  594|       |
  595|  2.37k|			return buffer;
  596|  2.37k|		}
  597|  37.4k|	}
  598|       |
  599|   458k|	return NULL;
  600|   460k|}
buffer.c:buffer_thread_free:
  224|  39.5k|{
  225|  39.5k|	VIPS_FREEF(g_hash_table_destroy, buffer_thread->hash);
  ------------------
  |  |   41|  39.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  39.5k|	{ \
  |  |   43|  39.5k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 39.5k, False: 0]
  |  |  ------------------
  |  |   44|  39.5k|			(void) F((S)); \
  |  |   45|  39.5k|			(S) = 0; \
  |  |   46|  39.5k|		} \
  |  |   47|  39.5k|	} \
  |  |   48|  39.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  226|  39.5k|	VIPS_FREE(buffer_thread);
  ------------------
  |  |   50|  39.5k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  39.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  39.5k|	{ \
  |  |  |  |   43|  39.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 39.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  39.5k|			(void) F((S)); \
  |  |  |  |   45|  39.5k|			(S) = 0; \
  |  |  |  |   46|  39.5k|		} \
  |  |  |  |   47|  39.5k|	} \
  |  |  |  |   48|  39.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  227|  39.5k|}

vips_operation_hash:
  342|   963k|{
  343|   963k|	guint hash;
  344|       |
  345|   963k|	if (operation->found_hash)
  ------------------
  |  Branch (345:6): [True: 621k, False: 341k]
  ------------------
  346|   621k|		hash = operation->hash;
  347|   341k|	else {
  348|       |		/* Include the operation type in the hash.
  349|       |		 */
  350|   341k|		hash = (guint) G_OBJECT_TYPE(operation);
  ------------------
  |  |   95|   341k|#define G_OBJECT_TYPE(object)       (G_TYPE_FROM_INSTANCE (object))
  |  |  ------------------
  |  |  |  |  602|   341k|#define G_TYPE_FROM_INSTANCE(instance)                          (G_TYPE_FROM_CLASS (((GTypeInstance*) (instance))->g_class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|   341k|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  351|   341k|		(void) vips_argument_map(VIPS_OBJECT(operation),
  ------------------
  |  |  433|   341k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   341k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   341k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  352|   341k|			vips_object_hash_arg, &hash, NULL);
  353|       |
  354|       |		/* Make sure we can't have a zero hash value.
  355|       |		 */
  356|   341k|		hash |= 1;
  357|       |
  358|       |		/* The hash can change up to the moment of construction. After that,
  359|       |		 * it should be fixed.
  360|       |		 */
  361|   341k|		if (VIPS_OBJECT(operation)->constructed) {
  ------------------
  |  |  433|   341k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   341k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   341k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (361:7): [True: 159k, False: 181k]
  ------------------
  362|   159k|			operation->hash = hash;
  363|   159k|			operation->found_hash = TRUE;
  ------------------
  |  |  798|   159k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   159k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  364|   159k|		}
  365|   341k|	}
  366|       |
  367|   963k|	return hash;
  368|   963k|}
vips__cache_once_init:
  473|      2|{
  474|      2|	vips_cache_table = g_hash_table_new(
  475|      2|		(GHashFunc) vips_operation_hash,
  476|      2|		(GEqualFunc) vips_operation_equal);
  477|       |
  478|      2|	return NULL;
  479|      2|}
vips__cache_init:
  483|      2|{
  484|      2|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|      2|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
  485|       |
  486|      2|	VIPS_ONCE(&once, vips__cache_once_init, NULL);
  ------------------
  |  |   93|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|      2|	{ \
  |  |   95|      2|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|      2|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|      2| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|      2|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|      2|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 2, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|      2|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|      2|   else                                         \
  |  |  |  |  |  |  931|      2|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|      2|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|      2|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|      2|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      2|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  242|      2|   (once)->retval : \
  |  |  |  |  243|      2|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|      2|	} \
  |  |   98|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  487|      2|}
vips_cache_operation_buildp:
  884|   180k|{
  885|       |	/* Any flags for this new operation we are building.
  886|       |	 */
  887|   180k|	VipsOperationFlags flags = vips_operation_get_flags(*operation);
  888|       |
  889|   180k|	VipsOperationCacheEntry *hit;
  890|       |
  891|   180k|	g_assert(VIPS_IS_OPERATION(*operation));
  ------------------
  |  |  166|   180k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   180k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   180k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  892|       |
  893|       |#ifdef VIPS_DEBUG
  894|       |	printf("vips_cache_operation_buildp: %p %s\n",
  895|       |		*operation,
  896|       |		VIPS_OBJECT_GET_CLASS(*operation)->nickname);
  897|       |	vips_object_print_dump(VIPS_OBJECT(*operation));
  898|       |#endif /*VIPS_DEBUG*/
  899|       |
  900|   180k|	g_mutex_lock(&vips_cache_lock);
  901|       |
  902|   180k|	hit = vips_cache_operation_get(*operation);
  903|       |
  904|       |	/* We need to remove the existing cache entry if it's been tagged
  905|       |	 * as invalid, if it's been blocked, or someone has requested
  906|       |	 * revalidation.
  907|       |	 */
  908|   180k|	if (hit) {
  ------------------
  |  Branch (908:6): [True: 670, False: 180k]
  ------------------
  909|    670|		if (hit->invalid ||
  ------------------
  |  Branch (909:7): [True: 0, False: 670]
  ------------------
  910|    670|			(flags & VIPS_OPERATION_BLOCKED) ||
  ------------------
  |  Branch (910:4): [True: 0, False: 670]
  ------------------
  911|    670|			(flags & VIPS_OPERATION_REVALIDATE)) {
  ------------------
  |  Branch (911:4): [True: 0, False: 670]
  ------------------
  912|      0|			vips_cache_remove(hit->operation);
  913|      0|			hit = NULL;
  914|      0|		}
  915|    670|	}
  916|       |
  917|       |	/* If we still have a hit, return that and junk the operation we were
  918|       |	 * passed.
  919|       |	 */
  920|   180k|	if (hit) {
  ------------------
  |  Branch (920:6): [True: 670, False: 180k]
  ------------------
  921|    670|		vips_cache_ref(hit->operation);
  922|    670|		g_object_unref(*operation);
  923|    670|		*operation = hit->operation;
  924|       |
  925|    670|		if (vips__cache_trace) {
  ------------------
  |  Branch (925:7): [True: 0, False: 670]
  ------------------
  926|      0|			printf("vips cache*: ");
  927|      0|			vips_object_print_summary(VIPS_OBJECT(*operation));
  ------------------
  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  928|      0|		}
  929|    670|	}
  930|       |
  931|   180k|	g_mutex_unlock(&vips_cache_lock);
  932|       |
  933|       |	/* If there was a miss, we need to build this operation and add
  934|       |	 * it to the cache, if appropriate.
  935|       |	 */
  936|   180k|	if (!hit) {
  ------------------
  |  Branch (936:6): [True: 180k, False: 670]
  ------------------
  937|   180k|		unsigned int hash_before = 0;
  938|   180k|		VipsOperation *operation_before = NULL;
  939|       |
  940|       |		/* The _build method must not change the object hash. If it does, the
  941|       |		 * finished operation won't detect hits with next identical call.
  942|       |		 */
  943|   180k|		if (vips__leak) {
  ------------------
  |  Branch (943:7): [True: 0, False: 180k]
  ------------------
  944|      0|			hash_before = vips_operation_hash(*operation);
  945|      0|			operation_before = vips_operation_copy(*operation);
  946|      0|		}
  947|       |
  948|   180k|		if (vips_object_build(VIPS_OBJECT(*operation)))
  ------------------
  |  |  433|   180k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   180k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   180k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (948:7): [True: 20.4k, False: 159k]
  ------------------
  949|  20.4k|			return -1;
  950|       |
  951|   159k|		if (vips__leak &&
  ------------------
  |  Branch (951:7): [True: 0, False: 159k]
  ------------------
  952|   159k|			!(flags & VIPS_OPERATION_NOCACHE) &&
  ------------------
  |  Branch (952:4): [True: 0, False: 0]
  ------------------
  953|   159k|			hash_before != vips_operation_hash(*operation)) {
  ------------------
  |  Branch (953:4): [True: 0, False: 0]
  ------------------
  954|      0|			const char *name = (const char *)
  955|      0|				vips_argument_map(VIPS_OBJECT(*operation),
  ------------------
  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  956|      0|					vips_object_equal_arg, operation_before, NULL);
  957|      0|			VipsObject *object = VIPS_OBJECT(*operation);
  ------------------
  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  958|      0|			VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|      0|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|      0|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|      0|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  959|       |
  960|      0|			char txt[256];
  961|      0|			VipsBuf buf = VIPS_BUF_STATIC(txt);
  ------------------
  |  |   60|      0|	{ \
  |  |   61|      0|		&TEXT[0], sizeof(TEXT), 0, FALSE, 0, FALSE \
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  |  |               		&TEXT[0], sizeof(TEXT), 0, FALSE, 0, FALSE \
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  |  |   62|      0|	}
  ------------------
  962|       |
  963|      0|			VIPS_UNREF(operation_before);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  964|       |
  965|      0|			vips_object_summary_class(class, &buf);
  966|      0|			vips_buf_appends(&buf, ", ");
  967|      0|			vips_object_summary(object, &buf);
  968|      0|			vips_buf_appends(&buf, ", ");
  969|      0|			vips_error(class->nickname, "arg \"%s\" changed during build, %s",
  970|      0|				name, vips_buf_all(&buf));
  971|       |
  972|      0|			return -1;
  973|      0|		}
  974|       |
  975|   159k|		VIPS_UNREF(operation_before);
  ------------------
  |  |   57|   159k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|   159k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   159k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   159k|	{ \
  |  |  |  |   43|   159k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 159k]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|   159k|	} \
  |  |  |  |   48|   159k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   159k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  976|       |
  977|       |		/* Retrieve the flags again, as vips_foreign_load_build() may
  978|       |		 * set load->nocache.
  979|       |		 */
  980|   159k|		flags = vips_operation_get_flags(*operation);
  981|       |
  982|   159k|		g_mutex_lock(&vips_cache_lock);
  983|       |
  984|       |		/* If two threads build the same operation at the same time,
  985|       |		 * we can get multiple adds. Let the first one win. See
  986|       |		 * https://github.com/libvips/libvips/pull/181
  987|       |		 */
  988|   159k|		if (!vips_cache_operation_get(*operation)) {
  ------------------
  |  Branch (988:7): [True: 159k, False: 0]
  ------------------
  989|       |			/* Has to be after _build() so we can see output args.
  990|       |			 */
  991|   159k|			if (vips__cache_trace) {
  ------------------
  |  Branch (991:8): [True: 0, False: 159k]
  ------------------
  992|      0|				if (flags & VIPS_OPERATION_NOCACHE)
  ------------------
  |  Branch (992:9): [True: 0, False: 0]
  ------------------
  993|      0|					printf("vips cache : ");
  994|      0|				else
  995|      0|					printf("vips cache+: ");
  996|      0|				vips_object_print_summary(VIPS_OBJECT(*operation));
  ------------------
  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  997|      0|			}
  998|       |
  999|   159k|			if (!(flags & VIPS_OPERATION_NOCACHE))
  ------------------
  |  Branch (999:8): [True: 120k, False: 38.9k]
  ------------------
 1000|   120k|				vips_cache_insert(*operation);
 1001|   159k|		}
 1002|       |
 1003|   159k|		g_mutex_unlock(&vips_cache_lock);
 1004|   159k|	}
 1005|       |
 1006|   160k|	vips_cache_trim();
 1007|       |
 1008|   160k|	return 0;
 1009|   180k|}
cache.c:vips_object_hash_arg:
  318|  3.56M|{
  319|  3.56M|	unsigned int *hash = (unsigned int *) a;
  320|       |
  321|  3.56M|	if ((argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) &&
  ------------------
  |  Branch (321:6): [True: 2.88M, False: 683k]
  ------------------
  322|  3.56M|		(argument_class->flags & VIPS_ARGUMENT_INPUT) &&
  ------------------
  |  Branch (322:3): [True: 2.51M, False: 364k]
  ------------------
  323|  3.56M|		!(argument_class->flags & VIPS_ARGUMENT_NON_HASHABLE) &&
  ------------------
  |  Branch (323:3): [True: 2.46M, False: 52.8k]
  ------------------
  324|  3.56M|		argument_instance->assigned) {
  ------------------
  |  Branch (324:3): [True: 612k, False: 1.85M]
  ------------------
  325|   612k|		const char *name = g_param_spec_get_name(pspec);
  326|   612k|		GType type = G_PARAM_SPEC_VALUE_TYPE(pspec);
  ------------------
  |  |  103|   612k|#define	G_PARAM_SPEC_VALUE_TYPE(pspec)	(G_PARAM_SPEC (pspec)->value_type)
  |  |  ------------------
  |  |  |  |   45|   612k|#define G_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|   612k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|   612k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  327|   612k|		GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|   612k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
  328|       |
  329|   612k|		g_value_init(&value, type);
  330|   612k|		g_object_get_property(G_OBJECT(object), name, &value);
  ------------------
  |  |   51|   612k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   612k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   612k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  331|   612k|		*hash = (*hash << 1) ^ vips_value_hash(pspec, &value);
  332|   612k|		g_value_unset(&value);
  333|   612k|	}
  334|       |
  335|  3.56M|	return NULL;
  336|  3.56M|}
cache.c:vips_value_hash:
  135|   612k|{
  136|   612k|	GType generic = G_PARAM_SPEC_TYPE(pspec);
  ------------------
  |  |   89|   612k|#define G_PARAM_SPEC_TYPE(pspec)	(G_TYPE_FROM_INSTANCE (pspec))
  |  |  ------------------
  |  |  |  |  602|   612k|#define G_TYPE_FROM_INSTANCE(instance)                          (G_TYPE_FROM_CLASS (((GTypeInstance*) (instance))->g_class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|   612k|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|       |
  138|       |	/* Not compile-time constants, so we have to use a set of if()s. Could
  139|       |	 * make a table at run time I guess.
  140|       |	 */
  141|       |
  142|   612k|	if (generic == G_TYPE_PARAM_BOOLEAN)
  ------------------
  |  |   85|   612k|#define	G_TYPE_PARAM_BOOLEAN		   (g_param_spec_types[2])
  ------------------
  |  Branch (142:6): [True: 5.58k, False: 606k]
  ------------------
  143|  5.58k|		return (unsigned int) g_value_get_boolean(value);
  144|   606k|	else if (generic == G_TYPE_PARAM_CHAR)
  ------------------
  |  |   39|   606k|#define	G_TYPE_PARAM_CHAR		   (g_param_spec_types[0])
  ------------------
  |  Branch (144:11): [True: 0, False: 606k]
  ------------------
  145|      0|		return (unsigned int) g_value_get_schar(value);
  146|   606k|	else if (generic == G_TYPE_PARAM_UCHAR)
  ------------------
  |  |   62|   606k|#define	G_TYPE_PARAM_UCHAR		   (g_param_spec_types[1])
  ------------------
  |  Branch (146:11): [True: 0, False: 606k]
  ------------------
  147|      0|		return (unsigned int) g_value_get_uchar(value);
  148|   606k|	else if (generic == G_TYPE_PARAM_INT)
  ------------------
  |  |  108|   606k|#define	G_TYPE_PARAM_INT		   (g_param_spec_types[3])
  ------------------
  |  Branch (148:11): [True: 94.8k, False: 511k]
  ------------------
  149|  94.8k|		return (unsigned int) g_value_get_int(value);
  150|   511k|	else if (generic == G_TYPE_PARAM_UINT)
  ------------------
  |  |  131|   511k|#define	G_TYPE_PARAM_UINT		   (g_param_spec_types[4])
  ------------------
  |  Branch (150:11): [True: 0, False: 511k]
  ------------------
  151|      0|		return (unsigned int) g_value_get_uint(value);
  152|   511k|	else if (generic == G_TYPE_PARAM_LONG)
  ------------------
  |  |  154|   511k|#define	G_TYPE_PARAM_LONG		   (g_param_spec_types[5])
  ------------------
  |  Branch (152:11): [True: 0, False: 511k]
  ------------------
  153|      0|		return (unsigned int) g_value_get_long(value);
  154|   511k|	else if (generic == G_TYPE_PARAM_ULONG)
  ------------------
  |  |  177|   511k|#define	G_TYPE_PARAM_ULONG		   (g_param_spec_types[6])
  ------------------
  |  Branch (154:11): [True: 0, False: 511k]
  ------------------
  155|      0|		return (unsigned int) g_value_get_ulong(value);
  156|   511k|	else if (generic == G_TYPE_PARAM_ENUM)
  ------------------
  |  |  269|   511k|#define	G_TYPE_PARAM_ENUM		   (g_param_spec_types[10])
  ------------------
  |  Branch (156:11): [True: 138k, False: 373k]
  ------------------
  157|   138k|		return (unsigned int) g_value_get_enum(value);
  158|   373k|	else if (generic == G_TYPE_PARAM_FLAGS)
  ------------------
  |  |  292|   373k|#define	G_TYPE_PARAM_FLAGS		   (g_param_spec_types[11])
  ------------------
  |  Branch (158:11): [True: 0, False: 373k]
  ------------------
  159|      0|		return (unsigned int) g_value_get_flags(value);
  160|   373k|	else if (generic == G_TYPE_PARAM_UINT64) {
  ------------------
  |  |  223|   373k|#define	G_TYPE_PARAM_UINT64		   (g_param_spec_types[8])
  ------------------
  |  Branch (160:11): [True: 0, False: 373k]
  ------------------
  161|      0|		guint64 i = g_value_get_uint64(value);
  162|       |
  163|      0|		return g_int64_hash((gint64 *) &i);
  164|      0|	}
  165|   373k|	else if (generic == G_TYPE_PARAM_INT64) {
  ------------------
  |  |  200|   373k|#define	G_TYPE_PARAM_INT64		   (g_param_spec_types[7])
  ------------------
  |  Branch (165:11): [True: 0, False: 373k]
  ------------------
  166|      0|		gint64 i = g_value_get_int64(value);
  167|       |
  168|      0|		return g_int64_hash(&i);
  169|      0|	}
  170|   373k|	else if (generic == G_TYPE_PARAM_FLOAT) {
  ------------------
  |  |  315|   373k|#define	G_TYPE_PARAM_FLOAT		   (g_param_spec_types[12])
  ------------------
  |  Branch (170:11): [True: 0, False: 373k]
  ------------------
  171|      0|		float f = g_value_get_float(value);
  172|       |
  173|      0|		return g_direct_hash((void *) &f);
  174|      0|	}
  175|   373k|	else if (generic == G_TYPE_PARAM_DOUBLE) {
  ------------------
  |  |  338|   373k|#define	G_TYPE_PARAM_DOUBLE		   (g_param_spec_types[13])
  ------------------
  |  Branch (175:11): [True: 0, False: 373k]
  ------------------
  176|      0|		double d = g_value_get_double(value);
  177|       |
  178|      0|		return g_double_hash(&d);
  179|      0|	}
  180|   373k|	else if (generic == G_TYPE_PARAM_STRING) {
  ------------------
  |  |  361|   373k|#define	G_TYPE_PARAM_STRING		   (g_param_spec_types[14])
  ------------------
  |  Branch (180:11): [True: 3.63k, False: 369k]
  ------------------
  181|  3.63k|		const char *s = g_value_get_string(value);
  182|       |
  183|  3.63k|		return s ? g_str_hash(s) : 0;
  ------------------
  |  Branch (183:10): [True: 3.63k, False: 0]
  ------------------
  184|  3.63k|	}
  185|   369k|	else if (generic == G_TYPE_PARAM_BOXED) {
  ------------------
  |  |  407|   369k|#define	G_TYPE_PARAM_BOXED		   (g_param_spec_types[16])
  ------------------
  |  Branch (185:11): [True: 54.9k, False: 314k]
  ------------------
  186|  54.9k|		void *p = g_value_get_boxed(value);
  187|       |
  188|  54.9k|		return p ? g_direct_hash(p) : 0;
  ------------------
  |  Branch (188:10): [True: 54.9k, False: 0]
  ------------------
  189|  54.9k|	}
  190|   314k|	else if (generic == G_TYPE_PARAM_POINTER) {
  ------------------
  |  |  430|   314k|#define	G_TYPE_PARAM_POINTER		   (g_param_spec_types[17])
  ------------------
  |  Branch (190:11): [True: 0, False: 314k]
  ------------------
  191|      0|		void *p = g_value_get_pointer(value);
  192|       |
  193|      0|		return p ? g_direct_hash(p) : 0;
  ------------------
  |  Branch (193:10): [True: 0, False: 0]
  ------------------
  194|      0|	}
  195|   314k|	else if (generic == G_TYPE_PARAM_OBJECT) {
  ------------------
  |  |  482|   314k|#define	G_TYPE_PARAM_OBJECT		   (g_param_spec_types[19])
  ------------------
  |  Branch (195:11): [True: 314k, False: 0]
  ------------------
  196|   314k|		void *p = g_value_get_object(value);
  197|       |
  198|   314k|		return p ? g_direct_hash(p) : 0;
  ------------------
  |  Branch (198:10): [True: 314k, False: 0]
  ------------------
  199|   314k|	}
  200|      0|	else {
  201|       |		/* Fallback: convert to a string and hash that.
  202|       |		 * This is very slow, print a warning if we use it
  203|       |		 * so we can add another case.
  204|       |		 */
  205|      0|		char *s;
  206|      0|		unsigned int hash;
  207|       |
  208|      0|		s = g_strdup_value_contents(value);
  209|      0|		hash = g_str_hash(s);
  210|       |
  211|      0|		printf("vips_value_hash: no case for %s\n", s);
  212|      0|		printf("\ttype %d, %s\n",
  213|      0|			(int) G_VALUE_TYPE(value),
  ------------------
  |  |   59|      0|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
  214|      0|			g_type_name(G_VALUE_TYPE(value)));
  ------------------
  |  |   59|      0|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
  215|      0|		printf("\tgeneric %d, %s\n",
  216|      0|			(int) G_VALUE_TYPE(generic),
  ------------------
  |  |   59|      0|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
  217|      0|			g_type_name(generic));
  218|       |
  219|      0|		g_free(s);
  220|       |
  221|      0|		return hash;
  222|      0|	}
  223|   612k|}
cache.c:vips_operation_equal:
  422|   497k|{
  423|   497k|	if (a == b)
  ------------------
  |  Branch (423:6): [True: 492k, False: 4.61k]
  ------------------
  424|   492k|		return TRUE;
  ------------------
  |  |  798|   492k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   492k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  425|       |
  426|  4.61k|	if (G_OBJECT_TYPE(a) == G_OBJECT_TYPE(b) &&
  ------------------
  |  |   95|  4.61k|#define G_OBJECT_TYPE(object)       (G_TYPE_FROM_INSTANCE (object))
  |  |  ------------------
  |  |  |  |  602|  4.61k|#define G_TYPE_FROM_INSTANCE(instance)                          (G_TYPE_FROM_CLASS (((GTypeInstance*) (instance))->g_class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|  4.61k|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              	if (G_OBJECT_TYPE(a) == G_OBJECT_TYPE(b) &&
  ------------------
  |  |   95|  9.23k|#define G_OBJECT_TYPE(object)       (G_TYPE_FROM_INSTANCE (object))
  |  |  ------------------
  |  |  |  |  602|  4.61k|#define G_TYPE_FROM_INSTANCE(instance)                          (G_TYPE_FROM_CLASS (((GTypeInstance*) (instance))->g_class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|  4.61k|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (426:6): [True: 4.57k, False: 49]
  ------------------
  427|  4.61k|		vips_operation_hash(a) == vips_operation_hash(b) &&
  ------------------
  |  Branch (427:3): [True: 4.57k, False: 0]
  ------------------
  428|  4.61k|		!vips_argument_map(VIPS_OBJECT(a), vips_object_equal_arg, b, NULL))
  ------------------
  |  |  433|  4.57k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  4.57k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  4.57k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (428:3): [True: 670, False: 3.90k]
  ------------------
  429|    670|		return TRUE;
  ------------------
  |  |  798|    670|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    670|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  430|       |
  431|  3.94k|	return FALSE;
  ------------------
  |  |  794|  3.94k|#define	FALSE	(0)
  ------------------
  432|  4.61k|}
cache.c:vips_cache_remove:
  585|   120k|{
  586|   120k|	VipsOperationCacheEntry *entry = vips_cache_operation_get(operation);
  587|       |
  588|       |#ifdef DEBUG
  589|       |	printf("vips_cache_remove: ");
  590|       |	vips_object_print_summary(VIPS_OBJECT(operation));
  591|       |#endif /*DEBUG*/
  592|       |
  593|   120k|	g_assert(entry);
  ------------------
  |  |  166|   120k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   120k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   120k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  594|       |
  595|   120k|	if (entry->invalidate_id) {
  ------------------
  |  Branch (595:6): [True: 120k, False: 0]
  ------------------
  596|   120k|		g_signal_handler_disconnect(operation, entry->invalidate_id);
  597|   120k|		entry->invalidate_id = 0;
  598|   120k|	}
  599|       |
  600|   120k|	g_hash_table_remove(vips_cache_table, operation);
  601|   120k|	vips_cache_unref(operation);
  602|       |
  603|   120k|	g_free(entry);
  604|   120k|}
cache.c:vips_cache_unref:
  564|   120k|{
  565|       |#ifdef DEBUG
  566|       |	printf("vips_cache_unref: ");
  567|       |	vips_object_print_summary(VIPS_OBJECT(operation));
  568|       |#endif /*DEBUG*/
  569|       |
  570|   120k|	(void) vips_argument_map(VIPS_OBJECT(operation),
  ------------------
  |  |  433|   120k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   120k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   120k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  571|   120k|		vips_object_unref_arg, operation, NULL);
  572|   120k|	g_object_unref(operation);
  573|   120k|}
cache.c:vips_object_unref_arg:
  535|   996k|{
  536|   996k|	if ((argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) &&
  ------------------
  |  Branch (536:6): [True: 755k, False: 241k]
  ------------------
  537|   996k|		(argument_class->flags & VIPS_ARGUMENT_OUTPUT) &&
  ------------------
  |  Branch (537:3): [True: 143k, False: 612k]
  ------------------
  538|   996k|		argument_instance->assigned &&
  ------------------
  |  Branch (538:3): [True: 143k, False: 0]
  ------------------
  539|   996k|		G_IS_PARAM_SPEC_OBJECT(pspec)) {
  ------------------
  |  |  491|   143k|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|   143k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   143k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   143k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   143k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   143k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 143k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   143k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   143k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 143k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 120k, False: 23.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   143k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   120k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   120k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   143k|  else \
  |  |  |  |  |  | 2321|   143k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   143k|  __r; \
  |  |  |  |  |  | 2323|   143k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 120k, False: 23.0k]
  |  |  ------------------
  ------------------
  540|   120k|		GObject *value;
  541|       |
  542|       |		/* This will up the ref count for us.
  543|       |		 */
  544|   120k|		g_object_get(G_OBJECT(object),
  ------------------
  |  |   51|   120k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   120k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   120k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  545|   120k|			g_param_spec_get_name(pspec), &value, NULL);
  546|       |
  547|       |		/* This operation is probably going, so we must wipe the operation
  548|       |		 * pointer on the object.
  549|       |		 */
  550|   120k|		g_object_set_data(value, "libvips-operation", NULL);
  551|       |
  552|       |		/* Drop the ref we just got, then drop the ref we make when we
  553|       |		 * added to the cache.
  554|       |		 */
  555|   120k|		g_object_unref(value);
  556|   120k|		g_object_unref(value);
  557|   120k|	}
  558|       |
  559|   996k|	return NULL;
  560|   996k|}
cache.c:vips_cache_operation_get:
  577|   712k|{
  578|   712k|	return g_hash_table_lookup(vips_cache_table, operation);
  579|   712k|}
cache.c:vips_cache_ref:
  703|   121k|{
  704|       |#ifdef DEBUG
  705|       |	printf("vips_cache_ref: ");
  706|       |	vips_object_print_summary(VIPS_OBJECT(operation));
  707|       |#endif /*DEBUG*/
  708|       |
  709|   121k|	g_object_ref(operation);
  710|   121k|	(void) vips_argument_map(VIPS_OBJECT(operation),
  ------------------
  |  |  433|   121k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   121k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   121k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  711|   121k|		vips_object_ref_arg, operation, NULL);
  712|       |
  713|   121k|	vips_operation_touch(operation);
  714|   121k|}
cache.c:vips_object_ref_arg:
  612|  1.00M|{
  613|  1.00M|	VipsOperation *operation = VIPS_OPERATION(a);
  ------------------
  |  |   57|  1.00M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  1.00M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.00M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|  1.00M|		VIPS_TYPE_OPERATION, VipsOperation))
  ------------------
  614|       |
  615|  1.00M|	if ((argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) &&
  ------------------
  |  Branch (615:6): [True: 757k, False: 242k]
  ------------------
  616|  1.00M|		(argument_class->flags & VIPS_ARGUMENT_OUTPUT) &&
  ------------------
  |  Branch (616:3): [True: 144k, False: 613k]
  ------------------
  617|  1.00M|		argument_instance->assigned &&
  ------------------
  |  Branch (617:3): [True: 144k, False: 0]
  ------------------
  618|  1.00M|		G_IS_PARAM_SPEC_OBJECT(pspec)) {
  ------------------
  |  |  491|   144k|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|   144k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   144k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   144k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   144k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   144k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 144k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   144k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   144k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 144k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 120k, False: 23.7k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   144k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   120k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   120k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   144k|  else \
  |  |  |  |  |  | 2321|   144k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   144k|  __r; \
  |  |  |  |  |  | 2323|   144k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 120k, False: 23.7k]
  |  |  ------------------
  ------------------
  619|   120k|		GObject *value;
  620|       |
  621|       |		/* This will up the ref count for us.
  622|       |		 */
  623|   120k|		g_object_get(G_OBJECT(object),
  ------------------
  |  |   51|   120k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   120k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   120k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  624|   120k|			g_param_spec_get_name(pspec), &value, NULL);
  625|       |
  626|       |		/* This object has been made by this operation.
  627|       |		 */
  628|   120k|		g_object_set_data(value, "libvips-operation", operation);
  629|   120k|	}
  630|       |
  631|  1.00M|	return NULL;
  632|  1.00M|}
cache.c:vips_operation_touch:
  685|   121k|{
  686|   121k|	vips_cache_time += 1;
  687|       |
  688|       |	/* Touch the operations on the upstream trees on all input images.
  689|       |	 */
  690|   121k|	(void) vips_argument_map(VIPS_OBJECT(operation),
  ------------------
  |  |  433|   121k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   121k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   121k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  691|   121k|		vips_object_touch_arg, NULL, NULL);
  692|       |
  693|       |	/* And this operation.
  694|       |	 */
  695|   121k|	vips_operation_touch_operation(operation);
  696|   121k|}
cache.c:vips_object_touch_arg:
  664|  1.00M|{
  665|  1.00M|	if ((argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) &&
  ------------------
  |  Branch (665:6): [True: 757k, False: 242k]
  ------------------
  666|  1.00M|		(argument_class->flags & VIPS_ARGUMENT_INPUT) &&
  ------------------
  |  Branch (666:3): [True: 613k, False: 144k]
  ------------------
  667|  1.00M|		argument_instance->assigned &&
  ------------------
  |  Branch (667:3): [True: 241k, False: 371k]
  ------------------
  668|  1.00M|		g_type_is_a(G_PARAM_SPEC_VALUE_TYPE(pspec), VIPS_TYPE_IMAGE)) {
  ------------------
  |  |  103|   241k|#define	G_PARAM_SPEC_VALUE_TYPE(pspec)	(G_PARAM_SPEC (pspec)->value_type)
  |  |  ------------------
  |  |  |  |   45|   241k|#define G_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|   241k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|   241k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		g_type_is_a(G_PARAM_SPEC_VALUE_TYPE(pspec), VIPS_TYPE_IMAGE)) {
  ------------------
  |  |  169|   241k|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  ------------------
  |  Branch (668:3): [True: 96.5k, False: 144k]
  ------------------
  669|  96.5k|		VipsImage *image;
  670|       |
  671|  96.5k|		g_object_get(G_OBJECT(object),
  ------------------
  |  |   51|  96.5k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  96.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  96.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  672|  96.5k|			g_param_spec_get_name(pspec), &image, NULL);
  673|       |
  674|  96.5k|		(void) vips__link_map(image, TRUE,
  ------------------
  |  |  798|  96.5k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  96.5k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  675|  96.5k|			(VipsSListMap2Fn) vips_image_touch_cb, NULL, NULL);
  676|       |
  677|  96.5k|		VIPS_UNREF(image);
  ------------------
  |  |   57|  96.5k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  96.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  96.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  96.5k|	{ \
  |  |  |  |   43|  96.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 96.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  96.5k|			(void) F((S)); \
  |  |  |  |   45|  96.5k|			(S) = 0; \
  |  |  |  |   46|  96.5k|		} \
  |  |  |  |   47|  96.5k|	} \
  |  |  |  |   48|  96.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  96.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  678|  96.5k|	}
  679|       |
  680|  1.00M|	return NULL;
  681|  1.00M|}
cache.c:vips_image_touch_cb:
  648|   215k|{
  649|   215k|	VipsOperation *operation =
  650|   215k|		VIPS_OPERATION(g_object_get_data(G_OBJECT(image), "libvips-operation"));
  ------------------
  |  |   57|   215k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   215k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   215k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|   215k|		VIPS_TYPE_OPERATION, VipsOperation))
  ------------------
  651|       |
  652|   215k|	if (operation)
  ------------------
  |  Branch (652:6): [True: 130k, False: 85.6k]
  ------------------
  653|   130k|		vips_operation_touch_operation(operation);
  654|       |
  655|   215k|	return NULL;
  656|   215k|}
cache.c:vips_operation_touch_operation:
  636|   251k|{
  637|   251k|	VipsOperationCacheEntry *entry = vips_cache_operation_get(operation);
  638|       |
  639|       |	/* Don't up the time for invalid items -- we want them to fall out of
  640|       |	 * cache.
  641|       |	 */
  642|   251k|	if (!entry->invalid)
  ------------------
  |  Branch (642:6): [True: 251k, False: 0]
  ------------------
  643|   251k|		entry->time = vips_cache_time;
  644|   251k|}
cache.c:vips_object_equal_arg:
  376|  22.1k|{
  377|  22.1k|	VipsObject *other = (VipsObject *) a;
  378|       |
  379|  22.1k|	const char *name = g_param_spec_get_name(pspec);
  380|  22.1k|	GType type = G_PARAM_SPEC_VALUE_TYPE(pspec);
  ------------------
  |  |  103|  22.1k|#define	G_PARAM_SPEC_VALUE_TYPE(pspec)	(G_PARAM_SPEC (pspec)->value_type)
  |  |  ------------------
  |  |  |  |   45|  22.1k|#define G_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|  22.1k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|  22.1k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  381|  22.1k|	GValue v1 = G_VALUE_INIT;
  ------------------
  |  |  191|  22.1k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
  382|  22.1k|	GValue v2 = G_VALUE_INIT;
  ------------------
  |  |  191|  22.1k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
  383|       |
  384|  22.1k|	gboolean equal;
  385|       |
  386|       |	/* Only test assigned input constructor args. Avoid the nohash args as
  387|       |	 * well.
  388|       |	 */
  389|  22.1k|	if (!(argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) ||
  ------------------
  |  Branch (389:6): [True: 9.14k, False: 13.0k]
  ------------------
  390|  22.1k|		!(argument_class->flags & VIPS_ARGUMENT_INPUT) ||
  ------------------
  |  Branch (390:3): [True: 4.57k, False: 8.47k]
  ------------------
  391|  22.1k|		(argument_class->flags & VIPS_ARGUMENT_NON_HASHABLE) ||
  ------------------
  |  Branch (391:3): [True: 0, False: 8.47k]
  ------------------
  392|  22.1k|		!argument_instance->assigned)
  ------------------
  |  Branch (392:3): [True: 0, False: 8.47k]
  ------------------
  393|  13.7k|		return NULL;
  394|       |
  395|       |	/* If this is an optional arg, we need to check that this was
  396|       |	 * assigned on @other as well.
  397|       |	 */
  398|  8.47k|	if (!(argument_class->flags & VIPS_ARGUMENT_REQUIRED) &&
  ------------------
  |  Branch (398:6): [True: 0, False: 8.47k]
  ------------------
  399|  8.47k|		!vips_object_argument_isset(other, name))
  ------------------
  |  Branch (399:3): [True: 0, False: 0]
  ------------------
  400|       |		/* Optional and was not set on other ... we've found a
  401|       |		 * difference!
  402|       |		 */
  403|      0|		return (void *) name;
  404|       |
  405|  8.47k|	g_value_init(&v1, type);
  406|  8.47k|	g_value_init(&v2, type);
  407|  8.47k|	g_object_get_property(G_OBJECT(object), name, &v1);
  ------------------
  |  |   51|  8.47k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  8.47k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  8.47k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|  8.47k|	g_object_get_property(G_OBJECT(other), name, &v2);
  ------------------
  |  |   51|  8.47k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  8.47k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  8.47k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  409|  8.47k|	equal = vips_value_equal(pspec, &v1, &v2);
  410|  8.47k|	g_value_unset(&v1);
  411|  8.47k|	g_value_unset(&v2);
  412|       |
  413|       |	/* Stop (return non-NULL) if we've found a difference.
  414|       |	 */
  415|  8.47k|	return !equal ? (void *) name : NULL;
  ------------------
  |  Branch (415:9): [True: 3.90k, False: 4.57k]
  ------------------
  416|  8.47k|}
cache.c:vips_value_equal:
  231|  8.47k|{
  232|  8.47k|	GType generic = G_PARAM_SPEC_TYPE(pspec);
  ------------------
  |  |   89|  8.47k|#define G_PARAM_SPEC_TYPE(pspec)	(G_TYPE_FROM_INSTANCE (pspec))
  |  |  ------------------
  |  |  |  |  602|  8.47k|#define G_TYPE_FROM_INSTANCE(instance)                          (G_TYPE_FROM_CLASS (((GTypeInstance*) (instance))->g_class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|  8.47k|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|  8.47k|	GType t1 = G_VALUE_TYPE(v1);
  ------------------
  |  |   59|  8.47k|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
  234|  8.47k|	GType t2 = G_VALUE_TYPE(v2);
  ------------------
  |  |   59|  8.47k|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
  235|       |
  236|  8.47k|	if (t1 != t2)
  ------------------
  |  Branch (236:6): [True: 0, False: 8.47k]
  ------------------
  237|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  238|       |
  239|       |	/* Not compile-time constants, so we have to use a set of if()s. Could
  240|       |	 * make a table at run time I guess.
  241|       |	 */
  242|       |
  243|  8.47k|	if (generic == G_TYPE_PARAM_BOOLEAN)
  ------------------
  |  |   85|  8.47k|#define	G_TYPE_PARAM_BOOLEAN		   (g_param_spec_types[2])
  ------------------
  |  Branch (243:6): [True: 0, False: 8.47k]
  ------------------
  244|      0|		return g_value_get_boolean(v1) == g_value_get_boolean(v2);
  245|  8.47k|	else if (generic == G_TYPE_PARAM_CHAR)
  ------------------
  |  |   39|  8.47k|#define	G_TYPE_PARAM_CHAR		   (g_param_spec_types[0])
  ------------------
  |  Branch (245:11): [True: 0, False: 8.47k]
  ------------------
  246|      0|		return g_value_get_schar(v1) == g_value_get_schar(v2);
  247|  8.47k|	if (generic == G_TYPE_PARAM_UCHAR)
  ------------------
  |  |   62|  8.47k|#define	G_TYPE_PARAM_UCHAR		   (g_param_spec_types[1])
  ------------------
  |  Branch (247:6): [True: 0, False: 8.47k]
  ------------------
  248|      0|		return g_value_get_uchar(v1) == g_value_get_uchar(v2);
  249|  8.47k|	if (generic == G_TYPE_PARAM_INT)
  ------------------
  |  |  108|  8.47k|#define	G_TYPE_PARAM_INT		   (g_param_spec_types[3])
  ------------------
  |  Branch (249:6): [True: 3.90k, False: 4.57k]
  ------------------
  250|  3.90k|		return g_value_get_int(v1) == g_value_get_int(v2);
  251|  4.57k|	if (generic == G_TYPE_PARAM_UINT)
  ------------------
  |  |  131|  4.57k|#define	G_TYPE_PARAM_UINT		   (g_param_spec_types[4])
  ------------------
  |  Branch (251:6): [True: 0, False: 4.57k]
  ------------------
  252|      0|		return g_value_get_uint(v1) == g_value_get_uint(v2);
  253|  4.57k|	if (generic == G_TYPE_PARAM_LONG)
  ------------------
  |  |  154|  4.57k|#define	G_TYPE_PARAM_LONG		   (g_param_spec_types[5])
  ------------------
  |  Branch (253:6): [True: 0, False: 4.57k]
  ------------------
  254|      0|		return g_value_get_long(v1) == g_value_get_long(v2);
  255|  4.57k|	if (generic == G_TYPE_PARAM_ULONG)
  ------------------
  |  |  177|  4.57k|#define	G_TYPE_PARAM_ULONG		   (g_param_spec_types[6])
  ------------------
  |  Branch (255:6): [True: 0, False: 4.57k]
  ------------------
  256|      0|		return g_value_get_ulong(v1) == g_value_get_ulong(v2);
  257|  4.57k|	if (generic == G_TYPE_PARAM_ENUM)
  ------------------
  |  |  269|  4.57k|#define	G_TYPE_PARAM_ENUM		   (g_param_spec_types[10])
  ------------------
  |  Branch (257:6): [True: 0, False: 4.57k]
  ------------------
  258|      0|		return g_value_get_enum(v1) == g_value_get_enum(v2);
  259|  4.57k|	if (generic == G_TYPE_PARAM_FLAGS)
  ------------------
  |  |  292|  4.57k|#define	G_TYPE_PARAM_FLAGS		   (g_param_spec_types[11])
  ------------------
  |  Branch (259:6): [True: 0, False: 4.57k]
  ------------------
  260|      0|		return g_value_get_flags(v1) == g_value_get_flags(v2);
  261|  4.57k|	if (generic == G_TYPE_PARAM_UINT64)
  ------------------
  |  |  223|  4.57k|#define	G_TYPE_PARAM_UINT64		   (g_param_spec_types[8])
  ------------------
  |  Branch (261:6): [True: 0, False: 4.57k]
  ------------------
  262|      0|		return g_value_get_uint64(v1) == g_value_get_uint64(v2);
  263|  4.57k|	if (generic == G_TYPE_PARAM_INT64)
  ------------------
  |  |  200|  4.57k|#define	G_TYPE_PARAM_INT64		   (g_param_spec_types[7])
  ------------------
  |  Branch (263:6): [True: 0, False: 4.57k]
  ------------------
  264|      0|		return g_value_get_int64(v1) == g_value_get_int64(v2);
  265|  4.57k|	if (generic == G_TYPE_PARAM_FLOAT)
  ------------------
  |  |  315|  4.57k|#define	G_TYPE_PARAM_FLOAT		   (g_param_spec_types[12])
  ------------------
  |  Branch (265:6): [True: 0, False: 4.57k]
  ------------------
  266|      0|		return g_value_get_float(v1) == g_value_get_float(v2);
  267|  4.57k|	if (generic == G_TYPE_PARAM_DOUBLE)
  ------------------
  |  |  338|  4.57k|#define	G_TYPE_PARAM_DOUBLE		   (g_param_spec_types[13])
  ------------------
  |  Branch (267:6): [True: 0, False: 4.57k]
  ------------------
  268|      0|		return g_value_get_double(v1) == g_value_get_double(v2);
  269|  4.57k|	if (generic == G_TYPE_PARAM_STRING) {
  ------------------
  |  |  361|  4.57k|#define	G_TYPE_PARAM_STRING		   (g_param_spec_types[14])
  ------------------
  |  Branch (269:6): [True: 670, False: 3.90k]
  ------------------
  270|    670|		const char *s1 = g_value_get_string(v1);
  271|    670|		const char *s2 = g_value_get_string(v2);
  272|       |
  273|    670|		if (s1 == s2)
  ------------------
  |  Branch (273:7): [True: 0, False: 670]
  ------------------
  274|      0|			return TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  275|    670|		else
  276|    670|			return s1 && s2 && strcmp(s1, s2) == 0;
  ------------------
  |  Branch (276:11): [True: 670, False: 0]
  |  Branch (276:17): [True: 670, False: 0]
  |  Branch (276:23): [True: 670, False: 0]
  ------------------
  277|    670|	}
  278|  3.90k|	if (generic == G_TYPE_PARAM_BOXED)
  ------------------
  |  |  407|  3.90k|#define	G_TYPE_PARAM_BOXED		   (g_param_spec_types[16])
  ------------------
  |  Branch (278:6): [True: 0, False: 3.90k]
  ------------------
  279|      0|		return g_value_get_boxed(v1) == g_value_get_boxed(v2);
  280|  3.90k|	if (generic == G_TYPE_PARAM_POINTER)
  ------------------
  |  |  430|  3.90k|#define	G_TYPE_PARAM_POINTER		   (g_param_spec_types[17])
  ------------------
  |  Branch (280:6): [True: 0, False: 3.90k]
  ------------------
  281|      0|		return g_value_get_pointer(v1) == g_value_get_pointer(v2);
  282|  3.90k|	if (generic == G_TYPE_PARAM_OBJECT)
  ------------------
  |  |  482|  3.90k|#define	G_TYPE_PARAM_OBJECT		   (g_param_spec_types[19])
  ------------------
  |  Branch (282:6): [True: 3.90k, False: 0]
  ------------------
  283|  3.90k|		return g_value_get_object(v1) == g_value_get_object(v2);
  284|      0|	else {
  285|       |		/* Fallback: convert to a string and compare that.
  286|       |		 * This is very slow, print a warning if we use it
  287|       |		 * so we can add another case.
  288|       |		 */
  289|      0|		char *s1;
  290|      0|		char *s2;
  291|      0|		gboolean equal;
  292|       |
  293|      0|		s1 = g_strdup_value_contents(v1);
  294|      0|		s2 = g_strdup_value_contents(v2);
  295|      0|		equal = strcmp(s1, s2) == 0;
  296|       |
  297|      0|		printf("vips_value_equal: no case for %s, %s\n",
  298|      0|			s1, s2);
  299|      0|		printf("\tt1 %d, %s\n", (int) t1, g_type_name(t1));
  300|      0|		printf("\tt2 %d, %s\n", (int) t2, g_type_name(t2));
  301|      0|		printf("\tgeneric %d, %s\n",
  302|      0|			(int) G_VALUE_TYPE(generic),
  ------------------
  |  |   59|      0|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
  303|      0|			g_type_name(generic));
  304|       |
  305|      0|		g_free(s1);
  306|      0|		g_free(s2);
  307|       |
  308|      0|		return equal;
  309|      0|	}
  310|  3.90k|}
cache.c:vips_cache_insert:
  730|   120k|{
  731|   120k|	VipsOperationCacheEntry *entry = g_new(VipsOperationCacheEntry, 1);
  ------------------
  |  |  282|   120k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|   120k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|   120k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|   120k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|   120k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|   120k|	  gpointer __p;						\
  |  |  |  |  231|   120k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 120k]
  |  |  |  |  ------------------
  |  |  |  |  232|   120k|	    __p = g_##func (__n);				\
  |  |  |  |  233|   120k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 120k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|   120k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 120k]
  |  |  |  |  |  Branch (234:26): [True: 120k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|   120k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|   120k|	  else							\
  |  |  |  |  237|   120k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|   120k|	  __p;							\
  |  |  |  |  239|   120k|	}))
  |  |  ------------------
  ------------------
  732|       |
  733|       |#ifdef VIPS_DEBUG
  734|       |	printf("vips_cache_insert: adding to cache");
  735|       |	vips_object_print_dump(VIPS_OBJECT(operation));
  736|       |#endif /*VIPS_DEBUG*/
  737|       |
  738|   120k|	entry->operation = operation;
  739|   120k|	entry->time = 0;
  740|   120k|	entry->invalidate_id = 0;
  741|   120k|	entry->invalid = FALSE;
  ------------------
  |  |  794|   120k|#define	FALSE	(0)
  ------------------
  742|       |
  743|   120k|	g_hash_table_insert(vips_cache_table, operation, entry);
  744|   120k|	vips_cache_ref(operation);
  745|       |
  746|       |	/* If the operation signals "invalidate", we must tag this cache entry
  747|       |	 * for removal.
  748|       |	 */
  749|   120k|	entry->invalidate_id = g_signal_connect(operation, "invalidate",
  ------------------
  |  |  491|   120k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  750|   120k|		G_CALLBACK(vips_cache_invalidate_cb), entry);
  751|   120k|}
cache.c:vips_cache_invalidate_cb:
  719|  27.2k|{
  720|       |#ifdef DEBUG
  721|       |	printf("vips_cache_invalidate_cb: ");
  722|       |	vips_object_print_summary(VIPS_OBJECT(operation));
  723|       |#endif /*DEBUG*/
  724|       |
  725|  27.2k|	entry->invalid = TRUE;
  ------------------
  |  |  798|  27.2k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  27.2k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  726|  27.2k|}
cache.c:vips_cache_trim:
  840|   160k|{
  841|   160k|	VipsOperation *operation;
  842|       |
  843|   160k|	g_mutex_lock(&vips_cache_lock);
  844|       |
  845|   280k|	while (vips_cache_table &&
  ------------------
  |  Branch (845:9): [True: 280k, False: 0]
  ------------------
  846|   280k|		(g_hash_table_size(vips_cache_table) > vips_cache_max ||
  ------------------
  |  Branch (846:4): [True: 111k, False: 169k]
  ------------------
  847|   280k|			vips_tracked_get_files() > vips_cache_max_files ||
  ------------------
  |  Branch (847:4): [True: 0, False: 169k]
  ------------------
  848|   280k|			vips_tracked_get_mem() > vips_cache_max_mem) &&
  ------------------
  |  Branch (848:4): [True: 9.34k, False: 160k]
  ------------------
  849|   280k|		(operation = vips_cache_get_lru())) {
  ------------------
  |  Branch (849:3): [True: 120k, False: 105]
  ------------------
  850|       |#ifdef DEBUG
  851|       |		printf("vips_cache_trim: trimming ");
  852|       |		vips_object_print_summary(VIPS_OBJECT(operation));
  853|       |#endif /*DEBUG*/
  854|       |
  855|   120k|		vips_cache_remove(operation);
  856|   120k|	}
  857|       |
  858|   160k|	g_mutex_unlock(&vips_cache_lock);
  859|   160k|}
cache.c:vips_cache_get_lru:
  823|   120k|{
  824|   120k|	VipsOperationCacheEntry *entry;
  825|       |
  826|   120k|	entry = NULL;
  827|   120k|	g_hash_table_foreach(vips_cache_table,
  828|   120k|		(GHFunc) vips_cache_get_lru_cb, &entry);
  829|       |
  830|   120k|	if (entry)
  ------------------
  |  Branch (830:6): [True: 120k, False: 105]
  ------------------
  831|   120k|		return entry->operation;
  832|       |
  833|    105|	return NULL;
  834|   120k|}
cache.c:vips_cache_get_lru_cb:
  811|  11.6M|{
  812|  11.6M|	if (!*best ||
  ------------------
  |  Branch (812:6): [True: 120k, False: 11.5M]
  ------------------
  813|  11.6M|		(*best)->time > value->time)
  ------------------
  |  Branch (813:3): [True: 425k, False: 11.1M]
  ------------------
  814|   546k|		*best = value;
  815|  11.6M|}

vips_connection_filename:
  156|  44.6k|{
  157|  44.6k|	return connection->filename;
  158|  44.6k|}
vips_connection_nick:
  169|  2.51M|{
  170|  2.51M|	return connection->filename ? connection->filename
  ------------------
  |  Branch (170:9): [True: 0, False: 2.51M]
  ------------------
  171|  2.51M|								: VIPS_OBJECT(connection)->nickname;
  ------------------
  |  |  433|  2.51M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  2.51M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  2.51M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  172|  2.51M|}
connection.c:vips_connection_class_init:
  118|      1|{
  119|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  120|       |
  121|      1|	gobject_class->finalize = vips_connection_finalize;
  122|      1|	gobject_class->set_property = vips_object_set_property;
  123|      1|	gobject_class->get_property = vips_object_get_property;
  124|       |
  125|      1|	VIPS_ARG_INT(class, "descriptor", 1,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  126|      1|		_("Descriptor"),
  127|      1|		_("File descriptor for read or write"),
  128|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  129|      1|		G_STRUCT_OFFSET(VipsConnection, descriptor),
  130|      1|		-1, 1000000000, 0);
  131|       |
  132|      1|	VIPS_ARG_STRING(class, "filename", 2,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  133|      1|		_("Filename"),
  134|      1|		_("Name of file to open"),
  135|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  136|      1|		G_STRUCT_OFFSET(VipsConnection, filename),
  137|      1|		NULL);
  138|      1|}
connection.c:vips_connection_finalize:
   88|   216k|{
   89|   216k|	VipsConnection *connection = (VipsConnection *) gobject;
   90|       |
   91|       |#ifdef VIPS_DEBUG
   92|       |	VIPS_DEBUG_MSG("vips_connection_finalize: ");
   93|       |	vips_object_print_name(VIPS_OBJECT(gobject));
   94|       |	VIPS_DEBUG_MSG("\n");
   95|       |#endif /*VIPS_DEBUG*/
   96|       |
   97|   216k|	if (connection->tracked_descriptor >= 0) {
  ------------------
  |  Branch (97:6): [True: 0, False: 216k]
  ------------------
   98|      0|		VIPS_DEBUG_MSG("    tracked_close()\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|      0|		vips_tracked_close(connection->tracked_descriptor);
  100|      0|		connection->tracked_descriptor = -1;
  101|      0|		connection->descriptor = -1;
  102|      0|	}
  103|       |
  104|   216k|	if (connection->close_descriptor >= 0) {
  ------------------
  |  Branch (104:6): [True: 0, False: 216k]
  ------------------
  105|      0|		VIPS_DEBUG_MSG("    close()\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  106|      0|		close(connection->close_descriptor);
  107|      0|		connection->close_descriptor = -1;
  108|      0|		connection->descriptor = -1;
  109|      0|	}
  110|       |
  111|   216k|	VIPS_FREE(connection->filename);
  ------------------
  |  |   50|   216k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   216k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   216k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   216k|	{ \
  |  |  |  |   43|   216k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 216k]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|   216k|	} \
  |  |  |  |   48|   216k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   216k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  112|       |
  113|   216k|	G_OBJECT_CLASS(vips_connection_parent_class)->finalize(gobject);
  ------------------
  |  |   58|   216k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   216k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   216k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  114|   216k|}
connection.c:vips_connection_init:
  142|   216k|{
  143|   216k|	connection->descriptor = -1;
  144|   216k|	connection->tracked_descriptor = -1;
  145|   216k|	connection->close_descriptor = -1;
  146|   216k|}

vips_dbuf_minimum_size:
   73|   861k|{
   74|   861k|	if (size > dbuf->allocated_size) {
  ------------------
  |  Branch (74:6): [True: 570k, False: 290k]
  ------------------
   75|   570k|		const size_t new_allocated_size = 3 * (16 + size) / 2;
   76|       |
   77|   570k|		unsigned char *new_data;
   78|       |
   79|   570k|		if (!(new_data =
  ------------------
  |  Branch (79:7): [True: 0, False: 570k]
  ------------------
   80|   570k|					g_try_realloc(dbuf->data, new_allocated_size))) {
   81|      0|			vips_error("VipsDbuf", "%s", _("out of memory"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   82|      0|			return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
   83|      0|		}
   84|       |
   85|   570k|		dbuf->data = new_data;
   86|   570k|		dbuf->allocated_size = new_allocated_size;
   87|   570k|	}
   88|       |
   89|   861k|	return TRUE;
  ------------------
  |  |  798|   861k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   861k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
   90|   861k|}
vips_dbuf_allocate:
  103|   576k|{
  104|   576k|	return vips_dbuf_minimum_size(dbuf, dbuf->write_point + size);
  105|   576k|}
vips_dbuf_write:
  172|   576k|{
  173|   576k|	if (!vips_dbuf_allocate(dbuf, size))
  ------------------
  |  Branch (173:6): [True: 0, False: 576k]
  ------------------
  174|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  175|       |
  176|   576k|	memcpy(dbuf->data + dbuf->write_point, data, size);
  177|   576k|	dbuf->write_point += size;
  178|   576k|	dbuf->data_size = VIPS_MAX(dbuf->data_size, dbuf->write_point);
  ------------------
  |  |   54|   576k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 576k]
  |  |  ------------------
  ------------------
  179|       |
  180|   576k|	return TRUE;
  ------------------
  |  |  798|   576k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   576k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  181|   576k|}
vips_dbuf_writef:
  195|   576k|{
  196|   576k|	va_list ap;
  197|       |
  198|   576k|	va_start(ap, fmt);
  199|   576k|	char *line = g_strdup_vprintf(fmt, ap);
  200|   576k|	va_end(ap);
  201|       |
  202|   576k|	if (vips_dbuf_write(dbuf, (unsigned char *) line, strlen(line))) {
  ------------------
  |  Branch (202:6): [True: 576k, False: 0]
  ------------------
  203|   576k|		g_free(line);
  204|   576k|		return FALSE;
  ------------------
  |  |  794|   576k|#define	FALSE	(0)
  ------------------
  205|   576k|	}
  206|      0|	g_free(line);
  207|       |
  208|      0|	return TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  209|   576k|}
vips_dbuf_reset:
  277|   285k|{
  278|   285k|	dbuf->write_point = 0;
  279|   285k|	dbuf->data_size = 0;
  280|   285k|}
vips_dbuf_destroy:
  291|   285k|{
  292|   285k|	vips_dbuf_reset(dbuf);
  293|       |
  294|   285k|	VIPS_FREE(dbuf->data);
  ------------------
  |  |   50|   285k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   285k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   285k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   285k|	{ \
  |  |  |  |   43|   285k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 285k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|   285k|			(void) F((S)); \
  |  |  |  |   45|   285k|			(S) = 0; \
  |  |  |  |   46|   285k|		} \
  |  |  |  |   47|   285k|	} \
  |  |  |  |   48|   285k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   285k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  295|   285k|	dbuf->allocated_size = 0;
  296|   285k|}
vips_dbuf_string:
  441|   285k|{
  442|   285k|	vips_dbuf_null_terminate(dbuf);
  443|       |
  444|   285k|	if (size)
  ------------------
  |  Branch (444:6): [True: 0, False: 285k]
  ------------------
  445|      0|		*size = dbuf->data_size;
  446|       |
  447|   285k|	return dbuf->data;
  448|   285k|}
dbuf.c:vips_dbuf_null_terminate:
  387|   285k|{
  388|   285k|	if (!vips_dbuf_minimum_size(dbuf, dbuf->data_size + 1))
  ------------------
  |  Branch (388:6): [True: 0, False: 285k]
  ------------------
  389|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  390|       |
  391|   285k|	dbuf->data[dbuf->data_size] = 0;
  392|       |
  393|   285k|	return TRUE;
  ------------------
  |  |  798|   285k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   285k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  394|   285k|}

vips_error_freeze:
  146|  21.6k|{
  147|  21.6k|	g_mutex_lock(&vips__global_lock);
  148|  21.6k|	g_assert(vips_error_freeze_count >= 0);
  ------------------
  |  |  166|  21.6k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|  21.6k|	vips_error_freeze_count += 1;
  150|  21.6k|	g_mutex_unlock(&vips__global_lock);
  151|  21.6k|}
vips_error_thaw:
  160|  21.6k|{
  161|  21.6k|	g_mutex_lock(&vips__global_lock);
  162|  21.6k|	vips_error_freeze_count -= 1;
  163|  21.6k|	g_assert(vips_error_freeze_count >= 0);
  ------------------
  |  |  166|  21.6k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  164|  21.6k|	g_mutex_unlock(&vips__global_lock);
  165|  21.6k|}
vips_error_buffer:
  179|  10.2k|{
  180|  10.2k|	const char *msg;
  181|       |
  182|  10.2k|	g_mutex_lock(&vips__global_lock);
  183|  10.2k|	msg = vips_buf_all(&vips_error_buf);
  184|  10.2k|	g_mutex_unlock(&vips__global_lock);
  185|       |
  186|  10.2k|	return msg;
  187|  10.2k|}
vips_verror:
  230|  1.62M|{
  231|       |#ifdef VIPS_DEBUG
  232|       |	{
  233|       |		char txt[256];
  234|       |		VipsBuf buf = VIPS_BUF_STATIC(txt);
  235|       |		va_list ap2;
  236|       |
  237|       |		vips_buf_appendf(&buf, "%s: ", domain);
  238|       |		va_copy(ap2, ap);
  239|       |		vips_buf_vappendf(&buf, fmt, ap2);
  240|       |		vips_buf_appends(&buf, "\n");
  241|       |		VIPS_DEBUG_MSG("vips_verror: %s", vips_buf_all(&buf));
  242|       |	}
  243|       |#endif /*VIPS_DEBUG*/
  244|       |
  245|  1.62M|	g_mutex_lock(&vips__global_lock);
  246|  1.62M|	g_assert(vips_error_freeze_count >= 0);
  ------------------
  |  |  166|  1.62M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.62M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.62M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  247|  1.62M|	if (!vips_error_freeze_count) {
  ------------------
  |  Branch (247:6): [True: 1.62M, False: 0]
  ------------------
  248|  1.62M|		if (domain)
  ------------------
  |  Branch (248:7): [True: 1.62M, False: 0]
  ------------------
  249|  1.62M|			vips_buf_appendf(&vips_error_buf, "%s: ", domain);
  250|  1.62M|		vips_buf_vappendf(&vips_error_buf, fmt, ap);
  251|  1.62M|		vips_buf_appends(&vips_error_buf, "\n");
  252|  1.62M|	}
  253|  1.62M|	g_mutex_unlock(&vips__global_lock);
  254|       |
  255|  1.62M|	if (vips__fatal)
  ------------------
  |  Branch (255:6): [True: 0, False: 1.62M]
  ------------------
  256|      0|		vips_error_exit("vips__fatal");
  257|  1.62M|}
vips_error:
  271|   152k|{
  272|   152k|	va_list ap;
  273|       |
  274|   152k|	va_start(ap, fmt);
  275|   152k|	vips_verror(domain, fmt, ap);
  276|   152k|	va_end(ap);
  277|   152k|}
vips_error_clear:
  381|  15.8k|{
  382|  15.8k|	g_mutex_lock(&vips__global_lock);
  383|  15.8k|	vips_buf_rewind(&vips_error_buf);
  384|  15.8k|	g_mutex_unlock(&vips__global_lock);
  385|  15.8k|}
vips_check_coding_known:
  493|  2.57k|{
  494|       |	/* These all have codings that extract/ifthenelse/etc can ignore.
  495|       |	 */
  496|  2.57k|	if (im->Coding != VIPS_CODING_NONE &&
  ------------------
  |  Branch (496:6): [True: 0, False: 2.57k]
  ------------------
  497|  2.57k|		im->Coding != VIPS_CODING_LABQ &&
  ------------------
  |  Branch (497:3): [True: 0, False: 0]
  ------------------
  498|  2.57k|		im->Coding != VIPS_CODING_RAD) {
  ------------------
  |  Branch (498:3): [True: 0, False: 0]
  ------------------
  499|      0|		vips_error(domain, "%s", _("unknown image coding"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  500|      0|		return -1;
  501|      0|	}
  502|       |
  503|  2.57k|	return 0;
  504|  2.57k|}
vips_check_coding:
  522|  1.26k|{
  523|  1.26k|	if (im->Coding != coding) {
  ------------------
  |  Branch (523:6): [True: 0, False: 1.26k]
  ------------------
  524|      0|		vips_error(domain, _("coding '%s' only"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  525|      0|			vips_enum_nick(VIPS_TYPE_CODING, coding));
  ------------------
  |  |  148|      0|#define VIPS_TYPE_CODING (vips_coding_get_type())
  ------------------
  526|      0|		return -1;
  527|      0|	}
  528|       |
  529|  1.26k|	return 0;
  530|  1.26k|}
vips_check_bands_atleast:
  622|  3.67k|{
  623|  3.67k|	if (im->Bands < bands) {
  ------------------
  |  Branch (623:6): [True: 0, False: 3.67k]
  ------------------
  624|      0|		vips_error(domain,
  625|      0|			_("image must have at least %d bands"), bands);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  626|      0|		return -1;
  627|      0|	}
  628|       |
  629|  3.67k|	return 0;
  630|  3.67k|}
vips_check_noncomplex:
  702|  2.94k|{
  703|  2.94k|	if (vips_band_format_iscomplex(im->BandFmt)) {
  ------------------
  |  Branch (703:6): [True: 0, False: 2.94k]
  ------------------
  704|      0|		vips_error(domain, "%s", _("image must be non-complex"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  705|      0|		return -1;
  706|      0|	}
  707|       |
  708|  2.94k|	return 0;
  709|  2.94k|}
vips_check_vector:
 1142|      4|{
 1143|       |	/* Here it's clearer to list the cases that are OK.
 1144|       |	 */
 1145|      4|	if (n == im->Bands)
  ------------------
  |  Branch (1145:6): [True: 0, False: 4]
  ------------------
 1146|      0|		return 0;
 1147|      4|	if (n == 1)
  ------------------
  |  Branch (1147:6): [True: 4, False: 0]
  ------------------
 1148|      4|		return 0;
 1149|      0|	if (im->Bands == 1 &&
  ------------------
  |  Branch (1149:6): [True: 0, False: 0]
  ------------------
 1150|      0|		n > 1)
  ------------------
  |  Branch (1150:3): [True: 0, False: 0]
  ------------------
 1151|      0|		return 0;
 1152|       |
 1153|      0|	if (im->Bands == 1)
  ------------------
  |  Branch (1153:6): [True: 0, False: 0]
  ------------------
 1154|      0|		vips_error(domain,
 1155|      0|			"%s", _("vector must have 1 element"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1156|      0|	else
 1157|      0|		vips_error(domain,
 1158|      0|			_("vector must have 1 or %d elements"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1159|      0|			im->Bands);
 1160|       |
 1161|      0|	return -1;
 1162|      0|}

vips__thread_profile_attach:
  232|      2|{
  233|      2|	VipsThreadProfile *profile;
  234|       |
  235|      2|	VIPS_DEBUG_MSG("vips__thread_profile_attach: %s\n", thread_name);
  ------------------
  |  |   47|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      2|	{ \
  |  |   49|      2|		; \
  |  |   50|      2|	} \
  |  |   51|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  236|       |
  237|      2|	profile = g_new(VipsThreadProfile, 1);
  ------------------
  |  |  282|      2|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|      2|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|      2|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|      2|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|      2|	  gpointer __p;						\
  |  |  |  |  231|      2|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  232|      2|	    __p = g_##func (__n);				\
  |  |  |  |  233|      2|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|      2|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 2]
  |  |  |  |  |  Branch (234:26): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|      2|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|      2|	  else							\
  |  |  |  |  237|      2|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|      2|	  __p;							\
  |  |  |  |  239|      2|	}))
  |  |  ------------------
  ------------------
  238|      2|	profile->name = thread_name;
  239|      2|	profile->gates = g_hash_table_new_full(
  240|      2|		g_direct_hash, g_str_equal,
  241|      2|		NULL, (GDestroyNotify) vips_thread_gate_free);
  242|      2|	profile->memory = vips_thread_gate_new("memory");
  243|      2|	g_private_replace(&vips_thread_profile_key, profile);
  244|      2|}
vips__thread_profile_detach:
  259|  82.8k|{
  260|  82.8k|	VipsThreadProfile *profile;
  261|       |
  262|  82.8k|	VIPS_DEBUG_MSG("vips__thread_profile_detach:\n");
  ------------------
  |  |   47|  82.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  82.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  82.8k|	{ \
  |  |   49|  82.8k|		; \
  |  |   50|  82.8k|	} \
  |  |   51|  82.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  82.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  263|       |
  264|  82.8k|	if ((profile = vips_thread_profile_get())) {
  ------------------
  |  Branch (264:6): [True: 0, False: 82.8k]
  ------------------
  265|      0|		if (vips__thread_profile)
  ------------------
  |  Branch (265:7): [True: 0, False: 0]
  ------------------
  266|      0|			vips_thread_profile_save(profile);
  267|       |
  268|      0|		vips_thread_profile_free(profile);
  269|      0|		g_private_set(&vips_thread_profile_key, NULL);
  270|      0|	}
  271|  82.8k|}
vips__thread_gate_start:
  285|      4|{
  286|      4|	VipsThreadProfile *profile;
  287|       |
  288|      4|	VIPS_DEBUG_MSG_RED("vips__thread_gate_start: %s\n", gate_name);
  ------------------
  |  |   63|      4|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      4|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|      4|	{ \
  |  |   65|      4|		; \
  |  |   66|      4|	} \
  |  |   67|      4|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      4|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  289|       |
  290|      4|	if ((profile = vips_thread_profile_get())) {
  ------------------
  |  Branch (290:6): [True: 4, False: 0]
  ------------------
  291|      4|		gint64 time = g_get_monotonic_time();
  292|       |
  293|      4|		VipsThreadGate *gate;
  294|       |
  295|      4|		if (!(gate =
  ------------------
  |  Branch (295:7): [True: 4, False: 0]
  ------------------
  296|      4|					g_hash_table_lookup(profile->gates, gate_name))) {
  297|      4|			gate = vips_thread_gate_new(gate_name);
  298|      4|			g_hash_table_insert(profile->gates,
  299|      4|				(char *) gate_name, gate);
  300|      4|		}
  301|       |
  302|      4|		if (gate->start->i >= VIPS_GATE_SIZE)
  ------------------
  |  |   50|      4|#define VIPS_GATE_SIZE (1000)
  ------------------
  |  Branch (302:7): [True: 0, False: 4]
  ------------------
  303|      0|			vips_thread_gate_block_add(&gate->start);
  304|       |
  305|      4|		gate->start->time[gate->start->i++] = time;
  306|       |
  307|      4|		VIPS_DEBUG_MSG_RED("\t %" G_GINT64_FORMAT "\n", time);
  ------------------
  |  |   63|      4|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      4|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|      4|	{ \
  |  |   65|      4|		; \
  |  |   66|      4|	} \
  |  |   67|      4|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      4|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  308|      4|	}
  309|      4|}
vips__thread_gate_stop:
  313|      2|{
  314|      2|	VipsThreadProfile *profile;
  315|       |
  316|      2|	VIPS_DEBUG_MSG_RED("vips__thread_gate_stop: %s\n", gate_name);
  ------------------
  |  |   63|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|      2|	{ \
  |  |   65|      2|		; \
  |  |   66|      2|	} \
  |  |   67|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|       |
  318|      2|	if ((profile = vips_thread_profile_get())) {
  ------------------
  |  Branch (318:6): [True: 2, False: 0]
  ------------------
  319|      2|		gint64 time = g_get_monotonic_time();
  320|       |
  321|      2|		VipsThreadGate *gate;
  322|       |
  323|      2|		if (!(gate =
  ------------------
  |  Branch (323:7): [True: 0, False: 2]
  ------------------
  324|      2|					g_hash_table_lookup(profile->gates, gate_name))) {
  325|      0|			gate = vips_thread_gate_new(gate_name);
  326|      0|			g_hash_table_insert(profile->gates,
  327|      0|				(char *) gate_name, gate);
  328|      0|		}
  329|       |
  330|      2|		if (gate->stop->i >= VIPS_GATE_SIZE)
  ------------------
  |  |   50|      2|#define VIPS_GATE_SIZE (1000)
  ------------------
  |  Branch (330:7): [True: 0, False: 2]
  ------------------
  331|      0|			vips_thread_gate_block_add(&gate->stop);
  332|       |
  333|      2|		gate->stop->time[gate->stop->i++] = time;
  334|       |
  335|      2|		VIPS_DEBUG_MSG_RED("\t %" G_GINT64_FORMAT "\n", time);
  ------------------
  |  |   63|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|      2|	{ \
  |  |   65|      2|		; \
  |  |   66|      2|	} \
  |  |   67|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  336|      2|	}
  337|      2|}
gate.c:vips_thread_gate_new:
  219|      6|{
  220|      6|	VipsThreadGate *gate;
  221|       |
  222|      6|	gate = g_new(VipsThreadGate, 1);
  ------------------
  |  |  282|      6|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|      6|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|      6|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|      6|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|      6|	  gpointer __p;						\
  |  |  |  |  231|      6|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  232|      6|	    __p = g_##func (__n);				\
  |  |  |  |  233|      6|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|      6|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 6]
  |  |  |  |  |  Branch (234:26): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|      6|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|      6|	  else							\
  |  |  |  |  237|      6|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|      6|	  __p;							\
  |  |  |  |  239|      6|	}))
  |  |  ------------------
  ------------------
  223|      6|	gate->name = gate_name;
  224|      6|	gate->start = g_new0(VipsThreadGateBlock, 1);
  ------------------
  |  |  299|      6|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|      6|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|      6|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|      6|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|      6|	  gpointer __p;						\
  |  |  |  |  231|      6|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  232|      6|	    __p = g_##func (__n);				\
  |  |  |  |  233|      6|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|      6|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 6]
  |  |  |  |  |  Branch (234:26): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|      6|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|      6|	  else							\
  |  |  |  |  237|      6|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|      6|	  __p;							\
  |  |  |  |  239|      6|	}))
  |  |  ------------------
  ------------------
  225|      6|	gate->stop = g_new0(VipsThreadGateBlock, 1);
  ------------------
  |  |  299|      6|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|      6|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      6|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|      6|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|      6|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|      6|	  gpointer __p;						\
  |  |  |  |  231|      6|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  232|      6|	    __p = g_##func (__n);				\
  |  |  |  |  233|      6|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|      6|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 6]
  |  |  |  |  |  Branch (234:26): [True: 6, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|      6|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|      6|	  else							\
  |  |  |  |  237|      6|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|      6|	  __p;							\
  |  |  |  |  239|      6|	}))
  |  |  ------------------
  ------------------
  226|       |
  227|      6|	return gate;
  228|      6|}
gate.c:vips_thread_profile_get:
  248|  82.8k|{
  249|  82.8k|	return g_private_get(&vips_thread_profile_key);
  250|  82.8k|}

vips__link_break_all:
  183|   212k|{
  184|   212k|	g_mutex_lock(&vips__global_lock);
  185|       |
  186|   212k|	vips_slist_map2(image->upstream,
  187|   212k|		(VipsSListMap2Fn) vips__link_break, image, NULL);
  188|   212k|	vips_slist_map2(image->downstream,
  189|   212k|		(VipsSListMap2Fn) vips__link_break_rev, image, NULL);
  190|       |
  191|   212k|	g_assert(!image->upstream);
  ------------------
  |  |  166|   212k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   212k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   212k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|   212k|	g_assert(!image->downstream);
  ------------------
  |  |  166|   212k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   212k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   212k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  193|       |
  194|   212k|	g_mutex_unlock(&vips__global_lock);
  195|   212k|}
vips__link_map:
  239|   175k|{
  240|   175k|	static int serial = 0;
  241|       |
  242|   175k|	LinkMap map;
  243|   175k|	GSList *images;
  244|   175k|	GSList *p;
  245|   175k|	void *result;
  246|       |
  247|   175k|	images = NULL;
  248|       |
  249|       |	/* The function might do anything, including removing images
  250|       |	 * or invalidating other images, so we can't trigger them from within
  251|       |	 * the image loop. Instead we collect a list of images, ref them,
  252|       |	 * run the functions, and unref.
  253|       |	 */
  254|       |
  255|   175k|	map.upstream = upstream;
  256|   175k|	map.fn = (VipsSListMap2Fn) vips__link_map_cb;
  257|   175k|	map.a = (void *) &images;
  258|   175k|	map.b = NULL;
  259|       |
  260|       |	/* We will be walking the tree of images and updating the ->serial
  261|       |	 * member. There will be intense confusion if two threads try to do
  262|       |	 * this at the same time.
  263|       |	 */
  264|   175k|	g_mutex_lock(&vips__global_lock);
  265|       |
  266|   175k|	serial += 1;
  267|   175k|	map.serial = serial;
  268|       |
  269|   175k|	vips__link_mapp(image, &map, NULL);
  270|       |
  271|   782k|	for (p = images; p; p = p->next)
  ------------------
  |  Branch (271:19): [True: 606k, False: 175k]
  ------------------
  272|   606k|		g_object_ref(p->data);
  273|       |
  274|   175k|	g_mutex_unlock(&vips__global_lock);
  275|       |
  276|   175k|	result = vips_slist_map2(images, fn, a, b);
  277|       |
  278|   782k|	for (p = images; p; p = p->next)
  ------------------
  |  Branch (278:19): [True: 606k, False: 175k]
  ------------------
  279|   606k|		g_object_unref(p->data);
  280|   175k|	g_slist_free(images);
  281|       |
  282|   175k|	return result;
  283|   175k|}
vips__demand_hint_array:
  291|   228k|{
  292|   228k|	VipsDemandStyle hint = (VipsDemandStyle) int_hint;
  293|       |
  294|   228k|	int i, len, nany;
  295|   228k|	VipsDemandStyle set_hint;
  296|       |
  297|       |	/* How many input images are there? And how many are ANY?
  298|       |	 */
  299|   385k|	for (i = 0, len = 0, nany = 0; in[i]; i++, len++)
  ------------------
  |  Branch (299:33): [True: 157k, False: 228k]
  ------------------
  300|   157k|		if (in[i]->dhint == VIPS_DEMAND_STYLE_ANY)
  ------------------
  |  Branch (300:7): [True: 2, False: 157k]
  ------------------
  301|      2|			nany++;
  302|       |
  303|       |	/* Find the most restrictive of all the hints available to us.
  304|       |	 *
  305|       |	 * We have tried to be smarter about this in the past -- for example,
  306|       |	 * detecting all ANY inputs and ignoring the hint in this case, but
  307|       |	 * there are inevitably odd cases which cause problems. For example,
  308|       |	 * new_from_memory, resize, affine, write_to_memory would run with
  309|       |	 * FATSTRIP.
  310|       |	 */
  311|   228k|	set_hint = hint;
  312|   385k|	for (i = 0; i < len; i++)
  ------------------
  |  Branch (312:14): [True: 157k, False: 228k]
  ------------------
  313|   157k|		set_hint = (VipsDemandStyle) VIPS_MIN(
  ------------------
  |  |   55|   157k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 2, False: 157k]
  |  |  ------------------
  ------------------
  314|   228k|			(int) set_hint, (int) in[i]->dhint);
  315|       |
  316|   228k|	image->dhint = set_hint;
  317|       |
  318|       |#ifdef DEBUG
  319|       |	printf("vips_image_pipeline_array: set dhint for \"%s\" to %s\n",
  320|       |		image->filename,
  321|       |		vips_enum_nick(VIPS_TYPE_DEMAND_STYLE, image->dhint));
  322|       |	printf("\toperation requested %s\n",
  323|       |		vips_enum_nick(VIPS_TYPE_DEMAND_STYLE, hint));
  324|       |	printf("\tinputs were:\n");
  325|       |	printf("\t");
  326|       |	for (i = 0; in[i]; i++)
  327|       |		printf("%s ", vips_enum_nick(VIPS_TYPE_DEMAND_STYLE, in[i]->dhint));
  328|       |	printf("\n");
  329|       |#endif /*DEBUG*/
  330|       |
  331|       |	/* im depends on all these ims.
  332|       |	 */
  333|   228k|	g_mutex_lock(&vips__global_lock);
  334|   385k|	for (i = 0; i < len; i++)
  ------------------
  |  Branch (334:14): [True: 157k, False: 228k]
  ------------------
  335|   157k|		vips__link_make(in[i], image);
  336|   228k|	g_mutex_unlock(&vips__global_lock);
  337|       |
  338|       |	/* Set a flag on the image to say we remembered to call this thing.
  339|       |	 * vips_image_generate() and friends check this.
  340|       |	 */
  341|   228k|	image->hint_set = TRUE;
  ------------------
  |  |  798|   228k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   228k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  342|   228k|}
vips_image_pipeline_array:
  379|   228k|{
  380|       |	/* This function can be called more than once per output image. For
  381|       |	 * example, jpeg header load will call this once on ->out to set the
  382|       |	 * default hint, then later call it again to connect the output image
  383|       |	 * up to the real image.
  384|       |	 *
  385|       |	 * It's only ever called first time with in[0] == NULL and second time
  386|       |	 * with a real value for @in.
  387|       |	 */
  388|   228k|	vips__demand_hint_array(image, hint, in);
  389|       |
  390|   228k|	if (in[0] &&
  ------------------
  |  Branch (390:6): [True: 156k, False: 72.1k]
  ------------------
  391|   228k|		vips__image_copy_fields_array(image, in))
  ------------------
  |  Branch (391:3): [True: 0, False: 156k]
  ------------------
  392|      0|		return -1;
  393|       |
  394|   228k|	if (vips__reorder_set_input(image, in))
  ------------------
  |  Branch (394:6): [True: 0, False: 228k]
  ------------------
  395|      0|		return -1;
  396|       |
  397|   228k|	return 0;
  398|   228k|}
vips_image_pipelinev:
  412|   224k|{
  413|   224k|	va_list ap;
  414|   224k|	int i;
  415|   224k|	VipsImage *ar[MAX_IMAGES];
  416|       |
  417|   224k|	va_start(ap, hint);
  418|   376k|	for (i = 0; i < MAX_IMAGES &&
  ------------------
  |  |  128|   752k|#define MAX_IMAGES (1000)
  ------------------
  |  Branch (418:14): [True: 376k, False: 0]
  ------------------
  419|   376k|		 (ar[i] = va_arg(ap, VipsImage *));
  ------------------
  |  Branch (419:4): [True: 151k, False: 224k]
  ------------------
  420|   224k|		 i++)
  421|   151k|		;
  422|   224k|	va_end(ap);
  423|   224k|	if (i == MAX_IMAGES) {
  ------------------
  |  |  128|   224k|#define MAX_IMAGES (1000)
  ------------------
  |  Branch (423:6): [True: 0, False: 224k]
  ------------------
  424|      0|		g_warning("%s", _("too many images"));
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  425|       |
  426|       |		/* Make sure we have a sentinel there.
  427|       |		 */
  428|      0|		ar[i - 1] = NULL;
  429|      0|	}
  430|       |
  431|   224k|	return vips_image_pipeline_array(image, hint, ar);
  432|   224k|}
vips_start_one:
  446|   143k|{
  447|   143k|	VipsImage *in = (VipsImage *) a;
  448|       |
  449|   143k|	return vips_region_new(in);
  450|   143k|}
vips_stop_one:
  464|   152k|{
  465|   152k|	VipsRegion *reg = (VipsRegion *) seq;
  466|       |
  467|   152k|	g_object_unref(reg);
  468|       |
  469|   152k|	return 0;
  470|   152k|}
vips_stop_many:
  485|  1.36k|{
  486|  1.36k|	VipsRegion **ar = (VipsRegion **) seq;
  487|       |
  488|  1.36k|	if (ar) {
  ------------------
  |  Branch (488:6): [True: 1.36k, False: 0]
  ------------------
  489|  1.36k|		int i;
  490|       |
  491|  2.72k|		for (i = 0; ar[i]; i++)
  ------------------
  |  Branch (491:15): [True: 1.36k, False: 1.36k]
  ------------------
  492|  1.36k|			g_object_unref(ar[i]);
  493|  1.36k|		g_free((char *) ar);
  494|  1.36k|	}
  495|       |
  496|  1.36k|	return 0;
  497|  1.36k|}
vips_start_many:
  512|  1.36k|{
  513|  1.36k|	VipsImage **in = (VipsImage **) a;
  514|       |
  515|  1.36k|	int i, n;
  516|  1.36k|	VipsRegion **ar;
  517|       |
  518|       |	/* How many images?
  519|       |	 */
  520|  2.72k|	for (n = 0; in[n]; n++)
  ------------------
  |  Branch (520:14): [True: 1.36k, False: 1.36k]
  ------------------
  521|  1.36k|		;
  522|       |
  523|       |	/* Allocate space for region array.
  524|       |	 */
  525|  1.36k|	if (!(ar = VIPS_ARRAY(NULL, n + 1, VipsRegion *)))
  ------------------
  |  |   72|  1.36k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  1.36k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  1.36k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  1.36k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  1.36k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (525:6): [True: 0, False: 1.36k]
  ------------------
  526|      0|		return NULL;
  527|       |
  528|       |	/* Create a set of regions.
  529|       |	 */
  530|  2.72k|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (530:14): [True: 1.36k, False: 1.36k]
  ------------------
  531|  1.36k|		if (!(ar[i] = vips_region_new(in[i]))) {
  ------------------
  |  Branch (531:7): [True: 0, False: 1.36k]
  ------------------
  532|      0|			vips_stop_many(ar, NULL, NULL);
  533|      0|			return NULL;
  534|      0|		}
  535|  1.36k|	ar[n] = NULL;
  536|       |
  537|  1.36k|	return ar;
  538|  1.36k|}
vips_image_generate:
  686|   189k|{
  687|   189k|	int res;
  688|       |
  689|   189k|	VIPS_DEBUG_MSG("vips_image_generate: %p\n", image);
  ------------------
  |  |   47|   189k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   189k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   189k|	{ \
  |  |   49|   189k|		; \
  |  |   50|   189k|	} \
  |  |   51|   189k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   189k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  690|       |
  691|   189k|	g_assert(generate_fn);
  ------------------
  |  |  166|   189k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   189k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   189k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  692|   189k|	g_assert(vips_object_sanity(VIPS_OBJECT(image)));
  ------------------
  |  |  166|   189k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   189k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   189k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  693|       |
  694|   189k|	if (!image->hint_set) {
  ------------------
  |  Branch (694:6): [True: 0, False: 189k]
  ------------------
  695|      0|		vips_error("vips_image_generate",
  696|      0|			"%s", _("demand hint not set"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  697|      0|		return -1;
  698|      0|	}
  699|       |
  700|       |	/* We don't use this, but make sure it's set in case any old binaries
  701|       |	 * are expecting it.
  702|       |	 */
  703|   189k|	image->Bbits = vips_format_sizeof(image->BandFmt) << 3;
  704|       |
  705|       |	/* Look at output type to decide our action.
  706|       |	 */
  707|   189k|	switch (image->dtype) {
  708|   171k|	case VIPS_IMAGE_PARTIAL:
  ------------------
  |  Branch (708:2): [True: 171k, False: 17.8k]
  ------------------
  709|       |		/* Output to partial image. Just attach functions and return.
  710|       |		 */
  711|   171k|		if (image->generate_fn ||
  ------------------
  |  Branch (711:7): [True: 0, False: 171k]
  ------------------
  712|   171k|			image->start_fn ||
  ------------------
  |  Branch (712:4): [True: 0, False: 171k]
  ------------------
  713|   171k|			image->stop_fn) {
  ------------------
  |  Branch (713:4): [True: 0, False: 171k]
  ------------------
  714|      0|			vips_error("VipsImage",
  715|      0|				"%s", _("generate() called twice"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  716|      0|			return -1;
  717|      0|		}
  718|       |
  719|   171k|		image->start_fn = start_fn;
  720|   171k|		image->generate_fn = generate_fn;
  721|   171k|		image->stop_fn = stop_fn;
  722|   171k|		image->client1 = a;
  723|   171k|		image->client2 = b;
  724|       |
  725|   171k|		VIPS_DEBUG_MSG("vips_image_generate: "
  ------------------
  |  |   47|   171k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   171k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   171k|	{ \
  |  |   49|   171k|		; \
  |  |   50|   171k|	} \
  |  |   51|   171k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   171k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  726|   171k|					   "attaching partial callbacks\n");
  727|       |
  728|   171k|		if (vips_image_written(image))
  ------------------
  |  Branch (728:7): [True: 0, False: 171k]
  ------------------
  729|      0|			return -1;
  730|       |
  731|   171k|		break;
  732|       |
  733|   171k|	case VIPS_IMAGE_SETBUF:
  ------------------
  |  Branch (733:2): [True: 17.8k, False: 171k]
  ------------------
  734|  17.8k|	case VIPS_IMAGE_SETBUF_FOREIGN:
  ------------------
  |  Branch (734:2): [True: 0, False: 189k]
  ------------------
  735|  17.8k|	case VIPS_IMAGE_MMAPINRW:
  ------------------
  |  Branch (735:2): [True: 0, False: 189k]
  ------------------
  736|  17.8k|	case VIPS_IMAGE_OPENOUT:
  ------------------
  |  Branch (736:2): [True: 0, False: 189k]
  ------------------
  737|       |		/* Eval now .. sanity check.
  738|       |		 */
  739|  17.8k|		if (image->generate_fn ||
  ------------------
  |  Branch (739:7): [True: 0, False: 17.8k]
  ------------------
  740|  17.8k|			image->start_fn ||
  ------------------
  |  Branch (740:4): [True: 0, False: 17.8k]
  ------------------
  741|  17.8k|			image->stop_fn) {
  ------------------
  |  Branch (741:4): [True: 0, False: 17.8k]
  ------------------
  742|      0|			vips_error("VipsImage",
  743|      0|				"%s", _("generate() called twice"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  744|      0|			return -1;
  745|      0|		}
  746|       |
  747|       |		/* Attach callbacks.
  748|       |		 */
  749|  17.8k|		image->start_fn = start_fn;
  750|  17.8k|		image->generate_fn = generate_fn;
  751|  17.8k|		image->stop_fn = stop_fn;
  752|  17.8k|		image->client1 = a;
  753|  17.8k|		image->client2 = b;
  754|       |
  755|  17.8k|		if (vips_image_write_prepare(image))
  ------------------
  |  Branch (755:7): [True: 0, False: 17.8k]
  ------------------
  756|      0|			return -1;
  757|       |
  758|  17.8k|		if (image->dtype == VIPS_IMAGE_OPENOUT)
  ------------------
  |  Branch (758:7): [True: 0, False: 17.8k]
  ------------------
  759|      0|			res = vips_sink_disc(image, write_vips, NULL);
  760|  17.8k|		else
  761|  17.8k|			res = vips_sink_memory(image);
  762|       |
  763|       |		/* Error?
  764|       |		 */
  765|  17.8k|		if (res)
  ------------------
  |  Branch (765:7): [True: 10.7k, False: 7.08k]
  ------------------
  766|  10.7k|			return -1;
  767|       |
  768|       |		/* Must come before we rewind.
  769|       |		 */
  770|  7.08k|		if (vips_image_written(image))
  ------------------
  |  Branch (770:7): [True: 0, False: 7.08k]
  ------------------
  771|      0|			return -1;
  772|       |
  773|       |		/* We've written to image ... rewind it ready for reading.
  774|       |		 */
  775|  7.08k|		if (vips_image_pio_input(image))
  ------------------
  |  Branch (775:7): [True: 0, False: 7.08k]
  ------------------
  776|      0|			return -1;
  777|       |
  778|  7.08k|		break;
  779|       |
  780|  7.08k|	default:
  ------------------
  |  Branch (780:2): [True: 0, False: 189k]
  ------------------
  781|       |		/* Not a known output style.
  782|       |		 */
  783|      0|		vips_error("VipsImage",
  784|      0|			_("unable to output to a %s image"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  785|      0|			vips_enum_nick(VIPS_TYPE_IMAGE_TYPE,
  ------------------
  |  |  139|      0|#define VIPS_TYPE_IMAGE_TYPE (vips_image_type_get_type())
  ------------------
  786|      0|				image->dtype));
  787|      0|		return -1;
  788|   189k|	}
  789|       |
  790|   178k|	return 0;
  791|   189k|}
generate.c:vips__link_break:
  152|   157k|{
  153|   157k|	g_assert(image_up);
  ------------------
  |  |  166|   157k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   157k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   157k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  154|   157k|	g_assert(image_down);
  ------------------
  |  |  166|   157k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   157k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   157k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|       |
  156|   157k|	g_assert(g_slist_find(image_up->downstream, image_down));
  ------------------
  |  |  166|   157k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   157k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   157k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  157|   157k|	g_assert(g_slist_find(image_down->upstream, image_up));
  ------------------
  |  |  166|   157k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   157k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   157k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  158|       |
  159|   157k|	image_up->downstream =
  160|   157k|		g_slist_remove(image_up->downstream, image_down);
  161|   157k|	image_down->upstream =
  162|   157k|		g_slist_remove(image_down->upstream, image_up);
  163|       |
  164|       |	/* Unlink the progress chain.
  165|       |	 */
  166|   157k|	if (image_down->progress_signal &&
  ------------------
  |  Branch (166:6): [True: 27.7k, False: 129k]
  ------------------
  167|   157k|		image_down->progress_signal == image_up->progress_signal)
  ------------------
  |  Branch (167:3): [True: 8.49k, False: 19.2k]
  ------------------
  168|  8.49k|		image_down->progress_signal = NULL;
  169|       |
  170|   157k|	return NULL;
  171|   157k|}
generate.c:vips__link_break_rev:
  175|  56.8k|{
  176|  56.8k|	return vips__link_break(image_up, image_down, b);
  177|  56.8k|}
generate.c:vips__link_map_cb:
  227|   606k|{
  228|   606k|	*images = g_slist_prepend(*images, image);
  229|       |
  230|   606k|	return NULL;
  231|   606k|}
generate.c:vips__link_mapp:
  207|   615k|{
  208|   615k|	void *res;
  209|       |
  210|       |	/* Loop?
  211|       |	 */
  212|   615k|	if (image->serial == map->serial)
  ------------------
  |  Branch (212:6): [True: 8.73k, False: 606k]
  ------------------
  213|  8.73k|		return NULL;
  214|   606k|	image->serial = map->serial;
  215|       |
  216|   606k|	if ((res = map->fn(image, map->a, map->b)))
  ------------------
  |  Branch (216:6): [True: 0, False: 606k]
  ------------------
  217|      0|		return res;
  218|       |
  219|   606k|	return vips_slist_map2(map->upstream
  ------------------
  |  Branch (219:25): [True: 606k, False: 0]
  ------------------
  220|   606k|			? image->upstream
  221|   606k|			: image->downstream,
  222|   606k|		(VipsSListMap2Fn) vips__link_mapp, map, NULL);
  223|   606k|}
generate.c:vips__link_make:
  134|   157k|{
  135|   157k|	g_assert(image_up);
  ------------------
  |  |  166|   157k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   157k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   157k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  136|   157k|	g_assert(image_down);
  ------------------
  |  |  166|   157k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   157k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   157k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|       |
  138|   157k|	image_up->downstream =
  139|   157k|		g_slist_prepend(image_up->downstream, image_down);
  140|   157k|	image_down->upstream =
  141|   157k|		g_slist_prepend(image_down->upstream, image_up);
  142|       |
  143|       |	/* Propagate the progress indicator.
  144|       |	 */
  145|   157k|	if (image_up->progress_signal &&
  ------------------
  |  Branch (145:6): [True: 8.49k, False: 149k]
  ------------------
  146|   157k|		!image_down->progress_signal)
  ------------------
  |  Branch (146:3): [True: 8.49k, False: 0]
  ------------------
  147|  8.49k|		image_down->progress_signal = image_up->progress_signal;
  148|   157k|}

vips_format_sizeof:
  212|   212k|{
  213|   212k|	format = VIPS_CLIP(0, format, VIPS_FORMAT_DPCOMPLEX);
  ------------------
  |  |   57|   212k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|   424k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 0, False: 212k]
  |  |  |  |  |  Branch (54:32): [True: 0, False: 212k]
  |  |  |  |  |  Branch (54:44): [True: 0, False: 212k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  214|       |
  215|   212k|	return vips__image_sizeof_bandformat[format];
  216|   212k|}
vips_format_sizeof_unsafe:
  229|  6.09M|{
  230|  6.09M|	g_assert(0 <= format && format <= VIPS_FORMAT_DPCOMPLEX);
  ------------------
  |  |  166|  6.09M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  6.09M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  6.09M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  231|       |
  232|  6.09M|	return vips__image_sizeof_bandformat[format];
  233|  6.09M|}
vips_interpretation_max_alpha:
  243|    860|{
  244|    860|	switch (interpretation) {
  245|     66|	case VIPS_INTERPRETATION_GREY16:
  ------------------
  |  Branch (245:2): [True: 66, False: 794]
  ------------------
  246|     78|	case VIPS_INTERPRETATION_RGB16:
  ------------------
  |  Branch (246:2): [True: 12, False: 848]
  ------------------
  247|     78|		return 65535.0;
  248|     30|	case VIPS_INTERPRETATION_scRGB:
  ------------------
  |  Branch (248:2): [True: 30, False: 830]
  ------------------
  249|     30|		return 1.0;
  250|    752|	default:
  ------------------
  |  Branch (250:2): [True: 752, False: 108]
  ------------------
  251|    752|		return 255.0;
  252|    860|	}
  253|    860|}
vips__meta_destroy:
  375|   205k|{
  376|   205k|	VIPS_FREEF(g_hash_table_destroy, image->meta);
  ------------------
  |  |   41|   205k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   205k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   205k|	{ \
  |  |   43|   205k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 191k, False: 13.8k]
  |  |  ------------------
  |  |   44|   191k|			(void) F((S)); \
  |  |   45|   191k|			(S) = 0; \
  |  |   46|   191k|		} \
  |  |   47|   205k|	} \
  |  |   48|   205k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   205k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  377|   205k|	g_assert(!image->meta_traverse);
  ------------------
  |  |  166|   205k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   205k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   205k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  378|   205k|}
vips_image_get_format:
  434|      2|{
  435|      2|	return image->BandFmt;
  436|      2|}
vips_image_guess_format:
  492|    129|{
  493|    129|	VipsBandFormat format;
  494|       |
  495|       |	/* Stop a compiler warning.
  496|       |	 */
  497|    129|	format = VIPS_FORMAT_UCHAR;
  498|       |
  499|    129|	switch (image->Type) {
  500|      0|	case VIPS_INTERPRETATION_B_W:
  ------------------
  |  Branch (500:2): [True: 0, False: 129]
  ------------------
  501|      0|	case VIPS_INTERPRETATION_HISTOGRAM:
  ------------------
  |  Branch (501:2): [True: 0, False: 129]
  ------------------
  502|     64|	case VIPS_INTERPRETATION_MULTIBAND:
  ------------------
  |  Branch (502:2): [True: 64, False: 65]
  ------------------
  503|     64|		format = image->BandFmt;
  504|     64|		break;
  505|       |
  506|      0|	case VIPS_INTERPRETATION_FOURIER:
  ------------------
  |  Branch (506:2): [True: 0, False: 129]
  ------------------
  507|      0|		if (image->BandFmt == VIPS_FORMAT_DOUBLE ||
  ------------------
  |  Branch (507:7): [True: 0, False: 0]
  ------------------
  508|      0|			image->BandFmt == VIPS_FORMAT_DPCOMPLEX)
  ------------------
  |  Branch (508:4): [True: 0, False: 0]
  ------------------
  509|      0|			format = VIPS_FORMAT_DPCOMPLEX;
  510|      0|		else
  511|      0|			format = VIPS_FORMAT_COMPLEX;
  512|      0|		break;
  513|       |
  514|     65|	case VIPS_INTERPRETATION_sRGB:
  ------------------
  |  Branch (514:2): [True: 65, False: 64]
  ------------------
  515|     65|	case VIPS_INTERPRETATION_RGB:
  ------------------
  |  Branch (515:2): [True: 0, False: 129]
  ------------------
  516|     65|		format = VIPS_FORMAT_UCHAR;
  517|     65|		break;
  518|       |
  519|      0|	case VIPS_INTERPRETATION_XYZ:
  ------------------
  |  Branch (519:2): [True: 0, False: 129]
  ------------------
  520|      0|	case VIPS_INTERPRETATION_LAB:
  ------------------
  |  Branch (520:2): [True: 0, False: 129]
  ------------------
  521|      0|	case VIPS_INTERPRETATION_CMC:
  ------------------
  |  Branch (521:2): [True: 0, False: 129]
  ------------------
  522|      0|	case VIPS_INTERPRETATION_LCH:
  ------------------
  |  Branch (522:2): [True: 0, False: 129]
  ------------------
  523|      0|	case VIPS_INTERPRETATION_HSV:
  ------------------
  |  Branch (523:2): [True: 0, False: 129]
  ------------------
  524|      0|	case VIPS_INTERPRETATION_scRGB:
  ------------------
  |  Branch (524:2): [True: 0, False: 129]
  ------------------
  525|      0|	case VIPS_INTERPRETATION_YXY:
  ------------------
  |  Branch (525:2): [True: 0, False: 129]
  ------------------
  526|      0|		format = VIPS_FORMAT_FLOAT;
  527|      0|		break;
  528|       |
  529|      0|	case VIPS_INTERPRETATION_CMYK:
  ------------------
  |  Branch (529:2): [True: 0, False: 129]
  ------------------
  530|      0|		if (image->BandFmt == VIPS_FORMAT_USHORT)
  ------------------
  |  Branch (530:7): [True: 0, False: 0]
  ------------------
  531|      0|			format = VIPS_FORMAT_USHORT;
  532|      0|		else
  533|      0|			format = VIPS_FORMAT_UCHAR;
  534|      0|		break;
  535|       |
  536|      0|	case VIPS_INTERPRETATION_LABQ:
  ------------------
  |  Branch (536:2): [True: 0, False: 129]
  ------------------
  537|      0|		format = VIPS_FORMAT_UCHAR;
  538|      0|		break;
  539|       |
  540|      0|	case VIPS_INTERPRETATION_LABS:
  ------------------
  |  Branch (540:2): [True: 0, False: 129]
  ------------------
  541|      0|		format = VIPS_FORMAT_SHORT;
  542|      0|		break;
  543|       |
  544|      0|	case VIPS_INTERPRETATION_GREY16:
  ------------------
  |  Branch (544:2): [True: 0, False: 129]
  ------------------
  545|      0|	case VIPS_INTERPRETATION_RGB16:
  ------------------
  |  Branch (545:2): [True: 0, False: 129]
  ------------------
  546|      0|		format = VIPS_FORMAT_USHORT;
  547|      0|		break;
  548|       |
  549|      0|	case VIPS_INTERPRETATION_MATRIX:
  ------------------
  |  Branch (549:2): [True: 0, False: 129]
  ------------------
  550|      0|		if (image->BandFmt == VIPS_FORMAT_DOUBLE)
  ------------------
  |  Branch (550:7): [True: 0, False: 0]
  ------------------
  551|      0|			format = VIPS_FORMAT_DOUBLE;
  552|      0|		else
  553|      0|			format = VIPS_FORMAT_FLOAT;
  554|      0|		break;
  555|       |
  556|      0|	default:
  ------------------
  |  Branch (556:2): [True: 0, False: 129]
  ------------------
  557|      0|		format = VIPS_FORMAT_NOTSET;
  558|      0|		break;
  559|    129|	}
  560|       |
  561|    129|	return format;
  562|    129|}
vips_image_get_interpretation:
  587|  3.82k|{
  588|  3.82k|	return image->Type;
  589|  3.82k|}
vips_image_guess_interpretation:
  674|  4.48k|{
  675|  4.48k|	gboolean sane;
  676|       |
  677|  4.48k|	sane = TRUE;
  ------------------
  |  |  798|  4.48k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  4.48k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  678|       |
  679|       |	/* Coding overrides interpretation.
  680|       |	 */
  681|  4.48k|	switch (image->Coding) {
  682|      0|	case VIPS_CODING_ERROR:
  ------------------
  |  Branch (682:2): [True: 0, False: 4.48k]
  ------------------
  683|      0|		sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  684|      0|		break;
  685|       |
  686|      0|	case VIPS_CODING_LABQ:
  ------------------
  |  Branch (686:2): [True: 0, False: 4.48k]
  ------------------
  687|      0|		if (image->Type != VIPS_INTERPRETATION_LABQ)
  ------------------
  |  Branch (687:7): [True: 0, False: 0]
  ------------------
  688|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  689|      0|		break;
  690|       |
  691|      0|	case VIPS_CODING_RAD:
  ------------------
  |  Branch (691:2): [True: 0, False: 4.48k]
  ------------------
  692|      0|		if (image->Type != VIPS_INTERPRETATION_sRGB)
  ------------------
  |  Branch (692:7): [True: 0, False: 0]
  ------------------
  693|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  694|      0|		break;
  695|       |
  696|  4.48k|	default:
  ------------------
  |  Branch (696:2): [True: 4.48k, False: 0]
  ------------------
  697|  4.48k|		break;
  698|  4.48k|	}
  699|       |
  700|  4.48k|	switch (image->Type) {
  701|      0|	case VIPS_INTERPRETATION_ERROR:
  ------------------
  |  Branch (701:2): [True: 0, False: 4.48k]
  ------------------
  702|      0|		sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  703|      0|		break;
  704|       |
  705|    659|	case VIPS_INTERPRETATION_MULTIBAND:
  ------------------
  |  Branch (705:2): [True: 659, False: 3.82k]
  ------------------
  706|       |		/* This is a pretty useless generic tag. Always reset it.
  707|       |		 */
  708|    659|		sane = FALSE;
  ------------------
  |  |  794|    659|#define	FALSE	(0)
  ------------------
  709|    659|		break;
  710|       |
  711|    566|	case VIPS_INTERPRETATION_B_W:
  ------------------
  |  Branch (711:2): [True: 566, False: 3.92k]
  ------------------
  712|       |		/* Don't test bands, we allow bands after the first to be
  713|       |		 * unused extras, like alpha.
  714|       |		 */
  715|    566|		break;
  716|       |
  717|      0|	case VIPS_INTERPRETATION_HISTOGRAM:
  ------------------
  |  Branch (717:2): [True: 0, False: 4.48k]
  ------------------
  718|      0|		if (image->Xsize > 1 && image->Ysize > 1)
  ------------------
  |  Branch (718:7): [True: 0, False: 0]
  |  Branch (718:27): [True: 0, False: 0]
  ------------------
  719|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  720|      0|		break;
  721|       |
  722|      0|	case VIPS_INTERPRETATION_FOURIER:
  ------------------
  |  Branch (722:2): [True: 0, False: 4.48k]
  ------------------
  723|      0|		if (!vips_band_format_iscomplex(image->BandFmt))
  ------------------
  |  Branch (723:7): [True: 0, False: 0]
  ------------------
  724|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  725|      0|		break;
  726|       |
  727|  2.11k|	case VIPS_INTERPRETATION_XYZ:
  ------------------
  |  Branch (727:2): [True: 2.11k, False: 2.36k]
  ------------------
  728|  2.17k|	case VIPS_INTERPRETATION_LAB:
  ------------------
  |  Branch (728:2): [True: 56, False: 4.43k]
  ------------------
  729|  2.17k|	case VIPS_INTERPRETATION_RGB:
  ------------------
  |  Branch (729:2): [True: 0, False: 4.48k]
  ------------------
  730|  2.17k|	case VIPS_INTERPRETATION_CMC:
  ------------------
  |  Branch (730:2): [True: 0, False: 4.48k]
  ------------------
  731|  2.17k|	case VIPS_INTERPRETATION_LCH:
  ------------------
  |  Branch (731:2): [True: 0, False: 4.48k]
  ------------------
  732|  2.17k|	case VIPS_INTERPRETATION_sRGB:
  ------------------
  |  Branch (732:2): [True: 0, False: 4.48k]
  ------------------
  733|  2.17k|	case VIPS_INTERPRETATION_HSV:
  ------------------
  |  Branch (733:2): [True: 0, False: 4.48k]
  ------------------
  734|  2.17k|		if (image->Bands < 3)
  ------------------
  |  Branch (734:7): [True: 0, False: 2.17k]
  ------------------
  735|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  736|  2.17k|		break;
  737|       |
  738|    602|	case VIPS_INTERPRETATION_scRGB:
  ------------------
  |  Branch (738:2): [True: 602, False: 3.88k]
  ------------------
  739|    602|	case VIPS_INTERPRETATION_YXY:
  ------------------
  |  Branch (739:2): [True: 0, False: 4.48k]
  ------------------
  740|       |		/* Need float values in 0 - 1.
  741|       |		 */
  742|    602|		if (!vips_band_format_isfloat(image->BandFmt) ||
  ------------------
  |  Branch (742:7): [True: 0, False: 602]
  ------------------
  743|    602|			image->Bands < 3)
  ------------------
  |  Branch (743:4): [True: 0, False: 602]
  ------------------
  744|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  745|    602|		break;
  746|       |
  747|      0|	case VIPS_INTERPRETATION_CMYK:
  ------------------
  |  Branch (747:2): [True: 0, False: 4.48k]
  ------------------
  748|      0|		if (image->Bands < 4)
  ------------------
  |  Branch (748:7): [True: 0, False: 0]
  ------------------
  749|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  750|      0|		break;
  751|       |
  752|      0|	case VIPS_INTERPRETATION_LABQ:
  ------------------
  |  Branch (752:2): [True: 0, False: 4.48k]
  ------------------
  753|      0|		if (image->Coding != VIPS_CODING_LABQ)
  ------------------
  |  Branch (753:7): [True: 0, False: 0]
  ------------------
  754|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  755|      0|		break;
  756|       |
  757|    132|	case VIPS_INTERPRETATION_LABS:
  ------------------
  |  Branch (757:2): [True: 132, False: 4.35k]
  ------------------
  758|       |		/* Needs to be able to express +/- 32767
  759|       |		 */
  760|    132|		if (vips_band_format_isuint(image->BandFmt) ||
  ------------------
  |  Branch (760:7): [True: 0, False: 132]
  ------------------
  761|    132|			vips_band_format_is8bit(image->BandFmt) ||
  ------------------
  |  Branch (761:4): [True: 0, False: 132]
  ------------------
  762|    132|			image->Bands < 3)
  ------------------
  |  Branch (762:4): [True: 0, False: 132]
  ------------------
  763|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  764|    132|		break;
  765|       |
  766|      0|	case VIPS_INTERPRETATION_RGB16:
  ------------------
  |  Branch (766:2): [True: 0, False: 4.48k]
  ------------------
  767|      0|		if (vips_band_format_is8bit(image->BandFmt) ||
  ------------------
  |  Branch (767:7): [True: 0, False: 0]
  ------------------
  768|      0|			image->Bands < 3)
  ------------------
  |  Branch (768:4): [True: 0, False: 0]
  ------------------
  769|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  770|      0|		break;
  771|       |
  772|    354|	case VIPS_INTERPRETATION_GREY16:
  ------------------
  |  Branch (772:2): [True: 354, False: 4.13k]
  ------------------
  773|    354|		if (vips_band_format_is8bit(image->BandFmt))
  ------------------
  |  Branch (773:7): [True: 0, False: 354]
  ------------------
  774|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  775|    354|		break;
  776|       |
  777|      0|	case VIPS_INTERPRETATION_MATRIX:
  ------------------
  |  Branch (777:2): [True: 0, False: 4.48k]
  ------------------
  778|      0|		if (image->Bands != 1)
  ------------------
  |  Branch (778:7): [True: 0, False: 0]
  ------------------
  779|      0|			sane = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  780|      0|		break;
  781|       |
  782|      0|	default:
  ------------------
  |  Branch (782:2): [True: 0, False: 4.48k]
  ------------------
  783|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  784|  4.48k|	}
  785|       |
  786|  4.48k|	if (sane)
  ------------------
  |  Branch (786:6): [True: 3.82k, False: 659]
  ------------------
  787|  3.82k|		return vips_image_get_interpretation(image);
  788|    659|	else
  789|    659|		return vips_image_default_interpretation(image);
  790|  4.48k|}
vips_image_get_concurrency:
  972|  79.0k|{
  973|  79.0k|	int concurrency;
  974|       |
  975|  79.0k|	if (vips_image_get_typeof(image, VIPS_META_CONCURRENCY) &&
  ------------------
  |  |  179|  79.0k|#define VIPS_META_CONCURRENCY "concurrency"
  ------------------
  |  Branch (975:6): [True: 0, False: 79.0k]
  ------------------
  976|  79.0k|		!vips_image_get_int(image,
  ------------------
  |  Branch (976:3): [True: 0, False: 0]
  ------------------
  977|      0|			VIPS_META_CONCURRENCY, &concurrency) &&
  ------------------
  |  |  179|      0|#define VIPS_META_CONCURRENCY "concurrency"
  ------------------
  978|  79.0k|		concurrency >= 1 &&
  ------------------
  |  Branch (978:3): [True: 0, False: 0]
  ------------------
  979|  79.0k|		concurrency < 100)
  ------------------
  |  Branch (979:3): [True: 0, False: 0]
  ------------------
  980|      0|		return concurrency;
  981|       |
  982|  79.0k|	return default_concurrency;
  983|  79.0k|}
vips_image_init_fields:
 1100|  35.4k|{
 1101|  35.4k|	g_object_set(image,
 1102|  35.4k|		"width", xsize,
 1103|  35.4k|		"height", ysize,
 1104|  35.4k|		"bands", bands,
 1105|  35.4k|		"format", format,
 1106|  35.4k|		NULL);
 1107|       |
 1108|  35.4k|	image->Coding = coding;
 1109|  35.4k|	image->Type = interpretation;
 1110|  35.4k|	image->Xres = VIPS_MAX(0, xres);
  ------------------
  |  |   54|  35.4k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 35.4k]
  |  |  ------------------
  ------------------
 1111|  35.4k|	image->Yres = VIPS_MAX(0, yres);
  ------------------
  |  |   54|  35.4k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 35.4k]
  |  |  ------------------
  ------------------
 1112|  35.4k|}
vips__image_meta_copy:
 1141|   157k|{
 1142|   157k|	if (src->meta) {
  ------------------
  |  Branch (1142:6): [True: 152k, False: 5.13k]
  ------------------
 1143|       |		/* We lock with vips_image_set() to stop races in highly-
 1144|       |		 * threaded applications.
 1145|       |		 */
 1146|   152k|		g_mutex_lock(&vips__meta_lock);
 1147|   152k|		meta_init(dst);
 1148|   152k|		vips_slist_map2(src->meta_traverse,
 1149|   152k|			(VipsSListMap2Fn) meta_cp_field, dst, NULL);
 1150|   152k|		g_mutex_unlock(&vips__meta_lock);
 1151|   152k|	}
 1152|       |
 1153|   157k|	return 0;
 1154|   157k|}
vips__image_copy_fields_array:
 1161|   156k|{
 1162|   156k|	int i;
 1163|   156k|	int ni;
 1164|       |
 1165|   156k|	g_assert(in[0]);
  ------------------
  |  |  166|   156k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   156k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   156k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1166|       |
 1167|       |	/* Copy magic too, handy for knowing the original image's byte order.
 1168|       |	 */
 1169|   156k|	out->magic = in[0]->magic;
 1170|       |
 1171|   156k|	out->Xsize = in[0]->Xsize;
 1172|   156k|	out->Ysize = in[0]->Ysize;
 1173|   156k|	out->Bands = in[0]->Bands;
 1174|   156k|	out->Bbits = in[0]->Bbits;
 1175|   156k|	out->BandFmt = in[0]->BandFmt;
 1176|   156k|	out->Type = in[0]->Type;
 1177|   156k|	out->Coding = in[0]->Coding;
 1178|   156k|	out->Xres = in[0]->Xres;
 1179|   156k|	out->Yres = in[0]->Yres;
 1180|   156k|	out->Xoffset = in[0]->Xoffset;
 1181|   156k|	out->Yoffset = in[0]->Yoffset;
 1182|       |
 1183|       |	/* Count number of images.
 1184|       |	 */
 1185|   313k|	for (ni = 0; in[ni]; ni++)
  ------------------
  |  Branch (1185:15): [True: 157k, False: 156k]
  ------------------
 1186|   157k|		;
 1187|       |
 1188|       |	/* Need to copy last-to-first so that in0 meta will override any
 1189|       |	 * earlier meta.
 1190|       |	 *
 1191|       |	 * Don't destroy the meta on out. Things like foreign.c like setting
 1192|       |	 * image properties before calling a subclass loader, and those
 1193|       |	 * subclass loaders will sometimes write to an image.
 1194|       |	 */
 1195|   313k|	for (i = ni - 1; i >= 0; i--)
  ------------------
  |  Branch (1195:19): [True: 157k, False: 156k]
  ------------------
 1196|   157k|		if (vips__image_meta_copy(out, in[i]))
  ------------------
  |  Branch (1196:7): [True: 0, False: 157k]
  ------------------
 1197|      0|			return -1;
 1198|       |
 1199|       |	/* Merge hists first to last.
 1200|       |	 */
 1201|   313k|	for (i = 0; in[i]; i++)
  ------------------
  |  Branch (1201:14): [True: 157k, False: 156k]
  ------------------
 1202|   157k|		out->history_list = vips__gslist_gvalue_merge(
 1203|   157k|			out->history_list, in[i]->history_list);
 1204|       |
 1205|   156k|	return 0;
 1206|   156k|}
vips_image_set:
 1234|   543k|{
 1235|   543k|	g_assert(name);
  ------------------
  |  |  166|   543k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   543k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   543k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1236|   543k|	g_assert(value);
  ------------------
  |  |  166|   543k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   543k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   543k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1237|       |
 1238|       |	/* We lock between modifying metadata and copying metadata between
 1239|       |	 * images, see vips__image_meta_copy().
 1240|       |	 *
 1241|       |	 * This prevents modification of metadata by one thread racing with
 1242|       |	 * metadata copy on another -- this can lead to crashes in
 1243|       |	 * highly-threaded applications.
 1244|       |	 */
 1245|   543k|	g_mutex_lock(&vips__meta_lock);
 1246|   543k|	meta_init(image);
 1247|   543k|	(void) meta_new(image, name, value);
 1248|   543k|	g_mutex_unlock(&vips__meta_lock);
 1249|       |
 1250|       |	/* If we're setting an EXIF data block, we need to automatically expand
 1251|       |	 * out all the tags. This will set things like xres/yres too.
 1252|       |	 *
 1253|       |	 * We do this here rather than in meta_new() since we don't want to
 1254|       |	 * trigger on copy_fields.
 1255|       |	 */
 1256|   543k|	if (strcmp(name, VIPS_META_EXIF_NAME) == 0)
  ------------------
  |  |   46|   543k|#define VIPS_META_EXIF_NAME "exif-data"
  ------------------
  |  Branch (1256:6): [True: 23.8k, False: 519k]
  ------------------
 1257|  23.8k|		if (vips__exif_parse(image))
  ------------------
  |  Branch (1257:7): [True: 0, False: 23.8k]
  ------------------
 1258|      0|			g_warning("image_set: bad exif data");
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1259|       |
 1260|       |#ifdef DEBUG
 1261|       |	meta_sanity(image);
 1262|       |#endif /*DEBUG*/
 1263|   543k|}
vips_image_get:
 1337|   747k|{
 1338|   747k|	int i;
 1339|   747k|	VipsMeta *meta;
 1340|       |
 1341|   747k|	g_assert(name);
  ------------------
  |  |  166|   747k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   747k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   747k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1342|   747k|	g_assert(value_copy);
  ------------------
  |  |  166|   747k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   747k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   747k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1343|       |
 1344|  5.13M|	for (i = 0; i < VIPS_NUMBER(vips_header_fields); i++) {
  ------------------
  |  |   60|  5.13M|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (1344:14): [True: 5.02M, False: 108k]
  ------------------
 1345|  5.02M|		HeaderField *field = &vips_header_fields[i];
 1346|       |
 1347|  5.02M|		if (strcmp(field->name, name) == 0) {
  ------------------
  |  Branch (1347:7): [True: 639k, False: 4.39M]
  ------------------
 1348|   639k|			GType gtype = g_type_from_name(field->type);
 1349|       |
 1350|   639k|			g_value_init(value_copy, gtype);
 1351|   639k|			vips_set_value_from_pointer(value_copy,
 1352|   639k|				G_STRUCT_MEMBER_P(image, field->offset));
  ------------------
  |  |  840|   639k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  ------------------
 1353|       |
 1354|   639k|			return 0;
 1355|   639k|		}
 1356|  5.02M|	}
 1357|       |
 1358|  1.30M|	for (i = 0; i < VIPS_NUMBER(vips_header_fields_old); i++) {
  ------------------
  |  |   60|  1.30M|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (1358:14): [True: 1.19M, False: 108k]
  ------------------
 1359|  1.19M|		HeaderField *field = &vips_header_fields_old[i];
 1360|       |
 1361|  1.19M|		if (strcmp(field->name, name) == 0) {
  ------------------
  |  Branch (1361:7): [True: 0, False: 1.19M]
  ------------------
 1362|      0|			GType gtype = g_type_from_name(field->type);
 1363|       |
 1364|      0|			g_value_init(value_copy, gtype);
 1365|      0|			vips_set_value_from_pointer(value_copy,
 1366|      0|				G_STRUCT_MEMBER_P(image, field->offset));
  ------------------
  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  ------------------
 1367|       |
 1368|      0|			return 0;
 1369|      0|		}
 1370|  1.19M|	}
 1371|       |
 1372|   108k|	if (image->meta &&
  ------------------
  |  Branch (1372:6): [True: 108k, False: 0]
  ------------------
 1373|   108k|		(meta = g_hash_table_lookup(image->meta, name))) {
  ------------------
  |  Branch (1373:3): [True: 108k, False: 0]
  ------------------
 1374|   108k|		g_value_init(value_copy, G_VALUE_TYPE(&meta->value));
  ------------------
  |  |   59|   108k|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
 1375|   108k|		g_value_copy(&meta->value, value_copy);
 1376|       |
 1377|   108k|		return 0;
 1378|   108k|	}
 1379|       |
 1380|      0|	vips_error("vips_image_get", _("field \"%s\" not found"), name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1381|       |
 1382|      0|	return -1;
 1383|   108k|}
vips_image_get_typeof:
 1400|   429k|{
 1401|   429k|	int i;
 1402|   429k|	VipsMeta *meta;
 1403|       |
 1404|   429k|	g_assert(name);
  ------------------
  |  |  166|   429k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   429k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   429k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1405|       |
 1406|  5.15M|	for (i = 0; i < VIPS_NUMBER(vips_header_fields); i++) {
  ------------------
  |  |   60|  5.15M|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (1406:14): [True: 4.72M, False: 429k]
  ------------------
 1407|  4.72M|		HeaderField *field = &vips_header_fields[i];
 1408|       |
 1409|  4.72M|		if (strcmp(field->name, name) == 0)
  ------------------
  |  Branch (1409:7): [True: 0, False: 4.72M]
  ------------------
 1410|      0|			return g_type_from_name(field->type);
 1411|  4.72M|	}
 1412|       |
 1413|  5.15M|	for (i = 0; i < VIPS_NUMBER(vips_header_fields_old); i++) {
  ------------------
  |  |   60|  5.15M|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (1413:14): [True: 4.72M, False: 429k]
  ------------------
 1414|  4.72M|		HeaderField *field = &vips_header_fields_old[i];
 1415|       |
 1416|  4.72M|		if (strcmp(field->name, name) == 0)
  ------------------
  |  Branch (1416:7): [True: 0, False: 4.72M]
  ------------------
 1417|      0|			return g_type_from_name(field->type);
 1418|  4.72M|	}
 1419|       |
 1420|   429k|	if (image->meta &&
  ------------------
  |  Branch (1420:6): [True: 420k, False: 9.01k]
  ------------------
 1421|   429k|		(meta = g_hash_table_lookup(image->meta, name)))
  ------------------
  |  Branch (1421:3): [True: 93.9k, False: 326k]
  ------------------
 1422|  93.9k|		return G_VALUE_TYPE(&meta->value);
  ------------------
  |  |   59|  93.9k|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
 1423|       |
 1424|   429k|	VIPS_DEBUG_MSG("vips_image_get_typeof: unknown field %s\n", name);
  ------------------
  |  |   47|   335k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   335k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   335k|	{ \
  |  |   49|   335k|		; \
  |  |   50|   335k|	} \
  |  |   51|   429k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   429k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1425|       |
 1426|   335k|	return 0;
 1427|   429k|}
vips_image_remove:
 1443|  16.3k|{
 1444|  16.3k|	gboolean result;
 1445|       |
 1446|  16.3k|	result = FALSE;
  ------------------
  |  |  794|  16.3k|#define	FALSE	(0)
  ------------------
 1447|       |
 1448|  16.3k|	if (image->meta) {
  ------------------
  |  Branch (1448:6): [True: 8.96k, False: 7.40k]
  ------------------
 1449|       |		/* We lock between modifying metadata and copying metadata
 1450|       |		 * between images, see vips__image_meta_copy().
 1451|       |		 *
 1452|       |		 * This prevents modification of metadata by one thread
 1453|       |		 * racing with metadata copy on another -- this can lead to
 1454|       |		 * crashes in highly-threaded applications.
 1455|       |		 */
 1456|  8.96k|		g_mutex_lock(&vips__meta_lock);
 1457|  8.96k|		result = g_hash_table_remove(image->meta, name);
 1458|  8.96k|		g_mutex_unlock(&vips__meta_lock);
 1459|  8.96k|	}
 1460|       |
 1461|  16.3k|	return result;
 1462|  16.3k|}
vips_image_map:
 1506|  58.1k|{
 1507|  58.1k|	int i;
 1508|  58.1k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  58.1k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1509|  58.1k|	void *result;
 1510|       |
 1511|   697k|	for (i = 0; i < VIPS_NUMBER(vips_header_fields); i++) {
  ------------------
  |  |   60|   697k|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (1511:14): [True: 639k, False: 58.1k]
  ------------------
 1512|   639k|		HeaderField *field = &vips_header_fields[i];
 1513|       |
 1514|   639k|		(void) vips_image_get(image, field->name, &value);
 1515|   639k|		result = fn(image, field->name, &value, a);
 1516|   639k|		g_value_unset(&value);
 1517|       |
 1518|   639k|		if (result)
  ------------------
  |  Branch (1518:7): [True: 0, False: 639k]
  ------------------
 1519|      0|			return result;
 1520|   639k|	}
 1521|       |
 1522|  58.1k|	if (image->meta_traverse &&
  ------------------
  |  Branch (1522:6): [True: 50.7k, False: 7.40k]
  ------------------
 1523|  58.1k|		(result = vips_slist_map2(image->meta_traverse,
  ------------------
  |  Branch (1523:3): [True: 0, False: 50.7k]
  ------------------
 1524|  50.7k|			 (VipsSListMap2Fn) vips_image_map_fn, fn, a)))
 1525|      0|		return result;
 1526|       |
 1527|  58.1k|	return NULL;
 1528|  58.1k|}
vips_image_set_blob:
 1673|  25.4k|{
 1674|  25.4k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  25.4k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1675|       |
 1676|  25.4k|	g_value_init(&value, VIPS_TYPE_BLOB);
  ------------------
  |  |  177|  25.4k|#define VIPS_TYPE_BLOB (vips_blob_get_type())
  ------------------
 1677|  25.4k|	vips_value_set_blob(&value, free_fn, data, size);
 1678|  25.4k|	vips_image_set(image, name, &value);
 1679|  25.4k|	g_value_unset(&value);
 1680|  25.4k|}
vips_image_set_blob_copy:
 1697|  26.4k|{
 1698|  26.4k|	void *data_copy;
 1699|       |
 1700|       |	/* Cap at 100mb for sanity.
 1701|       |	 */
 1702|  26.4k|	if (!data ||
  ------------------
  |  Branch (1702:6): [True: 23.6k, False: 2.81k]
  ------------------
 1703|  26.4k|		length == 0 ||
  ------------------
  |  Branch (1703:3): [True: 0, False: 2.81k]
  ------------------
 1704|  26.4k|		length > 100 * 1024 * 1024)
  ------------------
  |  Branch (1704:3): [True: 0, False: 2.81k]
  ------------------
 1705|  23.6k|		return;
 1706|       |
 1707|       |	/* We add an extra, secret null byte at the end, just in case this blob
 1708|       |	 * is read as a C string. The libtiff reader attaches
 1709|       |	 * XMP XML as a blob, for example.
 1710|       |	 */
 1711|  2.81k|	if (!(data_copy = vips_malloc(NULL, length + 1)))
  ------------------
  |  Branch (1711:6): [True: 0, False: 2.81k]
  ------------------
 1712|      0|		return;
 1713|  2.81k|	memcpy(data_copy, data, length);
 1714|  2.81k|	((unsigned char *) data_copy)[length] = '\0';
 1715|       |
 1716|  2.81k|	vips_image_set_blob(image,
 1717|  2.81k|		name, (VipsCallbackFn) vips_area_free_cb, data_copy, length);
 1718|  2.81k|}
vips_image_get_blob:
 1738|  46.6k|{
 1739|  46.6k|	GValue value_copy = G_VALUE_INIT;
  ------------------
  |  |  191|  46.6k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1740|       |
 1741|  46.6k|	if (!meta_get_value(image, name, VIPS_TYPE_BLOB, &value_copy)) {
  ------------------
  |  |  177|  46.6k|#define VIPS_TYPE_BLOB (vips_blob_get_type())
  ------------------
  |  Branch (1741:6): [True: 46.6k, False: 0]
  ------------------
 1742|  46.6k|		*data = vips_value_get_blob(&value_copy, length);
 1743|  46.6k|		g_value_unset(&value_copy);
 1744|  46.6k|		return 0;
 1745|  46.6k|	}
 1746|       |
 1747|      0|	return -1;
 1748|  46.6k|}
vips_image_get_int:
 1766|  6.91k|{
 1767|  6.91k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  6.91k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1768|       |
 1769|  6.91k|	if (meta_get_value(image, name, G_TYPE_INT, &value))
  ------------------
  |  |   94|  6.91k|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|  6.91k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  6.91k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1769:6): [True: 0, False: 6.91k]
  ------------------
 1770|      0|		return -1;
 1771|  6.91k|	*out = g_value_get_int(&value);
 1772|  6.91k|	g_value_unset(&value);
 1773|       |
 1774|  6.91k|	return 0;
 1775|  6.91k|}
vips_image_set_int:
 1791|   149k|{
 1792|   149k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|   149k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1793|       |
 1794|   149k|	g_value_init(&value, G_TYPE_INT);
  ------------------
  |  |   94|   149k|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|   149k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|   149k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1795|   149k|	g_value_set_int(&value, i);
 1796|   149k|	vips_image_set(image, name, &value);
 1797|   149k|	g_value_unset(&value);
 1798|   149k|}
vips_image_set_double:
 1841|  6.97k|{
 1842|  6.97k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  6.97k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1843|       |
 1844|  6.97k|	g_value_init(&value, G_TYPE_DOUBLE);
  ------------------
  |  |  148|  6.97k|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  221|  6.97k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  6.97k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1845|  6.97k|	g_value_set_double(&value, d);
 1846|  6.97k|	vips_image_set(image, name, &value);
 1847|  6.97k|	g_value_unset(&value);
 1848|  6.97k|}
vips_image_get_string:
 1871|  55.0k|{
 1872|  55.0k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  55.0k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1873|       |
 1874|  55.0k|	if (vips_image_get(image, name, &value))
  ------------------
  |  Branch (1874:6): [True: 0, False: 55.0k]
  ------------------
 1875|      0|		return -1;
 1876|       |
 1877|  55.0k|	if (G_VALUE_TYPE(&value) == VIPS_TYPE_REF_STRING) {
  ------------------
  |  |   59|  55.0k|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
              	if (G_VALUE_TYPE(&value) == VIPS_TYPE_REF_STRING) {
  ------------------
  |  |  159|  55.0k|#define VIPS_TYPE_REF_STRING (vips_ref_string_get_type())
  ------------------
  |  Branch (1877:6): [True: 55.0k, False: 0]
  ------------------
 1878|  55.0k|		VipsArea *area;
 1879|       |
 1880|  55.0k|		area = g_value_get_boxed(&value);
 1881|  55.0k|		*out = area->data;
 1882|  55.0k|	}
 1883|      0|	else if (G_VALUE_TYPE(&value) == G_TYPE_STRING) {
  ------------------
  |  |   59|      0|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
              	else if (G_VALUE_TYPE(&value) == G_TYPE_STRING) {
  ------------------
  |  |  154|      0|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  221|      0|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1883:11): [True: 0, False: 0]
  ------------------
 1884|      0|		*out = g_value_get_string(&value);
 1885|      0|	}
 1886|      0|	else {
 1887|      0|		vips_error("VipsImage",
 1888|      0|			_("field \"%s\" is of type %s, not VipsRefString"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1889|      0|			name,
 1890|      0|			g_type_name(G_VALUE_TYPE(&value)));
  ------------------
  |  |   59|      0|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
 1891|      0|		g_value_unset(&value);
 1892|       |
 1893|      0|		return -1;
 1894|      0|	}
 1895|       |
 1896|  55.0k|	g_value_unset(&value);
 1897|       |
 1898|  55.0k|	return 0;
 1899|  55.0k|}
vips_image_set_string:
 1915|   359k|{
 1916|   359k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|   359k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1917|       |
 1918|   359k|	g_value_init(&value, VIPS_TYPE_REF_STRING);
  ------------------
  |  |  159|   359k|#define VIPS_TYPE_REF_STRING (vips_ref_string_get_type())
  ------------------
 1919|   359k|	vips_value_set_ref_string(&value, str);
 1920|   359k|	vips_image_set(image, name, &value);
 1921|   359k|	g_value_unset(&value);
 1922|   359k|}
vips_image_set_array_int:
 2096|  1.40k|{
 2097|  1.40k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  1.40k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 2098|       |
 2099|  1.40k|	g_value_init(&value, VIPS_TYPE_ARRAY_INT);
  ------------------
  |  |  221|  1.40k|#define VIPS_TYPE_ARRAY_INT (vips_array_int_get_type())
  ------------------
 2100|  1.40k|	vips_value_set_array_int(&value, array, n);
 2101|  1.40k|	vips_image_set(image, name, &value);
 2102|  1.40k|	g_value_unset(&value);
 2103|  1.40k|}
vips_image_set_array_double:
 2154|    769|{
 2155|    769|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|    769|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 2156|       |
 2157|    769|	g_value_init(&value, VIPS_TYPE_ARRAY_DOUBLE);
  ------------------
  |  |  201|    769|#define VIPS_TYPE_ARRAY_DOUBLE (vips_array_double_get_type())
  ------------------
 2158|    769|	vips_value_set_array_double(&value, array, n);
 2159|    769|	vips_image_set(image, name, &value);
 2160|    769|	g_value_unset(&value);
 2161|    769|}
header.c:vips_image_default_interpretation:
  595|    659|{
  596|    659|	switch (image->Coding) {
  597|      0|	case VIPS_CODING_LABQ:
  ------------------
  |  Branch (597:2): [True: 0, False: 659]
  ------------------
  598|      0|		return VIPS_INTERPRETATION_LABQ;
  599|      0|	case VIPS_CODING_RAD:
  ------------------
  |  Branch (599:2): [True: 0, False: 659]
  ------------------
  600|      0|		return VIPS_INTERPRETATION_sRGB;
  601|    659|	default:
  ------------------
  |  Branch (601:2): [True: 659, False: 0]
  ------------------
  602|    659|		break;
  603|    659|	}
  604|       |
  605|    659|	switch (image->BandFmt) {
  606|    108|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (606:2): [True: 108, False: 551]
  ------------------
  607|    172|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (607:2): [True: 64, False: 595]
  ------------------
  608|    262|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (608:2): [True: 90, False: 569]
  ------------------
  609|    374|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (609:2): [True: 112, False: 547]
  ------------------
  610|    502|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (610:2): [True: 128, False: 531]
  ------------------
  611|    502|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (611:2): [True: 0, False: 659]
  ------------------
  612|    502|		switch (image->Bands) {
  613|      0|		case 1:
  ------------------
  |  Branch (613:3): [True: 0, False: 502]
  ------------------
  614|      0|		case 2:
  ------------------
  |  Branch (614:3): [True: 0, False: 502]
  ------------------
  615|      0|			return VIPS_INTERPRETATION_B_W;
  616|       |
  617|    356|		case 3:
  ------------------
  |  Branch (617:3): [True: 356, False: 146]
  ------------------
  618|    502|		case 4:
  ------------------
  |  Branch (618:3): [True: 146, False: 356]
  ------------------
  619|       |			// we don't send float/double to scrgb, that's very likely to
  620|       |			// cause much more confusion, since "linear" makes float rgg all
  621|       |			// the time
  622|       |			//
  623|       |			// we do send u16 to rgb16/grey16 since that's a common case,
  624|       |			// see below
  625|    502|			return VIPS_INTERPRETATION_sRGB;
  626|       |
  627|      0|		default:
  ------------------
  |  Branch (627:3): [True: 0, False: 502]
  ------------------
  628|      0|			return VIPS_INTERPRETATION_MULTIBAND;
  629|    502|		}
  630|       |
  631|     33|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (631:2): [True: 33, False: 626]
  ------------------
  632|     33|		switch (image->Bands) {
  633|      0|		case 1:
  ------------------
  |  Branch (633:3): [True: 0, False: 33]
  ------------------
  634|      0|			return VIPS_INTERPRETATION_MATRIX;
  635|       |
  636|     33|		default:
  ------------------
  |  Branch (636:3): [True: 33, False: 0]
  ------------------
  637|     33|			return VIPS_INTERPRETATION_MULTIBAND;
  638|     33|		}
  639|       |
  640|    124|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (640:2): [True: 124, False: 535]
  ------------------
  641|    124|		switch (image->Bands) {
  642|      0|		case 1:
  ------------------
  |  Branch (642:3): [True: 0, False: 124]
  ------------------
  643|      0|		case 2:
  ------------------
  |  Branch (643:3): [True: 0, False: 124]
  ------------------
  644|      0|			return VIPS_INTERPRETATION_GREY16;
  645|       |
  646|     46|		case 3:
  ------------------
  |  Branch (646:3): [True: 46, False: 78]
  ------------------
  647|    124|		case 4:
  ------------------
  |  Branch (647:3): [True: 78, False: 46]
  ------------------
  648|    124|			return VIPS_INTERPRETATION_RGB16;
  649|       |
  650|      0|		default:
  ------------------
  |  Branch (650:3): [True: 0, False: 124]
  ------------------
  651|      0|			return VIPS_INTERPRETATION_MULTIBAND;
  652|    124|		}
  653|       |
  654|      0|	case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (654:2): [True: 0, False: 659]
  ------------------
  655|      0|	case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (655:2): [True: 0, False: 659]
  ------------------
  656|      0|		return VIPS_INTERPRETATION_FOURIER;
  657|       |
  658|      0|	default:
  ------------------
  |  Branch (658:2): [True: 0, False: 659]
  ------------------
  659|      0|		return VIPS_INTERPRETATION_MULTIBAND;
  660|    659|	}
  661|    659|}
header.c:meta_init:
  382|   695k|{
  383|   695k|	if (!im->meta) {
  ------------------
  |  Branch (383:6): [True: 191k, False: 503k]
  ------------------
  384|   191k|		g_assert(!im->meta_traverse);
  ------------------
  |  |  166|   191k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   191k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   191k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|   191k|		im->meta = g_hash_table_new_full(g_str_hash, g_str_equal,
  386|   191k|			NULL, (GDestroyNotify) meta_free);
  387|   191k|	}
  388|   695k|}
header.c:meta_free:
  307|  1.49M|{
  308|       |#ifdef DEBUG
  309|       |	{
  310|       |		char *str_value;
  311|       |
  312|       |		str_value = g_strdup_value_contents(&meta->value);
  313|       |		printf("meta_free: name %s, value = %s\n",
  314|       |			meta->name, str_value);
  315|       |		g_free(str_value);
  316|       |	}
  317|       |#endif /*DEBUG*/
  318|       |
  319|  1.49M|	if (meta->im)
  ------------------
  |  Branch (319:6): [True: 1.49M, False: 0]
  ------------------
  320|  1.49M|		meta->im->meta_traverse =
  321|  1.49M|			g_slist_remove(meta->im->meta_traverse, meta);
  322|       |
  323|  1.49M|	g_value_unset(&meta->value);
  324|  1.49M|	g_free(meta->name);
  325|  1.49M|	g_free(meta);
  326|  1.49M|}
header.c:meta_cp_field:
 1116|   956k|{
 1117|       |#ifdef DEBUG
 1118|       |	{
 1119|       |		char *str_value;
 1120|       |
 1121|       |		str_value = g_strdup_value_contents(&meta->value);
 1122|       |		printf("vips__meta_cp: copying name %s, value = %s\n",
 1123|       |			meta->name, str_value);
 1124|       |		g_free(str_value);
 1125|       |	}
 1126|       |#endif /*DEBUG*/
 1127|       |
 1128|   956k|	(void) meta_new(dst, meta->name, &meta->value);
 1129|       |
 1130|       |#ifdef DEBUG
 1131|       |	meta_sanity(dst);
 1132|       |#endif /*DEBUG*/
 1133|       |
 1134|   956k|	return NULL;
 1135|   956k|}
header.c:meta_new:
  330|  1.50M|{
  331|  1.50M|	VipsMeta *meta;
  332|       |
  333|  1.50M|	meta = g_new(VipsMeta, 1);
  ------------------
  |  |  282|  1.50M|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|  1.50M|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  1.50M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  1.50M|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  1.50M|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  1.50M|	  gpointer __p;						\
  |  |  |  |  231|  1.50M|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 1.50M]
  |  |  |  |  ------------------
  |  |  |  |  232|  1.50M|	    __p = g_##func (__n);				\
  |  |  |  |  233|  1.50M|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 1.50M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|  1.50M|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 1.50M]
  |  |  |  |  |  Branch (234:26): [True: 1.50M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  1.50M|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  1.50M|	  else							\
  |  |  |  |  237|  1.50M|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  1.50M|	  __p;							\
  |  |  |  |  239|  1.50M|	}))
  |  |  ------------------
  ------------------
  334|  1.50M|	meta->im = image;
  335|  1.50M|	meta->name = NULL;
  336|  1.50M|	memset(&meta->value, 0, sizeof(GValue));
  337|  1.50M|	meta->name = g_strdup(name);
  338|       |
  339|       |	/* Special case: we don't want to have G_STRING on meta. They will be
  340|       |	 * copied down pipelines, plus some of our API (like
  341|       |	 * vips_image_get_string()) assumes that the GValue is a refstring and
  342|       |	 * that read-only pointers can be handed out.
  343|       |	 *
  344|       |	 * Turn G_TYPE_STRING into VIPS_TYPE_REF_STRING.
  345|       |	 */
  346|  1.50M|	if (G_VALUE_TYPE(value) == G_TYPE_STRING)
  ------------------
  |  |   59|  1.50M|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
              	if (G_VALUE_TYPE(value) == G_TYPE_STRING)
  ------------------
  |  |  154|  1.50M|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  221|  1.50M|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  1.50M|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (346:6): [True: 0, False: 1.50M]
  ------------------
  347|      0|		g_value_init(&meta->value, VIPS_TYPE_REF_STRING);
  ------------------
  |  |  159|      0|#define VIPS_TYPE_REF_STRING (vips_ref_string_get_type())
  ------------------
  348|  1.50M|	else
  349|  1.50M|		g_value_init(&meta->value, G_VALUE_TYPE(value));
  ------------------
  |  |   59|  1.50M|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
  350|       |
  351|       |	/* We don't do any conversions that can fail.
  352|       |	 */
  353|  1.50M|	(void) g_value_transform(value, &meta->value);
  354|       |
  355|  1.50M|	image->meta_traverse = g_slist_append(image->meta_traverse, meta);
  356|  1.50M|	g_hash_table_replace(image->meta, meta->name, meta);
  357|       |
  358|       |#ifdef DEBUG
  359|       |	{
  360|       |		char *str_value;
  361|       |
  362|       |		str_value = g_strdup_value_contents(value);
  363|       |		printf("meta_new: name %s, value = %s\n", name, str_value);
  364|       |		g_free(str_value);
  365|       |	}
  366|       |#endif /*DEBUG*/
  367|       |
  368|  1.50M|	return meta;
  369|  1.50M|}
header.c:vips_set_value_from_pointer:
 1270|   639k|{
 1271|   639k|	GType type = G_VALUE_TYPE(value);
  ------------------
  |  |   59|   639k|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
 1272|       |
 1273|       |	/* The fundamental type ... eg. G_TYPE_ENUM for a VIPS_TYPE_KERNEL,
 1274|       |	 * or G_TYPE_OBJECT for VIPS_TYPE_IMAGE().
 1275|       |	 */
 1276|   639k|	GType fundamental = G_TYPE_FUNDAMENTAL(type);
  ------------------
  |  |   38|   639k|#define G_TYPE_FUNDAMENTAL(type)	(g_type_fundamental (type))
  ------------------
 1277|       |
 1278|   639k|	if (fundamental == G_TYPE_INT)
  ------------------
  |  |   94|   639k|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|   639k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|   639k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1278:6): [True: 290k, False: 348k]
  ------------------
 1279|   290k|		g_value_set_int(value, *((int *) data));
 1280|   348k|	else if (fundamental == G_TYPE_DOUBLE)
  ------------------
  |  |  148|   348k|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  221|   348k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|   348k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1280:11): [True: 116k, False: 232k]
  ------------------
 1281|   116k|		g_value_set_double(value, *((double *) data));
 1282|   232k|	else if (fundamental == G_TYPE_ENUM)
  ------------------
  |  |  130|   232k|#define G_TYPE_ENUM			G_TYPE_MAKE_FUNDAMENTAL (12)
  |  |  ------------------
  |  |  |  |  221|   232k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|   232k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1282:11): [True: 174k, False: 58.1k]
  ------------------
 1283|   174k|		g_value_set_enum(value, *((int *) data));
 1284|  58.1k|	else if (fundamental == G_TYPE_STRING)
  ------------------
  |  |  154|  58.1k|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  221|  58.1k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  58.1k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1284:11): [True: 58.1k, False: 0]
  ------------------
 1285|       |		// we don't want to copy the string (ie. the filename, usually) since
 1286|       |		// it'll then be freed when the value is unset ... instead we must
 1287|       |		// directly use the pointer owned by the VipsImage
 1288|  58.1k|		g_value_set_static_string(value, *((char **) data));
 1289|      0|	else
 1290|      0|		g_warning("%s: unimplemented vips_set_value_from_pointer() type %s",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1291|   639k|			G_STRLOC,
 1292|   639k|			g_type_name(type));
 1293|   639k|}
header.c:vips_image_map_fn:
 1476|   531k|{
 1477|   531k|	int i;
 1478|       |
 1479|       |	/* Hide deprecated fields.
 1480|       |	 */
 1481|  3.16M|	for (i = 0; i < VIPS_NUMBER(vips_image_header_deprecated); i++)
  ------------------
  |  |   60|  3.16M|#define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0])))
  ------------------
  |  Branch (1481:14): [True: 2.65M, False: 514k]
  ------------------
 1482|  2.65M|		if (strcmp(meta->name, vips_image_header_deprecated[i]) == 0)
  ------------------
  |  Branch (1482:7): [True: 17.0k, False: 2.63M]
  ------------------
 1483|  17.0k|			return NULL;
 1484|       |
 1485|   514k|	return fn(meta->im, meta->name, &meta->value, a);
 1486|   531k|}
header.c:meta_get_value:
 1606|  53.5k|{
 1607|  53.5k|	GValue value = G_VALUE_INIT;
  ------------------
  |  |  191|  53.5k|#define G_VALUE_INIT  { 0, { { 0 } } }
  ------------------
 1608|       |
 1609|  53.5k|	if (vips_image_get(image, name, &value))
  ------------------
  |  Branch (1609:6): [True: 0, False: 53.5k]
  ------------------
 1610|      0|		return -1;
 1611|  53.5k|	g_value_init(value_copy, type);
 1612|  53.5k|	if (!g_value_transform(&value, value_copy)) {
  ------------------
  |  Branch (1612:6): [True: 0, False: 53.5k]
  ------------------
 1613|      0|		vips_error("VipsImage",
 1614|      0|			_("field \"%s\" is of type %s, not %s"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1615|      0|			name,
 1616|      0|			g_type_name(G_VALUE_TYPE(&value)),
  ------------------
  |  |   59|      0|#define	G_VALUE_TYPE(value)		(((GValue*) (value))->g_type)
  ------------------
 1617|      0|			g_type_name(type));
 1618|      0|		g_value_unset(&value);
 1619|       |
 1620|      0|		return -1;
 1621|      0|	}
 1622|  53.5k|	g_value_unset(&value);
 1623|       |
 1624|  53.5k|	return 0;
 1625|  53.5k|}

vips_image_written:
 1364|   178k|{
 1365|   178k|	int result;
 1366|       |
 1367|   178k|	VIPS_DEBUG_MSG("vips_image_written: %p\n", image);
  ------------------
  |  |   47|   178k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   178k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   178k|	{ \
  |  |   49|   178k|		; \
  |  |   50|   178k|	} \
  |  |   51|   178k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   178k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1368|       |
 1369|   178k|	result = 0;
 1370|   178k|	g_signal_emit(image, vips_image_signals[SIG_WRITTEN], 0, &result);
 1371|       |
 1372|   178k|	return result;
 1373|   178k|}
vips_image_minimise_all:
 1443|  79.0k|{
 1444|       |	/* Minimisation will modify things like sources, so we can't run it
 1445|       |	 * from many threads.
 1446|       |	 */
 1447|  79.0k|	g_mutex_lock(&vips__minimise_lock);
 1448|       |
 1449|  79.0k|	(void) vips__link_map(image, TRUE,
  ------------------
  |  |  798|  79.0k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  79.0k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1450|  79.0k|		(VipsSListMap2Fn) vips_image_minimise_all_cb, NULL, NULL);
 1451|       |
 1452|  79.0k|	g_mutex_unlock(&vips__minimise_lock);
 1453|  79.0k|}
vips_image_preeval:
 1524|  39.5k|{
 1525|  39.5k|	if (image->progress_signal) {
  ------------------
  |  Branch (1525:6): [True: 17.8k, False: 21.6k]
  ------------------
 1526|  17.8k|		VIPS_DEBUG_MSG("vips_image_preeval: %p\n", image);
  ------------------
  |  |   47|  17.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  17.8k|	{ \
  |  |   49|  17.8k|		; \
  |  |   50|  17.8k|	} \
  |  |   51|  17.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1527|       |
 1528|  17.8k|		g_assert(vips_object_sanity(
  ------------------
  |  |  166|  17.8k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1529|  17.8k|			VIPS_OBJECT(image->progress_signal)));
 1530|       |
 1531|  17.8k|		(void) vips_progress_add(image);
 1532|       |
 1533|       |		/* For vips7 compat, we also have to make sure ->time on the
 1534|       |		 * image that was originally marked with
 1535|       |		 * vips_image_set_progress() is valid.
 1536|       |		 */
 1537|  17.8k|		(void) vips_progress_add(image->progress_signal);
 1538|       |
 1539|  17.8k|		if (!vips_image_get_typeof(image, "hide-progress"))
  ------------------
  |  Branch (1539:7): [True: 17.8k, False: 0]
  ------------------
 1540|  17.8k|			g_signal_emit(image->progress_signal,
 1541|  17.8k|				vips_image_signals[SIG_PREEVAL], 0,
 1542|  17.8k|				image->time);
 1543|  17.8k|	}
 1544|  39.5k|}
vips_image_eval:
 1550|  18.5k|{
 1551|  18.5k|	if (image->progress_signal &&
  ------------------
  |  Branch (1551:6): [True: 10.4k, False: 8.18k]
  ------------------
 1552|  18.5k|		image->time) {
  ------------------
  |  Branch (1552:3): [True: 10.4k, False: 0]
  ------------------
 1553|  10.4k|		VIPS_DEBUG_MSG("vips_image_eval: %p\n", image);
  ------------------
  |  |   47|  10.4k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  10.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  10.4k|	{ \
  |  |   49|  10.4k|		; \
  |  |   50|  10.4k|	} \
  |  |   51|  10.4k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  10.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1554|       |
 1555|  10.4k|		g_assert(vips_object_sanity(
  ------------------
  |  |  166|  10.4k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  10.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  10.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1556|  10.4k|			VIPS_OBJECT(image->progress_signal)));
 1557|       |
 1558|  10.4k|		vips_progress_update(image->time, processed);
 1559|       |
 1560|       |		/* For vips7 compat, update the ->time on the signalling image
 1561|       |		 * too, even though it may have a different width/height to
 1562|       |		 * the image we are actually generating.
 1563|       |		 */
 1564|  10.4k|		if (image->progress_signal->time != image->time)
  ------------------
  |  Branch (1564:7): [True: 10.4k, False: 0]
  ------------------
 1565|  10.4k|			vips_progress_update(image->progress_signal->time,
 1566|  10.4k|				processed);
 1567|       |
 1568|  10.4k|		if (!vips_image_get_typeof(image, "hide-progress"))
  ------------------
  |  Branch (1568:7): [True: 10.4k, False: 0]
  ------------------
 1569|  10.4k|			g_signal_emit(image->progress_signal,
 1570|  10.4k|				vips_image_signals[SIG_EVAL], 0,
 1571|  10.4k|				image->time);
 1572|  10.4k|	}
 1573|  18.5k|}
vips_image_posteval:
 1577|  39.5k|{
 1578|  39.5k|	if (image->progress_signal &&
  ------------------
  |  Branch (1578:6): [True: 17.8k, False: 21.6k]
  ------------------
 1579|  39.5k|		image->progress_signal->time) {
  ------------------
  |  Branch (1579:3): [True: 17.8k, False: 0]
  ------------------
 1580|  17.8k|		gint64 processed;
 1581|       |
 1582|  17.8k|		VIPS_DEBUG_MSG("vips_image_posteval: %p\n", image);
  ------------------
  |  |   47|  17.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  17.8k|	{ \
  |  |   49|  17.8k|		; \
  |  |   50|  17.8k|	} \
  |  |   51|  17.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1583|       |
 1584|  17.8k|		g_assert(vips_object_sanity(
  ------------------
  |  |  166|  17.8k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1585|  17.8k|			VIPS_OBJECT(image->progress_signal)));
 1586|       |
 1587|       |		/* Make sure posteval sees a finished progress.
 1588|       |		 */
 1589|  17.8k|		processed = image->time->tpels;
 1590|  17.8k|		vips_progress_update(image->time, processed);
 1591|       |
 1592|       |		/* For vips7 compat, update the ->time on the signalling image
 1593|       |		 * too, even though it may have a different width/height to
 1594|       |		 * the image we are actually generating.
 1595|       |		 */
 1596|  17.8k|		if (image->progress_signal->time != image->time)
  ------------------
  |  Branch (1596:7): [True: 17.8k, False: 0]
  ------------------
 1597|  17.8k|			vips_progress_update(image->progress_signal->time,
 1598|  17.8k|				processed);
 1599|       |
 1600|  17.8k|		if (!vips_image_get_typeof(image, "hide-progress"))
  ------------------
  |  Branch (1600:7): [True: 17.8k, False: 0]
  ------------------
 1601|  17.8k|			g_signal_emit(image->progress_signal,
 1602|  17.8k|				vips_image_signals[SIG_POSTEVAL], 0,
 1603|  17.8k|				image->time);
 1604|  17.8k|	}
 1605|  39.5k|}
vips_image_iskilled:
 1645|   476k|{
 1646|   476k|	gboolean kill;
 1647|       |
 1648|   476k|	kill = image->kill;
 1649|       |
 1650|       |	// check the image we are signalling progress on too
 1651|   476k|	if (image->progress_signal)
  ------------------
  |  Branch (1651:6): [True: 96.8k, False: 380k]
  ------------------
 1652|  96.8k|		kill |= image->progress_signal->kill;
 1653|       |
 1654|       |	/* Has kill been set for this image? If yes, abort evaluation.
 1655|       |	 */
 1656|   476k|	if (kill) {
  ------------------
  |  Branch (1656:6): [True: 0, False: 476k]
  ------------------
 1657|      0|		VIPS_DEBUG_MSG("vips_image_iskilled: %s (%p) killed\n",
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1658|      0|			image->filename, image);
 1659|      0|		vips_error("VipsImage",
 1660|      0|			_("killed for image \"%s\""), image->filename);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1661|       |
 1662|       |		/* We've picked up the kill message, it's now our caller's
 1663|       |		 * responsibility to pass the message up the chain.
 1664|       |		 */
 1665|      0|		vips_image_set_kill(image, FALSE);
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 1666|      0|	}
 1667|       |
 1668|   476k|	return kill;
 1669|   476k|}
vips_image_set_kill:
 1683|  39.5k|{
 1684|  39.5k|	if (image->kill != kill)
  ------------------
  |  Branch (1684:6): [True: 0, False: 39.5k]
  ------------------
 1685|  39.5k|		VIPS_DEBUG_MSG("vips_image_set_kill: %s (%p) %d\n",
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1686|  39.5k|			image->filename, image, kill);
 1687|       |
 1688|  39.5k|	image->kill = kill;
 1689|       |
 1690|       |	// set here too
 1691|  39.5k|	if (image->progress_signal)
  ------------------
  |  Branch (1691:6): [True: 17.8k, False: 21.6k]
  ------------------
 1692|  17.8k|		image->progress_signal->kill = kill;
 1693|  39.5k|}
vips_image_new:
 1723|   180k|{
 1724|   180k|	VipsImage *image;
 1725|   180k|	char filename[26];
 1726|       |
 1727|   180k|	vips_check_init();
 1728|       |
 1729|   180k|	vips_image_temp_name(filename, sizeof(filename));
 1730|       |
 1731|   180k|	image = VIPS_IMAGE(g_object_new(VIPS_TYPE_IMAGE, NULL));
  ------------------
  |  |  171|   180k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   180k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   180k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  172|   180k|		VIPS_TYPE_IMAGE, VipsImage))
  ------------------
 1732|   180k|	g_object_set(image,
 1733|   180k|		"filename", filename,
 1734|   180k|		"mode", "p",
 1735|   180k|		NULL);
 1736|   180k|	if (vips_object_build(VIPS_OBJECT(image))) {
  ------------------
  |  |  433|   180k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   180k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   180k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1736:6): [True: 0, False: 180k]
  ------------------
 1737|      0|		VIPS_UNREF(image);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1738|      0|		return NULL;
 1739|      0|	}
 1740|       |
 1741|   180k|	return image;
 1742|   180k|}
vips_image_new_mode:
 1746|  25.0k|{
 1747|  25.0k|	VipsImage *image;
 1748|       |
 1749|  25.0k|	g_assert(filename);
  ------------------
  |  |  166|  25.0k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  25.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1750|  25.0k|	g_assert(mode);
  ------------------
  |  |  166|  25.0k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  25.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1751|       |
 1752|  25.0k|	vips_check_init();
 1753|       |
 1754|  25.0k|	image = VIPS_IMAGE(g_object_new(VIPS_TYPE_IMAGE, NULL));
  ------------------
  |  |  171|  25.0k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  25.0k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  25.0k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  172|  25.0k|		VIPS_TYPE_IMAGE, VipsImage))
  ------------------
 1755|  25.0k|	g_object_set(image,
 1756|  25.0k|		"filename", filename,
 1757|  25.0k|		"mode", mode,
 1758|  25.0k|		NULL);
 1759|  25.0k|	if (vips_object_build(VIPS_OBJECT(image))) {
  ------------------
  |  |  433|  25.0k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  25.0k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  25.0k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1759:6): [True: 0, False: 25.0k]
  ------------------
 1760|      0|		VIPS_UNREF(image);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1761|      0|		return NULL;
 1762|      0|	}
 1763|       |
 1764|  25.0k|	return image;
 1765|  25.0k|}
vips_image_new_memory:
 1779|  25.0k|{
 1780|  25.0k|	char filename[26];
 1781|       |
 1782|  25.0k|	vips_image_temp_name(filename, sizeof(filename));
 1783|  25.0k|	return vips_image_new_mode(filename, "t");
 1784|  25.0k|}
vips_image_new_from_buffer:
 2153|  36.4k|{
 2154|  36.4k|	const char *operation_name;
 2155|  36.4k|	va_list ap;
 2156|  36.4k|	int result;
 2157|  36.4k|	VipsImage *out;
 2158|  36.4k|	VipsBlob *blob;
 2159|       |
 2160|  36.4k|	vips_check_init();
 2161|       |
 2162|  36.4k|	if (!(operation_name = vips_foreign_find_load_buffer(buf, len)))
  ------------------
  |  Branch (2162:6): [True: 6.41k, False: 30.0k]
  ------------------
 2163|  6.41k|		return NULL;
 2164|       |
 2165|       |	/* We don't take a copy of the data or free it.
 2166|       |	 */
 2167|  30.0k|	blob = vips_blob_new(NULL, buf, len);
 2168|       |
 2169|  30.0k|	va_start(ap, option_string);
 2170|  30.0k|	result = vips_call_split_option_string(operation_name,
 2171|  30.0k|		option_string, ap, blob, &out);
 2172|  30.0k|	va_end(ap);
 2173|       |
 2174|  30.0k|	vips_area_unref(VIPS_AREA(blob));
  ------------------
  |  |  137|  30.0k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 2175|       |
 2176|  30.0k|	if (result)
  ------------------
  |  Branch (2176:6): [True: 7.16k, False: 22.8k]
  ------------------
 2177|  7.16k|		return NULL;
 2178|       |
 2179|  22.8k|	return out;
 2180|  30.0k|}
vips_get_disc_threshold:
 2517|  21.6k|{
 2518|  21.6k|	static gboolean done = FALSE;
  ------------------
  |  |  794|  21.6k|#define	FALSE	(0)
  ------------------
 2519|  21.6k|	static guint64 threshold;
 2520|       |
 2521|  21.6k|	if (!done) {
  ------------------
  |  Branch (2521:6): [True: 1, False: 21.6k]
  ------------------
 2522|      1|		const char *env;
 2523|       |
 2524|      1|		done = TRUE;
  ------------------
  |  |  798|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2525|       |
 2526|       |		/* 100mb default.
 2527|       |		 */
 2528|      1|		threshold = 100 * 1024 * 1024;
 2529|       |
 2530|      1|		if ((env = g_getenv("VIPS_DISC_THRESHOLD"))
  ------------------
  |  Branch (2530:7): [True: 0, False: 1]
  ------------------
 2531|       |#if ENABLE_DEPRECATED
 2532|       |			|| (env = g_getenv("IM_DISC_THRESHOLD"))
 2533|       |#endif
 2534|      1|		)
 2535|      0|			threshold = vips__parse_size(env);
 2536|       |
 2537|      1|		if (vips__disc_threshold)
  ------------------
  |  Branch (2537:7): [True: 0, False: 1]
  ------------------
 2538|      0|			threshold = vips__parse_size(vips__disc_threshold);
 2539|       |
 2540|       |#ifdef DEBUG
 2541|       |		printf("vips_get_disc_threshold: %zd bytes\n", threshold);
 2542|       |#endif /*DEBUG*/
 2543|      1|	}
 2544|       |
 2545|  21.6k|	return threshold;
 2546|  21.6k|}
vips_image_write:
 2625|  67.3k|{
 2626|       |	/* image needs to stay alive for this call. It can be unreffed during
 2627|       |	 * the generate.
 2628|       |	 */
 2629|  67.3k|	g_object_ref(image);
 2630|       |
 2631|  67.3k|	if (vips_image_pio_input(image) ||
  ------------------
  |  Branch (2631:6): [True: 0, False: 67.3k]
  ------------------
 2632|  67.3k|		vips_image_pipelinev(out,
  ------------------
  |  Branch (2632:3): [True: 0, False: 67.3k]
  ------------------
 2633|  67.3k|			VIPS_DEMAND_STYLE_THINSTRIP, image, NULL)) {
 2634|      0|		g_object_unref(image);
 2635|      0|		return -1;
 2636|      0|	}
 2637|       |
 2638|  67.3k|	if (vips_image_generate(out,
  ------------------
  |  Branch (2638:6): [True: 10.7k, False: 56.5k]
  ------------------
 2639|  67.3k|			vips_start_one, vips_image_write_gen, vips_stop_one,
 2640|  67.3k|			image, NULL)) {
 2641|  10.7k|		g_object_unref(image);
 2642|  10.7k|		return -1;
 2643|  10.7k|	}
 2644|       |
 2645|       |	/* If @out is a partial image, we need to unref @image when out is
 2646|       |	 * unreffed.
 2647|       |	 *
 2648|       |	 * If it's not partial, perhaps a file we write to or a memory image,
 2649|       |	 * we need to break any links between @image and @out created by
 2650|       |	 * vips_image_pipelinev().
 2651|       |	 */
 2652|  56.5k|	if (vips_image_ispartial(out)) {
  ------------------
  |  Branch (2652:6): [True: 49.4k, False: 7.08k]
  ------------------
 2653|  49.4k|		vips_object_local(out, image);
  ------------------
  |  |  698|  49.4k|	(g_signal_connect(V, "close", G_CALLBACK(vips_object_local_cb), G))
  |  |  ------------------
  |  |  |  |  491|  49.4k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  |  |  ------------------
  ------------------
 2654|  49.4k|	}
 2655|  7.08k|	else {
 2656|  7.08k|		vips__reorder_clear(out);
 2657|  7.08k|		vips__link_break_all(out);
 2658|  7.08k|		g_object_unref(image);
 2659|  7.08k|	}
 2660|       |
 2661|  56.5k|	return 0;
 2662|  67.3k|}
vips_image_write_to_buffer:
 2753|  21.6k|{
 2754|  21.6k|	char filename[VIPS_PATH_MAX];
 2755|  21.6k|	char option_string[VIPS_PATH_MAX];
 2756|  21.6k|	const char *operation_name;
 2757|  21.6k|	VipsBlob *blob;
 2758|  21.6k|	va_list ap;
 2759|  21.6k|	int result;
 2760|       |
 2761|  21.6k|	vips__filename_split8(suffix, filename, option_string);
 2762|       |
 2763|  21.6k|	vips_error_freeze();
 2764|  21.6k|	operation_name = vips_foreign_find_save_target(filename);
 2765|  21.6k|	vips_error_thaw();
 2766|       |
 2767|  21.6k|	if (operation_name) {
  ------------------
  |  Branch (2767:6): [True: 21.6k, False: 0]
  ------------------
 2768|  21.6k|		VipsTarget *target;
 2769|       |
 2770|  21.6k|		if (!(target = vips_target_new_to_memory()))
  ------------------
  |  Branch (2770:7): [True: 0, False: 21.6k]
  ------------------
 2771|      0|			return -1;
 2772|       |
 2773|  21.6k|		va_start(ap, size);
 2774|  21.6k|		result = vips_call_split_option_string(operation_name,
 2775|  21.6k|			option_string, ap, in, target);
 2776|  21.6k|		va_end(ap);
 2777|       |
 2778|  21.6k|		if (result) {
  ------------------
  |  Branch (2778:7): [True: 13.2k, False: 8.38k]
  ------------------
 2779|  13.2k|			VIPS_UNREF(target);
  ------------------
  |  |   57|  13.2k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  13.2k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  13.2k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  13.2k|	{ \
  |  |  |  |   43|  13.2k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 13.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  13.2k|			(void) F((S)); \
  |  |  |  |   45|  13.2k|			(S) = 0; \
  |  |  |  |   46|  13.2k|		} \
  |  |  |  |   47|  13.2k|	} \
  |  |  |  |   48|  13.2k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  13.2k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2780|  13.2k|			return -1;
 2781|  13.2k|		}
 2782|       |
 2783|  8.38k|		g_object_get(target, "blob", &blob, NULL);
 2784|  8.38k|		VIPS_UNREF(target);
  ------------------
  |  |   57|  8.38k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  8.38k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  8.38k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  8.38k|	{ \
  |  |  |  |   43|  8.38k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 8.38k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  8.38k|			(void) F((S)); \
  |  |  |  |   45|  8.38k|			(S) = 0; \
  |  |  |  |   46|  8.38k|		} \
  |  |  |  |   47|  8.38k|	} \
  |  |  |  |   48|  8.38k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2785|  8.38k|	}
 2786|      0|	else if ((operation_name =
  ------------------
  |  Branch (2786:11): [True: 0, False: 0]
  ------------------
 2787|      0|					 vips_foreign_find_save_buffer(filename))) {
 2788|       |
 2789|      0|		va_start(ap, size);
 2790|      0|		result = vips_call_split_option_string(operation_name,
 2791|      0|			option_string, ap, in, &blob);
 2792|      0|		va_end(ap);
 2793|       |
 2794|      0|		if (result)
  ------------------
  |  Branch (2794:7): [True: 0, False: 0]
  ------------------
 2795|      0|			return -1;
 2796|      0|	}
 2797|      0|	else
 2798|      0|		return -1;
 2799|       |
 2800|  8.38k|	*buf = NULL;
 2801|  8.38k|	if (size)
  ------------------
  |  Branch (2801:6): [True: 8.38k, False: 0]
  ------------------
 2802|  8.38k|		*size = 0;
 2803|       |
 2804|  8.38k|	if (blob) {
  ------------------
  |  Branch (2804:6): [True: 8.38k, False: 0]
  ------------------
 2805|  8.38k|		if (buf) {
  ------------------
  |  Branch (2805:7): [True: 8.38k, False: 0]
  ------------------
 2806|  8.38k|			*buf = VIPS_AREA(blob)->data;
  ------------------
  |  |  137|  8.38k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 2807|  8.38k|			VIPS_AREA(blob)->free_fn = NULL;
  ------------------
  |  |  137|  8.38k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 2808|  8.38k|		}
 2809|  8.38k|		if (size)
  ------------------
  |  Branch (2809:7): [True: 8.38k, False: 0]
  ------------------
 2810|  8.38k|			*size = VIPS_AREA(blob)->length;
  ------------------
  |  |  137|  8.38k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 2811|       |
 2812|  8.38k|		vips_area_unref(VIPS_AREA(blob));
  ------------------
  |  |  137|  8.38k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 2813|  8.38k|	}
 2814|       |
 2815|  8.38k|	return 0;
 2816|  21.6k|}
vips_image_decode:
 2925|  7.49k|{
 2926|       |	/* Keep in sync with vips__vector_to_ink().
 2927|       |	 */
 2928|  7.49k|	if (in->Coding == VIPS_CODING_LABQ) {
  ------------------
  |  Branch (2928:6): [True: 8, False: 7.48k]
  ------------------
 2929|      8|		if (vips_LabQ2Lab(in, out, NULL))
  ------------------
  |  Branch (2929:7): [True: 0, False: 8]
  ------------------
 2930|      0|			return -1;
 2931|      8|	}
 2932|  7.48k|	else if (in->Coding == VIPS_CODING_RAD) {
  ------------------
  |  Branch (2932:11): [True: 0, False: 7.48k]
  ------------------
 2933|      0|		if (vips_rad2float(in, out, NULL))
  ------------------
  |  Branch (2933:7): [True: 0, False: 0]
  ------------------
 2934|      0|			return -1;
 2935|      0|	}
 2936|  7.48k|	else {
 2937|  7.48k|		if (vips_copy(in, out, NULL))
  ------------------
  |  Branch (2937:7): [True: 0, False: 7.48k]
  ------------------
 2938|      0|			return -1;
 2939|  7.48k|	}
 2940|       |
 2941|  7.49k|	return 0;
 2942|  7.49k|}
vips_image_decode_predict:
 2958|  1.63k|{
 2959|  1.63k|	VipsBandFormat format;
 2960|  1.63k|	int bands;
 2961|       |
 2962|  1.63k|	if (in->Coding == VIPS_CODING_LABQ) {
  ------------------
  |  Branch (2962:6): [True: 0, False: 1.63k]
  ------------------
 2963|      0|		bands = 3;
 2964|      0|		format = VIPS_FORMAT_FLOAT;
 2965|      0|	}
 2966|  1.63k|	else if (in->Coding == VIPS_CODING_RAD) {
  ------------------
  |  Branch (2966:11): [True: 0, False: 1.63k]
  ------------------
 2967|      0|		bands = 3;
 2968|      0|		format = VIPS_FORMAT_FLOAT;
 2969|      0|	}
 2970|  1.63k|	else {
 2971|  1.63k|		bands = in->Bands;
 2972|  1.63k|		format = in->BandFmt;
 2973|  1.63k|	}
 2974|       |
 2975|  1.63k|	if (out_bands)
  ------------------
  |  Branch (2975:6): [True: 1.63k, False: 0]
  ------------------
 2976|  1.63k|		*out_bands = bands;
 2977|  1.63k|	if (out_format)
  ------------------
  |  Branch (2977:6): [True: 2, False: 1.62k]
  ------------------
 2978|      2|		*out_format = format;
 2979|       |
 2980|  1.63k|	return 0;
 2981|  1.63k|}
vips_image_encode:
 2998|      2|{
 2999|      2|	if (coding == VIPS_CODING_LABQ) {
  ------------------
  |  Branch (2999:6): [True: 0, False: 2]
  ------------------
 3000|      0|		if (vips_Lab2LabQ(in, out, NULL))
  ------------------
  |  Branch (3000:7): [True: 0, False: 0]
  ------------------
 3001|      0|			return -1;
 3002|      0|	}
 3003|      2|	else if (coding == VIPS_CODING_RAD) {
  ------------------
  |  Branch (3003:11): [True: 0, False: 2]
  ------------------
 3004|      0|		if (vips_float2rad(in, out, NULL))
  ------------------
  |  Branch (3004:7): [True: 0, False: 0]
  ------------------
 3005|      0|			return -1;
 3006|      0|	}
 3007|      2|	else {
 3008|      2|		if (vips_copy(in, out, NULL))
  ------------------
  |  Branch (3008:7): [True: 0, False: 2]
  ------------------
 3009|      0|			return -1;
 3010|      2|	}
 3011|       |
 3012|      2|	return 0;
 3013|      2|}
vips_image_ispartial:
 3068|  56.5k|{
 3069|  56.5k|	if (image->dtype == VIPS_IMAGE_PARTIAL)
  ------------------
  |  Branch (3069:6): [True: 49.4k, False: 7.08k]
  ------------------
 3070|  49.4k|		return 1;
 3071|  7.08k|	else
 3072|  7.08k|		return 0;
 3073|  56.5k|}
vips_image_write_prepare:
 3137|  22.8k|{
 3138|  22.8k|	g_assert(vips_object_sanity(VIPS_OBJECT(image)));
  ------------------
  |  |  166|  22.8k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  22.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  22.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3139|       |
 3140|  22.8k|	if (image->Xsize <= 0 ||
  ------------------
  |  Branch (3140:6): [True: 0, False: 22.8k]
  ------------------
 3141|  22.8k|		image->Ysize <= 0 ||
  ------------------
  |  Branch (3141:3): [True: 0, False: 22.8k]
  ------------------
 3142|  22.8k|		image->Bands <= 0) {
  ------------------
  |  Branch (3142:3): [True: 0, False: 22.8k]
  ------------------
 3143|      0|		vips_error("VipsImage", "%s", _("bad dimensions"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3144|      0|		return -1;
 3145|      0|	}
 3146|       |
 3147|       |	/* We don't use this, but make sure it's set in case any old programs
 3148|       |	 * are expecting it.
 3149|       |	 */
 3150|  22.8k|	image->Bbits = vips_format_sizeof(image->BandFmt) << 3;
 3151|       |
 3152|  22.8k|	if (image->dtype == VIPS_IMAGE_PARTIAL) {
  ------------------
  |  Branch (3152:6): [True: 0, False: 22.8k]
  ------------------
 3153|      0|		VIPS_DEBUG_MSG("vips_image_write_prepare: old-style output for %s\n",
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3154|      0|			image->filename);
 3155|       |
 3156|      0|		image->dtype = VIPS_IMAGE_SETBUF;
 3157|      0|	}
 3158|       |
 3159|  22.8k|	switch (image->dtype) {
 3160|      0|	case VIPS_IMAGE_MMAPINRW:
  ------------------
  |  Branch (3160:2): [True: 0, False: 22.8k]
  ------------------
 3161|      0|	case VIPS_IMAGE_SETBUF_FOREIGN:
  ------------------
  |  Branch (3161:2): [True: 0, False: 22.8k]
  ------------------
 3162|      0|		break;
 3163|       |
 3164|  22.8k|	case VIPS_IMAGE_SETBUF:
  ------------------
  |  Branch (3164:2): [True: 22.8k, False: 0]
  ------------------
 3165|  22.8k|		if (!image->data &&
  ------------------
  |  Branch (3165:7): [True: 22.8k, False: 0]
  ------------------
 3166|  22.8k|			!(image->data = vips_tracked_malloc(
  ------------------
  |  Branch (3166:4): [True: 0, False: 22.8k]
  ------------------
 3167|  22.8k|				  VIPS_IMAGE_SIZEOF_IMAGE(image))))
  ------------------
  |  |  388|  22.8k|	(VIPS_IMAGE_SIZEOF_LINE(I) * (I)->Ysize)
  |  |  ------------------
  |  |  |  |  386|  22.8k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  22.8k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  22.8k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3168|      0|			return -1;
 3169|       |
 3170|  22.8k|		break;
 3171|       |
 3172|  22.8k|	case VIPS_IMAGE_OPENOUT:
  ------------------
  |  Branch (3172:2): [True: 0, False: 22.8k]
  ------------------
 3173|      0|		if (vips_image_open_output(image))
  ------------------
  |  Branch (3173:7): [True: 0, False: 0]
  ------------------
 3174|      0|			return -1;
 3175|       |
 3176|      0|		break;
 3177|       |
 3178|      0|	default:
  ------------------
  |  Branch (3178:2): [True: 0, False: 22.8k]
  ------------------
 3179|      0|		vips_error("VipsImage", "%s", _("bad image descriptor"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3180|      0|		return -1;
 3181|  22.8k|	}
 3182|       |
 3183|  22.8k|	return 0;
 3184|  22.8k|}
vips_image_pio_input:
 3628|   136k|{
 3629|   136k|	g_assert(vips_object_sanity(VIPS_OBJECT(image)));
  ------------------
  |  |  166|   136k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   136k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   136k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3630|       |
 3631|       |#ifdef DEBUG_IO
 3632|       |	printf("vips_image_pio_input: enabling partial input for %s\n",
 3633|       |		image->filename);
 3634|       |#endif /*DEBUG_IO*/
 3635|       |
 3636|   136k|	switch (image->dtype) {
 3637|  14.1k|	case VIPS_IMAGE_SETBUF:
  ------------------
  |  Branch (3637:2): [True: 14.1k, False: 122k]
  ------------------
 3638|  14.1k|	case VIPS_IMAGE_SETBUF_FOREIGN:
  ------------------
  |  Branch (3638:2): [True: 0, False: 136k]
  ------------------
 3639|       |		/* Should have been written to.
 3640|       |		 */
 3641|  14.1k|		if (!image->data) {
  ------------------
  |  Branch (3641:7): [True: 0, False: 14.1k]
  ------------------
 3642|      0|			vips_error("vips_image_pio_input",
 3643|      0|				"%s", _("no image data"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3644|      0|			return -1;
 3645|      0|		}
 3646|       |
 3647|       |		/* Should be no generate functions now.
 3648|       |		 */
 3649|  14.1k|		image->start_fn = NULL;
 3650|  14.1k|		image->generate_fn = NULL;
 3651|  14.1k|		image->stop_fn = NULL;
 3652|       |
 3653|  14.1k|		break;
 3654|       |
 3655|   122k|	case VIPS_IMAGE_PARTIAL:
  ------------------
  |  Branch (3655:2): [True: 122k, False: 14.1k]
  ------------------
 3656|       |		/* We can sometimes want to copy images with no generate func,
 3657|       |		 * eg. if we are going to be manipulating metadata, so we
 3658|       |		 * can't check for gen funcs. See dzsave direct mode.
 3659|       |		 */
 3660|   122k|		break;
 3661|       |
 3662|      0|	case VIPS_IMAGE_MMAPIN:
  ------------------
  |  Branch (3662:2): [True: 0, False: 136k]
  ------------------
 3663|      0|	case VIPS_IMAGE_MMAPINRW:
  ------------------
  |  Branch (3663:2): [True: 0, False: 136k]
  ------------------
 3664|      0|	case VIPS_IMAGE_OPENIN:
  ------------------
  |  Branch (3664:2): [True: 0, False: 136k]
  ------------------
 3665|      0|		break;
 3666|       |
 3667|      0|	case VIPS_IMAGE_OPENOUT:
  ------------------
  |  Branch (3667:2): [True: 0, False: 136k]
  ------------------
 3668|       |
 3669|       |		/* Free any resources the image holds and reset to a base
 3670|       |		 * state.
 3671|       |		 */
 3672|      0|		if (vips_image_rewind_output(image))
  ------------------
  |  Branch (3672:7): [True: 0, False: 0]
  ------------------
 3673|      0|			return -1;
 3674|       |
 3675|      0|		break;
 3676|       |
 3677|      0|	default:
  ------------------
  |  Branch (3677:2): [True: 0, False: 136k]
  ------------------
 3678|      0|		vips_error("vips_image_pio_input",
 3679|      0|			"%s", _("image not readable"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 3680|      0|		return -1;
 3681|   136k|	}
 3682|       |
 3683|   136k|	return 0;
 3684|   136k|}
vips_band_format_isint:
 3745|   119k|{
 3746|   119k|	switch (format) {
 3747|  98.1k|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (3747:2): [True: 98.1k, False: 21.6k]
  ------------------
 3748|  98.1k|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (3748:2): [True: 0, False: 119k]
  ------------------
 3749|   119k|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (3749:2): [True: 21.1k, False: 98.7k]
  ------------------
 3750|   119k|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (3750:2): [True: 113, False: 119k]
  ------------------
 3751|   119k|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (3751:2): [True: 112, False: 119k]
  ------------------
 3752|   119k|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (3752:2): [True: 80, False: 119k]
  ------------------
 3753|   119k|		return TRUE;
  ------------------
  |  |  798|   119k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   119k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 3754|       |
 3755|    251|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (3755:2): [True: 251, False: 119k]
  ------------------
 3756|    251|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (3756:2): [True: 0, False: 119k]
  ------------------
 3757|    251|	case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (3757:2): [True: 0, False: 119k]
  ------------------
 3758|    251|	case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (3758:2): [True: 0, False: 119k]
  ------------------
 3759|    251|		return FALSE;
  ------------------
  |  |  794|    251|#define	FALSE	(0)
  ------------------
 3760|       |
 3761|      0|	default:
  ------------------
  |  Branch (3761:2): [True: 0, False: 119k]
  ------------------
 3762|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3763|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 3764|   119k|	}
 3765|   119k|}
vips_band_format_isuint:
 3775|  24.2k|{
 3776|  24.2k|	switch (format) {
 3777|  5.99k|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (3777:2): [True: 5.99k, False: 18.2k]
  ------------------
 3778|  11.0k|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (3778:2): [True: 5.01k, False: 19.2k]
  ------------------
 3779|  15.0k|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (3779:2): [True: 3.99k, False: 20.2k]
  ------------------
 3780|  15.0k|		return TRUE;
  ------------------
  |  |  798|  15.0k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  15.0k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 3781|       |
 3782|  1.15k|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (3782:2): [True: 1.15k, False: 23.0k]
  ------------------
 3783|  1.97k|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (3783:2): [True: 822, False: 23.3k]
  ------------------
 3784|  4.18k|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (3784:2): [True: 2.21k, False: 22.0k]
  ------------------
 3785|  9.21k|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (3785:2): [True: 5.02k, False: 19.1k]
  ------------------
 3786|  9.21k|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (3786:2): [True: 0, False: 24.2k]
  ------------------
 3787|  9.21k|	case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (3787:2): [True: 0, False: 24.2k]
  ------------------
 3788|  9.21k|	case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (3788:2): [True: 0, False: 24.2k]
  ------------------
 3789|  9.21k|		return FALSE;
  ------------------
  |  |  794|  9.21k|#define	FALSE	(0)
  ------------------
 3790|       |
 3791|      0|	default:
  ------------------
  |  Branch (3791:2): [True: 0, False: 24.2k]
  ------------------
 3792|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3793|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 3794|  24.2k|	}
 3795|  24.2k|}
vips_band_format_is8bit:
 3805|  6.58k|{
 3806|  6.58k|	switch (format) {
 3807|    183|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (3807:2): [True: 183, False: 6.39k]
  ------------------
 3808|    183|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (3808:2): [True: 0, False: 6.58k]
  ------------------
 3809|    183|		return TRUE;
  ------------------
  |  |  798|    183|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|    183|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 3810|       |
 3811|  5.99k|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (3811:2): [True: 5.99k, False: 584]
  ------------------
 3812|  6.20k|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (3812:2): [True: 206, False: 6.37k]
  ------------------
 3813|  6.20k|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (3813:2): [True: 0, False: 6.58k]
  ------------------
 3814|  6.20k|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (3814:2): [True: 0, False: 6.58k]
  ------------------
 3815|  6.39k|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (3815:2): [True: 195, False: 6.38k]
  ------------------
 3816|  6.39k|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (3816:2): [True: 0, False: 6.58k]
  ------------------
 3817|  6.39k|	case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (3817:2): [True: 0, False: 6.58k]
  ------------------
 3818|  6.39k|	case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (3818:2): [True: 0, False: 6.58k]
  ------------------
 3819|  6.39k|		return FALSE;
  ------------------
  |  |  794|  6.39k|#define	FALSE	(0)
  ------------------
 3820|       |
 3821|      0|	default:
  ------------------
  |  Branch (3821:2): [True: 0, False: 6.58k]
  ------------------
 3822|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3823|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 3824|  6.58k|	}
 3825|  6.58k|}
vips_band_format_isfloat:
 3835|  3.12k|{
 3836|  3.12k|	switch (format) {
 3837|  1.08k|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (3837:2): [True: 1.08k, False: 2.04k]
  ------------------
 3838|  1.08k|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (3838:2): [True: 0, False: 3.12k]
  ------------------
 3839|  1.08k|		return TRUE;
  ------------------
  |  |  798|  1.08k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  1.08k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 3840|       |
 3841|    606|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (3841:2): [True: 606, False: 2.52k]
  ------------------
 3842|    774|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (3842:2): [True: 168, False: 2.96k]
  ------------------
 3843|  1.39k|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (3843:2): [True: 618, False: 2.51k]
  ------------------
 3844|  1.51k|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (3844:2): [True: 120, False: 3.00k]
  ------------------
 3845|  1.90k|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (3845:2): [True: 390, False: 2.73k]
  ------------------
 3846|  2.04k|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (3846:2): [True: 144, False: 2.98k]
  ------------------
 3847|  2.04k|	case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (3847:2): [True: 0, False: 3.12k]
  ------------------
 3848|  2.04k|	case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (3848:2): [True: 0, False: 3.12k]
  ------------------
 3849|  2.04k|		return FALSE;
  ------------------
  |  |  794|  2.04k|#define	FALSE	(0)
  ------------------
 3850|       |
 3851|      0|	default:
  ------------------
  |  Branch (3851:2): [True: 0, False: 3.12k]
  ------------------
 3852|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3853|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 3854|  3.12k|	}
 3855|  3.12k|}
vips_band_format_iscomplex:
 3865|  5.96k|{
 3866|  5.96k|	switch (format) {
 3867|      0|	case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (3867:2): [True: 0, False: 5.96k]
  ------------------
 3868|      0|	case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (3868:2): [True: 0, False: 5.96k]
  ------------------
 3869|      0|		return TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 3870|       |
 3871|  1.42k|	case VIPS_FORMAT_UCHAR:
  ------------------
  |  Branch (3871:2): [True: 1.42k, False: 4.54k]
  ------------------
 3872|  1.74k|	case VIPS_FORMAT_CHAR:
  ------------------
  |  Branch (3872:2): [True: 329, False: 5.63k]
  ------------------
 3873|  3.00k|	case VIPS_FORMAT_USHORT:
  ------------------
  |  Branch (3873:2): [True: 1.26k, False: 4.70k]
  ------------------
 3874|  3.30k|	case VIPS_FORMAT_SHORT:
  ------------------
  |  Branch (3874:2): [True: 300, False: 5.66k]
  ------------------
 3875|  4.06k|	case VIPS_FORMAT_UINT:
  ------------------
  |  Branch (3875:2): [True: 754, False: 5.21k]
  ------------------
 3876|  4.41k|	case VIPS_FORMAT_INT:
  ------------------
  |  Branch (3876:2): [True: 351, False: 5.61k]
  ------------------
 3877|  5.96k|	case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (3877:2): [True: 1.55k, False: 4.41k]
  ------------------
 3878|  5.96k|	case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (3878:2): [True: 0, False: 5.96k]
  ------------------
 3879|  5.96k|		return FALSE;
  ------------------
  |  |  794|  5.96k|#define	FALSE	(0)
  ------------------
 3880|       |
 3881|      0|	default:
  ------------------
  |  Branch (3881:2): [True: 0, False: 5.96k]
  ------------------
 3882|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3883|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 3884|  5.96k|	}
 3885|  5.96k|}
image.c:vips_image_class_init:
 1058|      1|{
 1059|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1060|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1061|       |
 1062|      1|	VIPS_DEBUG_MSG("vips_image_class_init:\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1063|       |
 1064|      1|	gobject_class->finalize = vips_image_finalize;
 1065|      1|	gobject_class->dispose = vips_image_dispose;
 1066|      1|	gobject_class->set_property = vips_object_set_property;
 1067|      1|	gobject_class->get_property = vips_object_get_property;
 1068|       |
 1069|      1|	vobject_class->new_from_string = vips_image_new_from_file_object;
 1070|      1|	vobject_class->to_string = vips_image_to_string;
 1071|      1|	vobject_class->output_needs_arg = TRUE;
  ------------------
  |  |  798|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1072|      1|	vobject_class->output_to_arg = vips_image_write_object;
 1073|       |
 1074|      1|	vobject_class->nickname = "image";
 1075|      1|	vobject_class->description = _("image class");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1076|       |
 1077|      1|	vobject_class->dump = vips_image_dump;
 1078|      1|	vobject_class->summary = vips_image_summary;
 1079|      1|	vobject_class->sanity = vips_image_sanity;
 1080|      1|	vobject_class->rewind = vips_image_rewind;
 1081|      1|	vobject_class->build = vips_image_build;
 1082|       |
 1083|      1|	class->invalidate = vips_image_real_invalidate;
 1084|      1|	class->written = vips_image_real_written;
 1085|      1|	class->minimise = vips_image_real_minimise;
 1086|       |
 1087|       |	/* Create properties.
 1088|       |	 */
 1089|       |
 1090|       |	/* It'd be good to have these as set once at construct time, but we
 1091|       |	 * can't :-(
 1092|       |	 *
 1093|       |	 * For example, a "p" image might be made with vips_image_new() and
 1094|       |	 * constructed, then passed to vips_copy() of whatever to be written to.
 1095|       |	 * That operation will then need to set width/height etc.
 1096|       |	 *
 1097|       |	 * We can't set_once either, since vips_copy() etc. need to update
 1098|       |	 * xoffset and friends on the way through.
 1099|       |	 */
 1100|       |
 1101|      1|	VIPS_ARG_INT(class, "width", 2,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1102|      1|		_("Width"),
 1103|      1|		_("Image width in pixels"),
 1104|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1105|      1|		G_STRUCT_OFFSET(VipsImage, Xsize),
 1106|      1|		1, VIPS_MAX_COORD, 1);
 1107|       |
 1108|      1|	VIPS_ARG_INT(class, "height", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1109|      1|		_("Height"),
 1110|      1|		_("Image height in pixels"),
 1111|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1112|      1|		G_STRUCT_OFFSET(VipsImage, Ysize),
 1113|      1|		1, VIPS_MAX_COORD, 1);
 1114|       |
 1115|      1|	VIPS_ARG_INT(class, "bands", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1116|      1|		_("Bands"),
 1117|      1|		_("Number of bands in image"),
 1118|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1119|      1|		G_STRUCT_OFFSET(VipsImage, Bands),
 1120|      1|		1, VIPS_MAX_COORD, 1);
 1121|       |
 1122|      1|	VIPS_ARG_ENUM(class, "format", 5,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1123|      1|		_("Format"),
 1124|      1|		_("Pixel format in image"),
 1125|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1126|      1|		G_STRUCT_OFFSET(VipsImage, BandFmt),
 1127|      1|		VIPS_TYPE_BAND_FORMAT, VIPS_FORMAT_UCHAR);
 1128|       |
 1129|      1|	VIPS_ARG_ENUM(class, "coding", 6,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1130|      1|		_("Coding"),
 1131|      1|		_("Pixel coding"),
 1132|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1133|      1|		G_STRUCT_OFFSET(VipsImage, Coding),
 1134|      1|		VIPS_TYPE_CODING, VIPS_CODING_NONE);
 1135|       |
 1136|      1|	VIPS_ARG_ENUM(class, "interpretation", 7,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1137|      1|		_("Interpretation"),
 1138|      1|		_("Pixel interpretation"),
 1139|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1140|      1|		G_STRUCT_OFFSET(VipsImage, Type),
 1141|      1|		VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_MULTIBAND);
 1142|       |
 1143|      1|	VIPS_ARG_DOUBLE(class, "xres", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
 1144|      1|		_("Xres"),
 1145|      1|		_("Horizontal resolution in pixels/mm"),
 1146|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1147|      1|		G_STRUCT_OFFSET(VipsImage, Xres),
 1148|      1|		-0.0, 1000000, 0);
 1149|       |
 1150|      1|	VIPS_ARG_DOUBLE(class, "yres", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
 1151|      1|		_("Yres"),
 1152|      1|		_("Vertical resolution in pixels/mm"),
 1153|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1154|      1|		G_STRUCT_OFFSET(VipsImage, Yres),
 1155|      1|		-0.0, 1000000, 0);
 1156|       |
 1157|      1|	VIPS_ARG_INT(class, "xoffset", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1158|      1|		_("Xoffset"),
 1159|      1|		_("Horizontal offset of origin"),
 1160|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1161|      1|		G_STRUCT_OFFSET(VipsImage, Xoffset),
 1162|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
 1163|       |
 1164|      1|	VIPS_ARG_INT(class, "yoffset", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
 1165|      1|		_("Yoffset"),
 1166|      1|		_("Vertical offset of origin"),
 1167|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1168|      1|		G_STRUCT_OFFSET(VipsImage, Yoffset),
 1169|      1|		-VIPS_MAX_COORD, VIPS_MAX_COORD, 0);
 1170|       |
 1171|      1|	VIPS_ARG_STRING(class, "filename", 12,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1172|      1|		_("Filename"),
 1173|      1|		_("Image filename"),
 1174|      1|		VIPS_ARGUMENT_SET_ONCE | VIPS_ARGUMENT_CONSTRUCT,
 1175|      1|		G_STRUCT_OFFSET(VipsImage, filename),
 1176|      1|		NULL);
 1177|       |
 1178|      1|	VIPS_ARG_STRING(class, "mode", 13,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1179|      1|		_("Mode"),
 1180|      1|		_("Open mode"),
 1181|      1|		VIPS_ARGUMENT_SET_ONCE | VIPS_ARGUMENT_CONSTRUCT,
 1182|      1|		G_STRUCT_OFFSET(VipsImage, mode),
 1183|      1|		"p");
 1184|       |
 1185|      1|	VIPS_ARG_BOOL(class, "kill", 14,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1186|      1|		_("Kill"),
 1187|      1|		_("Block evaluation on this image"),
 1188|      1|		VIPS_ARGUMENT_SET_ALWAYS,
 1189|      1|		G_STRUCT_OFFSET(VipsImage, kill),
 1190|      1|		FALSE);
 1191|       |
 1192|      1|	VIPS_ARG_ENUM(class, "demand", 15,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1193|      1|		_("Demand style"),
 1194|      1|		_("Preferred demand style for this image"),
 1195|      1|		VIPS_ARGUMENT_CONSTRUCT,
 1196|      1|		G_STRUCT_OFFSET(VipsImage, dhint),
 1197|      1|		VIPS_TYPE_DEMAND_STYLE, VIPS_DEMAND_STYLE_SMALLTILE);
 1198|       |
 1199|      1|	VIPS_ARG_UINT64(class, "sizeof_header", 16,
  ------------------
  |  |  198|      1|	{ \
  |  |  199|      1|		GParamSpec *pspec; \
  |  |  200|      1|\
  |  |  201|      1|		pspec = g_param_spec_uint64((NAME), (LONG), (DESC), \
  |  |  202|      1|			(MIN), (MAX), (VALUE), \
  |  |  203|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  204|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  205|      1|			vips_argument_get_id(), pspec); \
  |  |  206|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  207|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  208|      1|	}
  ------------------
 1200|      1|		_("Size of header"),
 1201|      1|		_("Offset in bytes from start of file"),
 1202|      1|		VIPS_ARGUMENT_SET_ONCE | VIPS_ARGUMENT_CONSTRUCT,
 1203|      1|		G_STRUCT_OFFSET(VipsImage, sizeof_header),
 1204|      1|		0, 1000000000, VIPS_SIZEOF_HEADER);
 1205|       |
 1206|      1|	VIPS_ARG_POINTER(class, "foreign_buffer", 17,
  ------------------
  |  |  253|      1|	{ \
  |  |  254|      1|		GParamSpec *pspec; \
  |  |  255|      1|\
  |  |  256|      1|		pspec = g_param_spec_pointer((NAME), (LONG), (DESC), \
  |  |  257|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  258|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  259|      1|			vips_argument_get_id(), pspec); \
  |  |  260|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  261|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  262|      1|	}
  ------------------
 1207|      1|		_("Foreign buffer"),
 1208|      1|		_("Pointer to foreign pixels"),
 1209|      1|		VIPS_ARGUMENT_SET_ONCE | VIPS_ARGUMENT_CONSTRUCT,
 1210|      1|		G_STRUCT_OFFSET(VipsImage, data));
 1211|       |
 1212|       |	/* Create signals.
 1213|       |	 */
 1214|       |
 1215|       |	/**
 1216|       |	 * VipsImage::preeval:
 1217|       |	 * @image: the image to be calculated
 1218|       |	 * @progress: (type VipsProgress): #VipsProgress for this image
 1219|       |	 *
 1220|       |	 * The ::preeval signal is emitted once before computation of @image
 1221|       |	 * starts. It's a good place to set up evaluation feedback.
 1222|       |	 *
 1223|       |	 * Use vips_image_set_progress() to turn on progress reporting for an
 1224|       |	 * image.
 1225|       |	 */
 1226|      1|	vips_image_signals[SIG_PREEVAL] = g_signal_new("preeval",
 1227|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1228|      1|		G_SIGNAL_RUN_LAST,
 1229|      1|		G_STRUCT_OFFSET(VipsImageClass, preeval),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1230|      1|		NULL, NULL,
 1231|      1|		g_cclosure_marshal_VOID__POINTER,
 1232|      1|		G_TYPE_NONE, 1,
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1233|      1|		G_TYPE_POINTER);
  ------------------
  |  |  160|      1|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1234|       |
 1235|       |	/**
 1236|       |	 * VipsImage::eval:
 1237|       |	 * @image: the image being calculated
 1238|       |	 * @progress: (type VipsProgress): #VipsProgress for this image
 1239|       |	 *
 1240|       |	 * The ::eval signal is emitted once per work unit (typically a 128 x
 1241|       |	 * 128 area of pixels) during image computation.
 1242|       |	 *
 1243|       |	 * You can use this signal to update user-interfaces with progress
 1244|       |	 * feedback. Beware of updating too frequently: you will usually
 1245|       |	 * need some throttling mechanism.
 1246|       |	 *
 1247|       |	 * Use vips_image_set_progress() to turn on progress reporting for an
 1248|       |	 * image.
 1249|       |	 */
 1250|      1|	vips_image_signals[SIG_EVAL] = g_signal_new("eval",
 1251|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1252|      1|		G_SIGNAL_RUN_LAST,
 1253|      1|		G_STRUCT_OFFSET(VipsImageClass, eval),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1254|      1|		NULL, NULL,
 1255|      1|		g_cclosure_marshal_VOID__POINTER,
 1256|      1|		G_TYPE_NONE, 1,
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1257|      1|		G_TYPE_POINTER);
  ------------------
  |  |  160|      1|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1258|       |
 1259|       |	/**
 1260|       |	 * VipsImage::posteval:
 1261|       |	 * @image: the image that was calculated
 1262|       |	 * @progress: (type VipsProgress): #VipsProgress for this image
 1263|       |	 *
 1264|       |	 * The ::posteval signal is emitted once at the end of the computation
 1265|       |	 * of @image. It's a good place to shut down evaluation feedback.
 1266|       |	 *
 1267|       |	 * Use vips_image_set_progress() to turn on progress reporting for an
 1268|       |	 * image.
 1269|       |	 */
 1270|      1|	vips_image_signals[SIG_POSTEVAL] = g_signal_new("posteval",
 1271|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1272|      1|		G_SIGNAL_RUN_LAST,
 1273|      1|		G_STRUCT_OFFSET(VipsImageClass, posteval),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1274|      1|		NULL, NULL,
 1275|      1|		g_cclosure_marshal_VOID__POINTER,
 1276|      1|		G_TYPE_NONE, 1,
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1277|      1|		G_TYPE_POINTER);
  ------------------
  |  |  160|      1|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1278|       |
 1279|       |	/**
 1280|       |	 * VipsImage::written:
 1281|       |	 * @image: the image that was calculated
 1282|       |	 * @result: (out) (type gint): set to non-zero to indicate error
 1283|       |	 *
 1284|       |	 * The ::written signal is emitted just after an image has been
 1285|       |	 * written to. It is
 1286|       |	 * used by vips to implement things like write to foreign file
 1287|       |	 * formats.
 1288|       |	 */
 1289|      1|	vips_image_signals[SIG_WRITTEN] = g_signal_new("written",
 1290|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1291|      1|		G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
 1292|      1|		G_STRUCT_OFFSET(VipsImageClass, written),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1293|      1|		NULL, NULL,
 1294|      1|		g_cclosure_marshal_VOID__POINTER,
 1295|      1|		G_TYPE_NONE, 1,
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1296|      1|		G_TYPE_POINTER);
  ------------------
  |  |  160|      1|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1297|       |
 1298|       |	/**
 1299|       |	 * VipsImage::invalidate:
 1300|       |	 * @image: the image that has changed
 1301|       |	 *
 1302|       |	 * The ::invalidate signal is emitted when an image or one of it's
 1303|       |	 * upstream data sources has been destructively modified. See
 1304|       |	 * vips_image_invalidate_all().
 1305|       |	 */
 1306|      1|	vips_image_signals[SIG_INVALIDATE] = g_signal_new("invalidate",
 1307|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1308|      1|		G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
 1309|      1|		G_STRUCT_OFFSET(VipsImageClass, invalidate),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1310|      1|		NULL, NULL,
 1311|      1|		g_cclosure_marshal_VOID__VOID,
 1312|      1|		G_TYPE_NONE, 0);
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1313|       |
 1314|       |	/**
 1315|       |	 * VipsImage::minimise:
 1316|       |	 * @image: the image that is being minimised
 1317|       |	 *
 1318|       |	 * The ::minimise signal is emitted when an image has been asked to
 1319|       |	 * minimise memory usage. All non-essential caches are dropped.
 1320|       |	 * See vips_image_minimise_all().
 1321|       |	 */
 1322|      1|	vips_image_signals[SIG_MINIMISE] = g_signal_new("minimise",
 1323|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1324|      1|		G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
 1325|      1|		G_STRUCT_OFFSET(VipsImageClass, minimise),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1326|      1|		NULL, NULL,
 1327|      1|		g_cclosure_marshal_VOID__VOID,
 1328|      1|		G_TYPE_NONE, 0);
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1329|      1|}
image.c:vips_image_finalize:
  427|   205k|{
  428|   205k|	VipsImage *image = VIPS_IMAGE(gobject);
  ------------------
  |  |  171|   205k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   205k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   205k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  172|   205k|		VIPS_TYPE_IMAGE, VipsImage))
  ------------------
  429|       |
  430|   205k|	VIPS_DEBUG_MSG("vips_image_finalize: %p\n", gobject);
  ------------------
  |  |   47|   205k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   205k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   205k|	{ \
  |  |   49|   205k|		; \
  |  |   50|   205k|	} \
  |  |   51|   205k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   205k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  431|       |
  432|       |	/* Should be no regions defined on the image, since they all hold a
  433|       |	 * ref to their host image.
  434|       |	 */
  435|   205k|	g_assert(!image->regions);
  ------------------
  |  |  166|   205k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   205k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   205k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  436|       |
  437|       |	/* Therefore there should be no windows.
  438|       |	 */
  439|   205k|	g_assert(!image->windows);
  ------------------
  |  |  166|   205k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   205k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   205k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  440|       |
  441|       |	/* Junk generate functions.
  442|       |	 */
  443|   205k|	image->start_fn = NULL;
  444|   205k|	image->generate_fn = NULL;
  445|   205k|	image->stop_fn = NULL;
  446|   205k|	image->client1 = NULL;
  447|   205k|	image->client2 = NULL;
  448|       |
  449|       |	/* No more upstream/downstream links.
  450|       |	 */
  451|   205k|	vips__link_break_all(image);
  452|       |
  453|   205k|	if (image->time) {
  ------------------
  |  Branch (453:6): [True: 35.7k, False: 169k]
  ------------------
  454|  35.7k|		VIPS_FREEF(g_timer_destroy, image->time->start);
  ------------------
  |  |   41|  35.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  35.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  35.7k|	{ \
  |  |   43|  35.7k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 35.7k, False: 0]
  |  |  ------------------
  |  |   44|  35.7k|			(void) F((S)); \
  |  |   45|  35.7k|			(S) = 0; \
  |  |   46|  35.7k|		} \
  |  |   47|  35.7k|	} \
  |  |   48|  35.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  35.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  455|  35.7k|		VIPS_FREE(image->time);
  ------------------
  |  |   50|  35.7k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  35.7k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  35.7k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  35.7k|	{ \
  |  |  |  |   43|  35.7k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 35.7k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  35.7k|			(void) F((S)); \
  |  |  |  |   45|  35.7k|			(S) = 0; \
  |  |  |  |   46|  35.7k|		} \
  |  |  |  |   47|  35.7k|	} \
  |  |  |  |   48|  35.7k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  35.7k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  456|  35.7k|	}
  457|       |
  458|       |	/* Free attached memory.
  459|       |	 */
  460|   205k|	if (image->data) {
  ------------------
  |  Branch (460:6): [True: 22.8k, False: 182k]
  ------------------
  461|  22.8k|		if (image->dtype == VIPS_IMAGE_SETBUF) {
  ------------------
  |  Branch (461:7): [True: 22.8k, False: 0]
  ------------------
  462|  22.8k|			VIPS_DEBUG_MSG("vips_image_finalize: freeing buffer\n");
  ------------------
  |  |   47|  22.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  22.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  22.8k|	{ \
  |  |   49|  22.8k|		; \
  |  |   50|  22.8k|	} \
  |  |   51|  22.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  22.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  463|  22.8k|			vips_tracked_free(image->data);
  464|  22.8k|			image->dtype = VIPS_IMAGE_NONE;
  465|  22.8k|		}
  466|       |
  467|  22.8k|		image->data = NULL;
  468|  22.8k|	}
  469|       |
  470|       |	/* Delete associated files.
  471|       |	 */
  472|   205k|	vips_image_delete(image);
  473|       |
  474|   205k|	VIPS_FREEF(vips_g_mutex_free, image->sslock);
  ------------------
  |  |   41|   205k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   205k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   205k|	{ \
  |  |   43|   205k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 205k, False: 0]
  |  |  ------------------
  |  |   44|   205k|			(void) F((S)); \
  |  |   45|   205k|			(S) = 0; \
  |  |   46|   205k|		} \
  |  |   47|   205k|	} \
  |  |   48|   205k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   205k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  475|       |
  476|   205k|	VIPS_FREE(image->Hist);
  ------------------
  |  |   50|   205k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   205k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   205k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   205k|	{ \
  |  |  |  |   43|   205k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 205k]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|   205k|	} \
  |  |  |  |   48|   205k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   205k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  477|   205k|	VIPS_FREEF(vips__gslist_gvalue_free, image->history_list);
  ------------------
  |  |   41|   205k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   205k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   205k|	{ \
  |  |   43|   205k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 205k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   205k|	} \
  |  |   48|   205k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   205k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  478|   205k|	vips__meta_destroy(image);
  479|       |
  480|   205k|	G_OBJECT_CLASS(vips_image_parent_class)->finalize(gobject);
  ------------------
  |  |   58|   205k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   205k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   205k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  481|   205k|}
image.c:vips_image_delete:
  413|   205k|{
  414|   205k|	if (image->delete_on_close) {
  ------------------
  |  Branch (414:6): [True: 0, False: 205k]
  ------------------
  415|      0|		g_assert(image->delete_on_close_filename);
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  416|       |
  417|      0|		VIPS_DEBUG_MSG("vips_image_delete: removing temp %s\n",
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  418|      0|			image->delete_on_close_filename);
  419|      0|		g_unlink(image->delete_on_close_filename);
  420|      0|		VIPS_FREE(image->delete_on_close_filename);
  ------------------
  |  |   50|      0|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  421|      0|		image->delete_on_close = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  422|      0|	}
  423|   205k|}
image.c:vips_image_dispose:
  485|   205k|{
  486|   205k|	VipsImage *image = VIPS_IMAGE(gobject);
  ------------------
  |  |  171|   205k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   205k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   205k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  172|   205k|		VIPS_TYPE_IMAGE, VipsImage))
  ------------------
  487|       |
  488|   205k|	VIPS_DEBUG_MSG("vips_image_dispose: %p\n", gobject);
  ------------------
  |  |   47|   205k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   205k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   205k|	{ \
  |  |   49|   205k|		; \
  |  |   50|   205k|	} \
  |  |   51|   205k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   205k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  489|       |
  490|   205k|#ifdef DEBUG_LEAK
  491|   205k|	{
  492|   205k|		VipsImagePixels *pixels = g_object_get_qdata(G_OBJECT(image),
  ------------------
  |  |   51|   205k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   205k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   205k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  493|   205k|			vips__image_pixels_quark);
  494|       |
  495|   205k|		if (pixels &&
  ------------------
  |  Branch (495:7): [True: 205k, False: 0]
  ------------------
  496|   205k|			pixels->tpels) {
  ------------------
  |  Branch (496:4): [True: 860, False: 204k]
  ------------------
  497|    860|			int compute_percent = 100.0 * pixels->npels / pixels->tpels;
  498|       |
  499|    860|			if (compute_percent > 100)
  ------------------
  |  Branch (499:8): [True: 0, False: 860]
  ------------------
  500|      0|				printf("vips_image_dispose: %s %s computed %d%%\n",
  501|      0|					image->filename,
  502|      0|					pixels->nickname,
  503|      0|					compute_percent);
  504|    860|		}
  505|   205k|	}
  506|   205k|#endif /*DEBUG_LEAK*/
  507|       |
  508|   205k|	vips_object_preclose(VIPS_OBJECT(gobject));
  ------------------
  |  |  433|   205k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   205k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   205k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  509|       |
  510|       |	/* We have to junk the fd in dispose, since we run this for rewind and
  511|       |	 * we must close and reopen the file when we switch from write to
  512|       |	 * read.
  513|       |	 */
  514|       |
  515|       |	/* Any file mapping?
  516|       |	 */
  517|   205k|	if (image->baseaddr) {
  ------------------
  |  Branch (517:6): [True: 0, False: 205k]
  ------------------
  518|       |		/* MMAP file.
  519|       |		 */
  520|      0|		VIPS_DEBUG_MSG("vips_image_dispose: unmapping file\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|       |
  522|      0|		vips__munmap(image->baseaddr, image->length);
  523|      0|		image->baseaddr = NULL;
  524|      0|		image->length = 0;
  525|       |
  526|       |		/* This must have been a pointer to the mmap region, rather
  527|       |		 * than a setbuf.
  528|       |		 */
  529|      0|		image->data = NULL;
  530|      0|	}
  531|       |
  532|       |	/* Is there a file descriptor?
  533|       |	 */
  534|   205k|	if (image->fd != -1) {
  ------------------
  |  Branch (534:6): [True: 0, False: 205k]
  ------------------
  535|      0|		VIPS_DEBUG_MSG("vips_image_dispose: closing output file\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  536|       |
  537|      0|		if (vips_tracked_close(image->fd) == -1)
  ------------------
  |  Branch (537:7): [True: 0, False: 0]
  ------------------
  538|      0|			vips_error("VipsImage",
  539|      0|				"%s", _("unable to close fd"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  540|      0|		image->fd = -1;
  541|      0|	}
  542|       |
  543|   205k|	G_OBJECT_CLASS(vips_image_parent_class)->dispose(gobject);
  ------------------
  |  |   58|   205k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   205k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   205k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  544|   205k|}
image.c:vips_image_build:
  833|   205k|{
  834|   205k|	VipsImage *image = VIPS_IMAGE(object);
  ------------------
  |  |  171|   205k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   205k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   205k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  172|   205k|		VIPS_TYPE_IMAGE, VipsImage))
  ------------------
  835|   205k|	const char *filename = image->filename;
  836|   205k|	const char *mode = image->mode;
  837|       |
  838|   205k|	guint32 magic;
  839|   205k|	guint64 sizeof_image;
  840|       |
  841|   205k|	VIPS_DEBUG_MSG("vips_image_build: %p\n", image);
  ------------------
  |  |   47|   205k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   205k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   205k|	{ \
  |  |   49|   205k|		; \
  |  |   50|   205k|	} \
  |  |   51|   205k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   205k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  842|       |
  843|   205k|	if (VIPS_OBJECT_CLASS(vips_image_parent_class)->build(object))
  ------------------
  |  |  435|   205k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|   205k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   205k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (843:6): [True: 0, False: 205k]
  ------------------
  844|      0|		return -1;
  845|       |
  846|       |	/* Parse the mode string.
  847|       |	 */
  848|   205k|	switch (mode[0]) {
  849|      0|	case 'v':
  ------------------
  |  Branch (849:2): [True: 0, False: 205k]
  ------------------
  850|       |		/* Used by 'r' for native open of vips, see below. Also by
  851|       |		 * vips_image_rewind_output().
  852|       |		 */
  853|      0|		if (vips_image_open_input(image))
  ------------------
  |  Branch (853:7): [True: 0, False: 0]
  ------------------
  854|      0|			return -1;
  855|       |
  856|      0|		break;
  857|       |
  858|      0|	case 'r':
  ------------------
  |  Branch (858:2): [True: 0, False: 205k]
  ------------------
  859|      0|		if ((magic = vips__file_magic(filename))) {
  ------------------
  |  Branch (859:7): [True: 0, False: 0]
  ------------------
  860|       |			/* We may need to byteswap.
  861|       |			 */
  862|      0|			if (GUINT_FROM_BE(magic) == image->magic) {
  ------------------
  |  |  407|      0|#define GUINT_FROM_BE(val)	(GUINT_TO_BE (val))
  ------------------
  |  Branch (862:8): [True: 0, False: 0]
  ------------------
  863|       |				/* Native open.
  864|       |				 */
  865|      0|				if (vips_image_open_input(image))
  ------------------
  |  Branch (865:9): [True: 0, False: 0]
  ------------------
  866|      0|					return -1;
  867|      0|			}
  868|      0|			else {
  869|      0|				VipsImage *t;
  870|      0|				VipsImage *t2;
  871|       |
  872|       |				/* Open the image in t, then byteswap to this
  873|       |				 * image.
  874|       |				 */
  875|      0|				if (!(t = vips_image_new_mode(filename,
  ------------------
  |  Branch (875:9): [True: 0, False: 0]
  ------------------
  876|      0|						  "v")))
  877|      0|					return -1;
  878|       |
  879|      0|				if (vips_byteswap(t, &t2, NULL)) {
  ------------------
  |  Branch (879:9): [True: 0, False: 0]
  ------------------
  880|      0|					g_object_unref(t);
  881|      0|					return -1;
  882|      0|				}
  883|      0|				g_object_unref(t);
  884|       |
  885|      0|				image->dtype = VIPS_IMAGE_PARTIAL;
  886|      0|				if (vips_image_write(t2, image)) {
  ------------------
  |  Branch (886:9): [True: 0, False: 0]
  ------------------
  887|      0|					g_object_unref(t2);
  888|      0|					return -1;
  889|      0|				}
  890|      0|				g_object_unref(t2);
  891|      0|			}
  892|      0|		}
  893|      0|		else {
  894|      0|			VipsImage *t;
  895|       |
  896|      0|			if (mode[1] == 's') {
  ------------------
  |  Branch (896:8): [True: 0, False: 0]
  ------------------
  897|      0|				if (vips_foreign_load(filename, &t,
  ------------------
  |  Branch (897:9): [True: 0, False: 0]
  ------------------
  898|      0|						"access", VIPS_ACCESS_SEQUENTIAL,
  899|      0|						NULL))
  900|      0|					return -1;
  901|      0|			}
  902|      0|			else {
  903|      0|				if (vips_foreign_load(filename, &t, NULL))
  ------------------
  |  Branch (903:9): [True: 0, False: 0]
  ------------------
  904|      0|					return -1;
  905|      0|			}
  906|       |
  907|      0|			image->dtype = VIPS_IMAGE_PARTIAL;
  908|      0|			if (vips_image_write(t, image)) {
  ------------------
  |  Branch (908:8): [True: 0, False: 0]
  ------------------
  909|      0|				g_object_unref(t);
  910|      0|				return -1;
  911|      0|			}
  912|      0|			g_object_unref(t);
  913|      0|		}
  914|       |
  915|      0|		break;
  916|       |
  917|      0|	case 'w': {
  ------------------
  |  Branch (917:2): [True: 0, False: 205k]
  ------------------
  918|      0|		const char *file_op;
  919|       |
  920|       |		/* Make sure the vips saver is there ... strange things will
  921|       |		 * happen if this type is renamed or removed.
  922|       |		 */
  923|      0|		g_assert(g_type_from_name("VipsForeignSaveVips"));
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  924|       |
  925|      0|		if (!(file_op = vips_foreign_find_save(filename)))
  ------------------
  |  Branch (925:7): [True: 0, False: 0]
  ------------------
  926|      0|			return -1;
  927|       |
  928|       |		/* If this is the vips saver, just save directly ourselves.
  929|       |		 * Otherwise save with VipsForeign when the image has been
  930|       |		 * written to.
  931|       |		 */
  932|      0|		if (vips_isprefix("VipsForeignSaveVips", file_op))
  ------------------
  |  Branch (932:7): [True: 0, False: 0]
  ------------------
  933|      0|			image->dtype = VIPS_IMAGE_OPENOUT;
  934|      0|		else {
  935|      0|			image->dtype = VIPS_IMAGE_PARTIAL;
  936|      0|			g_signal_connect(image, "written",
  ------------------
  |  |  491|      0|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  937|      0|				G_CALLBACK(vips_image_save_cb),
  938|      0|				NULL);
  939|      0|		}
  940|      0|	} break;
  941|       |
  942|  25.0k|	case 't':
  ------------------
  |  Branch (942:2): [True: 25.0k, False: 180k]
  ------------------
  943|  25.0k|		image->dtype = VIPS_IMAGE_SETBUF;
  944|  25.0k|		image->dhint = VIPS_DEMAND_STYLE_ANY;
  945|  25.0k|		break;
  946|       |
  947|   180k|	case 'p':
  ------------------
  |  Branch (947:2): [True: 180k, False: 25.0k]
  ------------------
  948|   180k|		image->dtype = VIPS_IMAGE_PARTIAL;
  949|   180k|		break;
  950|       |
  951|      0|	case 'a':
  ------------------
  |  Branch (951:2): [True: 0, False: 205k]
  ------------------
  952|      0|		if ((image->fd = vips__open_image_read(filename)) == -1)
  ------------------
  |  Branch (952:7): [True: 0, False: 0]
  ------------------
  953|      0|			return -1;
  954|      0|		image->dtype = VIPS_IMAGE_OPENIN;
  955|      0|		image->dhint = VIPS_DEMAND_STYLE_THINSTRIP;
  956|       |
  957|      0|		if (image->Bands == 1)
  ------------------
  |  Branch (957:7): [True: 0, False: 0]
  ------------------
  958|      0|			image->Type = VIPS_INTERPRETATION_B_W;
  959|      0|		else if (image->Bands == 3)
  ------------------
  |  Branch (959:12): [True: 0, False: 0]
  ------------------
  960|      0|			image->Type = VIPS_INTERPRETATION_sRGB;
  961|      0|		else
  962|      0|			image->Type = VIPS_INTERPRETATION_MULTIBAND;
  963|       |
  964|       |		/* Read the real file length and check against what we think
  965|       |		 * the size should be.
  966|       |		 */
  967|      0|		if ((image->file_length = vips_file_length(image->fd)) == -1)
  ------------------
  |  Branch (967:7): [True: 0, False: 0]
  ------------------
  968|      0|			return -1;
  969|       |
  970|       |		/* Very common, so a special message.
  971|       |		 */
  972|      0|		sizeof_image = VIPS_IMAGE_SIZEOF_IMAGE(image) +
  ------------------
  |  |  388|      0|	(VIPS_IMAGE_SIZEOF_LINE(I) * (I)->Ysize)
  |  |  ------------------
  |  |  |  |  386|      0|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  973|      0|			image->sizeof_header;
  974|      0|		if (image->file_length < sizeof_image) {
  ------------------
  |  Branch (974:7): [True: 0, False: 0]
  ------------------
  975|      0|			vips_error("VipsImage",
  976|      0|				_("unable to open \"%s\", file too short"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  977|      0|				image->filename);
  978|      0|			return -1;
  979|      0|		}
  980|       |
  981|       |		/* Just weird. Only print a warning for this, since we should
  982|       |		 * still be able to process it without coredumps.
  983|       |		 */
  984|      0|		if (image->file_length > sizeof_image)
  ------------------
  |  Branch (984:7): [True: 0, False: 0]
  ------------------
  985|      0|			g_warning(_("%s is longer than expected"),
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  986|      0|				image->filename);
  987|      0|		break;
  988|       |
  989|      0|	case 'm':
  ------------------
  |  Branch (989:2): [True: 0, False: 205k]
  ------------------
  990|      0|		if (image->Bands == 1)
  ------------------
  |  Branch (990:7): [True: 0, False: 0]
  ------------------
  991|      0|			image->Type = VIPS_INTERPRETATION_B_W;
  992|      0|		else if (image->Bands == 3)
  ------------------
  |  Branch (992:12): [True: 0, False: 0]
  ------------------
  993|      0|			image->Type = VIPS_INTERPRETATION_sRGB;
  994|      0|		else
  995|      0|			image->Type = VIPS_INTERPRETATION_MULTIBAND;
  996|       |
  997|      0|		image->dtype = VIPS_IMAGE_SETBUF_FOREIGN;
  998|      0|		image->dhint = VIPS_DEMAND_STYLE_ANY;
  999|       |
 1000|      0|		break;
 1001|       |
 1002|      0|	default:
  ------------------
  |  Branch (1002:2): [True: 0, False: 205k]
  ------------------
 1003|      0|		vips_error("VipsImage", _("bad mode \"%s\""), mode);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1004|       |
 1005|      0|		return -1;
 1006|   205k|	}
 1007|       |
 1008|   205k|	vips_image_add_progress(image);
 1009|       |
 1010|   205k|	return 0;
 1011|   205k|}
image.c:vips_image_add_progress:
  803|   205k|{
  804|   205k|	if (vips__progress ||
  ------------------
  |  Branch (804:6): [True: 0, False: 205k]
  ------------------
  805|   205k|		g_getenv("VIPS_PROGRESS")
  ------------------
  |  Branch (805:3): [True: 0, False: 205k]
  ------------------
  806|       |#if ENABLE_DEPRECATED
  807|       |		|| g_getenv("IM_PROGRESS")
  808|       |#endif
  809|   205k|	) {
  810|       |
  811|       |		/* Keep the %complete we displayed last time here.
  812|       |		 */
  813|      0|		int *last = VIPS_NEW(image, int);
  ------------------
  |  |   70|      0|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|      0|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  814|       |
  815|      0|		g_signal_connect(image, "preeval",
  ------------------
  |  |  491|      0|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  816|      0|			G_CALLBACK(vips_image_preeval_cb), last);
  817|      0|		g_signal_connect(image, "eval",
  ------------------
  |  |  491|      0|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  818|      0|			G_CALLBACK(vips_image_eval_cb), last);
  819|      0|		g_signal_connect(image, "posteval",
  ------------------
  |  |  491|      0|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  820|      0|			G_CALLBACK(vips_image_posteval_cb), NULL);
  821|       |
  822|      0|		vips_image_set_progress(image, TRUE);
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  823|      0|	}
  824|   205k|}
image.c:vips_image_real_written:
 1046|   178k|{
 1047|   178k|	VIPS_DEBUG_MSG("vips_image_real_written: %p\n", image);
  ------------------
  |  |   47|   178k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   178k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   178k|	{ \
  |  |   49|   178k|		; \
  |  |   50|   178k|	} \
  |  |   51|   178k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   178k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1048|       |
 1049|       |	/* For vips image write, append the xml after the data.
 1050|       |	 */
 1051|   178k|	if (image->dtype == VIPS_IMAGE_OPENOUT &&
  ------------------
  |  Branch (1051:6): [True: 0, False: 178k]
  ------------------
 1052|   178k|		vips__writehist(image))
  ------------------
  |  Branch (1052:3): [True: 0, False: 0]
  ------------------
 1053|      0|		*result = -1;
 1054|   178k|}
image.c:vips_image_real_minimise:
 1040|   391k|{
 1041|   391k|	VIPS_DEBUG_MSG("vips_image_real_minimise: %p\n", image);
  ------------------
  |  |   47|   391k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   391k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   391k|	{ \
  |  |   49|   391k|		; \
  |  |   50|   391k|	} \
  |  |   51|   391k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   391k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1042|   391k|}
image.c:vips_image_init:
 1333|   205k|{
 1334|   205k|	VIPS_DEBUG_MSG("vips_image_init: %p\n", image);
  ------------------
  |  |   47|   205k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   205k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   205k|	{ \
  |  |   49|   205k|		; \
  |  |   50|   205k|	} \
  |  |   51|   205k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   205k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1335|       |
 1336|       |	/* Default to native order.
 1337|       |	 */
 1338|   205k|	image->magic = vips_amiMSBfirst()
  ------------------
  |  Branch (1338:17): [True: 0, False: 205k]
  ------------------
 1339|   205k|		? VIPS_MAGIC_SPARC
  ------------------
  |  |   55|      0|#define VIPS_MAGIC_SPARC (0x08f2a6b6U)
  ------------------
 1340|   205k|		: VIPS_MAGIC_INTEL;
  ------------------
  |  |   54|   410k|#define VIPS_MAGIC_INTEL (0xb6a6f208U)
  ------------------
 1341|       |
 1342|   205k|	image->Xsize = 1;
 1343|   205k|	image->Ysize = 1;
 1344|   205k|	image->Bands = 1;
 1345|       |
 1346|   205k|	image->Xres = 1.0;
 1347|   205k|	image->Yres = 1.0;
 1348|       |
 1349|   205k|	image->fd = -1; /* since 0 is stdout */
 1350|   205k|	image->sslock = vips_g_mutex_new();
 1351|       |
 1352|   205k|	image->sizeof_header = VIPS_SIZEOF_HEADER;
  ------------------
  |  |   57|   205k|#define VIPS_SIZEOF_HEADER (64)
  ------------------
 1353|       |
 1354|   205k|	image->mode = g_strdup("p");
 1355|       |
 1356|   205k|#ifdef DEBUG_LEAK
 1357|   205k|	g_object_set_qdata_full(G_OBJECT(image), vips__image_pixels_quark,
  ------------------
  |  |   51|   205k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   205k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   205k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1358|   205k|		g_new0(VipsImagePixels, 1), (GDestroyNotify) g_free);
  ------------------
  |  |  299|   205k|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|   205k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|   205k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|   205k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|   205k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|   205k|	  gpointer __p;						\
  |  |  |  |  231|   205k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 205k]
  |  |  |  |  ------------------
  |  |  |  |  232|   205k|	    __p = g_##func (__n);				\
  |  |  |  |  233|   205k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 205k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|   205k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 205k]
  |  |  |  |  |  Branch (234:26): [True: 205k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|   205k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|   205k|	  else							\
  |  |  |  |  237|   205k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|   205k|	  __p;							\
  |  |  |  |  239|   205k|	}))
  |  |  ------------------
  ------------------
 1359|   205k|#endif /*DEBUG_LEAK*/
 1360|   205k|}
image.c:vips_image_minimise_all_cb:
 1425|   391k|{
 1426|   391k|	vips_image_minimise(image);
 1427|       |
 1428|   391k|	return NULL;
 1429|   391k|}
image.c:vips_image_minimise:
 1417|   391k|{
 1418|   391k|	VIPS_DEBUG_MSG("vips_image_minimise: %p\n", image);
  ------------------
  |  |   47|   391k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   391k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   391k|	{ \
  |  |   49|   391k|		; \
  |  |   50|   391k|	} \
  |  |   51|   391k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   391k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1419|       |
 1420|   391k|	g_signal_emit(image, vips_image_signals[SIG_MINIMISE], 0);
 1421|   391k|}
image.c:vips_progress_add:
 1475|  35.7k|{
 1476|  35.7k|	VipsProgress *progress;
 1477|       |
 1478|  35.7k|	VIPS_DEBUG_MSG("vips_progress_add: %p\n", image);
  ------------------
  |  |   47|  35.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  35.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  35.7k|	{ \
  |  |   49|  35.7k|		; \
  |  |   50|  35.7k|	} \
  |  |   51|  35.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  35.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1479|       |
 1480|  35.7k|	if (!(progress = image->time)) {
  ------------------
  |  Branch (1480:6): [True: 35.7k, False: 0]
  ------------------
 1481|  35.7k|		if (!(image->time = VIPS_NEW(NULL, VipsProgress)))
  ------------------
  |  |   70|  35.7k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  35.7k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  35.7k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  35.7k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  35.7k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1481:7): [True: 0, False: 35.7k]
  ------------------
 1482|      0|			return -1;
 1483|  35.7k|		progress = image->time;
 1484|       |
 1485|  35.7k|		progress->im = image;
 1486|  35.7k|		progress->start = NULL;
 1487|  35.7k|	}
 1488|       |
 1489|  35.7k|	if (!progress->start)
  ------------------
  |  Branch (1489:6): [True: 35.7k, False: 0]
  ------------------
 1490|  35.7k|		progress->start = g_timer_new();
 1491|       |
 1492|  35.7k|	g_timer_start(progress->start);
 1493|  35.7k|	progress->run = 0;
 1494|  35.7k|	progress->eta = 0;
 1495|  35.7k|	progress->tpels = VIPS_IMAGE_N_PELS(image);
  ------------------
  |  |  392|  35.7k|	((guint64) (I)->Xsize * (I)->Ysize)
  ------------------
 1496|  35.7k|	progress->npels = 0;
 1497|  35.7k|	progress->percent = 0;
 1498|       |
 1499|  35.7k|	return 0;
 1500|  35.7k|}
image.c:vips_progress_update:
 1504|  56.5k|{
 1505|  56.5k|	float prop;
 1506|       |
 1507|  56.5k|	VIPS_DEBUG_MSG("vips_progress_update: %p\n", progress);
  ------------------
  |  |   47|  56.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  56.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  56.5k|	{ \
  |  |   49|  56.5k|		; \
  |  |   50|  56.5k|	} \
  |  |   51|  56.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  56.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1508|       |
 1509|  56.5k|	g_assert(progress);
  ------------------
  |  |  166|  56.5k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  56.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  56.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1510|       |
 1511|  56.5k|	progress->run = g_timer_elapsed(progress->start, NULL);
 1512|  56.5k|	progress->npels = processed;
 1513|  56.5k|	prop = (float) progress->npels / (float) progress->tpels;
 1514|  56.5k|	progress->percent = 100 * prop;
 1515|       |
 1516|       |	/* Don't estimate eta until we are 10% in.
 1517|       |	 */
 1518|  56.5k|	if (prop > 0.1)
  ------------------
  |  Branch (1518:6): [True: 56.5k, False: 0]
  ------------------
 1519|  56.5k|		progress->eta = (1.0 / prop) * progress->run - progress->run;
 1520|  56.5k|}
image.c:vips_image_temp_name:
 1700|   205k|{
 1701|   205k|	static int global_serial = 0;
 1702|       |
 1703|   205k|	int serial = g_atomic_int_add(&global_serial, 1);
  ------------------
  |  |  162|   205k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|   205k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|   205k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|   205k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  164|   205k|    (void) (0 ? *(atomic) ^ (val) : 1);                                      \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded - Ignored]
  |  |  ------------------
  |  |  165|   205k|    (gint) __atomic_fetch_add ((atomic), (val), __ATOMIC_SEQ_CST);           \
  |  |  166|   205k|  }))
  ------------------
 1704|       |
 1705|   205k|	g_snprintf(name, size, "temp-%d", serial);
 1706|   205k|}
image.c:vips_image_write_gen:
 2591|   134k|{
 2592|   134k|	VipsRegion *ir = (VipsRegion *) seq;
 2593|   134k|	VipsRect *r = &out_region->valid;
 2594|       |
 2595|       |	/*
 2596|       |	printf("vips_image_write_gen: %p "
 2597|       |		   "left = %d, top = %d, width = %d, height = %d\n",
 2598|       |		out_region->im,
 2599|       |		r->left, r->top, r->width, r->height);
 2600|       |	 */
 2601|       |
 2602|       |	/* Copy with pointers.
 2603|       |	 */
 2604|   134k|	if (vips_region_prepare(ir, r) ||
  ------------------
  |  Branch (2604:6): [True: 38.6k, False: 96.0k]
  ------------------
 2605|   134k|		vips_region_region(out_region, ir, r, r->left, r->top))
  ------------------
  |  Branch (2605:3): [True: 0, False: 96.0k]
  ------------------
 2606|  38.6k|		return -1;
 2607|       |
 2608|  96.0k|	return 0;
 2609|   134k|}

vips_max_coord_get:
  154|  38.8k|{
  155|       |	// CLI overrides env var
  156|  38.8k|	const char *as_str = vips__max_coord_arg ?
  ------------------
  |  Branch (156:23): [True: 0, False: 38.8k]
  ------------------
  157|  38.8k|		vips__max_coord_arg : g_getenv("VIPS_MAX_COORD");
  158|       |
  159|  38.8k|	if (as_str) {
  ------------------
  |  Branch (159:6): [True: 0, False: 38.8k]
  ------------------
  160|      0|		guint64 size = vips__parse_size(as_str);
  161|       |
  162|      0|		return VIPS_CLIP(100, size, INT_MAX);
  ------------------
  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|      0|	}
  164|  38.8k|	else
  165|  38.8k|		return VIPS_DEFAULT_MAX_COORD;
  ------------------
  |  |   65|  38.8k|#define VIPS_DEFAULT_MAX_COORD (100000000)
  ------------------
  166|  38.8k|}
vips_init:
  439|   462k|{
  440|   462k|	extern GType vips_system_get_type(void);
  441|   462k|	extern GType write_thread_state_get_type(void);
  442|   462k|	extern GType sink_memory_thread_state_get_type(void);
  443|   462k|	extern GType render_thread_state_get_type(void);
  444|   462k|	extern GType vips_source_get_type(void);
  445|   462k|	extern GType vips_source_custom_get_type(void);
  446|   462k|	extern GType vips_target_get_type(void);
  447|   462k|	extern GType vips_target_custom_get_type(void);
  448|   462k|	extern GType vips_g_input_stream_get_type(void);
  449|       |
  450|   462k|	static gboolean started = FALSE;
  ------------------
  |  |  794|   462k|#define	FALSE	(0)
  ------------------
  451|   462k|	static gboolean done = FALSE;
  ------------------
  |  |  794|   462k|#define	FALSE	(0)
  ------------------
  452|   462k|	const char *vips_min_stack_size;
  453|   462k|	gint64 min_stack_size;
  454|   462k|	const char *prefix;
  455|   462k|	const char *libdir;
  456|   462k|#ifdef ENABLE_NLS
  457|   462k|	char *locale;
  458|   462k|#endif /* ENABLE_NLS */
  459|       |
  460|       |	/* Two stage done handling: 'done' means we've completed, 'started'
  461|       |	 * means we're currently initialising. Use this to prevent recursive
  462|       |	 * invocation.
  463|       |	 */
  464|   462k|	if (done)
  ------------------
  |  Branch (464:6): [True: 462k, False: 2]
  ------------------
  465|       |		/* Called more than once, we succeeded, just return OK.
  466|       |		 */
  467|   462k|		return 0;
  468|      2|	if (started)
  ------------------
  |  Branch (468:6): [True: 0, False: 2]
  ------------------
  469|       |		/* Recursive invocation, something has broken horribly.
  470|       |		 * Hopefully the first init will handle it.
  471|       |		 */
  472|      0|		return 0;
  473|      2|	started = TRUE;
  ------------------
  |  |  798|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  474|       |
  475|       |	/* Try to set a minimum stacksize, default 2mb. We need to do this
  476|       |	 * before any threads start.
  477|       |	 */
  478|      2|	min_stack_size = 2 * 1024 * 1024;
  479|      2|	if ((vips_min_stack_size = g_getenv("VIPS_MIN_STACK_SIZE")))
  ------------------
  |  Branch (479:6): [True: 0, False: 2]
  ------------------
  480|      0|		min_stack_size = vips__parse_size(vips_min_stack_size);
  481|      2|	(void) set_stacksize(min_stack_size);
  482|       |
  483|      2|	if (g_getenv("VIPS_INFO")
  ------------------
  |  Branch (483:6): [True: 0, False: 2]
  ------------------
  484|       |#if ENABLE_DEPRECATED
  485|       |		|| g_getenv("IM_INFO")
  486|       |#endif
  487|      2|	)
  488|      0|		vips_verbose();
  489|      2|	if (g_getenv("VIPS_PROFILE"))
  ------------------
  |  Branch (489:6): [True: 0, False: 2]
  ------------------
  490|      0|		vips_profile_set(TRUE);
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  491|      2|	if (g_getenv("VIPS_LEAK"))
  ------------------
  |  Branch (491:6): [True: 0, False: 2]
  ------------------
  492|      0|		vips_leak_set(TRUE);
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  493|      2|	if (g_getenv("VIPS_TRACE"))
  ------------------
  |  Branch (493:6): [True: 0, False: 2]
  ------------------
  494|      0|		vips_cache_set_trace(TRUE);
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  495|       |
  496|      2|	const char *pipe_read_limit;
  497|      2|	if ((pipe_read_limit = g_getenv("VIPS_PIPE_READ_LIMIT")))
  ------------------
  |  Branch (497:6): [True: 0, False: 2]
  ------------------
  498|      0|		vips_pipe_read_limit_set(vips__parse_size(pipe_read_limit));
  499|       |
  500|       |#ifdef G_OS_WIN32
  501|       |	/* Windows has a limit of 512 files open at once for the fopen() family
  502|       |	 * of functions, and 2048 for the _open() family. This raises the limit
  503|       |	 * of fopen() to the same level as _open().
  504|       |	 *
  505|       |	 * It will not go any higher than this, unfortunately.
  506|       |	 */
  507|       |	(void) _setmaxstdio(2048);
  508|       |#endif /*G_OS_WIN32*/
  509|       |
  510|      2|	vips__thread_init();
  511|      2|	vips__threadpool_init();
  512|      2|	vips__buffer_init();
  513|       |
  514|      2|	if (!vips__global_timer)
  ------------------
  |  Branch (514:6): [True: 2, False: 0]
  ------------------
  515|      2|		vips__global_timer = g_timer_new();
  516|       |
  517|      2|	VIPS_SETSTR(vips__argv0, argv0);
  ------------------
  |  |   53|      2|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  ------------------
  |  |   54|      2|	{ \
  |  |   55|      2|		const char *sst = (V); \
  |  |   56|      2|		\
  |  |   57|      2|		if ((S) != sst) { \
  |  |  ------------------
  |  |  |  Branch (57:7): [True: 2, False: 0]
  |  |  ------------------
  |  |   58|      2|			if (!(S) || !sst || strcmp((S), sst) != 0) { \
  |  |  ------------------
  |  |  |  Branch (58:8): [True: 2, False: 0]
  |  |  |  Branch (58:16): [True: 0, False: 0]
  |  |  |  Branch (58:24): [True: 0, False: 0]
  |  |  ------------------
  |  |   59|      2|				VIPS_FREE(S); \
  |  |  ------------------
  |  |  |  |   50|      2|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|      2|	G_STMT_START \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      2|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   42|      2|	{ \
  |  |  |  |  |  |   43|      2|		if (S) { \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (43:7): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |  |  |   46|      0|		} \
  |  |  |  |  |  |   47|      2|	} \
  |  |  |  |  |  |   48|      2|	G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   60|      2|				if (sst) \
  |  |  ------------------
  |  |  |  Branch (60:9): [True: 2, False: 0]
  |  |  ------------------
  |  |   61|      2|					(S) = g_strdup(sst); \
  |  |   62|      2|			} \
  |  |   63|      2|		} \
  |  |   64|      2|	} \
  |  |   65|      2|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      2|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  518|      2|	vips__prgname = g_path_get_basename(argv0);
  519|       |
  520|      2|	vips__thread_profile_attach("main");
  521|       |
  522|       |	/* We can't do VIPS_GATE_START() until command-line processing
  523|       |	 * happens, since vips__thread_profile may not be set yet. Call
  524|       |	 * directly.
  525|       |	 */
  526|      2|	vips__thread_gate_start("init: main");
  527|      2|	vips__thread_gate_start("init: startup");
  528|       |
  529|       |	/* Try to discover our prefix.
  530|       |	 */
  531|      2|	if ((prefix = g_getenv("VIPSHOME")))
  ------------------
  |  Branch (531:6): [True: 1, False: 1]
  ------------------
  532|      1|		g_info("VIPSHOME = %s", prefix);
  ------------------
  |  |  341|      1|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      1|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      1|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      1|                               __VA_ARGS__)
  ------------------
  533|      2|	if (!(prefix = vips_guess_prefix(argv0, "VIPSHOME")) ||
  ------------------
  |  Branch (533:6): [True: 0, False: 2]
  ------------------
  534|      2|		!(libdir = vips_guess_libdir(argv0, "VIPSHOME")))
  ------------------
  |  Branch (534:3): [True: 0, False: 2]
  ------------------
  535|      0|		return -1;
  536|       |
  537|      2|	g_info("VIPS_PREFIX = %s", VIPS_PREFIX);
  ------------------
  |  |  341|      2|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      2|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      2|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      2|                               __VA_ARGS__)
  ------------------
  538|      2|	g_info("VIPS_LIBDIR = %s", VIPS_LIBDIR);
  ------------------
  |  |  341|      2|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      2|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      2|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      2|                               __VA_ARGS__)
  ------------------
  539|      2|	g_info("prefix = %s", prefix);
  ------------------
  |  |  341|      2|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      2|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      2|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      2|                               __VA_ARGS__)
  ------------------
  540|      2|	g_info("libdir = %s", libdir);
  ------------------
  |  |  341|      2|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      2|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      2|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      2|                               __VA_ARGS__)
  ------------------
  541|       |
  542|       |	/* Get i18n .mo files from $VIPSHOME/share/locale/.
  543|       |	 */
  544|      2|#ifdef ENABLE_NLS
  545|      2|	locale = g_build_filename(prefix, "share", "locale", NULL);
  546|      2|	bindtextdomain(GETTEXT_PACKAGE, locale);
  ------------------
  |  |   10|      2|#define GETTEXT_PACKAGE "vips8.17"
  ------------------
  547|      2|	g_free(locale);
  548|      2|#ifdef HAVE_BIND_TEXTDOMAIN_CODESET
  549|      2|	bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
  ------------------
  |  |   10|      2|#define GETTEXT_PACKAGE "vips8.17"
  ------------------
  550|      2|#endif /* HAVE_BIND_TEXTDOMAIN_CODESET */
  551|      2|#endif /* ENABLE_NLS */
  552|       |
  553|       |	/* Register base vips types.
  554|       |	 */
  555|      2|	(void) vips_image_get_type();
  556|      2|	(void) vips_region_get_type();
  557|      2|	(void) write_thread_state_get_type();
  558|      2|	(void) sink_memory_thread_state_get_type();
  559|      2|	(void) render_thread_state_get_type();
  560|      2|	(void) vips_source_get_type();
  561|      2|	(void) vips_source_custom_get_type();
  562|      2|	(void) vips_target_get_type();
  563|      2|	(void) vips_target_custom_get_type();
  564|      2|	vips__meta_init_types();
  565|      2|	vips__interpolate_init();
  566|       |
  567|       |#if ENABLE_DEPRECATED
  568|       |	im__format_init();
  569|       |#endif
  570|       |
  571|       |	/* Start up operator cache.
  572|       |	 */
  573|      2|	vips__cache_init();
  574|       |
  575|       |	/* Recomp reordering system.
  576|       |	 */
  577|      2|	vips__reorder_init();
  578|       |
  579|       |	/* Start up packages.
  580|       |	 */
  581|      2|	(void) vips_system_get_type();
  582|      2|	vips_arithmetic_operation_init();
  583|      2|	vips_conversion_operation_init();
  584|      2|	vips_create_operation_init();
  585|      2|	vips_foreign_operation_init();
  586|      2|	vips_resample_operation_init();
  587|      2|	vips_colour_operation_init();
  588|      2|	vips_histogram_operation_init();
  589|      2|	vips_convolution_operation_init();
  590|      2|	vips_freqfilt_operation_init();
  591|      2|	vips_morphology_operation_init();
  592|      2|	vips_draw_operation_init();
  593|      2|	vips_mosaicing_operation_init();
  594|      2|	vips_g_input_stream_get_type();
  595|       |
  596|       |#ifdef ENABLE_MODULES
  597|       |	/* Load any vips8 modules from the vips libdir. Keep going, even if
  598|       |	 * some modules fail to load.
  599|       |	 *
  600|       |	 * Only do this if we have been built as a set of loadable
  601|       |	 * modules, or we might try loading an operation into a library that
  602|       |	 * already has that operation built in.
  603|       |	 */
  604|       |	vips_load_plugins("%s/vips-modules-%d.%d",
  605|       |		libdir, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION);
  606|       |
  607|       |#if ENABLE_DEPRECATED
  608|       |	/* We had vips8 plugins for a while.
  609|       |	 */
  610|       |	vips_load_plugins("%s/vips-plugins-%d.%d",
  611|       |		libdir, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION);
  612|       |
  613|       |	/* Load up any vips7 plugins. We don't error on
  614|       |	 * failure, it's too annoying to have VIPS refuse to start because of
  615|       |	 * a broken plugin.
  616|       |	 */
  617|       |	if (im_load_plugins("%s/vips-%d.%d",
  618|       |			libdir, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION)) {
  619|       |		g_warning("%s", vips_error_buffer());
  620|       |		vips_error_clear();
  621|       |	}
  622|       |
  623|       |	/* Also load from libdir :-( kept for back compat convenience.
  624|       |	 */
  625|       |	if (im_load_plugins("%s", libdir)) {
  626|       |		g_warning("%s", vips_error_buffer());
  627|       |		vips_error_clear();
  628|       |	}
  629|       |#endif /*ENABLE_DEPRECATED*/
  630|       |#endif /*ENABLE_MODULES*/
  631|       |
  632|       |	/* Detect SIMD features.
  633|       |	 */
  634|      2|	vips__vector_init();
  635|       |
  636|      2|#ifdef DEBUG_LEAK
  637|      2|	vips__image_pixels_quark =
  638|      2|		g_quark_from_static_string("vips-image-pixels");
  639|      2|#endif /*DEBUG_LEAK*/
  640|       |
  641|       |	/* If VIPS_WARNING is defined, suppress all warning messages from vips.
  642|       |	 *
  643|       |	 * Libraries should not call g_log_set_handler(), it is
  644|       |	 * supposed to be for the application layer, but this can be awkward to
  645|       |	 * set up if you are using libvips from something like Ruby. Allow this
  646|       |	 * env var hack as a workaround.
  647|       |	 */
  648|      2|	if (g_getenv("VIPS_WARNING")
  ------------------
  |  Branch (648:6): [True: 0, False: 2]
  ------------------
  649|       |#if ENABLE_DEPRECATED
  650|       |		|| g_getenv("IM_WARNING")
  651|       |#endif
  652|      2|	)
  653|      0|		g_log_set_handler(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING,
  ------------------
  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  ------------------
  654|      0|			empty_log_handler, NULL);
  655|       |
  656|       |	/* Block any untrusted operations. This must come after plugin load.
  657|       |	 */
  658|      2|	if (g_getenv("VIPS_BLOCK_UNTRUSTED"))
  ------------------
  |  Branch (658:6): [True: 0, False: 2]
  ------------------
  659|      0|		vips_block_untrusted_set(TRUE);
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  660|       |
  661|      2|	done = TRUE;
  ------------------
  |  |  798|      2|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      2|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  662|       |
  663|      2|	vips__thread_gate_stop("init: startup");
  664|       |
  665|      2|	return 0;
  666|      2|}
vips_check_init:
  672|   462k|{
  673|       |	/* Pass in a nonsense name for argv0 ... this init path is only here
  674|       |	 * for old programs which are missing an vips_init() call. We need
  675|       |	 * i18n set up before we can translate.
  676|       |	 */
  677|   462k|	if (vips_init("vips"))
  ------------------
  |  Branch (677:6): [True: 0, False: 462k]
  ------------------
  678|      0|		vips_error_clear();
  679|   462k|}
vips_thread_shutdown:
  699|  82.8k|{
  700|  82.8k|	vips__thread_profile_detach();
  701|  82.8k|	vips__buffer_shutdown();
  702|  82.8k|}
vips_guess_prefix:
 1147|      4|{
 1148|      4|	const char *prefix;
 1149|       |
 1150|       |	/* Already set?
 1151|       |	 */
 1152|      4|	if ((prefix = g_getenv(env_name)))
  ------------------
  |  Branch (1152:6): [True: 3, False: 1]
  ------------------
 1153|      3|		return prefix;
 1154|       |
 1155|       |#ifdef G_OS_WIN32
 1156|       |	prefix = vips__windows_prefix();
 1157|       |#else  /*!G_OS_WIN32*/
 1158|      1|	{
 1159|      1|		char *basename;
 1160|       |
 1161|      1|		basename = g_path_get_basename(argv0);
 1162|      1|		prefix = guess_prefix(argv0, basename);
 1163|      1|		g_free(basename);
 1164|      1|	}
 1165|      1|#endif /*G_OS_WIN32*/
 1166|       |
 1167|      1|	g_setenv(env_name, prefix, TRUE);
  ------------------
  |  |  798|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1168|       |
 1169|      1|	return prefix;
 1170|      4|}
vips_guess_libdir:
 1194|      2|{
 1195|      2|	const char *prefix = vips_guess_prefix(argv0, env_name);
 1196|      2|	static char *libdir = NULL;
 1197|       |
 1198|      2|	char *suffix;
 1199|       |
 1200|      2|	if (libdir)
  ------------------
  |  Branch (1200:6): [True: 0, False: 2]
  ------------------
 1201|      0|		return libdir;
 1202|       |
 1203|       |	/* Have we been moved since configure? If not, use the configure-time
 1204|       |	 * libdir.
 1205|       |	 *
 1206|       |	 * The lib directory name can be eg. "lib", "lib64" etc. depending on
 1207|       |	 * the platform, so copy that from the configure-time libdir if we can.
 1208|       |	 * The configure-time LIBDIR is generated by autotools and always uses
 1209|       |	 * '/', even on Windows.
 1210|       |	 */
 1211|      2|	if (strcmp(prefix, VIPS_PREFIX) == 0)
  ------------------
  |  |  108|      2|#define VIPS_PREFIX "/work"
  ------------------
  |  Branch (1211:6): [True: 2, False: 0]
  ------------------
 1212|      2|		libdir = VIPS_LIBDIR;
  ------------------
  |  |  106|      2|#define VIPS_LIBDIR "/work/lib"
  ------------------
 1213|      0|	else if ((suffix = strrchr(VIPS_LIBDIR, '/')))
  ------------------
  |  |  106|      0|#define VIPS_LIBDIR "/work/lib"
  ------------------
  |  Branch (1213:11): [True: 0, False: 0]
  ------------------
 1214|      0|		libdir = g_strdup_printf("%s%s", prefix, suffix);
 1215|      0|	else
 1216|      0|		libdir = g_strdup_printf("%s/lib", prefix);
 1217|       |
 1218|      2|	return libdir;
 1219|      2|}
vips_version:
 1249|      4|{
 1250|      4|	switch (flag) {
 1251|      0|	case 0:
  ------------------
  |  Branch (1251:2): [True: 0, False: 4]
  ------------------
 1252|      0|		return VIPS_MAJOR_VERSION;
  ------------------
  |  |    9|      0|#define VIPS_MAJOR_VERSION (8)
  ------------------
 1253|       |
 1254|      0|	case 1:
  ------------------
  |  Branch (1254:2): [True: 0, False: 4]
  ------------------
 1255|      0|		return VIPS_MINOR_VERSION;
  ------------------
  |  |   10|      0|#define VIPS_MINOR_VERSION (17)
  ------------------
 1256|       |
 1257|      0|	case 2:
  ------------------
  |  Branch (1257:2): [True: 0, False: 4]
  ------------------
 1258|      0|		return VIPS_MICRO_VERSION;
  ------------------
  |  |   11|      0|#define VIPS_MICRO_VERSION (0)
  ------------------
 1259|       |
 1260|      2|	case 3:
  ------------------
  |  Branch (1260:2): [True: 2, False: 2]
  ------------------
 1261|      2|		return VIPS_LIBRARY_CURRENT;
  ------------------
  |  |   15|      2|#define VIPS_LIBRARY_CURRENT (61)
  ------------------
 1262|       |
 1263|      0|	case 4:
  ------------------
  |  Branch (1263:2): [True: 0, False: 4]
  ------------------
 1264|      0|		return VIPS_LIBRARY_REVISION;
  ------------------
  |  |   16|      0|#define VIPS_LIBRARY_REVISION (0)
  ------------------
 1265|       |
 1266|      2|	case 5:
  ------------------
  |  Branch (1266:2): [True: 2, False: 2]
  ------------------
 1267|      2|		return VIPS_LIBRARY_AGE;
  ------------------
  |  |   17|      2|#define VIPS_LIBRARY_AGE (19)
  ------------------
 1268|       |
 1269|      0|	default:
  ------------------
  |  Branch (1269:2): [True: 0, False: 4]
  ------------------
 1270|      0|		vips_error("vips_version", "%s", _("flag not in [0, 5]"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1271|      0|		return -1;
 1272|      4|	}
 1273|      4|}
init.c:set_stacksize:
  337|      2|{
  338|      2|#ifdef HAVE_PTHREAD_DEFAULT_NP
  339|      2|	pthread_attr_t attr;
  340|      2|	size_t cur_stack_size;
  341|       |
  342|       |	/* Don't allow stacks less than 2mb.
  343|       |	 */
  344|      2|	size = VIPS_MAX(size, 2 * 1024 * 1024);
  ------------------
  |  |   54|      2|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 2]
  |  |  ------------------
  ------------------
  345|       |
  346|      2|	if (pthread_attr_init(&attr) ||
  ------------------
  |  Branch (346:6): [True: 0, False: 2]
  ------------------
  347|      2|		pthread_attr_getstacksize(&attr, &cur_stack_size)) {
  ------------------
  |  Branch (347:3): [True: 0, False: 2]
  ------------------
  348|      0|		g_warning("set_stacksize: unable to get stack size");
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  349|      0|		pthread_attr_destroy(&attr);
  350|      0|		return;
  351|      0|	}
  352|       |
  353|      2|	if (cur_stack_size < size) {
  ------------------
  |  Branch (353:6): [True: 0, False: 2]
  ------------------
  354|      0|		if (pthread_attr_setstacksize(&attr, size) ||
  ------------------
  |  Branch (354:7): [True: 0, False: 0]
  ------------------
  355|      0|			pthread_setattr_default_np(&attr))
  ------------------
  |  Branch (355:4): [True: 0, False: 0]
  ------------------
  356|      0|			g_warning("set_stacksize: unable to set stack size");
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  357|      0|		else
  358|      0|			g_info("set stack size to %" G_GUINT64_FORMAT "k",
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
  359|      0|				size / (guint64) 1024);
  360|      0|	}
  361|       |
  362|      2|	pthread_attr_destroy(&attr);
  363|      2|#endif /*HAVE_PTHREAD_DEFAULT_NP*/
  364|      2|}
init.c:guess_prefix:
 1063|      1|{
 1064|      1|	char *prefix;
 1065|       |
 1066|       |	/* We've already checked for VIPSHOME. If the configure-time
 1067|       |	 * library prefix looks OK, use the configure-time prefix.
 1068|       |	 */
 1069|      1|	if (vips_existsf("%s/vips-modules-%d.%d",
  ------------------
  |  Branch (1069:6): [True: 0, False: 1]
  ------------------
 1070|      1|			VIPS_LIBDIR, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION)) {
  ------------------
  |  |  106|      1|#define VIPS_LIBDIR "/work/lib"
  ------------------
              			VIPS_LIBDIR, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION)) {
  ------------------
  |  |    9|      1|#define VIPS_MAJOR_VERSION (8)
  ------------------
              			VIPS_LIBDIR, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION)) {
  ------------------
  |  |   10|      1|#define VIPS_MINOR_VERSION (17)
  ------------------
 1071|      0|		g_info("found %s/vips-modules-%d.%d",
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
 1072|      0|			VIPS_LIBDIR, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION);
 1073|      0|		g_info("using configure-time prefix");
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
 1074|      0|		return VIPS_PREFIX;
  ------------------
  |  |  108|      0|#define VIPS_PREFIX "/work"
  ------------------
 1075|      0|	}
 1076|       |
 1077|       |	/* Try to guess from argv0.
 1078|       |	 */
 1079|      1|	if (argv0) {
  ------------------
  |  Branch (1079:6): [True: 1, False: 0]
  ------------------
 1080|      1|		if (g_path_is_absolute(argv0)) {
  ------------------
  |  Branch (1080:7): [True: 1, False: 0]
  ------------------
 1081|       |			/* Must point to our executable.
 1082|       |			 */
 1083|      1|			if ((prefix = extract_prefix(argv0, name))) {
  ------------------
  |  Branch (1083:8): [True: 0, False: 1]
  ------------------
 1084|      0|				g_info("found \"%s\" from argv0", prefix);
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
 1085|      0|				return prefix;
 1086|      0|			}
 1087|      1|		}
 1088|       |
 1089|       |		/* Look along path for name.
 1090|       |		 */
 1091|      1|		if ((prefix = find_file(name))) {
  ------------------
  |  Branch (1091:7): [True: 0, False: 1]
  ------------------
 1092|      0|			g_info("found \"%s\" from PATH", prefix);
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
 1093|      0|			return prefix;
 1094|      0|		}
 1095|      1|	}
 1096|       |
 1097|       |	/* Try to guess from cwd. Only if this is a relative path, though.
 1098|       |	 */
 1099|      1|	if (argv0 &&
  ------------------
  |  Branch (1099:6): [True: 1, False: 0]
  ------------------
 1100|      1|		!g_path_is_absolute(argv0)) {
  ------------------
  |  Branch (1100:3): [True: 0, False: 1]
  ------------------
 1101|      0|		char *dir;
 1102|      0|		char full_path[VIPS_PATH_MAX];
 1103|      0|		char *resolved;
 1104|       |
 1105|      0|		dir = g_get_current_dir();
 1106|      0|		g_snprintf(full_path, VIPS_PATH_MAX,
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 1107|      0|			"%s" G_DIR_SEPARATOR_S "%s", dir, argv0);
 1108|      0|		g_free(dir);
 1109|       |
 1110|      0|		if ((resolved = vips_realpath(full_path))) {
  ------------------
  |  Branch (1110:7): [True: 0, False: 0]
  ------------------
 1111|      0|			prefix = extract_prefix(resolved, name);
 1112|      0|			g_free(resolved);
 1113|       |
 1114|      0|			if (prefix) {
  ------------------
  |  Branch (1114:8): [True: 0, False: 0]
  ------------------
 1115|      0|				g_info("found \"%s\" from cwd", prefix);
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
 1116|      0|				return prefix;
 1117|      0|			}
 1118|      0|		}
 1119|      0|	}
 1120|       |
 1121|       |	/* Fall back to the configure-time prefix.
 1122|       |	 */
 1123|      1|	return VIPS_PREFIX;
  ------------------
  |  |  108|      1|#define VIPS_PREFIX "/work"
  ------------------
 1124|      1|}
init.c:extract_prefix:
  941|      1|{
  942|      1|	char edir[VIPS_PATH_MAX];
  943|      1|	static char vname[VIPS_PATH_MAX];
  944|      1|	int i;
  945|       |
  946|      1|	g_info("trying for dir = \"%s\", name = \"%s\"", dir, name);
  ------------------
  |  |  341|      1|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      1|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      1|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      1|                               __VA_ARGS__)
  ------------------
  947|       |
  948|       |	/* Is dir relative? Prefix with cwd.
  949|       |	 */
  950|      1|	if (!g_path_is_absolute(dir)) {
  ------------------
  |  Branch (950:6): [True: 0, False: 1]
  ------------------
  951|      0|		char *cwd;
  952|       |
  953|      0|		cwd = g_get_current_dir();
  954|      0|		g_snprintf(edir, VIPS_PATH_MAX,
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
  955|      0|			"%s" G_DIR_SEPARATOR_S "%s", cwd, dir);
  956|      0|		g_free(cwd);
  957|      0|	}
  958|      1|	else {
  959|      1|		g_strlcpy(edir, dir, VIPS_PATH_MAX);
  ------------------
  |  |  245|      1|#define VIPS_PATH_MAX (4096)
  ------------------
  960|      1|	}
  961|       |
  962|       |	/* Chop off the trailing prog name, plus the trailing
  963|       |	 * G_DIR_SEPARATOR_S.
  964|       |	 */
  965|      1|	if (!g_str_has_suffix(edir, name))
  ------------------
  |  Branch (965:6): [True: 0, False: 1]
  ------------------
  966|      0|		return NULL;
  967|      1|	g_strlcpy(vname, edir, VIPS_PATH_MAX);
  ------------------
  |  |  245|      1|#define VIPS_PATH_MAX (4096)
  ------------------
  968|      1|	vname[strlen(edir) - strlen(name) - 1] = '\0';
  969|       |
  970|       |	/* Remove any "/./", any trailing "/.", any trailing "/".
  971|       |	 */
  972|     41|	for (i = 0; i < (int) strlen(vname); i++)
  ------------------
  |  Branch (972:14): [True: 40, False: 1]
  ------------------
  973|     40|		if (vips_isprefix(G_DIR_SEPARATOR_S "." G_DIR_SEPARATOR_S,
  ------------------
  |  Branch (973:7): [True: 0, False: 40]
  ------------------
  974|     40|				vname + i))
  975|      0|			memmove(vname + i, vname + i + 2,
  976|      0|				strlen(vname + i + 2) + 1);
  977|      1|	if (g_str_has_suffix(vname, G_DIR_SEPARATOR_S "."))
  ------------------
  |  Branch (977:6): [True: 0, False: 1]
  ------------------
  978|      0|		vname[strlen(vname) - 2] = '\0';
  979|      1|	if (g_str_has_suffix(vname, G_DIR_SEPARATOR_S))
  ------------------
  |  Branch (979:6): [True: 0, False: 1]
  ------------------
  980|      0|		vname[strlen(vname) - 1] = '\0';
  981|       |
  982|      1|	g_info("canonicalised path = \"%s\"", vname);
  ------------------
  |  |  341|      1|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      1|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      1|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      1|                               __VA_ARGS__)
  ------------------
  983|       |
  984|       |	/* Ought to be a "/bin" at the end now.
  985|       |	 */
  986|      1|	if (!g_str_has_suffix(vname, G_DIR_SEPARATOR_S "bin"))
  ------------------
  |  Branch (986:6): [True: 1, False: 0]
  ------------------
  987|      1|		return NULL;
  988|      0|	vname[strlen(vname) - strlen(G_DIR_SEPARATOR_S "bin")] = '\0';
  989|       |
  990|      0|	g_info("found \"%s\"", vname);
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
  991|       |
  992|      0|	return vname;
  993|      1|}
init.c:find_file:
 1028|      1|{
 1029|      1|	const char *path = g_getenv("PATH");
 1030|      1|	char *prefix;
 1031|      1|	char full_path[VIPS_PATH_MAX];
 1032|       |
 1033|      1|	if (!path)
  ------------------
  |  Branch (1033:6): [True: 0, False: 1]
  ------------------
 1034|      0|		return NULL;
 1035|       |
 1036|      1|	g_info("g_getenv(\"PATH\") == \"%s\"", path);
  ------------------
  |  |  341|      1|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      1|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      1|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      1|                               __VA_ARGS__)
  ------------------
 1037|       |
 1038|       |#ifdef G_OS_WIN32
 1039|       |	{
 1040|       |		char *dir;
 1041|       |
 1042|       |		/* Windows always searches '.' first, so prepend cwd to path.
 1043|       |		 */
 1044|       |		dir = g_get_current_dir();
 1045|       |		g_snprintf(full_path, VIPS_PATH_MAX,
 1046|       |			"%s" G_SEARCHPATH_SEPARATOR_S "%s", dir, path);
 1047|       |		g_free(dir);
 1048|       |	}
 1049|       |#else  /*!G_OS_WIN32*/
 1050|      1|	g_strlcpy(full_path, path, VIPS_PATH_MAX);
  ------------------
  |  |  245|      1|#define VIPS_PATH_MAX (4096)
  ------------------
 1051|      1|#endif /*G_OS_WIN32*/
 1052|       |
 1053|      1|	if ((prefix = scan_path(full_path, name)))
  ------------------
  |  Branch (1053:6): [True: 0, False: 1]
  ------------------
 1054|      0|		return prefix;
 1055|       |
 1056|      1|	return NULL;
 1057|      1|}
init.c:scan_path:
  999|      1|{
 1000|      1|	char *p, *q;
 1001|      1|	char *prefix;
 1002|       |
 1003|      1|	for (p = path;
 1004|     11|		 (q = vips_break_token(p, G_SEARCHPATH_SEPARATOR_S)); p = q) {
  ------------------
  |  Branch (1004:4): [True: 10, False: 1]
  ------------------
 1005|     10|		char str[VIPS_PATH_MAX];
 1006|       |
 1007|       |		/* Form complete path.
 1008|       |		 */
 1009|     10|		g_snprintf(str, VIPS_PATH_MAX,
  ------------------
  |  |  245|     10|#define VIPS_PATH_MAX (4096)
  ------------------
 1010|     10|			"%s" G_DIR_SEPARATOR_S "%s", p, name);
 1011|       |
 1012|     10|		g_info("looking in \"%s\" for \"%s\"",
  ------------------
  |  |  341|     10|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|     10|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|     10|                               G_LOG_LEVEL_INFO,     \
  |  |  343|     10|                               __VA_ARGS__)
  ------------------
 1013|     10|			p, name);
 1014|       |
 1015|     10|		if (vips_existsf("%s", str) &&
  ------------------
  |  Branch (1015:7): [True: 0, False: 10]
  ------------------
 1016|     10|			(prefix = extract_prefix(str, name))) {
  ------------------
  |  Branch (1016:4): [True: 0, False: 0]
  ------------------
 1017|      0|			return prefix;
 1018|      0|		}
 1019|     10|	}
 1020|       |
 1021|      1|	return NULL;
 1022|      1|}

vips_malloc:
  177|  2.10M|{
  178|  2.10M|	void *buf;
  179|       |
  180|  2.10M|	buf = g_malloc0(size);
  181|       |
  182|  2.10M|	if (object) {
  ------------------
  |  Branch (182:6): [True: 33.9k, False: 2.06M]
  ------------------
  183|  33.9k|		g_signal_connect(object, "postclose",
  ------------------
  |  |  491|  33.9k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  184|  33.9k|			G_CALLBACK(vips_malloc_cb), buf);
  185|  33.9k|		object->local_memory += size;
  186|  33.9k|	}
  187|       |
  188|  2.10M|	return buf;
  189|  2.10M|}
vips_strdup:
  208|     35|{
  209|     35|	char *str_dup;
  210|       |
  211|     35|	str_dup = g_strdup(str);
  212|       |
  213|     35|	if (object) {
  ------------------
  |  Branch (213:6): [True: 35, False: 0]
  ------------------
  214|     35|		g_signal_connect(object, "postclose",
  ------------------
  |  |  491|     35|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
  215|     35|			G_CALLBACK(vips_malloc_cb), str_dup);
  216|     35|		object->local_memory += strlen(str);
  217|     35|	}
  218|       |
  219|     35|	return str_dup;
  220|     35|}
vips_tracked_free:
  234|  22.8k|{
  235|       |	/* Keep the size of the alloc in the previous 16 bytes. Ensures
  236|       |	 * alignment rules are kept.
  237|       |	 */
  238|  22.8k|	void *start = (void *) ((char *) s - 16);
  239|  22.8k|	size_t size = *((size_t *) start);
  240|       |
  241|  22.8k|	g_mutex_lock(&vips_tracked_mutex);
  242|       |
  243|       |#ifdef DEBUG_VERBOSE_MEM
  244|       |	printf("vips_tracked_free: %p, %zd bytes\n", s, size);
  245|       |#endif /*DEBUG_VERBOSE_MEM*/
  246|       |
  247|  22.8k|	if (vips_tracked_allocs <= 0)
  ------------------
  |  Branch (247:6): [True: 0, False: 22.8k]
  ------------------
  248|      0|		g_warning("%s", _("vips_free: too many frees"));
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  249|  22.8k|	if (vips_tracked_mem < size)
  ------------------
  |  Branch (249:6): [True: 0, False: 22.8k]
  ------------------
  250|      0|		g_warning("%s", _("vips_free: too much free"));
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  251|       |
  252|  22.8k|	vips_tracked_mem -= size;
  253|  22.8k|	vips_tracked_allocs -= 1;
  254|       |
  255|  22.8k|	g_mutex_unlock(&vips_tracked_mutex);
  256|       |
  257|  22.8k|	g_free(start);
  258|       |
  259|  22.8k|	VIPS_GATE_FREE(size);
  ------------------
  |  |   65|  22.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  22.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   66|  22.8k|	{ \
  |  |   67|  22.8k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (67:7): [True: 0, False: 22.8k]
  |  |  ------------------
  |  |   68|  22.8k|			vips__thread_malloc_free(-((gint64) (SIZE))); \
  |  |   69|  22.8k|	} \
  |  |   70|  22.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  22.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  260|  22.8k|}
vips_tracked_aligned_free:
  274|   337k|{
  275|   337k|	void *start = (size_t *) s - 1;
  276|   337k|	size_t size = *((size_t *) start);
  277|       |
  278|   337k|	g_mutex_lock(&vips_tracked_mutex);
  279|       |
  280|       |#ifdef DEBUG_VERBOSE
  281|       |	printf("vips_tracked_aligned_free: %p, %zd bytes\n", s, size);
  282|       |#endif /*DEBUG_VERBOSE*/
  283|       |
  284|   337k|	if (vips_tracked_allocs <= 0)
  ------------------
  |  Branch (284:6): [True: 0, False: 337k]
  ------------------
  285|      0|		g_warning("%s", _("vips_free: too many frees"));
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  286|   337k|	if (vips_tracked_mem < size)
  ------------------
  |  Branch (286:6): [True: 0, False: 337k]
  ------------------
  287|      0|		g_warning("%s", _("vips_free: too much free"));
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  288|       |
  289|   337k|	vips_tracked_mem -= size;
  290|   337k|	vips_tracked_allocs -= 1;
  291|       |
  292|   337k|	g_mutex_unlock(&vips_tracked_mutex);
  293|       |
  294|       |#ifdef HAVE__ALIGNED_MALLOC
  295|       |	_aligned_free(start);
  296|       |#else /*defined(HAVE_POSIX_MEMALIGN) || defined(HAVE_MEMALIGN)*/
  297|   337k|	free(start);
  298|   337k|#endif
  299|       |
  300|   337k|	VIPS_GATE_FREE(size);
  ------------------
  |  |   65|   337k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   337k|#define G_STMT_START  do
  |  |  ------------------
  |  |   66|   337k|	{ \
  |  |   67|   337k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (67:7): [True: 0, False: 337k]
  |  |  ------------------
  |  |   68|   337k|			vips__thread_malloc_free(-((gint64) (SIZE))); \
  |  |   69|   337k|	} \
  |  |   70|   337k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   337k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|   337k|}
vips_tracked_malloc:
  321|  22.8k|{
  322|  22.8k|	void *buf;
  323|       |
  324|       |	/* Need an extra sizeof(size_t) bytes to track
  325|       |	 * size of this block. Ask for an extra 16 to make sure we don't break
  326|       |	 * alignment rules.
  327|       |	 */
  328|  22.8k|	size += 16;
  329|       |
  330|  22.8k|	if (!(buf = g_try_malloc0(size))) {
  ------------------
  |  Branch (330:6): [True: 0, False: 22.8k]
  ------------------
  331|       |#ifdef DEBUG
  332|       |		g_assert_not_reached();
  333|       |#endif /*DEBUG*/
  334|       |
  335|      0|		vips_error("vips_tracked",
  336|      0|			_("out of memory --- size == %dMB"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  337|      0|			(int) (size / (1024.0 * 1024.0)));
  338|      0|		g_warning(_("out of memory --- size == %dMB"),
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  339|      0|			(int) (size / (1024.0 * 1024.0)));
  340|       |
  341|      0|		return NULL;
  342|      0|	}
  343|       |
  344|  22.8k|	g_mutex_lock(&vips_tracked_mutex);
  345|       |
  346|  22.8k|	*((size_t *) buf) = size;
  347|  22.8k|	buf = (void *) ((char *) buf + 16);
  348|       |
  349|  22.8k|	vips_tracked_mem += size;
  350|  22.8k|	if (vips_tracked_mem > vips_tracked_mem_highwater)
  ------------------
  |  Branch (350:6): [True: 12, False: 22.8k]
  ------------------
  351|     12|		vips_tracked_mem_highwater = vips_tracked_mem;
  352|  22.8k|	vips_tracked_allocs += 1;
  353|       |
  354|       |#ifdef DEBUG_VERBOSE_MEM
  355|       |	printf("vips_tracked_malloc: %p, %zd bytes\n", buf, size);
  356|       |#endif /*DEBUG_VERBOSE_MEM*/
  357|       |
  358|  22.8k|	g_mutex_unlock(&vips_tracked_mutex);
  359|       |
  360|  22.8k|	VIPS_GATE_MALLOC(size);
  ------------------
  |  |   57|  22.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  22.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   58|  22.8k|	{ \
  |  |   59|  22.8k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (59:7): [True: 0, False: 22.8k]
  |  |  ------------------
  |  |   60|  22.8k|			vips__thread_malloc_free((gint64) (SIZE)); \
  |  |   61|  22.8k|	} \
  |  |   62|  22.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  22.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  361|       |
  362|  22.8k|	return buf;
  363|  22.8k|}
vips_tracked_aligned_alloc:
  385|   337k|{
  386|   337k|	void *buf;
  387|       |
  388|   337k|	g_assert(!(align & (align - 1)));
  ------------------
  |  |  166|   337k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   337k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   337k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  389|       |
  390|       |	/* Need an extra sizeof(size_t) bytes to track
  391|       |	 * size of this block.
  392|       |	 */
  393|   337k|	size += sizeof(size_t);
  394|       |
  395|       |#ifdef HAVE__ALIGNED_MALLOC
  396|       |	if (!(buf = _aligned_malloc(size, align))) {
  397|       |#elif defined(HAVE_POSIX_MEMALIGN)
  398|   337k|	if (posix_memalign(&buf, align, size)) {
  ------------------
  |  Branch (398:6): [True: 0, False: 337k]
  ------------------
  399|       |#elif defined(HAVE_MEMALIGN)
  400|       |	if (!(buf = memalign(align, size))) {
  401|       |#else
  402|       |#error Missing aligned alloc implementation
  403|       |#endif
  404|       |#ifdef DEBUG
  405|       |		g_assert_not_reached();
  406|       |#endif /*DEBUG*/
  407|       |
  408|      0|		vips_error("vips_tracked",
  409|      0|			_("out of memory --- size == %dMB"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  410|      0|			(int) (size / (1024.0 * 1024.0)));
  411|      0|		g_warning(_("out of memory --- size == %dMB"),
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  412|      0|			(int) (size / (1024.0 * 1024.0)));
  413|       |
  414|      0|		return NULL;
  415|      0|	}
  416|       |
  417|   337k|	memset(buf, 0, size);
  418|       |
  419|   337k|	g_mutex_lock(&vips_tracked_mutex);
  420|       |
  421|   337k|	*((size_t *) buf) = size;
  422|       |
  423|   337k|	vips_tracked_mem += size;
  424|   337k|	if (vips_tracked_mem > vips_tracked_mem_highwater)
  ------------------
  |  Branch (424:6): [True: 133, False: 337k]
  ------------------
  425|    133|		vips_tracked_mem_highwater = vips_tracked_mem;
  426|   337k|	vips_tracked_allocs += 1;
  427|       |
  428|       |#ifdef DEBUG_VERBOSE
  429|       |	printf("vips_tracked_aligned_alloc: %p, %zd bytes\n", buf, size);
  430|       |#endif /*DEBUG_VERBOSE*/
  431|       |
  432|   337k|	g_mutex_unlock(&vips_tracked_mutex);
  433|       |
  434|   337k|	VIPS_GATE_MALLOC(size);
  ------------------
  |  |   57|   337k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   337k|#define G_STMT_START  do
  |  |  ------------------
  |  |   58|   337k|	{ \
  |  |   59|   337k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (59:7): [True: 0, False: 337k]
  |  |  ------------------
  |  |   60|   337k|			vips__thread_malloc_free((gint64) (SIZE)); \
  |  |   61|   337k|	} \
  |  |   62|   337k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   337k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  435|       |
  436|   337k|	return (void *) ((size_t *) buf + 1);
  437|   337k|}
vips_tracked_get_mem:
  530|   169k|{
  531|   169k|	size_t mem;
  532|       |
  533|   169k|	g_mutex_lock(&vips_tracked_mutex);
  534|       |
  535|   169k|	mem = vips_tracked_mem;
  536|       |
  537|   169k|	g_mutex_unlock(&vips_tracked_mutex);
  538|       |
  539|   169k|	return mem;
  540|   169k|}
vips_tracked_get_files:
  595|   169k|{
  596|   169k|	int n;
  597|       |
  598|   169k|	g_mutex_lock(&vips_tracked_mutex);
  599|       |
  600|   169k|	n = vips_tracked_files;
  601|       |
  602|   169k|	g_mutex_unlock(&vips_tracked_mutex);
  603|       |
  604|   169k|	return n;
  605|   169k|}
memory.c:vips_malloc_cb:
  155|  33.9k|{
  156|  33.9k|	g_free(buf);
  157|  33.9k|}

vips_argument_get_id:
  239|    864|{
  240|    864|	int id;
  241|       |
  242|       |	/* We probably don't need to lock: glib seems to single-thread class
  243|       |	 * creation.
  244|       |	 */
  245|    864|	id = _vips__argument_id++;
  246|       |
  247|    864|	return id;
  248|    864|}
vips_object_preclose:
  270|  1.74M|{
  271|  1.74M|	if (!object->preclose) {
  ------------------
  |  Branch (271:6): [True: 1.09M, False: 650k]
  ------------------
  272|  1.09M|		object->preclose = TRUE;
  ------------------
  |  |  798|  1.09M|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  1.09M|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  273|       |
  274|       |#ifdef DEBUG
  275|       |		printf("vips_object_preclose: ");
  276|       |		vips_object_print_name(object);
  277|       |		printf("\n");
  278|       |#endif /*DEBUG*/
  279|       |
  280|  1.09M|		g_signal_emit(object, vips_object_signals[SIG_PRECLOSE], 0);
  281|  1.09M|	}
  282|  1.74M|}
vips_object_build:
  356|  1.09M|{
  357|  1.09M|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  1.09M|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  1.09M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  1.09M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  358|       |
  359|       |	/* Input and output args must both be set.
  360|       |	 */
  361|  1.09M|	VipsArgumentFlags iomask = VIPS_ARGUMENT_INPUT | VIPS_ARGUMENT_OUTPUT;
  362|       |
  363|  1.09M|	int result;
  364|       |
  365|       |#ifdef DEBUG
  366|       |	printf("vips_object_build: ");
  367|       |	vips_object_print_name(object);
  368|       |	printf("\n");
  369|       |#endif /*DEBUG*/
  370|       |
  371|  1.09M|	if (class->build(object))
  ------------------
  |  Branch (371:6): [True: 20.4k, False: 1.07M]
  ------------------
  372|  20.4k|		return -1;
  373|       |
  374|       |	/* Check all required arguments have been supplied, don't stop on 1st
  375|       |	 * error.
  376|       |	 */
  377|  1.07M|	result = 0;
  378|  1.07M|	(void) vips_argument_map(object,
  379|  1.07M|		vips_object_check_required, &result, &iomask);
  380|       |
  381|       |	/* ... more checks go here.
  382|       |	 */
  383|  1.07M|	object->constructed = TRUE;
  ------------------
  |  |  798|  1.07M|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  1.07M|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  384|       |
  385|       |	/* Only postbuild on success.
  386|       |	 */
  387|  1.07M|	if (!result)
  ------------------
  |  Branch (387:6): [True: 1.07M, False: 0]
  ------------------
  388|  1.07M|		result = vips_object_postbuild(object);
  389|       |
  390|  1.07M|	return result;
  391|  1.09M|}
vips__argument_table_lookup:
  558|  69.6M|{
  559|  69.6M|	VipsArgument *argument;
  560|       |
  561|  69.6M|	g_mutex_lock(&vips__global_lock);
  562|  69.6M|	argument = (VipsArgument *) g_hash_table_lookup(table, pspec);
  563|  69.6M|	g_mutex_unlock(&vips__global_lock);
  564|       |
  565|  69.6M|	return argument;
  566|  69.6M|}
vips_argument_map:
  596|  5.08M|{
  597|       |	/* Make sure we can't go during the loop. This can happen if eg. we
  598|       |	 * flush an arg that refs us.
  599|       |	 */
  600|  5.08M|	g_object_ref(object);
  601|       |
  602|  37.5M|	VIPS_ARGUMENT_FOR_ALL(object,
  ------------------
  |  |  358|  5.08M|	{ \
  |  |  359|  5.08M|		VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(OBJECT); \
  |  |  ------------------
  |  |  |  |  441|  5.08M|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  527|  5.08M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2310|  5.08M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  360|  5.08M|		GSList *p; \
  |  |  361|  5.08M|\
  |  |  362|  42.6M|		for (p = object_class->argument_table_traverse; p; p = p->next) { \
  |  |  ------------------
  |  |  |  Branch (362:51): [True: 37.5M, False: 5.08M]
  |  |  ------------------
  |  |  363|  37.5M|			VipsArgumentClass *ARG_CLASS = \
  |  |  364|  37.5M|				(VipsArgumentClass *) p->data; \
  |  |  365|  37.5M|			VipsArgument *argument = (VipsArgument *) argument_class; \
  |  |  366|  37.5M|			GParamSpec *PSPEC = argument->pspec; \
  |  |  367|  37.5M|			VipsArgumentInstance *ARG_INSTANCE G_GNUC_UNUSED = \
  |  |  368|  37.5M|				vips__argument_get_instance(argument_class, \
  |  |  369|  37.5M|					VIPS_OBJECT(OBJECT));
  |  |  ------------------
  |  |  |  |  433|  37.5M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|  37.5M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|  37.5M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  603|  37.5M|		pspec, argument_class, argument_instance)
  604|  37.5M|	{
  605|  37.5M|		void *result;
  606|       |
  607|       |		/* argument_instance should not be NULL.
  608|       |		 */
  609|  37.5M|		g_assert(argument_instance);
  ------------------
  |  |  166|  37.5M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  37.5M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  37.5M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  610|       |
  611|  37.5M|		if ((result = fn(object, pspec,
  ------------------
  |  Branch (611:7): [True: 3.90k, False: 37.5M]
  ------------------
  612|  37.5M|				 argument_class, argument_instance, a, b))) {
  613|  3.90k|			g_object_unref(object);
  614|  3.90k|			return result;
  615|  3.90k|		}
  616|  37.5M|	}
  617|  37.5M|	VIPS_ARGUMENT_FOR_ALL_END
  ------------------
  |  |  372|  37.5M|	} \
  |  |  373|  5.08M|	}
  ------------------
  618|       |
  619|  5.08M|	g_object_unref(object);
  620|       |
  621|  5.08M|	return NULL;
  622|  5.08M|}
vips__argument_get_instance:
  750|  59.2M|{
  751|       |	/* Make sure the instance args are built.
  752|       |	 */
  753|  59.2M|	vips_argument_init(object);
  754|       |
  755|  59.2M|	return (VipsArgumentInstance *)
  756|  59.2M|		vips__argument_table_lookup(object->argument_table,
  757|  59.2M|			((VipsArgument *) argument_class)->pspec);
  758|  59.2M|}
vips_object_get_argument:
  777|  1.37M|{
  778|  1.37M|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  1.37M|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  1.37M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  1.37M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  779|       |
  780|  1.37M|	if (!(*pspec = g_object_class_find_property(G_OBJECT_CLASS(class), name))) {
  ------------------
  |  |   58|  1.37M|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.37M|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.37M|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (780:6): [True: 0, False: 1.37M]
  ------------------
  781|      0|		vips_error(class->nickname, _("no property named `%s'"), name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  782|      0|		return -1;
  783|      0|	}
  784|       |
  785|  1.37M|	if (!(*argument_class = (VipsArgumentClass *)
  ------------------
  |  Branch (785:6): [True: 0, False: 1.37M]
  ------------------
  786|  1.37M|			vips__argument_table_lookup(class->argument_table, *pspec))) {
  787|      0|		vips_error(class->nickname, _("no vips argument named `%s'"), name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  788|      0|		return -1;
  789|      0|	}
  790|       |
  791|  1.37M|	if (!(*argument_instance = vips__argument_get_instance(
  ------------------
  |  Branch (791:6): [True: 0, False: 1.37M]
  ------------------
  792|  1.37M|		  *argument_class, object))) {
  793|      0|		vips_error(class->nickname, _("argument `%s' has no instance"), name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  794|      0|		return -1;
  795|      0|	}
  796|       |
  797|  1.37M|	return 0;
  798|  1.37M|}
vips_object_argument_isset:
  811|   958k|{
  812|   958k|	GParamSpec *pspec;
  813|   958k|	VipsArgumentClass *argument_class;
  814|   958k|	VipsArgumentInstance *argument_instance;
  815|       |
  816|   958k|	if (vips_object_get_argument(object, name,
  ------------------
  |  Branch (816:6): [True: 0, False: 958k]
  ------------------
  817|   958k|			&pspec, &argument_class, &argument_instance))
  818|      0|		return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  819|       |
  820|   958k|	return argument_instance->assigned;
  821|   958k|}
vips__object_set_member:
 1088|   827k|{
 1089|   827k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|   827k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|   827k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|   827k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1090|   827k|	VipsArgumentClass *argument_class = (VipsArgumentClass *)
 1091|   827k|		vips__argument_table_lookup(class->argument_table, pspec);
 1092|   827k|	VipsArgumentInstance *argument_instance =
 1093|   827k|		vips__argument_get_instance(argument_class, object);
 1094|   827k|	GType otype = G_PARAM_SPEC_VALUE_TYPE(pspec);
  ------------------
  |  |  103|   827k|#define	G_PARAM_SPEC_VALUE_TYPE(pspec)	(G_PARAM_SPEC (pspec)->value_type)
  |  |  ------------------
  |  |  |  |   45|   827k|#define G_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|   827k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|   827k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1095|       |
 1096|   827k|	g_assert(argument_instance);
  ------------------
  |  |  166|   827k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   827k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   827k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1097|       |
 1098|   827k|	vips_object_clear_member(argument_instance);
 1099|       |
 1100|   827k|	g_assert(!*member);
  ------------------
  |  |  166|   827k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   827k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   827k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1101|   827k|	*member = argument;
 1102|       |
 1103|   827k|	if (*member) {
  ------------------
  |  Branch (1103:6): [True: 335k, False: 492k]
  ------------------
 1104|   335k|		if (argument_class->flags & VIPS_ARGUMENT_INPUT) {
  ------------------
  |  Branch (1104:7): [True: 178k, False: 156k]
  ------------------
 1105|       |#ifdef DEBUG_REF
 1106|       |			printf("vips__object_set_member: vips object: ");
 1107|       |			vips_object_print_name(object);
 1108|       |			printf("  refers to gobject %s (%p)\n",
 1109|       |				G_OBJECT_TYPE_NAME(*member), *member);
 1110|       |			printf("  count up to %d\n", G_OBJECT(*member)->ref_count);
 1111|       |#endif /*DEBUG_REF*/
 1112|       |
 1113|       |			/* Ref the argument.
 1114|       |			 */
 1115|   178k|			g_object_ref(*member);
 1116|   178k|		}
 1117|   156k|		else if (argument_class->flags & VIPS_ARGUMENT_OUTPUT) {
  ------------------
  |  Branch (1117:12): [True: 156k, False: 0]
  ------------------
 1118|       |#ifdef DEBUG_REF
 1119|       |			printf("vips__object_set_member: gobject %s (%p)\n",
 1120|       |				G_OBJECT_TYPE_NAME(*member), *member);
 1121|       |			printf("  refers to vips object: ");
 1122|       |			vips_object_print_name(object);
 1123|       |			printf("  count up to %d\n", G_OBJECT(object)->ref_count);
 1124|       |#endif /*DEBUG_REF*/
 1125|       |
 1126|       |			/* The argument reffs us.
 1127|       |			 */
 1128|   156k|			g_object_ref(object);
 1129|   156k|		}
 1130|   335k|	}
 1131|       |
 1132|   827k|	if (*member &&
  ------------------
  |  Branch (1132:6): [True: 335k, False: 492k]
  ------------------
 1133|   827k|		g_type_is_a(otype, VIPS_TYPE_IMAGE)) {
  ------------------
  |  |  169|   335k|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  ------------------
  |  Branch (1133:3): [True: 305k, False: 29.3k]
  ------------------
 1134|   305k|		if (argument_class->flags & VIPS_ARGUMENT_INPUT) {
  ------------------
  |  Branch (1134:7): [True: 148k, False: 156k]
  ------------------
 1135|   148k|			g_assert(!argument_instance->invalidate_id);
  ------------------
  |  |  166|   148k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   148k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   148k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1136|       |
 1137|   148k|			argument_instance->invalidate_id =
 1138|   148k|				g_signal_connect(*member, "invalidate",
  ------------------
  |  |  491|   148k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
 1139|   148k|					G_CALLBACK(vips_object_arg_invalidate),
 1140|   148k|					argument_instance);
 1141|   148k|		}
 1142|   156k|		else if (argument_class->flags & VIPS_ARGUMENT_OUTPUT) {
  ------------------
  |  Branch (1142:12): [True: 156k, False: 0]
  ------------------
 1143|   156k|			g_assert(!argument_instance->close_id);
  ------------------
  |  |  166|   156k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   156k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   156k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1144|       |
 1145|   156k|			argument_instance->close_id =
 1146|   156k|				g_signal_connect(*member, "close",
  ------------------
  |  |  491|   156k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
 1147|   156k|					G_CALLBACK(vips_object_arg_close),
 1148|   156k|					argument_instance);
 1149|   156k|		}
 1150|   305k|	}
 1151|   827k|}
vips_value_is_null:
 1159|  3.91M|{
 1160|  3.91M|	if (G_IS_PARAM_SPEC_STRING(pspec) &&
  ------------------
  |  |  370|  7.82M|#define G_IS_PARAM_SPEC_STRING(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_STRING))
  |  |  ------------------
  |  |  |  |  497|  3.91M|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  3.91M|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  3.91M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  3.91M|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  3.91M|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 3.91M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  3.91M|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  3.91M|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 3.91M, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 3.23M, False: 681k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  3.91M|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  3.23M|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  3.23M|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  3.91M|  else \
  |  |  |  |  |  | 2321|  3.91M|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  3.91M|  __r; \
  |  |  |  |  |  | 2323|  3.91M|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (370:44): [True: 3.23M, False: 681k]
  |  |  ------------------
  ------------------
 1161|  3.91M|		!g_value_get_string(value))
  ------------------
  |  Branch (1161:3): [True: 3.23M, False: 0]
  ------------------
 1162|  3.23M|		return TRUE;
  ------------------
  |  |  798|  3.23M|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  3.23M|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1163|   681k|	if (G_IS_PARAM_SPEC_OBJECT(pspec) &&
  ------------------
  |  |  491|  1.36M|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|   681k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   681k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   681k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   681k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   681k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 681k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   681k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   681k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 681k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 453k, False: 227k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   681k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   453k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   453k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   681k|  else \
  |  |  |  |  |  | 2321|   681k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   681k|  __r; \
  |  |  |  |  |  | 2323|   681k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 453k, False: 227k]
  |  |  ------------------
  ------------------
 1164|   681k|		!g_value_get_object(value))
  ------------------
  |  Branch (1164:3): [True: 453k, False: 0]
  ------------------
 1165|   453k|		return TRUE;
  ------------------
  |  |  798|   453k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   453k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1166|   227k|	if (G_IS_PARAM_SPEC_POINTER(pspec) &&
  ------------------
  |  |  439|   455k|#define G_IS_PARAM_SPEC_POINTER(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_POINTER))
  |  |  ------------------
  |  |  |  |  497|   227k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   227k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   227k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   227k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   227k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 227k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   227k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   227k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 227k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 227k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   227k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   227k|  else \
  |  |  |  |  |  | 2321|   227k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   227k|  __r; \
  |  |  |  |  |  | 2323|   227k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (439:44): [True: 0, False: 227k]
  |  |  ------------------
  ------------------
 1167|   227k|		!g_value_get_pointer(value))
  ------------------
  |  Branch (1167:3): [True: 0, False: 0]
  ------------------
 1168|      0|		return TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1169|   227k|	if (G_IS_PARAM_SPEC_BOXED(pspec) &&
  ------------------
  |  |  416|   455k|#define G_IS_PARAM_SPEC_BOXED(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOXED))
  |  |  ------------------
  |  |  |  |  497|   227k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   227k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   227k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   227k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   227k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 227k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   227k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   227k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 227k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 227k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   227k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   227k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   227k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   227k|  else \
  |  |  |  |  |  | 2321|   227k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   227k|  __r; \
  |  |  |  |  |  | 2323|   227k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (416:44): [True: 227k, False: 0]
  |  |  ------------------
  ------------------
 1170|   227k|		!g_value_get_boxed(value))
  ------------------
  |  Branch (1170:3): [True: 227k, False: 0]
  ------------------
 1171|   227k|		return TRUE;
  ------------------
  |  |  798|   227k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   227k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1172|       |
 1173|      0|	return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
 1174|   227k|}
vips_object_set_property:
 1181|  7.07M|{
 1182|  7.07M|	VipsObject *object = VIPS_OBJECT(gobject);
  ------------------
  |  |  433|  7.07M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  7.07M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  7.07M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1183|  7.07M|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(gobject);
  ------------------
  |  |  441|  7.07M|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  7.07M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  7.07M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1184|  7.07M|	VipsArgumentClass *argument_class = (VipsArgumentClass *)
 1185|  7.07M|		vips__argument_table_lookup(class->argument_table, pspec);
 1186|  7.07M|	VipsArgumentInstance *argument_instance =
 1187|  7.07M|		vips__argument_get_instance(argument_class, object);
 1188|       |
 1189|  7.07M|	g_assert(argument_instance);
  ------------------
  |  |  166|  7.07M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  7.07M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.07M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1190|       |
 1191|       |#ifdef DEBUG
 1192|       |	printf("vips_object_set_property: ");
 1193|       |	vips_object_print_name(object);
 1194|       |	printf(".%s\n", g_param_spec_get_name(pspec));
 1195|       |
 1196|       |	/* This can crash horribly with some values, have it as a separate
 1197|       |	 * chunk so we can easily comment it out.
 1198|       |	 */
 1199|       |	{
 1200|       |		char *str_value;
 1201|       |
 1202|       |		str_value = g_strdup_value_contents(value);
 1203|       |		printf("\t%s\n", str_value);
 1204|       |		g_free(str_value);
 1205|       |	}
 1206|       |#endif /*DEBUG*/
 1207|       |
 1208|  7.07M|	g_assert(((VipsArgument *) argument_class)->pspec == pspec);
  ------------------
  |  |  166|  7.07M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  7.07M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.07M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1209|  7.07M|	g_assert(((VipsArgument *) argument_instance)->pspec == pspec);
  ------------------
  |  |  166|  7.07M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  7.07M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.07M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1210|       |
 1211|       |	/* If this is a construct-only argument, we can only set before we've
 1212|       |	 * built.
 1213|       |	 */
 1214|  7.07M|	if (argument_class->flags & VIPS_ARGUMENT_CONSTRUCT &&
  ------------------
  |  Branch (1214:6): [True: 2.53M, False: 4.53M]
  ------------------
 1215|  7.07M|		object->constructed &&
  ------------------
  |  Branch (1215:3): [True: 1.31M, False: 1.21M]
  ------------------
 1216|  7.07M|		!vips_value_is_null(pspec, value)) {
  ------------------
  |  Branch (1216:3): [True: 0, False: 1.31M]
  ------------------
 1217|      0|		g_warning("%s: %s can't assign '%s' after construct",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1218|      0|			G_STRLOC,
 1219|      0|			G_OBJECT_TYPE_NAME(gobject),
 1220|      0|			g_param_spec_get_name(pspec));
 1221|      0|		return;
 1222|      0|	}
 1223|       |
 1224|       |	/* If this is a set-once argument, check we've not set it before.
 1225|       |	 */
 1226|  7.07M|	if (argument_class->flags & VIPS_ARGUMENT_SET_ONCE &&
  ------------------
  |  Branch (1226:6): [True: 5.19M, False: 1.87M]
  ------------------
 1227|  7.07M|		argument_instance->assigned &&
  ------------------
  |  Branch (1227:3): [True: 2.59M, False: 2.60M]
  ------------------
 1228|  7.07M|		!vips_value_is_null(pspec, value)) {
  ------------------
  |  Branch (1228:3): [True: 0, False: 2.59M]
  ------------------
 1229|      0|		g_warning("%s: %s can only assign '%s' once",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1230|      0|			G_STRLOC,
 1231|      0|			G_OBJECT_TYPE_NAME(gobject),
 1232|      0|			g_param_spec_get_name(pspec));
 1233|      0|		return;
 1234|      0|	}
 1235|       |
 1236|       |	/* We can't use a switch since some param specs don't have fundamental
 1237|       |	 * types and are hence not compile-time constants, argh.
 1238|       |	 */
 1239|  7.07M|	if (G_IS_PARAM_SPEC_STRING(pspec)) {
  ------------------
  |  |  370|  7.07M|#define G_IS_PARAM_SPEC_STRING(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_STRING))
  |  |  ------------------
  |  |  |  |  497|  7.07M|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  7.07M|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  7.07M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  7.07M|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  7.07M|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 7.07M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  7.07M|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  7.07M|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 7.07M, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 5.43M, False: 1.63M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  7.07M|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  5.43M|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  5.43M|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  7.07M|  else \
  |  |  |  |  |  | 2321|  7.07M|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  7.07M|  __r; \
  |  |  |  |  |  | 2323|  7.07M|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (370:44): [True: 5.43M, False: 1.63M]
  |  |  ------------------
  ------------------
 1240|  5.43M|		char **member = &G_STRUCT_MEMBER(char *, object,
  ------------------
  |  |  842|  5.43M|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|  5.43M|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1241|  5.43M|			argument_class->offset);
 1242|       |
 1243|  5.43M|		if (*member)
  ------------------
  |  Branch (1243:7): [True: 2.76M, False: 2.67M]
  ------------------
 1244|  2.76M|			g_free(*member);
 1245|  5.43M|		*member = g_value_dup_string(value);
 1246|  5.43M|	}
 1247|  1.63M|	else if (G_IS_PARAM_SPEC_OBJECT(pspec)) {
  ------------------
  |  |  491|  1.63M|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|  1.63M|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  1.63M|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  1.63M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  1.63M|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  1.63M|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 1.63M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  1.63M|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  1.63M|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 1.63M, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 827k, False: 807k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  1.63M|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   827k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   827k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  1.63M|  else \
  |  |  |  |  |  | 2321|  1.63M|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  1.63M|  __r; \
  |  |  |  |  |  | 2323|  1.63M|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 827k, False: 807k]
  |  |  ------------------
  ------------------
 1248|   827k|		GObject **member = &G_STRUCT_MEMBER(GObject *, object,
  ------------------
  |  |  842|   827k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   827k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1249|   827k|			argument_class->offset);
 1250|       |
 1251|   827k|		vips__object_set_member(object, pspec, member,
 1252|   827k|			g_value_get_object(value));
 1253|   827k|	}
 1254|   807k|	else if (G_IS_PARAM_SPEC_INT(pspec)) {
  ------------------
  |  |  117|   807k|#define G_IS_PARAM_SPEC_INT(pspec)         (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_INT))
  |  |  ------------------
  |  |  |  |  497|   807k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   807k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   807k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   807k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   807k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 807k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   807k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   807k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 807k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 153k, False: 654k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   807k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   153k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   153k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   807k|  else \
  |  |  |  |  |  | 2321|   807k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   807k|  __r; \
  |  |  |  |  |  | 2323|   807k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (117:44): [True: 153k, False: 654k]
  |  |  ------------------
  ------------------
 1255|   153k|		int *member = &G_STRUCT_MEMBER(int, object,
  ------------------
  |  |  842|   153k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   153k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1256|   153k|			argument_class->offset);
 1257|       |
 1258|   153k|		*member = g_value_get_int(value);
 1259|   153k|	}
 1260|   654k|	else if (G_IS_PARAM_SPEC_UINT64(pspec)) {
  ------------------
  |  |  232|   654k|#define G_IS_PARAM_SPEC_UINT64(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UINT64))
  |  |  ------------------
  |  |  |  |  497|   654k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   654k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   654k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   654k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   654k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 654k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   654k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   654k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 654k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 654k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   654k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   654k|  else \
  |  |  |  |  |  | 2321|   654k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   654k|  __r; \
  |  |  |  |  |  | 2323|   654k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (232:44): [True: 0, False: 654k]
  |  |  ------------------
  ------------------
 1261|      0|		guint64 *member = &G_STRUCT_MEMBER(guint64, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1262|      0|			argument_class->offset);
 1263|       |
 1264|      0|		*member = g_value_get_uint64(value);
 1265|      0|	}
 1266|   654k|	else if (G_IS_PARAM_SPEC_BOOLEAN(pspec)) {
  ------------------
  |  |   94|   654k|#define G_IS_PARAM_SPEC_BOOLEAN(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOOLEAN))
  |  |  ------------------
  |  |  |  |  497|   654k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   654k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   654k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   654k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   654k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 654k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   654k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   654k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 654k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 24.4k, False: 630k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   654k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  24.4k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  24.4k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   654k|  else \
  |  |  |  |  |  | 2321|   654k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   654k|  __r; \
  |  |  |  |  |  | 2323|   654k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (94:44): [True: 24.4k, False: 630k]
  |  |  ------------------
  ------------------
 1267|  24.4k|		gboolean *member = &G_STRUCT_MEMBER(gboolean, object,
  ------------------
  |  |  842|  24.4k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|  24.4k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1268|  24.4k|			argument_class->offset);
 1269|       |
 1270|  24.4k|		*member = g_value_get_boolean(value);
 1271|  24.4k|	}
 1272|   630k|	else if (G_IS_PARAM_SPEC_ENUM(pspec)) {
  ------------------
  |  |  278|   630k|#define G_IS_PARAM_SPEC_ENUM(pspec)        (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_ENUM))
  |  |  ------------------
  |  |  |  |  497|   630k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   630k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   630k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   630k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   630k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 630k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   630k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   630k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 630k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 104k, False: 525k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   630k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   104k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   104k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   630k|  else \
  |  |  |  |  |  | 2321|   630k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   630k|  __r; \
  |  |  |  |  |  | 2323|   630k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (278:44): [True: 104k, False: 525k]
  |  |  ------------------
  ------------------
 1273|   104k|		int *member = &G_STRUCT_MEMBER(int, object,
  ------------------
  |  |  842|   104k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   104k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1274|   104k|			argument_class->offset);
 1275|       |
 1276|   104k|		*member = g_value_get_enum(value);
 1277|   104k|	}
 1278|   525k|	else if (G_IS_PARAM_SPEC_FLAGS(pspec)) {
  ------------------
  |  |  301|   525k|#define G_IS_PARAM_SPEC_FLAGS(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_FLAGS))
  |  |  ------------------
  |  |  |  |  497|   525k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   525k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   525k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   525k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   525k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 525k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   525k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   525k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 525k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 28.6k, False: 497k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   525k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  28.6k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  28.6k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   525k|  else \
  |  |  |  |  |  | 2321|   525k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   525k|  __r; \
  |  |  |  |  |  | 2323|   525k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (301:44): [True: 28.6k, False: 497k]
  |  |  ------------------
  ------------------
 1279|  28.6k|		int *member = &G_STRUCT_MEMBER(int, object,
  ------------------
  |  |  842|  28.6k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|  28.6k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1280|  28.6k|			argument_class->offset);
 1281|       |
 1282|  28.6k|		*member = g_value_get_flags(value);
 1283|  28.6k|	}
 1284|   497k|	else if (G_IS_PARAM_SPEC_POINTER(pspec)) {
  ------------------
  |  |  439|   497k|#define G_IS_PARAM_SPEC_POINTER(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_POINTER))
  |  |  ------------------
  |  |  |  |  497|   497k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   497k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   497k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   497k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   497k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 497k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   497k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   497k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 497k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 497k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   497k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   497k|  else \
  |  |  |  |  |  | 2321|   497k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   497k|  __r; \
  |  |  |  |  |  | 2323|   497k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (439:44): [True: 0, False: 497k]
  |  |  ------------------
  ------------------
 1285|      0|		gpointer *member = &G_STRUCT_MEMBER(gpointer, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1286|      0|			argument_class->offset);
 1287|       |
 1288|      0|		*member = g_value_get_pointer(value);
 1289|      0|	}
 1290|   497k|	else if (G_IS_PARAM_SPEC_DOUBLE(pspec)) {
  ------------------
  |  |  347|   497k|#define G_IS_PARAM_SPEC_DOUBLE(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_DOUBLE))
  |  |  ------------------
  |  |  |  |  497|   497k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   497k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   497k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   497k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   497k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 497k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   497k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   497k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 497k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 497k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   497k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   497k|  else \
  |  |  |  |  |  | 2321|   497k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   497k|  __r; \
  |  |  |  |  |  | 2323|   497k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (347:44): [True: 0, False: 497k]
  |  |  ------------------
  ------------------
 1291|      0|		double *member = &G_STRUCT_MEMBER(double, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1292|      0|			argument_class->offset);
 1293|       |
 1294|      0|		*member = g_value_get_double(value);
 1295|      0|	}
 1296|   497k|	else if (G_IS_PARAM_SPEC_BOXED(pspec)) {
  ------------------
  |  |  416|   497k|#define G_IS_PARAM_SPEC_BOXED(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOXED))
  |  |  ------------------
  |  |  |  |  497|   497k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   497k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   497k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   497k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   497k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 497k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   497k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   497k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 497k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 497k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   497k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   497k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   497k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   497k|  else \
  |  |  |  |  |  | 2321|   497k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   497k|  __r; \
  |  |  |  |  |  | 2323|   497k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (416:44): [True: 497k, False: 0]
  |  |  ------------------
  ------------------
 1297|   497k|		gpointer *member = &G_STRUCT_MEMBER(gpointer, object,
  ------------------
  |  |  842|   497k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   497k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1298|   497k|			argument_class->offset);
 1299|       |
 1300|   497k|		if (*member) {
  ------------------
  |  Branch (1300:7): [True: 269k, False: 227k]
  ------------------
 1301|   269k|			g_boxed_free(G_PARAM_SPEC_VALUE_TYPE(pspec),
  ------------------
  |  |  103|   269k|#define	G_PARAM_SPEC_VALUE_TYPE(pspec)	(G_PARAM_SPEC (pspec)->value_type)
  |  |  ------------------
  |  |  |  |   45|   269k|#define G_PARAM_SPEC(pspec)		(G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM, GParamSpec))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|   269k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|   269k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1302|   269k|				*member);
 1303|   269k|			*member = NULL;
 1304|   269k|		}
 1305|       |
 1306|       |		/* Copy the boxed into our pointer (will use eg.
 1307|       |		 * vips__object_vector_dup()).
 1308|       |		 */
 1309|   497k|		*member = g_value_dup_boxed(value);
 1310|   497k|	}
 1311|      0|	else {
 1312|      0|		g_warning("%s: %s.%s unimplemented property type %s",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1313|      0|			G_STRLOC,
 1314|      0|			G_OBJECT_TYPE_NAME(gobject),
 1315|      0|			g_param_spec_get_name(pspec),
 1316|      0|			g_type_name(G_PARAM_SPEC_VALUE_TYPE(pspec)));
 1317|      0|	}
 1318|       |
 1319|       |	/* Note that it's now been set.
 1320|       |	 */
 1321|  7.07M|	argument_instance->assigned = TRUE;
  ------------------
  |  |  798|  7.07M|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  7.07M|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 1322|  7.07M|}
vips_object_get_property:
 1329|  1.13M|{
 1330|  1.13M|	VipsObject *object = VIPS_OBJECT(gobject);
  ------------------
  |  |  433|  1.13M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  1.13M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.13M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1331|  1.13M|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(gobject);
  ------------------
  |  |  441|  1.13M|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  1.13M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  1.13M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1332|  1.13M|	VipsArgumentClass *argument_class = (VipsArgumentClass *)
 1333|  1.13M|		vips__argument_table_lookup(class->argument_table, pspec);
 1334|  1.13M|	VipsArgumentInstance *argument_instance =
 1335|  1.13M|		vips__argument_get_instance(argument_class, object);
 1336|       |
 1337|  1.13M|	g_assert(((VipsArgument *) argument_class)->pspec == pspec);
  ------------------
  |  |  166|  1.13M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.13M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.13M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1338|       |
 1339|  1.13M|	if (!argument_instance->assigned) {
  ------------------
  |  Branch (1339:6): [True: 0, False: 1.13M]
  ------------------
 1340|       |		/* Set the value to the default. Things like Ruby
 1341|       |		 * gobject-introspection will walk objects during GC, and we
 1342|       |		 * can find ourselves fetching object values between init and
 1343|       |		 * build.
 1344|       |		 */
 1345|      0|		g_param_value_set_default(pspec, value);
 1346|      0|		return;
 1347|      0|	}
 1348|       |
 1349|  1.13M|	if (G_IS_PARAM_SPEC_STRING(pspec)) {
  ------------------
  |  |  370|  1.13M|#define G_IS_PARAM_SPEC_STRING(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_STRING))
  |  |  ------------------
  |  |  |  |  497|  1.13M|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  1.13M|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  1.13M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  1.13M|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  1.13M|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 1.13M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  1.13M|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  1.13M|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 1.13M, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 4.97k, False: 1.12M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  1.13M|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  4.97k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  4.97k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  1.13M|  else \
  |  |  |  |  |  | 2321|  1.13M|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  1.13M|  __r; \
  |  |  |  |  |  | 2323|  1.13M|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (370:44): [True: 4.97k, False: 1.12M]
  |  |  ------------------
  ------------------
 1350|  4.97k|		char *member = G_STRUCT_MEMBER(char *, object,
  ------------------
  |  |  842|  4.97k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|  4.97k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1351|  4.97k|			argument_class->offset);
 1352|       |
 1353|  4.97k|		g_value_set_string(value, member);
 1354|  4.97k|	}
 1355|  1.12M|	else if (G_IS_PARAM_SPEC_OBJECT(pspec)) {
  ------------------
  |  |  491|  1.12M|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|  1.12M|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  1.12M|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  1.12M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  1.12M|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  1.12M|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 1.12M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  1.12M|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  1.12M|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 1.12M, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 816k, False: 310k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  1.12M|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   816k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   816k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  1.12M|  else \
  |  |  |  |  |  | 2321|  1.12M|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  1.12M|  __r; \
  |  |  |  |  |  | 2323|  1.12M|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 816k, False: 310k]
  |  |  ------------------
  ------------------
 1356|   816k|		GObject **member = &G_STRUCT_MEMBER(GObject *, object,
  ------------------
  |  |  842|   816k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   816k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1357|   816k|			argument_class->offset);
 1358|       |
 1359|   816k|		g_value_set_object(value, *member);
 1360|   816k|	}
 1361|   310k|	else if (G_IS_PARAM_SPEC_INT(pspec)) {
  ------------------
  |  |  117|   310k|#define G_IS_PARAM_SPEC_INT(pspec)         (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_INT))
  |  |  ------------------
  |  |  |  |  497|   310k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   310k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   310k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   310k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   310k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 310k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   310k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   310k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 310k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 102k, False: 208k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   310k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   102k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   102k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   310k|  else \
  |  |  |  |  |  | 2321|   310k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   310k|  __r; \
  |  |  |  |  |  | 2323|   310k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (117:44): [True: 102k, False: 208k]
  |  |  ------------------
  ------------------
 1362|   102k|		int *member = &G_STRUCT_MEMBER(int, object,
  ------------------
  |  |  842|   102k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   102k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1363|   102k|			argument_class->offset);
 1364|       |
 1365|   102k|		g_value_set_int(value, *member);
 1366|   102k|	}
 1367|   208k|	else if (G_IS_PARAM_SPEC_UINT64(pspec)) {
  ------------------
  |  |  232|   208k|#define G_IS_PARAM_SPEC_UINT64(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_UINT64))
  |  |  ------------------
  |  |  |  |  497|   208k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   208k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   208k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   208k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   208k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 208k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   208k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   208k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 208k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 208k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   208k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   208k|  else \
  |  |  |  |  |  | 2321|   208k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   208k|  __r; \
  |  |  |  |  |  | 2323|   208k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (232:44): [True: 0, False: 208k]
  |  |  ------------------
  ------------------
 1368|      0|		guint64 *member = &G_STRUCT_MEMBER(guint64, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1369|      0|			argument_class->offset);
 1370|       |
 1371|      0|		g_value_set_uint64(value, *member);
 1372|      0|	}
 1373|   208k|	else if (G_IS_PARAM_SPEC_BOOLEAN(pspec)) {
  ------------------
  |  |   94|   208k|#define G_IS_PARAM_SPEC_BOOLEAN(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOOLEAN))
  |  |  ------------------
  |  |  |  |  497|   208k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   208k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   208k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   208k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   208k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 208k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   208k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   208k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 208k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 5.58k, False: 202k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   208k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  5.58k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  5.58k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   208k|  else \
  |  |  |  |  |  | 2321|   208k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   208k|  __r; \
  |  |  |  |  |  | 2323|   208k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (94:44): [True: 5.58k, False: 202k]
  |  |  ------------------
  ------------------
 1374|  5.58k|		gboolean *member = &G_STRUCT_MEMBER(gboolean, object,
  ------------------
  |  |  842|  5.58k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|  5.58k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1375|  5.58k|			argument_class->offset);
 1376|       |
 1377|  5.58k|		g_value_set_boolean(value, *member);
 1378|  5.58k|	}
 1379|   202k|	else if (G_IS_PARAM_SPEC_ENUM(pspec)) {
  ------------------
  |  |  278|   202k|#define G_IS_PARAM_SPEC_ENUM(pspec)        (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_ENUM))
  |  |  ------------------
  |  |  |  |  497|   202k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   202k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   202k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   202k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   202k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 202k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   202k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   202k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 202k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 138k, False: 64.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   202k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   138k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   138k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   202k|  else \
  |  |  |  |  |  | 2321|   202k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   202k|  __r; \
  |  |  |  |  |  | 2323|   202k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (278:44): [True: 138k, False: 64.2k]
  |  |  ------------------
  ------------------
 1380|   138k|		int *member = &G_STRUCT_MEMBER(int, object,
  ------------------
  |  |  842|   138k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   138k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1381|   138k|			argument_class->offset);
 1382|       |
 1383|   138k|		g_value_set_enum(value, *member);
 1384|   138k|	}
 1385|  64.2k|	else if (G_IS_PARAM_SPEC_FLAGS(pspec)) {
  ------------------
  |  |  301|  64.2k|#define G_IS_PARAM_SPEC_FLAGS(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_FLAGS))
  |  |  ------------------
  |  |  |  |  497|  64.2k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  64.2k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  64.2k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  64.2k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  64.2k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 64.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  64.2k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  64.2k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 64.2k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 64.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  64.2k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  64.2k|  else \
  |  |  |  |  |  | 2321|  64.2k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  64.2k|  __r; \
  |  |  |  |  |  | 2323|  64.2k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (301:44): [True: 0, False: 64.2k]
  |  |  ------------------
  ------------------
 1386|      0|		int *member = &G_STRUCT_MEMBER(int, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1387|      0|			argument_class->offset);
 1388|       |
 1389|      0|		g_value_set_flags(value, *member);
 1390|      0|	}
 1391|  64.2k|	else if (G_IS_PARAM_SPEC_POINTER(pspec)) {
  ------------------
  |  |  439|  64.2k|#define G_IS_PARAM_SPEC_POINTER(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_POINTER))
  |  |  ------------------
  |  |  |  |  497|  64.2k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  64.2k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  64.2k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  64.2k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  64.2k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 64.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  64.2k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  64.2k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 64.2k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 64.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  64.2k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  64.2k|  else \
  |  |  |  |  |  | 2321|  64.2k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  64.2k|  __r; \
  |  |  |  |  |  | 2323|  64.2k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (439:44): [True: 0, False: 64.2k]
  |  |  ------------------
  ------------------
 1392|      0|		gpointer *member = &G_STRUCT_MEMBER(gpointer, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1393|      0|			argument_class->offset);
 1394|       |
 1395|      0|		g_value_set_pointer(value, *member);
 1396|      0|	}
 1397|  64.2k|	else if (G_IS_PARAM_SPEC_DOUBLE(pspec)) {
  ------------------
  |  |  347|  64.2k|#define G_IS_PARAM_SPEC_DOUBLE(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_DOUBLE))
  |  |  ------------------
  |  |  |  |  497|  64.2k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  64.2k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  64.2k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  64.2k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  64.2k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 64.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  64.2k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  64.2k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 64.2k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 64.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  64.2k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  64.2k|  else \
  |  |  |  |  |  | 2321|  64.2k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  64.2k|  __r; \
  |  |  |  |  |  | 2323|  64.2k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (347:44): [True: 0, False: 64.2k]
  |  |  ------------------
  ------------------
 1398|      0|		double *member = &G_STRUCT_MEMBER(double, object,
  ------------------
  |  |  842|      0|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|      0|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1399|      0|			argument_class->offset);
 1400|       |
 1401|      0|		g_value_set_double(value, *member);
 1402|      0|	}
 1403|  64.2k|	else if (G_IS_PARAM_SPEC_BOXED(pspec)) {
  ------------------
  |  |  416|  64.2k|#define G_IS_PARAM_SPEC_BOXED(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOXED))
  |  |  ------------------
  |  |  |  |  497|  64.2k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  64.2k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  64.2k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  64.2k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  64.2k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 64.2k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  64.2k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  64.2k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 64.2k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 64.2k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  64.2k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  64.2k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  64.2k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  64.2k|  else \
  |  |  |  |  |  | 2321|  64.2k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  64.2k|  __r; \
  |  |  |  |  |  | 2323|  64.2k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (416:44): [True: 64.2k, False: 0]
  |  |  ------------------
  ------------------
 1404|  64.2k|		gpointer *member = &G_STRUCT_MEMBER(gpointer, object,
  ------------------
  |  |  842|  64.2k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|  64.2k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
 1405|  64.2k|			argument_class->offset);
 1406|       |
 1407|       |		/* Copy the boxed into our pointer (will use eg.
 1408|       |		 * vips__object_vector_dup ()).
 1409|       |		 */
 1410|  64.2k|		g_value_set_boxed(value, *member);
 1411|  64.2k|	}
 1412|      0|	else {
 1413|      0|		g_warning("%s: %s.%s unimplemented property type %s",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1414|      0|			G_STRLOC,
 1415|      0|			G_OBJECT_TYPE_NAME(gobject),
 1416|      0|			g_param_spec_get_name(pspec),
 1417|      0|			g_type_name(G_PARAM_SPEC_VALUE_TYPE(pspec)));
 1418|      0|	}
 1419|  1.13M|}
vips_object_class_install_argument:
 1712|    864|{
 1713|    864|	VipsArgumentClass *argument_class = g_new(VipsArgumentClass, 1);
  ------------------
  |  |  282|    864|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|    864|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|    864|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|    864|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|    864|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|    864|	  gpointer __p;						\
  |  |  |  |  231|    864|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 864]
  |  |  |  |  ------------------
  |  |  |  |  232|    864|	    __p = g_##func (__n);				\
  |  |  |  |  233|    864|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 864, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|    864|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 864]
  |  |  |  |  |  Branch (234:26): [True: 864, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|    864|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|    864|	  else							\
  |  |  |  |  237|    864|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|    864|	  __p;							\
  |  |  |  |  239|    864|	}))
  |  |  ------------------
  ------------------
 1714|       |
 1715|    864|	GSList *argument_table_traverse;
 1716|    864|	VipsArgumentClass *ac;
 1717|       |
 1718|       |#ifdef DEBUG
 1719|       |	printf("vips_object_class_install_argument: %p %s %s\n",
 1720|       |		object_class,
 1721|       |		g_type_name(G_TYPE_FROM_CLASS(object_class)),
 1722|       |		g_param_spec_get_name(pspec));
 1723|       |#endif /*DEBUG*/
 1724|       |
 1725|       |	/* object_class->argument* is shared, so we must lock.
 1726|       |	 */
 1727|    864|	g_mutex_lock(&vips__global_lock);
 1728|       |
 1729|       |	/* Must be a new one.
 1730|       |	 */
 1731|    864|	g_assert(!g_hash_table_lookup(object_class->argument_table, pspec));
  ------------------
  |  |  166|    864|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    864|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    864|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1732|       |
 1733|       |	/* Mustn't have INPUT and OUTPUT both set.
 1734|       |	 */
 1735|    864|	g_assert(!(
  ------------------
  |  |  166|    864|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    864|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    864|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1736|    864|		(flags & VIPS_ARGUMENT_INPUT) &&
 1737|    864|		(flags & VIPS_ARGUMENT_OUTPUT)));
 1738|       |
 1739|    864|	((VipsArgument *) argument_class)->pspec = pspec;
 1740|    864|	argument_class->object_class = object_class;
 1741|    864|	argument_class->flags = flags;
 1742|    864|	argument_class->priority = priority;
 1743|    864|	argument_class->offset = offset;
 1744|       |
 1745|    864|	vips_argument_table_replace(object_class->argument_table,
 1746|    864|		(VipsArgument *) argument_class);
 1747|       |
 1748|       |	/* If this is the first argument for a new subclass, we need to clone
 1749|       |	 * the traverse list we inherit.
 1750|       |	 */
 1751|    864|	if (object_class->argument_table_traverse_gtype !=
  ------------------
  |  Branch (1751:6): [True: 289, False: 575]
  ------------------
 1752|    864|		G_TYPE_FROM_CLASS(object_class)) {
  ------------------
  |  |  613|    864|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1753|       |#ifdef DEBUG
 1754|       |		printf("vips_object_class_install_argument: cloning traverse\n");
 1755|       |#endif /*DEBUG*/
 1756|       |
 1757|    289|		object_class->argument_table_traverse =
 1758|    289|			g_slist_copy(object_class->argument_table_traverse);
 1759|    289|		object_class->argument_table_traverse_gtype =
 1760|    289|			G_TYPE_FROM_CLASS(object_class);
  ------------------
  |  |  613|    289|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1761|    289|	}
 1762|       |
 1763|       |	/* We read argument_table_traverse without a lock (eg. see
 1764|       |	 * vips_argument_map()), so we must be very careful updating it.
 1765|       |	 */
 1766|    864|	argument_table_traverse =
 1767|    864|		g_slist_copy(object_class->argument_table_traverse);
 1768|       |
 1769|       |	/* We keep traverse sorted by priority, so we mustn't have duplicate
 1770|       |	 * priority values in required args.
 1771|       |	 */
 1772|    864|	if ((flags & VIPS_ARGUMENT_REQUIRED) &&
  ------------------
  |  Branch (1772:6): [True: 436, False: 428]
  ------------------
 1773|    864|		!(flags & VIPS_ARGUMENT_DEPRECATED) &&
  ------------------
  |  Branch (1773:3): [True: 428, False: 8]
  ------------------
 1774|    864|		(ac = vips_slist_map2(argument_table_traverse,
  ------------------
  |  Branch (1774:3): [True: 0, False: 428]
  ------------------
 1775|    428|			 traverse_find_required_priority,
 1776|    428|			 GINT_TO_POINTER(priority), NULL)))
 1777|      0|		g_warning("vips_object_class_install_argument: "
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1778|    864|				  "%s.%s, %s.%s duplicate priority",
 1779|    864|			g_type_name(G_TYPE_FROM_CLASS(object_class)),
 1780|    864|			g_param_spec_get_name(pspec),
 1781|    864|			g_type_name(G_TYPE_FROM_CLASS(ac->object_class)),
 1782|    864|			g_param_spec_get_name(((VipsArgument *) ac)->pspec));
 1783|       |
 1784|       |	/* Warn about optional boolean args which default TRUE. These won't
 1785|       |	 * work from the CLI, since simple GOption switches don't allow
 1786|       |	 * `=false`.
 1787|       |	 */
 1788|    864|	if (!(flags & VIPS_ARGUMENT_REQUIRED) &&
  ------------------
  |  Branch (1788:6): [True: 428, False: 436]
  ------------------
 1789|    864|		!(flags & VIPS_ARGUMENT_DEPRECATED) &&
  ------------------
  |  Branch (1789:3): [True: 399, False: 29]
  ------------------
 1790|    864|		G_IS_PARAM_SPEC_BOOLEAN(pspec) &&
  ------------------
  |  |   94|  1.26k|#define G_IS_PARAM_SPEC_BOOLEAN(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOOLEAN))
  |  |  ------------------
  |  |  |  |  497|    399|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|    399|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|    399|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|    399|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|    399|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 399]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|    399|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|    399|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 399, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 72, False: 327]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|    399|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|     72|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|     72|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|    399|  else \
  |  |  |  |  |  | 2321|    399|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|    399|  __r; \
  |  |  |  |  |  | 2323|    399|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (94:44): [True: 72, False: 327]
  |  |  ------------------
  ------------------
 1791|    864|		G_PARAM_SPEC_BOOLEAN(pspec)->default_value)
  ------------------
  |  |  101|     72|#define G_PARAM_SPEC_BOOLEAN(pspec)        (G_TYPE_CHECK_INSTANCE_CAST ((pspec), G_TYPE_PARAM_BOOLEAN, GParamSpecBoolean))
  |  |  ------------------
  |  |  |  |  484|     72|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|     72|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1791:3): [True: 0, False: 72]
  ------------------
 1792|      0|		g_warning("vips_object_class_install_argument: "
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
 1793|    864|				  "default TRUE BOOL arg %s.%s",
 1794|    864|			g_type_name(G_TYPE_FROM_CLASS(object_class)),
 1795|    864|			g_param_spec_get_name(pspec));
 1796|       |
 1797|    864|	argument_table_traverse = g_slist_prepend(
 1798|    864|		argument_table_traverse, argument_class);
 1799|    864|	argument_table_traverse = g_slist_sort(
 1800|    864|		argument_table_traverse, (GCompareFunc) traverse_sort);
 1801|    864|	VIPS_SWAP(GSList *,
  ------------------
  |  |  114|    864|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    864|#define G_STMT_START  do
  |  |  ------------------
  |  |  115|    864|	{ \
  |  |  116|    864|		TYPE t = (A); \
  |  |  117|    864|		(A) = (B); \
  |  |  118|    864|		(B) = t; \
  |  |  119|    864|	} \
  |  |  120|    864|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    864|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1802|    864|		argument_table_traverse,
 1803|    864|		object_class->argument_table_traverse);
 1804|       |
 1805|    864|	g_slist_free(argument_table_traverse);
 1806|       |
 1807|       |#ifdef DEBUG
 1808|       |	{
 1809|       |		GSList *p;
 1810|       |
 1811|       |		printf("%d items on traverse %p\n",
 1812|       |			g_slist_length(object_class->argument_table_traverse),
 1813|       |			&object_class->argument_table_traverse);
 1814|       |		for (p = object_class->argument_table_traverse; p; p = p->next) {
 1815|       |			VipsArgumentClass *argument_class =
 1816|       |				(VipsArgumentClass *) p->data;
 1817|       |
 1818|       |			printf("\t%p %s\n",
 1819|       |				argument_class,
 1820|       |				g_param_spec_get_name(
 1821|       |					((VipsArgument *) argument_class)->pspec));
 1822|       |		}
 1823|       |	}
 1824|       |#endif /*DEBUG*/
 1825|       |
 1826|    864|	g_mutex_unlock(&vips__global_lock);
 1827|    864|}
vips_object_new:
 2361|  39.5k|{
 2362|  39.5k|	VipsObject *object;
 2363|       |
 2364|  39.5k|	vips_check_init();
 2365|       |
 2366|  39.5k|	object = VIPS_OBJECT(g_object_new(type, NULL));
  ------------------
  |  |  433|  39.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  39.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  39.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2367|       |
 2368|  39.5k|	if (set && set(object, a, b)) {
  ------------------
  |  Branch (2368:6): [True: 39.5k, False: 0]
  |  Branch (2368:13): [True: 0, False: 39.5k]
  ------------------
 2369|      0|		g_object_unref(object);
 2370|      0|		return NULL;
 2371|      0|	}
 2372|       |
 2373|  39.5k|	if (vips_object_build(object)) {
  ------------------
  |  Branch (2373:6): [True: 0, False: 39.5k]
  ------------------
 2374|      0|		g_object_unref(object);
 2375|      0|		return NULL;
 2376|      0|	}
 2377|       |
 2378|  39.5k|	return object;
 2379|  39.5k|}
vips_object_set_valist:
 2392|   180k|{
 2393|   180k|	char *name;
 2394|       |
 2395|   180k|	VIPS_DEBUG_MSG("vips_object_set_valist:\n");
  ------------------
  |  |   47|   180k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   180k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   180k|	{ \
  |  |   49|   180k|		; \
  |  |   50|   180k|	} \
  |  |   51|   180k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   180k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2396|       |
 2397|   238k|	for (name = va_arg(ap, char *); name; name = va_arg(ap, char *)) {
  ------------------
  |  Branch (2397:34): [True: 57.5k, False: 180k]
  ------------------
 2398|  57.5k|		GParamSpec *pspec;
 2399|  57.5k|		VipsArgumentClass *argument_class;
 2400|  57.5k|		VipsArgumentInstance *argument_instance;
 2401|       |
 2402|  57.5k|		VIPS_DEBUG_MSG("\tname = '%s' (%p)\n", name, name);
  ------------------
  |  |   47|  57.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  57.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  57.5k|	{ \
  |  |   49|  57.5k|		; \
  |  |   50|  57.5k|	} \
  |  |   51|  57.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  57.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2403|       |
 2404|  57.5k|		if (vips_object_get_argument(VIPS_OBJECT(object), name,
  ------------------
  |  |  433|  57.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  57.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  57.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2404:7): [True: 0, False: 57.5k]
  ------------------
 2405|  57.5k|				&pspec, &argument_class, &argument_instance))
 2406|      0|			return -1;
 2407|       |
 2408|   115k|		VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap);
  ------------------
  |  |  399|  57.5k|	if ((ARG_CLASS->flags & VIPS_ARGUMENT_INPUT)) { \
  |  |  ------------------
  |  |  |  Branch (399:6): [True: 57.5k, False: 0]
  |  |  ------------------
  |  |  400|  57.5k|		GValue value = G_VALUE_INIT; \
  |  |  ------------------
  |  |  |  |  191|  57.5k|#define G_VALUE_INIT  { 0, { { 0 } } }
  |  |  ------------------
  |  |  401|  57.5k|		gchar *error = NULL; \
  |  |  402|  57.5k|\
  |  |  403|  57.5k|		/* Input args are given inline, eg. ("factor", 12.0) \
  |  |  404|  57.5k|		 * and must be collected. \
  |  |  405|  57.5k|		 */ \
  |  |  406|  57.5k|		G_VALUE_COLLECT_INIT(&value, \
  |  |  ------------------
  |  |  |  |   88|  57.5k|#define G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error)		\
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  57.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   89|  57.5k|G_STMT_START {										\
  |  |  |  |   90|  57.5k|  GValue *g_vci_val = (value);								\
  |  |  |  |   91|  57.5k|  guint g_vci_flags = (flags);								\
  |  |  |  |   92|  57.5k|  GTypeValueTable *g_vci_vtab = g_type_value_table_peek (_value_type);			\
  |  |  |  |   93|  57.5k|  const gchar *g_vci_collect_format = g_vci_vtab->collect_format;					\
  |  |  |  |   94|  57.5k|  GTypeCValue g_vci_cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, };		\
  |  |  |  |   95|  57.5k|  guint g_vci_n_values = 0;									\
  |  |  |  |   96|  57.5k|                                                                                        \
  |  |  |  |   97|  57.5k|  g_vci_val->g_type = _value_type;		/* value_meminit() from gvalue.c */		\
  |  |  |  |   98|   115k|  while (*g_vci_collect_format)								\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (98:10): [True: 57.5k, False: 57.5k]
  |  |  |  |  ------------------
  |  |  |  |   99|  57.5k|    {											\
  |  |  |  |  100|  57.5k|      GTypeCValue *g_vci_cvalue = g_vci_cvalues + g_vci_n_values++;					\
  |  |  |  |  101|  57.5k|                                                                                        \
  |  |  |  |  102|  57.5k|      switch (*g_vci_collect_format++)							\
  |  |  |  |  103|  57.5k|	{										\
  |  |  |  |  104|  56.6k|	case G_VALUE_COLLECT_INT:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (104:2): [True: 56.6k, False: 909]
  |  |  |  |  ------------------
  |  |  |  |  105|  56.6k|	  g_vci_cvalue->v_int = va_arg ((var_args), gint);					\
  |  |  |  |  106|  56.6k|	  break;									\
  |  |  |  |  107|      0|	case G_VALUE_COLLECT_LONG:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:2): [True: 0, False: 57.5k]
  |  |  |  |  ------------------
  |  |  |  |  108|      0|	  g_vci_cvalue->v_long = va_arg ((var_args), glong);					\
  |  |  |  |  109|      0|	  break;									\
  |  |  |  |  110|      0|	case G_VALUE_COLLECT_INT64:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:2): [True: 0, False: 57.5k]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|	  g_vci_cvalue->v_int64 = va_arg ((var_args), gint64);				\
  |  |  |  |  112|      0|	  break;									\
  |  |  |  |  113|      0|	case G_VALUE_COLLECT_DOUBLE:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (113:2): [True: 0, False: 57.5k]
  |  |  |  |  ------------------
  |  |  |  |  114|      0|	  g_vci_cvalue->v_double = va_arg ((var_args), gdouble);				\
  |  |  |  |  115|      0|	  break;									\
  |  |  |  |  116|    909|	case G_VALUE_COLLECT_POINTER:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (116:2): [True: 909, False: 56.6k]
  |  |  |  |  ------------------
  |  |  |  |  117|    909|	  g_vci_cvalue->v_pointer = va_arg ((var_args), gpointer);				\
  |  |  |  |  118|    909|	  break;									\
  |  |  |  |  119|      0|	default:									\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (119:2): [True: 0, False: 57.5k]
  |  |  |  |  ------------------
  |  |  |  |  120|      0|	  g_assert_not_reached ();							\
  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  121|  57.5k|	}										\
  |  |  |  |  122|  57.5k|    }											\
  |  |  |  |  123|  57.5k|  *(__error) = g_vci_vtab->collect_value (g_vci_val,						\
  |  |  |  |  124|  57.5k|				       g_vci_n_values,					\
  |  |  |  |  125|  57.5k|				       g_vci_cvalues,					\
  |  |  |  |  126|  57.5k|				       g_vci_flags);						\
  |  |  |  |  127|  57.5k|} G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  57.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  407|  57.5k|			G_PARAM_SPEC_VALUE_TYPE(PSPEC), AP, 0, &error); \
  |  |  408|  57.5k|\
  |  |  409|  57.5k|		/* Don't bother with the error message. \
  |  |  410|  57.5k|		 */ \
  |  |  411|  57.5k|		if (error) { \
  |  |  ------------------
  |  |  |  Branch (411:7): [True: 0, False: 57.5k]
  |  |  ------------------
  |  |  412|      0|			VIPS_DEBUG_MSG("VIPS_OBJECT_COLLECT_SET: err\n"); \
  |  |  ------------------
  |  |  |  |   47|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   48|      0|	{ \
  |  |  |  |   49|      0|		; \
  |  |  |  |   50|      0|	} \
  |  |  |  |   51|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  413|      0|			g_free(error); \
  |  |  414|      0|		}
  ------------------
 2409|       |
 2410|   115k|		g_object_set_property(G_OBJECT(object), name, &value);
  ------------------
  |  |   51|  57.5k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  57.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  57.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2411|       |
 2412|   115k|		VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap);
  ------------------
  |  |  417|  57.5k|	g_value_unset(&value); \
  |  |  418|  57.5k|	} \
  |  |  419|  57.5k|	else if ((ARG_CLASS->flags & VIPS_ARGUMENT_OUTPUT)) \
  |  |  ------------------
  |  |  |  Branch (419:11): [True: 0, False: 0]
  |  |  ------------------
  |  |  420|      0|	{ \
  |  |  421|      0|		void **arg G_GNUC_UNUSED; \
  |  |  422|      0|\
  |  |  423|      0|		/* Output args are a pointer to where to send the \
  |  |  424|      0|		 * result. \
  |  |  425|      0|		 */ \
  |  |  426|      0|		arg = va_arg(AP, void **);
  ------------------
 2413|       |
 2414|      0|		VIPS_ARGUMENT_COLLECT_END
  ------------------
  |  |  429|      0|	}
  ------------------
 2415|  57.5k|	}
 2416|       |
 2417|   180k|	return 0;
 2418|   180k|}
vips_object_set_from_string:
 2569|  51.6k|{
 2570|  51.6k|	const char *q;
 2571|  51.6k|	VipsToken token;
 2572|  51.6k|	char buffer[VIPS_PATH_MAX];
 2573|  51.6k|	char str[VIPS_PATH_MAX];
 2574|       |
 2575|  51.6k|	g_strlcpy(buffer, string, VIPS_PATH_MAX);
  ------------------
  |  |  245|  51.6k|#define VIPS_PATH_MAX (4096)
  ------------------
 2576|       |
 2577|       |	/* Does string start with a bracket? If it doesn't, enclose the whole
 2578|       |	 * thing in [].
 2579|       |	 */
 2580|  51.6k|	if (!(q = vips__token_get(buffer, &token, str, VIPS_PATH_MAX)) ||
  ------------------
  |  |  245|  51.6k|#define VIPS_PATH_MAX (4096)
  ------------------
  |  Branch (2580:6): [True: 51.6k, False: 0]
  ------------------
 2581|  51.6k|		token != VIPS_TOKEN_LEFT)
  ------------------
  |  Branch (2581:3): [True: 0, False: 0]
  ------------------
 2582|  51.6k|		g_snprintf(buffer, VIPS_PATH_MAX, "[%s]", string);
  ------------------
  |  |  245|  51.6k|#define VIPS_PATH_MAX (4096)
  ------------------
 2583|      0|	else
 2584|      0|		g_strlcpy(buffer, string, VIPS_PATH_MAX);
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 2585|       |
 2586|  51.6k|	return vips_object_set_args(object, buffer);
 2587|  51.6k|}
vips_type_map:
 2768|  12.7M|{
 2769|  12.7M|	GType *child;
 2770|  12.7M|	guint n_children;
 2771|  12.7M|	unsigned int i;
 2772|  12.7M|	void *result;
 2773|       |
 2774|  12.7M|	child = g_type_children(base, &n_children);
 2775|  12.7M|	result = NULL;
 2776|  25.3M|	for (i = 0; i < n_children && !result; i++)
  ------------------
  |  Branch (2776:14): [True: 12.8M, False: 12.5M]
  |  Branch (2776:32): [True: 12.6M, False: 159k]
  ------------------
 2777|  12.6M|		result = fn(child[i], a, b);
 2778|  12.7M|	g_free(child);
 2779|       |
 2780|  12.7M|	return result;
 2781|  12.7M|}
vips_class_map_all:
 2822|  12.7M|{
 2823|  12.7M|	void *result;
 2824|       |
 2825|       |	/* Avoid abstract classes. Use type_map_all for them.
 2826|       |	 */
 2827|  12.7M|	if (!G_TYPE_IS_ABSTRACT(type)) {
  ------------------
  |  |  343|  12.7M|#define G_TYPE_IS_ABSTRACT(type)                (g_type_test_flags ((type), G_TYPE_FLAG_ABSTRACT))
  ------------------
  |  Branch (2827:6): [True: 10.3M, False: 2.47M]
  ------------------
 2828|       |		/* We never unref this ref, but we never unload classes
 2829|       |		 * anyway, so so what.
 2830|       |		 */
 2831|  10.3M|		if ((result = fn(
  ------------------
  |  Branch (2831:7): [True: 54.2k, False: 10.2M]
  ------------------
 2832|  10.3M|				 VIPS_OBJECT_CLASS(g_type_class_ref(type)), a)))
  ------------------
  |  |  435|  10.3M|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  10.3M|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  10.3M|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2833|  54.2k|			return result;
 2834|  10.3M|	}
 2835|       |
 2836|  12.7M|	if ((result = vips_type_map(type,
  ------------------
  |  Branch (2836:6): [True: 211k, False: 12.5M]
  ------------------
 2837|  12.7M|			 (VipsTypeMap2Fn) vips_class_map_all, fn, a)))
 2838|   211k|		return result;
 2839|       |
 2840|  12.5M|	return NULL;
 2841|  12.7M|}
vips_class_find:
 2886|  54.2k|{
 2887|  54.2k|	const char *classname = basename ? basename : "VipsObject";
  ------------------
  |  Branch (2887:26): [True: 54.2k, False: 0]
  ------------------
 2888|       |
 2889|  54.2k|	VipsObjectClass *class;
 2890|  54.2k|	GType base;
 2891|       |
 2892|  54.2k|	if (!(base = g_type_from_name(classname)))
  ------------------
  |  Branch (2892:6): [True: 0, False: 54.2k]
  ------------------
 2893|      0|		return NULL;
 2894|  54.2k|	class = vips_class_map_all(base,
 2895|  54.2k|		(VipsClassMapFn) test_name, (void *) nickname);
 2896|       |
 2897|  54.2k|	return class;
 2898|  54.2k|}
vips_type_find:
 2968|   180k|{
 2969|   180k|	static GOnce once = G_ONCE_INIT;
  ------------------
  |  |  102|   180k|#define G_ONCE_INIT { G_ONCE_STATUS_NOTCALLED, NULL }
  ------------------
 2970|       |
 2971|   180k|	const char *classname = basename ? basename : "VipsObject";
  ------------------
  |  Branch (2971:26): [True: 180k, False: 0]
  ------------------
 2972|       |
 2973|   180k|	NicknameGType *hit;
 2974|   180k|	GType base;
 2975|   180k|	GType type;
 2976|       |
 2977|   180k|	VIPS_ONCE(&once, vips_class_build_hash_cb, NULL);
  ------------------
  |  |   93|   180k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   180k|#define G_STMT_START  do
  |  |  ------------------
  |  |   94|   180k|	{ \
  |  |   95|   180k|		if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \
  |  |  ------------------
  |  |  |  |  935|   180k|#define G_UNLIKELY(expr) (__builtin_expect (_G_BOOLEAN_EXPR(expr), 0))
  |  |  |  |  ------------------
  |  |  |  |  |  |  926|   180k| G_GNUC_EXTENSION ({                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   180k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  927|   180k|   int _g_boolean_var_;                         \
  |  |  |  |  |  |  928|   180k|   if (expr)                                    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (928:8): [True: 1, False: 180k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  929|   180k|      _g_boolean_var_ = 1;                      \
  |  |  |  |  |  |  930|   180k|   else                                         \
  |  |  |  |  |  |  931|   180k|      _g_boolean_var_ = 0;                      \
  |  |  |  |  |  |  932|   180k|   _g_boolean_var_;                             \
  |  |  |  |  |  |  933|   180k|})
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (935:26): [True: 1, False: 180k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|   180k|			(void) g_once(ONCE, FUNC, CLIENT); \
  |  |  ------------------
  |  |  |  |  241|      1|  (((once)->status == G_ONCE_STATUS_READY) ? \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (241:4): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  242|      1|   (once)->retval : \
  |  |  |  |  243|      1|   g_once_impl ((once), (func), (arg)))
  |  |  ------------------
  |  |   97|   180k|	} \
  |  |   98|   180k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   180k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2978|       |
 2979|   180k|	hit = (NicknameGType *)
 2980|   180k|		g_hash_table_lookup(vips__object_nickname_table, (void *) nickname);
 2981|       |
 2982|       |	/* We must only search below basename ... check that the cache hit is
 2983|       |	 * in the right part of the tree.
 2984|       |	 */
 2985|   180k|	if (!(base = g_type_from_name(classname)))
  ------------------
  |  Branch (2985:6): [True: 0, False: 180k]
  ------------------
 2986|      0|		return 0;
 2987|   180k|	if (hit &&
  ------------------
  |  Branch (2987:6): [True: 129k, False: 51.6k]
  ------------------
 2988|   180k|		!hit->duplicate &&
  ------------------
  |  Branch (2988:3): [True: 126k, False: 2.57k]
  ------------------
 2989|   180k|		g_type_is_a(hit->type, base))
  ------------------
  |  Branch (2989:3): [True: 126k, False: 0]
  ------------------
 2990|   126k|		type = hit->type;
 2991|  54.2k|	else {
 2992|  54.2k|		const VipsObjectClass *class;
 2993|       |
 2994|  54.2k|		if (!(class = vips_class_find(basename, nickname)))
  ------------------
  |  Branch (2994:7): [True: 0, False: 54.2k]
  ------------------
 2995|      0|			return 0;
 2996|       |
 2997|  54.2k|		type = G_OBJECT_CLASS_TYPE(class);
  ------------------
  |  |  114|  54.2k|#define G_OBJECT_CLASS_TYPE(class)  (G_TYPE_FROM_CLASS (class))
  |  |  ------------------
  |  |  |  |  613|  54.2k|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  ------------------
  ------------------
 2998|  54.2k|	}
 2999|       |
 3000|   180k|	return type;
 3001|   180k|}
vips_object_local_cb:
 3030|  67.2k|{
 3031|  67.2k|	VIPS_FREEF(g_object_unref, gobject);
  ------------------
  |  |   41|  67.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  67.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  67.2k|	{ \
  |  |   43|  67.2k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 67.2k, False: 0]
  |  |  ------------------
  |  |   44|  67.2k|			(void) F((S)); \
  |  |   45|  67.2k|			(S) = 0; \
  |  |   46|  67.2k|		} \
  |  |   47|  67.2k|	} \
  |  |   48|  67.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  67.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3032|  67.2k|}
vips_object_local_array:
 3082|  90.0k|{
 3083|  90.0k|	VipsObjectLocal *local;
 3084|       |
 3085|  90.0k|	local = g_new(VipsObjectLocal, 1);
  ------------------
  |  |  282|  90.0k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|  90.0k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  90.0k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  90.0k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  90.0k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  90.0k|	  gpointer __p;						\
  |  |  |  |  231|  90.0k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 90.0k]
  |  |  |  |  ------------------
  |  |  |  |  232|  90.0k|	    __p = g_##func (__n);				\
  |  |  |  |  233|  90.0k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 90.0k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|  90.0k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 90.0k]
  |  |  |  |  |  Branch (234:26): [True: 90.0k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  90.0k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  90.0k|	  else							\
  |  |  |  |  237|  90.0k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  90.0k|	  __p;							\
  |  |  |  |  239|  90.0k|	}))
  |  |  ------------------
  ------------------
 3086|  90.0k|	local->n = n;
 3087|       |	/* Make the array 1 too long so we can be sure there's a NULL
 3088|       |	 * terminator.
 3089|       |	 */
 3090|  90.0k|	local->array = g_new0(VipsObject *, n + 1);
  ------------------
  |  |  299|  90.0k|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|  90.0k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  90.0k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  90.0k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  90.0k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  90.0k|	  gpointer __p;						\
  |  |  |  |  231|  90.0k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 90.0k]
  |  |  |  |  ------------------
  |  |  |  |  232|  90.0k|	    __p = g_##func (__n);				\
  |  |  |  |  233|  90.0k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 0, False: 90.0k]
  |  |  |  |  ------------------
  |  |  |  |  234|  90.0k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (234:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  90.0k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  90.0k|	  else							\
  |  |  |  |  237|  90.0k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  90.0k|	  __p;							\
  |  |  |  |  239|  90.0k|	}))
  |  |  ------------------
  ------------------
 3091|       |
 3092|  90.0k|	g_signal_connect(parent, "close",
  ------------------
  |  |  491|  90.0k|    g_signal_connect_data ((instance), (detailed_signal), (c_handler), (data), NULL, (GConnectFlags) 0)
  ------------------
 3093|  90.0k|		G_CALLBACK(vips_object_local_array_cb), local);
 3094|       |
 3095|  90.0k|	return local->array;
 3096|  90.0k|}
vips_object_unref_outputs:
 3233|  20.4k|{
 3234|  20.4k|	(void) vips_argument_map(object,
 3235|  20.4k|		vips_object_unref_outputs_sub, NULL, NULL);
 3236|  20.4k|}
object.c:vips_object_class_init:
 1559|      1|{
 1560|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1561|       |
 1562|       |	/* We must have threads set up before we can process.
 1563|       |	 */
 1564|      1|	vips_check_init();
 1565|       |
 1566|      1|	if (!vips__object_all)
  ------------------
  |  Branch (1566:6): [True: 1, False: 0]
  ------------------
 1567|      1|		vips__object_all = g_hash_table_new(g_direct_hash, g_direct_equal);
 1568|       |
 1569|      1|	gobject_class->dispose = vips_object_dispose;
 1570|      1|	gobject_class->finalize = vips_object_finalize;
 1571|      1|	gobject_class->set_property = vips_object_set_property;
 1572|      1|	gobject_class->get_property = vips_object_get_property;
 1573|       |
 1574|      1|	class->build = vips_object_real_build;
 1575|      1|	class->postbuild = vips_object_real_postbuild;
 1576|      1|	class->summary_class = vips_object_real_summary_class;
 1577|      1|	class->summary = vips_object_real_summary;
 1578|      1|	class->dump = vips_object_real_dump;
 1579|      1|	class->sanity = vips_object_real_sanity;
 1580|      1|	class->rewind = vips_object_real_rewind;
 1581|      1|	class->new_from_string = vips_object_real_new_from_string;
 1582|      1|	class->to_string = vips_object_real_to_string;
 1583|      1|	class->nickname = "object";
 1584|      1|	class->description = _("base class");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1585|       |
 1586|       |	/* Table of VipsArgumentClass ... we can just g_free() them.
 1587|       |	 */
 1588|      1|	class->argument_table = g_hash_table_new_full(
 1589|      1|		g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) g_free);
 1590|      1|	class->argument_table_traverse = NULL;
 1591|       |
 1592|       |	/* For setting double arguments from the command-line.
 1593|       |	 */
 1594|      1|	g_value_register_transform_func(G_TYPE_STRING, G_TYPE_DOUBLE,
  ------------------
  |  |  154|      1|#define G_TYPE_STRING			G_TYPE_MAKE_FUNDAMENTAL (16)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              	g_value_register_transform_func(G_TYPE_STRING, G_TYPE_DOUBLE,
  ------------------
  |  |  148|      1|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1595|      1|		transform_string_double);
 1596|       |
 1597|      1|	VIPS_ARG_STRING(class, "nickname", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1598|      1|		_("Nickname"),
 1599|      1|		_("Class nickname"),
 1600|      1|		VIPS_ARGUMENT_SET_ONCE,
 1601|      1|		G_STRUCT_OFFSET(VipsObject, nickname),
 1602|      1|		"");
 1603|       |
 1604|      1|	VIPS_ARG_STRING(class, "description", 2,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1605|      1|		_("Description"),
 1606|      1|		_("Class description"),
 1607|      1|		VIPS_ARGUMENT_SET_ONCE,
 1608|      1|		G_STRUCT_OFFSET(VipsObject, description),
 1609|      1|		"");
 1610|       |
 1611|       |	/**
 1612|       |	 * VipsObject::postbuild:
 1613|       |	 * @object: the object that has been built
 1614|       |	 *
 1615|       |	 * The ::postbuild signal is emitted once just after successful object
 1616|       |	 * construction. Return non-zero to cause object construction to fail.
 1617|       |	 */
 1618|      1|	vips_object_signals[SIG_POSTBUILD] = g_signal_new("postbuild",
 1619|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1620|      1|		G_SIGNAL_RUN_LAST,
 1621|      1|		G_STRUCT_OFFSET(VipsObjectClass, postbuild),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1622|      1|		NULL, NULL,
 1623|      1|		vips_INT__VOID,
 1624|      1|		G_TYPE_INT, 0);
  ------------------
  |  |   94|      1|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1625|       |
 1626|       |	/**
 1627|       |	 * VipsObject::preclose:
 1628|       |	 * @object: the object that is to close
 1629|       |	 *
 1630|       |	 * The ::preclose signal is emitted once just before object close
 1631|       |	 * starts. The object is still alive.
 1632|       |	 */
 1633|      1|	vips_object_signals[SIG_PRECLOSE] = g_signal_new("preclose",
 1634|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1635|      1|		G_SIGNAL_RUN_LAST,
 1636|      1|		G_STRUCT_OFFSET(VipsObjectClass, preclose),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1637|      1|		NULL, NULL,
 1638|      1|		g_cclosure_marshal_VOID__VOID,
 1639|      1|		G_TYPE_NONE, 0);
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1640|       |
 1641|       |	/**
 1642|       |	 * VipsObject::close:
 1643|       |	 * @object: the object that is closing
 1644|       |	 *
 1645|       |	 * The ::close signal is emitted once during object close. The object
 1646|       |	 * is dying and may not work.
 1647|       |	 */
 1648|      1|	vips_object_signals[SIG_CLOSE] = g_signal_new("close",
 1649|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1650|      1|		G_SIGNAL_RUN_LAST,
 1651|      1|		G_STRUCT_OFFSET(VipsObjectClass, close),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1652|      1|		NULL, NULL,
 1653|      1|		g_cclosure_marshal_VOID__VOID,
 1654|      1|		G_TYPE_NONE, 0);
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1655|       |
 1656|       |	/**
 1657|       |	 * VipsObject::postclose:
 1658|       |	 * @object: the object that has closed
 1659|       |	 *
 1660|       |	 * The ::postclose signal is emitted once after object close. The
 1661|       |	 * object pointer is still valid, but nothing else.
 1662|       |	 */
 1663|      1|	vips_object_signals[SIG_POSTCLOSE] = g_signal_new("postclose",
 1664|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
 1665|      1|		G_SIGNAL_RUN_LAST,
 1666|      1|		G_STRUCT_OFFSET(VipsObjectClass, postclose),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
 1667|      1|		NULL, NULL,
 1668|      1|		g_cclosure_marshal_VOID__VOID,
 1669|      1|		G_TYPE_NONE, 0);
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1670|      1|}
object.c:vips_object_dispose:
 1000|  1.09M|{
 1001|  1.09M|	VipsObject *object = VIPS_OBJECT(gobject);
  ------------------
  |  |  433|  1.09M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  1.09M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.09M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1002|       |
 1003|       |#ifdef DEBUG
 1004|       |	printf("vips_object_dispose: ");
 1005|       |	vips_object_print_name(object);
 1006|       |	printf("\n");
 1007|       |#endif /*DEBUG*/
 1008|       |
 1009|       |	/* Our subclasses should have already called this. Run it again, just
 1010|       |	 * in case.
 1011|       |	 */
 1012|       |#ifdef DEBUG
 1013|       |	if (!object->preclose)
 1014|       |		printf("vips_object_dispose: pre-close missing!\n");
 1015|       |#endif /*DEBUG*/
 1016|  1.09M|	vips_object_preclose(object);
 1017|       |
 1018|       |	/* Clear all our arguments: they may be holding resources we should
 1019|       |	 * drop.
 1020|       |	 */
 1021|  1.09M|	vips_argument_dispose_all(object);
 1022|       |
 1023|  1.09M|	vips_object_close(object);
 1024|       |
 1025|  1.09M|	vips_object_postclose(object);
 1026|       |
 1027|  1.09M|	vips_argument_free_all(object);
 1028|       |
 1029|  1.09M|	VIPS_FREEF(vips_argument_table_destroy, object->argument_table);
  ------------------
  |  |   41|  1.09M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.09M|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  1.09M|	{ \
  |  |   43|  1.09M|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 1.09M, False: 0]
  |  |  ------------------
  |  |   44|  1.09M|			(void) F((S)); \
  |  |   45|  1.09M|			(S) = 0; \
  |  |   46|  1.09M|		} \
  |  |   47|  1.09M|	} \
  |  |   48|  1.09M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.09M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1030|       |
 1031|  1.09M|	G_OBJECT_CLASS(vips_object_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  1.09M|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.09M|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.09M|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1032|  1.09M|}
object.c:vips_argument_dispose_all:
  947|  1.09M|{
  948|       |#ifdef DEBUG
  949|       |	printf("vips_argument_dispose_all: ");
  950|       |	vips_object_print_name(object);
  951|       |	printf("\n");
  952|       |#endif /*DEBUG*/
  953|       |
  954|  1.09M|	vips_argument_map(object, vips_object_dispose_argument, NULL, NULL);
  955|  1.09M|}
object.c:vips_object_dispose_argument:
  916|  7.74M|{
  917|  7.74M|	g_assert(((VipsArgument *) argument_class)->pspec == pspec);
  ------------------
  |  |  166|  7.74M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  7.74M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.74M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  918|  7.74M|	g_assert(((VipsArgument *) argument_instance)->pspec == pspec);
  ------------------
  |  |  166|  7.74M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  7.74M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.74M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  919|       |
  920|  7.74M|	if (G_IS_PARAM_SPEC_OBJECT(pspec) ||
  ------------------
  |  |  491|  15.4M|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|  7.74M|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  7.74M|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  7.74M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  7.74M|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  7.74M|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 7.74M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  7.74M|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  7.74M|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 7.74M, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 336k, False: 7.40M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  7.74M|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   336k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   336k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  7.74M|  else \
  |  |  |  |  |  | 2321|  7.74M|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  7.74M|  __r; \
  |  |  |  |  |  | 2323|  7.74M|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 336k, False: 7.40M]
  |  |  ------------------
  ------------------
  921|  7.74M|		G_IS_PARAM_SPEC_BOXED(pspec)) {
  ------------------
  |  |  416|  7.40M|#define G_IS_PARAM_SPEC_BOXED(pspec)       (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOXED))
  |  |  ------------------
  |  |  |  |  497|  7.40M|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  7.40M|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  7.40M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  7.40M|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  7.40M|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 7.40M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  7.40M|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  7.40M|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 7.40M, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 270k, False: 7.13M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  7.40M|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   270k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   270k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  7.40M|  else \
  |  |  |  |  |  | 2321|  7.40M|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  7.40M|  __r; \
  |  |  |  |  |  | 2323|  7.40M|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (416:44): [True: 270k, False: 7.13M]
  |  |  ------------------
  ------------------
  922|       |#ifdef DEBUG
  923|       |		printf("vips_object_dispose_argument: ");
  924|       |		vips_object_print_name(object);
  925|       |		printf(".%s\n", g_param_spec_get_name(pspec));
  926|       |#endif /*DEBUG*/
  927|       |
  928|   606k|		g_object_set(object,
  929|   606k|			g_param_spec_get_name(pspec), NULL,
  930|   606k|			NULL);
  931|   606k|	}
  932|       |
  933|  7.74M|	return NULL;
  934|  7.74M|}
object.c:vips_object_close:
  286|  1.09M|{
  287|  1.09M|	if (!object->close) {
  ------------------
  |  Branch (287:6): [True: 1.09M, False: 0]
  ------------------
  288|  1.09M|		object->close = TRUE;
  ------------------
  |  |  798|  1.09M|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  1.09M|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  289|       |
  290|       |#ifdef DEBUG
  291|       |		printf("vips_object_close: ");
  292|       |		vips_object_print_name(object);
  293|       |		printf("\n");
  294|       |#endif /*DEBUG*/
  295|       |
  296|  1.09M|		g_signal_emit(object, vips_object_signals[SIG_CLOSE], 0);
  297|  1.09M|	}
  298|  1.09M|}
object.c:vips_object_postclose:
  302|  1.09M|{
  303|  1.09M|	if (!object->postclose) {
  ------------------
  |  Branch (303:6): [True: 1.09M, False: 0]
  ------------------
  304|  1.09M|		object->postclose = TRUE;
  ------------------
  |  |  798|  1.09M|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  1.09M|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  305|       |
  306|       |#ifdef DEBUG
  307|       |		printf("vips_object_postclose: ");
  308|       |		vips_object_print_name(object);
  309|       |		printf("\n");
  310|       |#endif /*DEBUG*/
  311|       |
  312|  1.09M|		g_signal_emit(object, vips_object_signals[SIG_POSTCLOSE], 0);
  313|  1.09M|	}
  314|  1.09M|}
object.c:vips_argument_free_all:
  988|  1.09M|{
  989|       |#ifdef DEBUG
  990|       |	printf("vips_argument_free_all: ");
  991|       |	vips_object_print_name(object);
  992|       |	printf("\n");
  993|       |#endif /*DEBUG*/
  994|       |
  995|  1.09M|	vips_argument_map(object, vips_object_free_argument, NULL, NULL);
  996|  1.09M|}
object.c:vips_object_free_argument:
  964|  7.74M|{
  965|  7.74M|	g_assert(((VipsArgument *) argument_class)->pspec == pspec);
  ------------------
  |  |  166|  7.74M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  7.74M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.74M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  966|  7.74M|	g_assert(((VipsArgument *) argument_instance)->pspec == pspec);
  ------------------
  |  |  166|  7.74M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  7.74M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.74M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  967|       |
  968|  7.74M|	if (G_IS_PARAM_SPEC_STRING(pspec)) {
  ------------------
  |  |  370|  7.74M|#define G_IS_PARAM_SPEC_STRING(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_STRING))
  |  |  ------------------
  |  |  |  |  497|  7.74M|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  7.74M|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  7.74M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  7.74M|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  7.74M|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 7.74M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  7.74M|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  7.74M|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 7.74M, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 2.84M, False: 4.90M]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  7.74M|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  2.84M|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  2.84M|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  7.74M|  else \
  |  |  |  |  |  | 2321|  7.74M|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  7.74M|  __r; \
  |  |  |  |  |  | 2323|  7.74M|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (370:44): [True: 2.84M, False: 4.90M]
  |  |  ------------------
  ------------------
  969|       |#ifdef DEBUG
  970|       |		printf("vips_object_free_argument: ");
  971|       |		vips_object_print_name(object);
  972|       |		printf(".%s\n", g_param_spec_get_name(pspec));
  973|       |#endif /*DEBUG*/
  974|       |
  975|  2.84M|		g_object_set(object,
  976|  2.84M|			g_param_spec_get_name(pspec), NULL,
  977|  2.84M|			NULL);
  978|  2.84M|	}
  979|       |
  980|  7.74M|	return NULL;
  981|  7.74M|}
object.c:vips_argument_table_destroy:
  576|  1.09M|{
  577|  1.09M|	g_hash_table_destroy(table);
  578|  1.09M|}
object.c:vips_object_finalize:
 1036|  1.09M|{
 1037|  1.09M|	VipsObject *object = VIPS_OBJECT(gobject);
  ------------------
  |  |  433|  1.09M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  1.09M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  1.09M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1038|       |
 1039|       |#ifdef DEBUG
 1040|       |	printf("vips_object_finalize: ");
 1041|       |	vips_object_print_name(object);
 1042|       |	printf("\n");
 1043|       |#endif /*DEBUG*/
 1044|       |
 1045|       |	/* I'd like to have post-close in here, but you can't emit signals
 1046|       |	 * from finalize, sadly.
 1047|       |	 */
 1048|       |
 1049|  1.09M|	g_mutex_lock(&vips__object_all_lock);
 1050|  1.09M|	g_hash_table_remove(vips__object_all, object);
 1051|  1.09M|	g_mutex_unlock(&vips__object_all_lock);
 1052|       |
 1053|  1.09M|	G_OBJECT_CLASS(vips_object_parent_class)->finalize(gobject);
  ------------------
  |  |   58|  1.09M|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  1.09M|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  1.09M|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1054|  1.09M|}
object.c:vips_object_real_build:
 1423|  1.09M|{
 1424|  1.09M|	VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  1.09M|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  1.09M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  1.09M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1425|       |
 1426|       |	/* Only test input args, output ones can be set by our subclasses as
 1427|       |	 * they build. See vips_object_build() above.
 1428|       |	 */
 1429|  1.09M|	VipsArgumentFlags iomask = VIPS_ARGUMENT_INPUT;
 1430|       |
 1431|  1.09M|	int result;
 1432|       |
 1433|       |#ifdef DEBUG
 1434|       |	printf("vips_object_real_build: ");
 1435|       |	vips_object_print_name(object);
 1436|       |	printf("\n");
 1437|       |#endif /*DEBUG*/
 1438|       |
 1439|  1.09M|	g_assert(!object->constructed);
  ------------------
  |  |  166|  1.09M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.09M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.09M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1440|       |
 1441|       |	/* It'd be nice if this just copied a pointer rather than did a
 1442|       |	 * strdup(). Set these here rather than in object_init, so that the
 1443|       |	 * class gets a chance to set them.
 1444|       |	 */
 1445|  1.09M|	g_object_set(object,
 1446|  1.09M|		"nickname", object_class->nickname,
 1447|  1.09M|		"description", object_class->description, NULL);
 1448|       |
 1449|       |	/* Check all required input arguments have been supplied, don't stop
 1450|       |	 * on 1st error.
 1451|       |	 */
 1452|  1.09M|	result = 0;
 1453|  1.09M|	(void) vips_argument_map(object,
 1454|  1.09M|		vips_object_check_required, &result, &iomask);
 1455|       |
 1456|  1.09M|	return result;
 1457|  1.09M|}
object.c:vips_object_real_postbuild:
 1461|  1.07M|{
 1462|       |#ifdef DEBUG
 1463|       |	printf("vips_object_real_postbuild: ");
 1464|       |	vips_object_print_name(object);
 1465|       |	printf("\n");
 1466|       |#endif /*DEBUG*/
 1467|       |
 1468|  1.07M|	g_assert(object->constructed);
  ------------------
  |  |  166|  1.07M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.07M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.07M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1469|       |
 1470|  1.07M|	return 0;
 1471|  1.07M|}
object.c:vips_object_init:
 1674|  1.09M|{
 1675|       |#ifdef DEBUG
 1676|       |	printf("vips_object_init: ");
 1677|       |	vips_object_print_name(object);
 1678|       |	printf("\n");
 1679|       |#endif /*DEBUG*/
 1680|       |
 1681|  1.09M|	g_mutex_lock(&vips__object_all_lock);
 1682|  1.09M|	g_hash_table_insert(vips__object_all, object, object);
 1683|  1.09M|	g_mutex_unlock(&vips__object_all_lock);
 1684|  1.09M|}
object.c:vips_object_check_required:
  321|  15.1M|{
  322|  15.1M|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  15.1M|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  15.1M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  15.1M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  323|       |
  324|  15.1M|	int *result = (int *) a;
  325|  15.1M|	VipsArgumentFlags *iomask = (VipsArgumentFlags *) b;
  326|       |
  327|  15.1M|	VIPS_DEBUG_MSG("vips_object_check_required: %s\n",
  ------------------
  |  |   47|  15.1M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.1M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.1M|	{ \
  |  |   49|  15.1M|		; \
  |  |   50|  15.1M|	} \
  |  |   51|  15.1M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.1M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  328|  15.1M|		g_param_spec_get_name(pspec));
  329|  15.1M|	VIPS_DEBUG_MSG("\trequired: %d\n",
  ------------------
  |  |   47|  15.1M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.1M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.1M|	{ \
  |  |   49|  15.1M|		; \
  |  |   50|  15.1M|	} \
  |  |   51|  15.1M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.1M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  330|  15.1M|		argument_class->flags & VIPS_ARGUMENT_REQUIRED);
  331|  15.1M|	VIPS_DEBUG_MSG("\tconstruct: %d\n",
  ------------------
  |  |   47|  15.1M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.1M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.1M|	{ \
  |  |   49|  15.1M|		; \
  |  |   50|  15.1M|	} \
  |  |   51|  15.1M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.1M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|  15.1M|		argument_class->flags & VIPS_ARGUMENT_CONSTRUCT);
  333|  15.1M|	VIPS_DEBUG_MSG("\tinput: %d\n",
  ------------------
  |  |   47|  15.1M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.1M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.1M|	{ \
  |  |   49|  15.1M|		; \
  |  |   50|  15.1M|	} \
  |  |   51|  15.1M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.1M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  334|  15.1M|		argument_class->flags & VIPS_ARGUMENT_INPUT);
  335|  15.1M|	VIPS_DEBUG_MSG("\toutput: %d\n",
  ------------------
  |  |   47|  15.1M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.1M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.1M|	{ \
  |  |   49|  15.1M|		; \
  |  |   50|  15.1M|	} \
  |  |   51|  15.1M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.1M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  336|  15.1M|		argument_class->flags & VIPS_ARGUMENT_OUTPUT);
  337|  15.1M|	VIPS_DEBUG_MSG("\tassigned: %d\n",
  ------------------
  |  |   47|  15.1M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.1M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.1M|	{ \
  |  |   49|  15.1M|		; \
  |  |   50|  15.1M|	} \
  |  |   51|  15.1M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.1M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  338|  15.1M|		argument_instance->assigned);
  339|       |
  340|  15.1M|	if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED) &&
  ------------------
  |  Branch (340:6): [True: 816k, False: 14.3M]
  ------------------
  341|  15.1M|		(argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) &&
  ------------------
  |  Branch (341:3): [True: 816k, False: 0]
  ------------------
  342|  15.1M|		!(argument_class->flags & VIPS_ARGUMENT_DEPRECATED) &&
  ------------------
  |  Branch (342:3): [True: 816k, False: 0]
  ------------------
  343|  15.1M|		(argument_class->flags & *iomask) &&
  ------------------
  |  Branch (343:3): [True: 659k, False: 157k]
  ------------------
  344|  15.1M|		!argument_instance->assigned) {
  ------------------
  |  Branch (344:3): [True: 0, False: 659k]
  ------------------
  345|      0|		vips_error(class->nickname,
  346|      0|			_("parameter %s not set"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  347|      0|			g_param_spec_get_name(pspec));
  348|      0|		*result = -1;
  349|      0|	}
  350|       |
  351|  15.1M|	return NULL;
  352|  15.1M|}
object.c:vips_object_postbuild:
  254|  1.07M|{
  255|  1.07M|	int result;
  256|       |
  257|       |#ifdef DEBUG
  258|       |	printf("vips_object_postbuild: ");
  259|       |	vips_object_print_name(object);
  260|       |	printf("\n");
  261|       |#endif /*DEBUG*/
  262|       |
  263|  1.07M|	g_signal_emit(object, vips_object_signals[SIG_POSTBUILD], 0, &result);
  264|       |
  265|  1.07M|	return result;
  266|  1.07M|}
object.c:vips_argument_init:
  692|  59.2M|{
  693|  59.2M|	if (!object->argument_table) {
  ------------------
  |  Branch (693:6): [True: 1.09M, False: 58.1M]
  ------------------
  694|       |#ifdef DEBUG
  695|       |		printf("vips_argument_init: ");
  696|       |		vips_object_print_name(object);
  697|       |		printf("\n");
  698|       |#endif /*DEBUG*/
  699|       |
  700|  1.09M|		object->argument_table = g_hash_table_new_full(g_direct_hash,
  701|  1.09M|			g_direct_equal, NULL,
  702|  1.09M|			(GDestroyNotify) vips_argument_instance_free);
  703|       |
  704|       |		/* Make a VipsArgumentInstance for each installed argument
  705|       |		 * property. We can't use vips_argument_map() since that does
  706|       |		 * some sanity checks that won't pass until all arg instance
  707|       |		 * are built.
  708|       |		 */
  709|  7.74M|		VIPS_ARGUMENT_FOR_ALL(object,
  ------------------
  |  |  358|  1.09M|	{ \
  |  |  359|  1.09M|		VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(OBJECT); \
  |  |  ------------------
  |  |  |  |  441|  1.09M|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  527|  1.09M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2310|  1.09M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  360|  1.09M|		GSList *p; \
  |  |  361|  1.09M|\
  |  |  362|  8.84M|		for (p = object_class->argument_table_traverse; p; p = p->next) { \
  |  |  ------------------
  |  |  |  Branch (362:51): [True: 7.74M, False: 1.09M]
  |  |  ------------------
  |  |  363|  7.74M|			VipsArgumentClass *ARG_CLASS = \
  |  |  364|  7.74M|				(VipsArgumentClass *) p->data; \
  |  |  365|  7.74M|			VipsArgument *argument = (VipsArgument *) argument_class; \
  |  |  366|  7.74M|			GParamSpec *PSPEC = argument->pspec; \
  |  |  367|  7.74M|			VipsArgumentInstance *ARG_INSTANCE G_GNUC_UNUSED = \
  |  |  368|  7.74M|				vips__argument_get_instance(argument_class, \
  |  |  369|  7.74M|					VIPS_OBJECT(OBJECT));
  |  |  ------------------
  |  |  |  |  433|  7.74M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|  7.74M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|  7.74M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  710|  7.74M|			pspec, argument_class, argument_instance)
  711|  7.74M|		{
  712|       |#ifdef DEBUG
  713|       |			printf("vips_argument_init: adding instance argument for %s\n",
  714|       |				g_param_spec_get_name(pspec));
  715|       |#endif /*DEBUG*/
  716|       |
  717|       |			/* argument_instance should be NULL since we've not
  718|       |			 * set it yet.
  719|       |			 */
  720|  7.74M|			g_assert(argument_instance == NULL);
  ------------------
  |  |  166|  7.74M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  7.74M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.74M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  721|       |
  722|  7.74M|			argument_instance = g_new(VipsArgumentInstance, 1);
  ------------------
  |  |  282|  7.74M|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|  7.74M|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  7.74M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  7.74M|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  7.74M|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  7.74M|	  gpointer __p;						\
  |  |  |  |  231|  7.74M|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 7.74M]
  |  |  |  |  ------------------
  |  |  |  |  232|  7.74M|	    __p = g_##func (__n);				\
  |  |  |  |  233|  7.74M|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 7.74M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|  7.74M|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 7.74M]
  |  |  |  |  |  Branch (234:26): [True: 7.74M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  7.74M|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  7.74M|	  else							\
  |  |  |  |  237|  7.74M|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  7.74M|	  __p;							\
  |  |  |  |  239|  7.74M|	}))
  |  |  ------------------
  ------------------
  723|       |
  724|  7.74M|			((VipsArgument *) argument_instance)->pspec = pspec;
  725|  7.74M|			argument_instance->argument_class = argument_class;
  726|  7.74M|			argument_instance->object = object;
  727|       |			/* SET_ALWAYS args default to assigned.
  728|       |			 */
  729|  7.74M|			argument_instance->assigned =
  730|  7.74M|				argument_class->flags &
  731|  7.74M|				VIPS_ARGUMENT_SET_ALWAYS;
  732|  7.74M|			argument_instance->close_id = 0;
  733|  7.74M|			argument_instance->invalidate_id = 0;
  734|       |
  735|  7.74M|			vips_argument_table_replace(object->argument_table,
  736|  7.74M|				(VipsArgument *) argument_instance);
  737|  7.74M|		}
  738|  7.74M|		VIPS_ARGUMENT_FOR_ALL_END
  ------------------
  |  |  372|  7.74M|	} \
  |  |  373|  1.09M|	}
  ------------------
  739|  1.09M|	}
  740|  59.2M|}
object.c:vips_argument_instance_free:
  551|  7.74M|{
  552|  7.74M|	vips_argument_instance_detach(argument_instance);
  553|  7.74M|	g_free(argument_instance);
  554|  7.74M|}
object.c:vips_argument_instance_detach:
  517|  8.56M|{
  518|  8.56M|	VipsObject *object = argument_instance->object;
  519|  8.56M|	VipsArgumentClass *argument_class = argument_instance->argument_class;
  520|       |
  521|  8.56M|	if (argument_instance->close_id) {
  ------------------
  |  Branch (521:6): [True: 156k, False: 8.41M]
  ------------------
  522|       |		/* If close_id is set, the argument must be a gobject of some
  523|       |		 * sort, so we can fetch it.
  524|       |		 */
  525|   156k|		GObject *member = G_STRUCT_MEMBER(GObject *, object,
  ------------------
  |  |  842|   156k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   156k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
  526|   156k|			argument_class->offset);
  527|       |
  528|   156k|		if (g_signal_handler_is_connected(member,
  ------------------
  |  Branch (528:7): [True: 156k, False: 0]
  ------------------
  529|   156k|				argument_instance->close_id))
  530|   156k|			g_signal_handler_disconnect(member,
  531|   156k|				argument_instance->close_id);
  532|   156k|		argument_instance->close_id = 0;
  533|   156k|	}
  534|       |
  535|  8.56M|	if (argument_instance->invalidate_id) {
  ------------------
  |  Branch (535:6): [True: 148k, False: 8.42M]
  ------------------
  536|   148k|		GObject *member = G_STRUCT_MEMBER(GObject *, object,
  ------------------
  |  |  842|   148k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   148k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
  537|   148k|			argument_class->offset);
  538|       |
  539|   148k|		if (g_signal_handler_is_connected(member,
  ------------------
  |  Branch (539:7): [True: 148k, False: 0]
  ------------------
  540|   148k|				argument_instance->invalidate_id))
  541|   148k|			g_signal_handler_disconnect(member,
  542|   148k|				argument_instance->invalidate_id);
  543|   148k|		argument_instance->invalidate_id = 0;
  544|   148k|	}
  545|  8.56M|}
object.c:vips_object_clear_member:
  871|   827k|{
  872|   827k|	VipsObject *object = argument_instance->object;
  873|   827k|	VipsArgumentClass *argument_class = argument_instance->argument_class;
  874|   827k|	GObject **member = &G_STRUCT_MEMBER(GObject *, object,
  ------------------
  |  |  842|   827k|    (*(member_type*) G_STRUCT_MEMBER_P ((struct_p), (struct_offset)))
  |  |  ------------------
  |  |  |  |  840|   827k|    ((gpointer) ((guint8*) (struct_p) + (glong) (struct_offset)))
  |  |  ------------------
  ------------------
  875|   827k|		argument_class->offset);
  876|       |
  877|   827k|	vips_argument_instance_detach(argument_instance);
  878|       |
  879|   827k|	if (*member) {
  ------------------
  |  Branch (879:6): [True: 334k, False: 493k]
  ------------------
  880|   334k|		if (argument_class->flags & VIPS_ARGUMENT_INPUT) {
  ------------------
  |  Branch (880:7): [True: 178k, False: 156k]
  ------------------
  881|       |#ifdef DEBUG_REF
  882|       |			printf("vips_object_clear_member: vips object: ");
  883|       |			vips_object_print_name(object);
  884|       |			printf("  no longer refers to gobject %s (%p)\n",
  885|       |				G_OBJECT_TYPE_NAME(*member), *member);
  886|       |			printf("  count down to %d\n", G_OBJECT(*member)->ref_count - 1);
  887|       |#endif /*DEBUG_REF*/
  888|       |
  889|       |			/* We reffed the object.
  890|       |			 */
  891|   178k|			g_object_unref(*member);
  892|   178k|		}
  893|   156k|		else if (argument_class->flags & VIPS_ARGUMENT_OUTPUT) {
  ------------------
  |  Branch (893:12): [True: 156k, False: 0]
  ------------------
  894|       |#ifdef DEBUG_REF
  895|       |			printf("vips_object_clear_member: gobject %s (%p)\n",
  896|       |				G_OBJECT_TYPE_NAME(*member), *member);
  897|       |			printf("  no longer refers to vips object: ");
  898|       |			vips_object_print_name(object);
  899|       |			printf("  count down to %d\n", G_OBJECT(object)->ref_count - 1);
  900|       |#endif /*DEBUG_REF*/
  901|       |
  902|   156k|			g_object_unref(object);
  903|   156k|		}
  904|       |
  905|   334k|		*member = NULL;
  906|   334k|	}
  907|   827k|}
object.c:vips_object_arg_close:
 1070|   156k|{
 1071|   156k|	VipsObject *object = argument_instance->object;
 1072|   156k|	GParamSpec *pspec = ((VipsArgument *) argument_instance)->pspec;
 1073|       |
 1074|       |	/* Argument had reffed us ... now it's being closed, so we NULL out
 1075|       |	 * the pointer to unref.
 1076|       |	 */
 1077|   156k|	g_object_set(object,
 1078|   156k|		g_param_spec_get_name(pspec), NULL,
 1079|   156k|		NULL);
 1080|   156k|}
object.c:vips_argument_table_replace:
  570|  7.74M|{
  571|  7.74M|	g_hash_table_replace(table, argument->pspec, argument);
  572|  7.74M|}
object.c:traverse_find_required_priority:
 1688|  2.58k|{
 1689|  2.58k|	VipsArgumentClass *argument_class = (VipsArgumentClass *) data;
 1690|  2.58k|	int priority = GPOINTER_TO_INT(a);
 1691|       |
 1692|  2.58k|	if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED) &&
  ------------------
  |  Branch (1692:6): [True: 805, False: 1.78k]
  ------------------
 1693|  2.58k|		!(argument_class->flags & VIPS_ARGUMENT_DEPRECATED) &&
  ------------------
  |  Branch (1693:3): [True: 805, False: 0]
  ------------------
 1694|  2.58k|		argument_class->priority == priority)
  ------------------
  |  Branch (1694:3): [True: 0, False: 805]
  ------------------
 1695|      0|		return argument_class;
 1696|       |
 1697|  2.58k|	return NULL;
 1698|  2.58k|}
object.c:traverse_sort:
 1703|  13.9k|{
 1704|  13.9k|	return class1->priority - class2->priority;
 1705|  13.9k|}
object.c:vips_object_set_args:
 2459|  51.6k|{
 2460|  51.6k|	VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object);
  ------------------
  |  |  441|  51.6k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  527|  51.6k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  51.6k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2461|       |
 2462|  51.6k|	VipsToken token;
 2463|  51.6k|	char string[VIPS_PATH_MAX];
 2464|  51.6k|	char string2[VIPS_PATH_MAX];
 2465|  51.6k|	GParamSpec *pspec;
 2466|  51.6k|	VipsArgumentClass *argument_class;
 2467|  51.6k|	VipsArgumentInstance *argument_instance;
 2468|       |
 2469|  51.6k|	if (!(p = vips__token_need(p, VIPS_TOKEN_LEFT,
  ------------------
  |  Branch (2469:6): [True: 0, False: 51.6k]
  ------------------
 2470|  51.6k|			  string, VIPS_PATH_MAX)))
  ------------------
  |  |  245|  51.6k|#define VIPS_PATH_MAX (4096)
  ------------------
 2471|      0|		return -1;
 2472|       |
 2473|  51.6k|	if (!(p = vips__token_segment(p, &token, string, VIPS_PATH_MAX)))
  ------------------
  |  |  245|  51.6k|#define VIPS_PATH_MAX (4096)
  ------------------
  |  Branch (2473:6): [True: 0, False: 51.6k]
  ------------------
 2474|      0|		return -1;
 2475|       |
 2476|  51.6k|	for (;;) {
 2477|  51.6k|		if (token == VIPS_TOKEN_RIGHT)
  ------------------
  |  Branch (2477:7): [True: 51.6k, False: 0]
  ------------------
 2478|  51.6k|			break;
 2479|      0|		if (token != VIPS_TOKEN_STRING) {
  ------------------
  |  Branch (2479:7): [True: 0, False: 0]
  ------------------
 2480|      0|			vips_error(class->nickname,
 2481|      0|				_("expected string or ), saw %s"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2482|      0|				vips_enum_nick(VIPS_TYPE_TOKEN, token));
  ------------------
  |  |  178|      0|#define VIPS_TYPE_TOKEN (vips_token_get_type())
  ------------------
 2483|      0|			return -1;
 2484|      0|		}
 2485|       |
 2486|       |		/* We have to look for a '=', ']' or a ',' to see if string is
 2487|       |		 * a param name or a value.
 2488|       |		 */
 2489|      0|		if (!(p = vips__token_segment(p, &token,
  ------------------
  |  Branch (2489:7): [True: 0, False: 0]
  ------------------
 2490|      0|				  string2, VIPS_PATH_MAX)))
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 2491|      0|			return -1;
 2492|      0|		if (token == VIPS_TOKEN_EQUALS) {
  ------------------
  |  Branch (2492:7): [True: 0, False: 0]
  ------------------
 2493|      0|			if (!(p = vips__token_segment_need(p, VIPS_TOKEN_STRING,
  ------------------
  |  Branch (2493:8): [True: 0, False: 0]
  ------------------
 2494|      0|					  string2, VIPS_PATH_MAX)))
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 2495|      0|				return -1;
 2496|      0|			if (vips_object_set_argument_from_string(object,
  ------------------
  |  Branch (2496:8): [True: 0, False: 0]
  ------------------
 2497|      0|					string, string2))
 2498|      0|				return -1;
 2499|       |
 2500|      0|			if (!(p = vips__token_must(p, &token,
  ------------------
  |  Branch (2500:8): [True: 0, False: 0]
  ------------------
 2501|      0|					  string2, VIPS_PATH_MAX)))
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 2502|      0|				return -1;
 2503|      0|		}
 2504|      0|		else if (g_object_class_find_property(
  ------------------
  |  Branch (2504:12): [True: 0, False: 0]
  ------------------
 2505|      0|					 G_OBJECT_GET_CLASS(object), string) &&
  ------------------
  |  |   86|      0|#define G_OBJECT_GET_CLASS(object)  (G_TYPE_INSTANCE_GET_CLASS ((object), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  527|      0|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|      0|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2506|      0|			!vips_object_get_argument(object, string,
  ------------------
  |  Branch (2506:4): [True: 0, False: 0]
  ------------------
 2507|      0|				&pspec, &argument_class, &argument_instance) &&
 2508|      0|			(argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) &&
  ------------------
  |  Branch (2508:4): [True: 0, False: 0]
  ------------------
 2509|      0|			(argument_class->flags & VIPS_ARGUMENT_INPUT) &&
  ------------------
  |  Branch (2509:4): [True: 0, False: 0]
  ------------------
 2510|      0|			G_IS_PARAM_SPEC_BOOLEAN(pspec)) {
  ------------------
  |  |   94|      0|#define G_IS_PARAM_SPEC_BOOLEAN(pspec)     (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_BOOLEAN))
  |  |  ------------------
  |  |  |  |  497|      0|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|      0|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|      0|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|      0|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|      0|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|      0|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|      0|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|      0|  else \
  |  |  |  |  |  | 2321|      0|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|      0|  __r; \
  |  |  |  |  |  | 2323|      0|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (94:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2511|       |			/* The string is the name of an optional
 2512|       |			 * input boolean ... set it!
 2513|       |			 */
 2514|      0|			if (!argument_instance->assigned)
  ------------------
  |  Branch (2514:8): [True: 0, False: 0]
  ------------------
 2515|      0|				g_object_set(object, string, TRUE, NULL);
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2516|      0|		}
 2517|      0|		else if ((pspec = vips_object_find_required(object))) {
  ------------------
  |  Branch (2517:12): [True: 0, False: 0]
  ------------------
 2518|      0|			if (vips_object_set_argument_from_string(object,
  ------------------
  |  Branch (2518:8): [True: 0, False: 0]
  ------------------
 2519|      0|					g_param_spec_get_name(pspec), string))
 2520|      0|				return -1;
 2521|      0|		}
 2522|      0|		else {
 2523|      0|			vips_error(class->nickname,
 2524|      0|				_("unable to set '%s'"), string);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2525|      0|			return -1;
 2526|      0|		}
 2527|       |
 2528|       |		/* Now must be a , or a ).
 2529|       |		 */
 2530|      0|		if (token == VIPS_TOKEN_COMMA) {
  ------------------
  |  Branch (2530:7): [True: 0, False: 0]
  ------------------
 2531|      0|			if (!(p = vips__token_must(p, &token,
  ------------------
  |  Branch (2531:8): [True: 0, False: 0]
  ------------------
 2532|      0|					  string, VIPS_PATH_MAX)))
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 2533|      0|				return -1;
 2534|      0|		}
 2535|      0|		else if (token != VIPS_TOKEN_RIGHT) {
  ------------------
  |  Branch (2535:12): [True: 0, False: 0]
  ------------------
 2536|      0|			vips_error(class->nickname,
 2537|      0|				"%s", _("not , or ) after parameter"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2538|      0|			return -1;
 2539|      0|		}
 2540|      0|	}
 2541|       |
 2542|  51.6k|	if ((p = vips__token_get(p, &token, string, VIPS_PATH_MAX))) {
  ------------------
  |  |  245|  51.6k|#define VIPS_PATH_MAX (4096)
  ------------------
  |  Branch (2542:6): [True: 0, False: 51.6k]
  ------------------
 2543|      0|		vips_error(class->nickname,
 2544|      0|			"%s", _("extra tokens after ')'"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 2545|      0|		return -1;
 2546|      0|	}
 2547|       |
 2548|  51.6k|	return 0;
 2549|  51.6k|}
object.c:test_name:
 2860|  8.19M|{
 2861|  8.19M|	if (g_ascii_strcasecmp(class->nickname, nickname) == 0)
  ------------------
  |  Branch (2861:6): [True: 2.57k, False: 8.19M]
  ------------------
 2862|  2.57k|		return class;
 2863|       |
 2864|       |	/* Check the class name too, why not.
 2865|       |	 */
 2866|  8.19M|	if (g_ascii_strcasecmp(G_OBJECT_CLASS_NAME(class), nickname) == 0)
  ------------------
  |  |  124|  8.19M|#define G_OBJECT_CLASS_NAME(class)  (g_type_name (G_OBJECT_CLASS_TYPE (class)))
  |  |  ------------------
  |  |  |  |  114|  8.19M|#define G_OBJECT_CLASS_TYPE(class)  (G_TYPE_FROM_CLASS (class))
  |  |  |  |  ------------------
  |  |  |  |  |  |  613|  8.19M|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2866:6): [True: 51.6k, False: 8.14M]
  ------------------
 2867|  51.6k|		return class;
 2868|       |
 2869|  8.14M|	return NULL;
 2870|  8.19M|}
object.c:vips_class_build_hash_cb:
 2936|      1|{
 2937|      1|	GType base;
 2938|       |
 2939|      1|	vips__object_nickname_table = g_hash_table_new(g_str_hash, g_str_equal);
 2940|       |
 2941|      1|	base = g_type_from_name("VipsObject");
 2942|      1|	g_assert(base);
  ------------------
  |  |  166|      1|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2943|       |
 2944|      1|	vips_class_map_all(base,
 2945|      1|		(VipsClassMapFn) vips_class_add_hash,
 2946|      1|		(void *) vips__object_nickname_table);
 2947|       |
 2948|      1|	return NULL;
 2949|      1|}
object.c:vips_class_add_hash:
 2911|    306|{
 2912|    306|	GType type = G_OBJECT_CLASS_TYPE(class);
  ------------------
  |  |  114|    306|#define G_OBJECT_CLASS_TYPE(class)  (G_TYPE_FROM_CLASS (class))
  |  |  ------------------
  |  |  |  |  613|    306|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  |  |  ------------------
  ------------------
 2913|    306|	NicknameGType *hit;
 2914|       |
 2915|    306|	hit = (NicknameGType *)
 2916|    306|		g_hash_table_lookup(table, (void *) class->nickname);
 2917|       |
 2918|       |	/* If this is not a unique name, mark as a duplicate. In this case
 2919|       |	 * we'll need to fall back to a search.
 2920|       |	 */
 2921|    306|	if (hit)
  ------------------
  |  Branch (2921:6): [True: 1, False: 305]
  ------------------
 2922|      1|		hit->duplicate = TRUE;
  ------------------
  |  |  798|      1|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      1|#define	FALSE	(0)
  |  |  ------------------
  ------------------
 2923|    305|	else {
 2924|    305|		hit = g_new(NicknameGType, 1);
  ------------------
  |  |  282|    305|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|    305|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|    305|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|    305|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|    305|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|    305|	  gpointer __p;						\
  |  |  |  |  231|    305|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 305]
  |  |  |  |  ------------------
  |  |  |  |  232|    305|	    __p = g_##func (__n);				\
  |  |  |  |  233|    305|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 305, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|    305|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 305]
  |  |  |  |  |  Branch (234:26): [True: 305, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|    305|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|    305|	  else							\
  |  |  |  |  237|    305|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|    305|	  __p;							\
  |  |  |  |  239|    305|	}))
  |  |  ------------------
  ------------------
 2925|    305|		hit->nickname = class->nickname;
 2926|    305|		hit->type = type;
 2927|    305|		hit->duplicate = FALSE;
  ------------------
  |  |  794|    305|#define	FALSE	(0)
  ------------------
 2928|    305|		g_hash_table_insert(table, (void *) hit->nickname, hit);
 2929|    305|	}
 2930|       |
 2931|    306|	return NULL;
 2932|    306|}
object.c:vips_object_local_array_cb:
 3041|  89.9k|{
 3042|  89.9k|	int i;
 3043|       |
 3044|   320k|	for (i = 0; i < local->n; i++)
  ------------------
  |  Branch (3044:14): [True: 230k, False: 89.9k]
  ------------------
 3045|   230k|		VIPS_FREEF(g_object_unref, local->array[i]);
  ------------------
  |  |   41|   230k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   230k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   230k|	{ \
  |  |   43|   230k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 77.0k, False: 153k]
  |  |  ------------------
  |  |   44|  77.0k|			(void) F((S)); \
  |  |   45|  77.0k|			(S) = 0; \
  |  |   46|  77.0k|		} \
  |  |   47|   230k|	} \
  |  |   48|   230k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   230k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3046|       |
 3047|  89.9k|	VIPS_FREEF(g_free, local->array);
  ------------------
  |  |   41|  89.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  89.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  89.9k|	{ \
  |  |   43|  89.9k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 89.9k, False: 0]
  |  |  ------------------
  |  |   44|  89.9k|			(void) F((S)); \
  |  |   45|  89.9k|			(S) = 0; \
  |  |   46|  89.9k|		} \
  |  |   47|  89.9k|	} \
  |  |   48|  89.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  89.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3048|  89.9k|	VIPS_FREEF(g_free, local);
  ------------------
  |  |   41|  89.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  89.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  89.9k|	{ \
  |  |   43|  89.9k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 89.9k, False: 0]
  |  |  ------------------
  |  |   44|  89.9k|			(void) F((S)); \
  |  |   45|  89.9k|			(S) = 0; \
  |  |   46|  89.9k|		} \
  |  |   47|  89.9k|	} \
  |  |   48|  89.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  89.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3049|  89.9k|}
object.c:vips_object_unref_outputs_sub:
 3199|   341k|{
 3200|   341k|	if ((argument_class->flags & VIPS_ARGUMENT_OUTPUT) &&
  ------------------
  |  Branch (3200:6): [True: 14.3k, False: 327k]
  ------------------
 3201|   341k|		G_IS_PARAM_SPEC_OBJECT(pspec) &&
  ------------------
  |  |  491|   356k|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|  14.3k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|  14.3k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|  14.3k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|  14.3k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|  14.3k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 14.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|  14.3k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|  14.3k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 14.3k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 7.16k, False: 7.16k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|  14.3k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|  7.16k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|  7.16k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|  14.3k|  else \
  |  |  |  |  |  | 2321|  14.3k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|  14.3k|  __r; \
  |  |  |  |  |  | 2323|  14.3k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 7.16k, False: 7.16k]
  |  |  ------------------
  ------------------
 3202|   341k|		argument_instance->assigned) {
  ------------------
  |  Branch (3202:3): [True: 5.76k, False: 1.39k]
  ------------------
 3203|  5.76k|		GObject *value;
 3204|       |
 3205|  5.76k|		g_object_get(object,
 3206|  5.76k|			g_param_spec_get_name(pspec), &value, NULL);
 3207|       |
 3208|       |		/* Doing the get refs the object, so unref the get, then unref
 3209|       |		 * again since this an an output object of the operation.
 3210|       |		 */
 3211|  5.76k|		g_object_unref(value);
 3212|  5.76k|		g_object_unref(value);
 3213|  5.76k|	}
 3214|       |
 3215|   341k|	return NULL;
 3216|   341k|}

vips_operation_get_flags:
  693|   340k|{
  694|   340k|	VipsOperationClass *class = VIPS_OPERATION_GET_CLASS(operation);
  ------------------
  |  |   67|   340k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|   340k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|   340k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|   340k|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  695|       |
  696|   340k|	return class->get_flags(operation);
  697|   340k|}
vips_operation_invalidate:
  717|  27.2k|{
  718|       |#ifdef VIPS_DEBUG
  719|       |	printf("vips_operation_invalidate: %p\n", operation);
  720|       |	vips_object_print_summary(VIPS_OBJECT(operation));
  721|       |#endif /*VIPS_DEBUG*/
  722|       |
  723|  27.2k|	g_signal_emit(operation, vips_operation_signals[SIG_INVALIDATE], 0);
  724|  27.2k|}
vips_operation_new:
  740|   180k|{
  741|   180k|	GType type;
  742|   180k|	VipsObject *object;
  743|   180k|	VipsOperation *operation;
  744|       |
  745|   180k|	vips_check_init();
  746|       |
  747|   180k|	if (!(type = vips_type_find("VipsOperation", name))) {
  ------------------
  |  Branch (747:6): [True: 0, False: 180k]
  ------------------
  748|      0|		vips_error("VipsOperation",
  749|      0|			_("class \"%s\" not found"), name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  750|      0|		return NULL;
  751|      0|	}
  752|       |
  753|   180k|	if (!(object = g_object_new(type, NULL))) {
  ------------------
  |  Branch (753:6): [True: 0, False: 180k]
  ------------------
  754|      0|		vips_error("VipsOperation",
  755|      0|			_("\"%s\" is not an instantiable class"), name);
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  756|      0|		return NULL;
  757|      0|	}
  758|       |
  759|   180k|	operation = VIPS_OPERATION(object);
  ------------------
  |  |   57|   180k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   180k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   180k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|   180k|		VIPS_TYPE_OPERATION, VipsOperation))
  ------------------
  760|       |
  761|   180k|	VIPS_DEBUG_MSG("vips_operation_new: %s (%p)\n", name, operation);
  ------------------
  |  |   47|   180k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   180k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   180k|	{ \
  |  |   49|   180k|		; \
  |  |   50|   180k|	} \
  |  |   51|   180k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   180k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  762|       |
  763|   180k|	return operation;
  764|   180k|}
vips_call_required_optional:
  956|   180k|{
  957|   180k|	int result;
  958|   180k|	va_list a;
  959|   180k|	va_list b;
  960|       |
  961|       |	/* We need to be able to walk required and optional twice. On x64 gcc,
  962|       |	 * vips_operation_set_valist_required() etc. will destructively alter
  963|       |	 * the passed-in va_list. We make a copy and walk that instead.
  964|       |	 */
  965|   180k|	va_copy(a, required);
  966|   180k|	va_copy(b, optional);
  967|   180k|	result = vips_operation_set_valist_required(*operation, a) ||
  ------------------
  |  Branch (967:11): [True: 0, False: 180k]
  ------------------
  968|   180k|		vips_object_set_valist(VIPS_OBJECT(*operation), b);
  ------------------
  |  |  433|   180k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   180k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   180k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (968:3): [True: 0, False: 180k]
  ------------------
  969|   180k|	va_end(a);
  970|   180k|	va_end(b);
  971|       |
  972|   180k|	if (result)
  ------------------
  |  Branch (972:6): [True: 0, False: 180k]
  ------------------
  973|      0|		return -1;
  974|       |
  975|       |	/* Build from cache.
  976|       |	 */
  977|   180k|	if (vips_cache_operation_buildp(operation))
  ------------------
  |  Branch (977:6): [True: 20.4k, False: 160k]
  ------------------
  978|  20.4k|		return -1;
  979|       |
  980|       |	/* Walk args again, writing output.
  981|       |	 */
  982|   160k|	va_copy(a, required);
  983|   160k|	va_copy(b, optional);
  984|   160k|	result = vips_operation_get_valist_required(*operation, required) ||
  ------------------
  |  Branch (984:11): [True: 0, False: 160k]
  ------------------
  985|   160k|		vips_operation_get_valist_optional(*operation, optional);
  ------------------
  |  Branch (985:3): [True: 0, False: 160k]
  ------------------
  986|   160k|	va_end(a);
  987|   160k|	va_end(b);
  988|       |
  989|   160k|	return result;
  990|   180k|}
vips_call_split:
 1118|   129k|{
 1119|   129k|	int result;
 1120|   129k|	va_list required;
 1121|       |
 1122|   129k|	va_start(required, optional);
 1123|   129k|	result = vips_call_by_name(operation_name, NULL,
 1124|   129k|		required, optional);
 1125|   129k|	va_end(required);
 1126|       |
 1127|   129k|	return result;
 1128|   129k|}
vips_call_split_option_string:
 1133|  51.6k|{
 1134|  51.6k|	int result;
 1135|  51.6k|	va_list required;
 1136|       |
 1137|  51.6k|	va_start(required, optional);
 1138|  51.6k|	result = vips_call_by_name(operation_name, option_string,
 1139|  51.6k|		required, optional);
 1140|  51.6k|	va_end(required);
 1141|       |
 1142|  51.6k|	return result;
 1143|  51.6k|}
operation.c:vips_operation_class_init:
  653|      1|{
  654|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  655|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  656|       |
  657|      1|	gobject_class->finalize = vips_operation_finalize;
  658|      1|	gobject_class->dispose = vips_operation_dispose;
  659|       |
  660|      1|	vobject_class->build = vips_operation_build;
  661|      1|	vobject_class->summary = vips_operation_summary;
  662|      1|	vobject_class->dump = vips_operation_dump;
  663|      1|	vobject_class->nickname = "operation";
  664|      1|	vobject_class->description = _("operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  665|       |
  666|      1|	class->usage = vips_operation_usage;
  667|      1|	class->get_flags = vips_operation_real_get_flags;
  668|       |
  669|      1|	vips_operation_signals[SIG_INVALIDATE] = g_signal_new("invalidate",
  670|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  671|      1|		G_SIGNAL_RUN_LAST,
  672|      1|		G_STRUCT_OFFSET(VipsOperationClass, invalidate),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  673|      1|		NULL, NULL,
  674|      1|		g_cclosure_marshal_VOID__VOID,
  675|      1|		G_TYPE_NONE, 0);
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  676|      1|}
operation.c:vips_operation_finalize:
  229|   180k|{
  230|   180k|	VipsOperation *operation = VIPS_OPERATION(gobject);
  ------------------
  |  |   57|   180k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   180k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   180k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   58|   180k|		VIPS_TYPE_OPERATION, VipsOperation))
  ------------------
  231|       |
  232|   180k|	VIPS_DEBUG_MSG("vips_operation_finalize: %p\n", gobject);
  ------------------
  |  |   47|   180k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   180k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   180k|	{ \
  |  |   49|   180k|		; \
  |  |   50|   180k|	} \
  |  |   51|   180k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   180k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|       |
  234|   180k|	if (operation->pixels)
  ------------------
  |  Branch (234:6): [True: 0, False: 180k]
  ------------------
  235|      0|		g_info(_("%d pixels calculated"), operation->pixels);
  ------------------
  |  |  341|      0|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|      0|                               G_LOG_LEVEL_INFO,     \
  |  |  343|      0|                               __VA_ARGS__)
  ------------------
  236|       |
  237|   180k|	G_OBJECT_CLASS(vips_operation_parent_class)->finalize(gobject);
  ------------------
  |  |   58|   180k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   180k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   180k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  238|   180k|}
operation.c:vips_operation_dispose:
  242|   180k|{
  243|   180k|	VIPS_DEBUG_MSG("vips_operation_dispose: %p\n", gobject);
  ------------------
  |  |   47|   180k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   180k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   180k|	{ \
  |  |   49|   180k|		; \
  |  |   50|   180k|	} \
  |  |   51|   180k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   180k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  244|       |
  245|   180k|	G_OBJECT_CLASS(vips_operation_parent_class)->dispose(gobject);
  ------------------
  |  |   58|   180k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   180k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   180k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  246|   180k|}
operation.c:vips_operation_build:
  607|   178k|{
  608|   178k|	VipsOperationClass *class = VIPS_OPERATION_GET_CLASS(object);
  ------------------
  |  |   67|   178k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|   178k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|   178k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|   178k|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  609|       |
  610|       |#ifdef VIPS_DEBUG
  611|       |	printf("vips_operation_build: ");
  612|       |	vips_object_print_name(object);
  613|       |	printf("\n");
  614|       |#endif /*VIPS_DEBUG*/
  615|       |
  616|   178k|	if (class->flags & VIPS_OPERATION_BLOCKED) {
  ------------------
  |  Branch (616:6): [True: 0, False: 178k]
  ------------------
  617|      0|		vips_error(VIPS_OBJECT_CLASS(class)->nickname,
  ------------------
  |  |  435|      0|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      0|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      0|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  618|      0|			"%s", _("operation is blocked"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  619|      0|		return -1;
  620|      0|	}
  621|       |
  622|   178k|	if (VIPS_OBJECT_CLASS(vips_operation_parent_class)->build(object))
  ------------------
  |  |  435|   178k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|   178k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   178k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (622:6): [True: 0, False: 178k]
  ------------------
  623|      0|		return -1;
  624|       |
  625|   178k|	return 0;
  626|   178k|}
operation.c:vips_operation_real_get_flags:
  645|   340k|{
  646|   340k|	VipsOperationClass *class = VIPS_OPERATION_GET_CLASS(operation);
  ------------------
  |  |   67|   340k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|   340k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|   340k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|   340k|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  647|       |
  648|   340k|	return class->flags;
  649|   340k|}
operation.c:vips_operation_init:
  680|   180k|{
  681|   180k|}
operation.c:vips_operation_set_valist_required:
  777|   180k|{
  778|   180k|	VIPS_DEBUG_MSG("vips_operation_set_valist_required:\n");
  ------------------
  |  |   47|   180k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   180k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   180k|	{ \
  |  |   49|   180k|		; \
  |  |   50|   180k|	} \
  |  |   51|   180k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   180k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  779|       |
  780|       |	/* Set required input arguments. Can't use vips_argument_map here
  781|       |	 * :-( because passing va_list by reference is not portable.
  782|       |	 */
  783|  1.95M|	VIPS_ARGUMENT_FOR_ALL(operation,
  ------------------
  |  |  358|   180k|	{ \
  |  |  359|   180k|		VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(OBJECT); \
  |  |  ------------------
  |  |  |  |  441|   180k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  527|   180k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2310|   180k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  360|   180k|		GSList *p; \
  |  |  361|   180k|\
  |  |  362|  2.13M|		for (p = object_class->argument_table_traverse; p; p = p->next) { \
  |  |  ------------------
  |  |  |  Branch (362:51): [True: 1.95M, False: 180k]
  |  |  ------------------
  |  |  363|  1.95M|			VipsArgumentClass *ARG_CLASS = \
  |  |  364|  1.95M|				(VipsArgumentClass *) p->data; \
  |  |  365|  1.95M|			VipsArgument *argument = (VipsArgument *) argument_class; \
  |  |  366|  1.95M|			GParamSpec *PSPEC = argument->pspec; \
  |  |  367|  1.95M|			VipsArgumentInstance *ARG_INSTANCE G_GNUC_UNUSED = \
  |  |  368|  1.95M|				vips__argument_get_instance(argument_class, \
  |  |  369|  1.95M|					VIPS_OBJECT(OBJECT));
  |  |  ------------------
  |  |  |  |  433|  1.95M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|  1.95M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|  1.95M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  784|  1.95M|		pspec, argument_class, argument_instance)
  785|  1.95M|	{
  786|       |
  787|  1.95M|		g_assert(argument_instance);
  ------------------
  |  |  166|  1.95M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.95M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.95M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  788|       |
  789|       |		/* We skip deprecated required args. There will be a new,
  790|       |		 * renamed arg in the same place.
  791|       |		 */
  792|  1.95M|		if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED) &&
  ------------------
  |  Branch (792:7): [True: 423k, False: 1.52M]
  ------------------
  793|  1.95M|			!(argument_class->flags & VIPS_ARGUMENT_DEPRECATED)) {
  ------------------
  |  Branch (793:4): [True: 423k, False: 0]
  ------------------
  794|   529k|			VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap);
  ------------------
  |  |  399|   423k|	if ((ARG_CLASS->flags & VIPS_ARGUMENT_INPUT)) { \
  |  |  ------------------
  |  |  |  Branch (399:6): [True: 264k, False: 159k]
  |  |  ------------------
  |  |  400|   264k|		GValue value = G_VALUE_INIT; \
  |  |  ------------------
  |  |  |  |  191|   264k|#define G_VALUE_INIT  { 0, { { 0 } } }
  |  |  ------------------
  |  |  401|   264k|		gchar *error = NULL; \
  |  |  402|   264k|\
  |  |  403|   264k|		/* Input args are given inline, eg. ("factor", 12.0) \
  |  |  404|   264k|		 * and must be collected. \
  |  |  405|   264k|		 */ \
  |  |  406|   264k|		G_VALUE_COLLECT_INIT(&value, \
  |  |  ------------------
  |  |  |  |   88|   264k|#define G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error)		\
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   264k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   89|   264k|G_STMT_START {										\
  |  |  |  |   90|   264k|  GValue *g_vci_val = (value);								\
  |  |  |  |   91|   264k|  guint g_vci_flags = (flags);								\
  |  |  |  |   92|   264k|  GTypeValueTable *g_vci_vtab = g_type_value_table_peek (_value_type);			\
  |  |  |  |   93|   264k|  const gchar *g_vci_collect_format = g_vci_vtab->collect_format;					\
  |  |  |  |   94|   264k|  GTypeCValue g_vci_cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, };		\
  |  |  |  |   95|   264k|  guint g_vci_n_values = 0;									\
  |  |  |  |   96|   264k|                                                                                        \
  |  |  |  |   97|   264k|  g_vci_val->g_type = _value_type;		/* value_meminit() from gvalue.c */		\
  |  |  |  |   98|   529k|  while (*g_vci_collect_format)								\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (98:10): [True: 264k, False: 264k]
  |  |  |  |  ------------------
  |  |  |  |   99|   264k|    {											\
  |  |  |  |  100|   264k|      GTypeCValue *g_vci_cvalue = g_vci_cvalues + g_vci_n_values++;					\
  |  |  |  |  101|   264k|                                                                                        \
  |  |  |  |  102|   264k|      switch (*g_vci_collect_format++)							\
  |  |  |  |  103|   264k|	{										\
  |  |  |  |  104|  62.2k|	case G_VALUE_COLLECT_INT:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (104:2): [True: 62.2k, False: 202k]
  |  |  |  |  ------------------
  |  |  |  |  105|  62.2k|	  g_vci_cvalue->v_int = va_arg ((var_args), gint);					\
  |  |  |  |  106|  62.2k|	  break;									\
  |  |  |  |  107|      0|	case G_VALUE_COLLECT_LONG:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:2): [True: 0, False: 264k]
  |  |  |  |  ------------------
  |  |  |  |  108|      0|	  g_vci_cvalue->v_long = va_arg ((var_args), glong);					\
  |  |  |  |  109|      0|	  break;									\
  |  |  |  |  110|      0|	case G_VALUE_COLLECT_INT64:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:2): [True: 0, False: 264k]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|	  g_vci_cvalue->v_int64 = va_arg ((var_args), gint64);				\
  |  |  |  |  112|      0|	  break;									\
  |  |  |  |  113|      0|	case G_VALUE_COLLECT_DOUBLE:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (113:2): [True: 0, False: 264k]
  |  |  |  |  ------------------
  |  |  |  |  114|      0|	  g_vci_cvalue->v_double = va_arg ((var_args), gdouble);				\
  |  |  |  |  115|      0|	  break;									\
  |  |  |  |  116|   202k|	case G_VALUE_COLLECT_POINTER:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (116:2): [True: 202k, False: 62.2k]
  |  |  |  |  ------------------
  |  |  |  |  117|   202k|	  g_vci_cvalue->v_pointer = va_arg ((var_args), gpointer);				\
  |  |  |  |  118|   202k|	  break;									\
  |  |  |  |  119|      0|	default:									\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (119:2): [True: 0, False: 264k]
  |  |  |  |  ------------------
  |  |  |  |  120|      0|	  g_assert_not_reached ();							\
  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  121|   264k|	}										\
  |  |  |  |  122|   264k|    }											\
  |  |  |  |  123|   264k|  *(__error) = g_vci_vtab->collect_value (g_vci_val,						\
  |  |  |  |  124|   264k|				       g_vci_n_values,					\
  |  |  |  |  125|   264k|				       g_vci_cvalues,					\
  |  |  |  |  126|   264k|				       g_vci_flags);						\
  |  |  |  |  127|   264k|} G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   264k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  407|   264k|			G_PARAM_SPEC_VALUE_TYPE(PSPEC), AP, 0, &error); \
  |  |  408|   264k|\
  |  |  409|   264k|		/* Don't bother with the error message. \
  |  |  410|   264k|		 */ \
  |  |  411|   264k|		if (error) { \
  |  |  ------------------
  |  |  |  Branch (411:7): [True: 0, False: 264k]
  |  |  ------------------
  |  |  412|      0|			VIPS_DEBUG_MSG("VIPS_OBJECT_COLLECT_SET: err\n"); \
  |  |  ------------------
  |  |  |  |   47|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   48|      0|	{ \
  |  |  |  |   49|      0|		; \
  |  |  |  |   50|      0|	} \
  |  |  |  |   51|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  413|      0|			g_free(error); \
  |  |  414|      0|		}
  ------------------
  795|       |
  796|       |#ifdef VIPS_DEBUG
  797|       |			{
  798|       |				char *str;
  799|       |
  800|       |				str = g_strdup_value_contents(&value);
  801|       |				VIPS_DEBUG_MSG("\t%s = %s\n",
  802|       |					g_param_spec_get_name(pspec), str);
  803|       |				g_free(str);
  804|       |			}
  805|       |#endif /*VIPS_DEBUG */
  806|       |
  807|   529k|			g_object_set_property(G_OBJECT(operation),
  ------------------
  |  |   51|   264k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   264k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   264k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  808|   529k|				g_param_spec_get_name(pspec), &value);
  809|       |
  810|   529k|			VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap);
  ------------------
  |  |  417|   264k|	g_value_unset(&value); \
  |  |  418|   264k|	} \
  |  |  419|   423k|	else if ((ARG_CLASS->flags & VIPS_ARGUMENT_OUTPUT)) \
  |  |  ------------------
  |  |  |  Branch (419:11): [True: 159k, False: 0]
  |  |  ------------------
  |  |  420|   159k|	{ \
  |  |  421|   159k|		void **arg G_GNUC_UNUSED; \
  |  |  422|   159k|\
  |  |  423|   159k|		/* Output args are a pointer to where to send the \
  |  |  424|   159k|		 * result. \
  |  |  425|   159k|		 */ \
  |  |  426|   159k|		arg = va_arg(AP, void **);
  ------------------
  811|       |
  812|       |#ifdef VIPS_DEBUG
  813|       |			printf("\tskipping arg %p for %s\n",
  814|       |				arg, g_param_spec_get_name(pspec));
  815|       |#endif /*VIPS_DEBUG */
  816|       |
  817|   318k|			VIPS_ARGUMENT_COLLECT_END
  ------------------
  |  |  429|   159k|	}
  ------------------
  818|   423k|		}
  819|  1.95M|	}
  820|  1.95M|	VIPS_ARGUMENT_FOR_ALL_END
  ------------------
  |  |  372|  1.95M|	} \
  |  |  373|   180k|	}
  ------------------
  821|       |
  822|   180k|	return 0;
  823|   180k|}
operation.c:vips_operation_get_valist_required:
  827|   160k|{
  828|   160k|	VIPS_DEBUG_MSG("vips_operation_get_valist_required:\n");
  ------------------
  |  |   47|   160k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   160k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   160k|	{ \
  |  |   49|   160k|		; \
  |  |   50|   160k|	} \
  |  |   51|   160k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   160k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  829|       |
  830|       |	/* Extract output arguments. Can't use vips_argument_map here
  831|       |	 * :-( because passing va_list by reference is not portable.
  832|       |	 */
  833|  1.60M|	VIPS_ARGUMENT_FOR_ALL(operation,
  ------------------
  |  |  358|   160k|	{ \
  |  |  359|   160k|		VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(OBJECT); \
  |  |  ------------------
  |  |  |  |  441|   160k|	(G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  527|   160k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2310|   160k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  360|   160k|		GSList *p; \
  |  |  361|   160k|\
  |  |  362|  1.77M|		for (p = object_class->argument_table_traverse; p; p = p->next) { \
  |  |  ------------------
  |  |  |  Branch (362:51): [True: 1.60M, False: 160k]
  |  |  ------------------
  |  |  363|  1.60M|			VipsArgumentClass *ARG_CLASS = \
  |  |  364|  1.60M|				(VipsArgumentClass *) p->data; \
  |  |  365|  1.60M|			VipsArgument *argument = (VipsArgument *) argument_class; \
  |  |  366|  1.60M|			GParamSpec *PSPEC = argument->pspec; \
  |  |  367|  1.60M|			VipsArgumentInstance *ARG_INSTANCE G_GNUC_UNUSED = \
  |  |  368|  1.60M|				vips__argument_get_instance(argument_class, \
  |  |  369|  1.60M|					VIPS_OBJECT(OBJECT));
  |  |  ------------------
  |  |  |  |  433|  1.60M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  ------------------
  |  |  |  |  |  |  484|  1.60M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2305|  1.60M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  834|  1.60M|		pspec, argument_class, argument_instance)
  835|  1.60M|	{
  836|  1.60M|		if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED)) {
  ------------------
  |  Branch (836:7): [True: 382k, False: 1.22M]
  ------------------
  837|   461k|			VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap);
  ------------------
  |  |  399|   382k|	if ((ARG_CLASS->flags & VIPS_ARGUMENT_INPUT)) { \
  |  |  ------------------
  |  |  |  Branch (399:6): [True: 230k, False: 151k]
  |  |  ------------------
  |  |  400|   230k|		GValue value = G_VALUE_INIT; \
  |  |  ------------------
  |  |  |  |  191|   230k|#define G_VALUE_INIT  { 0, { { 0 } } }
  |  |  ------------------
  |  |  401|   230k|		gchar *error = NULL; \
  |  |  402|   230k|\
  |  |  403|   230k|		/* Input args are given inline, eg. ("factor", 12.0) \
  |  |  404|   230k|		 * and must be collected. \
  |  |  405|   230k|		 */ \
  |  |  406|   230k|		G_VALUE_COLLECT_INIT(&value, \
  |  |  ------------------
  |  |  |  |   88|   230k|#define G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error)		\
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   230k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   89|   230k|G_STMT_START {										\
  |  |  |  |   90|   230k|  GValue *g_vci_val = (value);								\
  |  |  |  |   91|   230k|  guint g_vci_flags = (flags);								\
  |  |  |  |   92|   230k|  GTypeValueTable *g_vci_vtab = g_type_value_table_peek (_value_type);			\
  |  |  |  |   93|   230k|  const gchar *g_vci_collect_format = g_vci_vtab->collect_format;					\
  |  |  |  |   94|   230k|  GTypeCValue g_vci_cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, };		\
  |  |  |  |   95|   230k|  guint g_vci_n_values = 0;									\
  |  |  |  |   96|   230k|                                                                                        \
  |  |  |  |   97|   230k|  g_vci_val->g_type = _value_type;		/* value_meminit() from gvalue.c */		\
  |  |  |  |   98|   461k|  while (*g_vci_collect_format)								\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (98:10): [True: 230k, False: 230k]
  |  |  |  |  ------------------
  |  |  |  |   99|   230k|    {											\
  |  |  |  |  100|   230k|      GTypeCValue *g_vci_cvalue = g_vci_cvalues + g_vci_n_values++;					\
  |  |  |  |  101|   230k|                                                                                        \
  |  |  |  |  102|   230k|      switch (*g_vci_collect_format++)							\
  |  |  |  |  103|   230k|	{										\
  |  |  |  |  104|  62.2k|	case G_VALUE_COLLECT_INT:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (104:2): [True: 62.2k, False: 168k]
  |  |  |  |  ------------------
  |  |  |  |  105|  62.2k|	  g_vci_cvalue->v_int = va_arg ((var_args), gint);					\
  |  |  |  |  106|  62.2k|	  break;									\
  |  |  |  |  107|      0|	case G_VALUE_COLLECT_LONG:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:2): [True: 0, False: 230k]
  |  |  |  |  ------------------
  |  |  |  |  108|      0|	  g_vci_cvalue->v_long = va_arg ((var_args), glong);					\
  |  |  |  |  109|      0|	  break;									\
  |  |  |  |  110|      0|	case G_VALUE_COLLECT_INT64:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:2): [True: 0, False: 230k]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|	  g_vci_cvalue->v_int64 = va_arg ((var_args), gint64);				\
  |  |  |  |  112|      0|	  break;									\
  |  |  |  |  113|      0|	case G_VALUE_COLLECT_DOUBLE:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (113:2): [True: 0, False: 230k]
  |  |  |  |  ------------------
  |  |  |  |  114|      0|	  g_vci_cvalue->v_double = va_arg ((var_args), gdouble);				\
  |  |  |  |  115|      0|	  break;									\
  |  |  |  |  116|   168k|	case G_VALUE_COLLECT_POINTER:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (116:2): [True: 168k, False: 62.2k]
  |  |  |  |  ------------------
  |  |  |  |  117|   168k|	  g_vci_cvalue->v_pointer = va_arg ((var_args), gpointer);				\
  |  |  |  |  118|   168k|	  break;									\
  |  |  |  |  119|      0|	default:									\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (119:2): [True: 0, False: 230k]
  |  |  |  |  ------------------
  |  |  |  |  120|      0|	  g_assert_not_reached ();							\
  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  121|   230k|	}										\
  |  |  |  |  122|   230k|    }											\
  |  |  |  |  123|   230k|  *(__error) = g_vci_vtab->collect_value (g_vci_val,						\
  |  |  |  |  124|   230k|				       g_vci_n_values,					\
  |  |  |  |  125|   230k|				       g_vci_cvalues,					\
  |  |  |  |  126|   230k|				       g_vci_flags);						\
  |  |  |  |  127|   230k|} G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   230k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  407|   230k|			G_PARAM_SPEC_VALUE_TYPE(PSPEC), AP, 0, &error); \
  |  |  408|   230k|\
  |  |  409|   230k|		/* Don't bother with the error message. \
  |  |  410|   230k|		 */ \
  |  |  411|   230k|		if (error) { \
  |  |  ------------------
  |  |  |  Branch (411:7): [True: 0, False: 230k]
  |  |  ------------------
  |  |  412|      0|			VIPS_DEBUG_MSG("VIPS_OBJECT_COLLECT_SET: err\n"); \
  |  |  ------------------
  |  |  |  |   47|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   48|      0|	{ \
  |  |  |  |   49|      0|		; \
  |  |  |  |   50|      0|	} \
  |  |  |  |   51|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  413|      0|			g_free(error); \
  |  |  414|      0|		}
  ------------------
  838|       |
  839|   461k|			VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap);
  ------------------
  |  |  417|   230k|	g_value_unset(&value); \
  |  |  418|   230k|	} \
  |  |  419|   382k|	else if ((ARG_CLASS->flags & VIPS_ARGUMENT_OUTPUT)) \
  |  |  ------------------
  |  |  |  Branch (419:11): [True: 151k, False: 0]
  |  |  ------------------
  |  |  420|   151k|	{ \
  |  |  421|   151k|		void **arg G_GNUC_UNUSED; \
  |  |  422|   151k|\
  |  |  423|   151k|		/* Output args are a pointer to where to send the \
  |  |  424|   151k|		 * result. \
  |  |  425|   151k|		 */ \
  |  |  426|   151k|		arg = va_arg(AP, void **);
  ------------------
  840|       |
  841|   303k|			if (!argument_instance->assigned)
  ------------------
  |  Branch (841:8): [True: 0, False: 151k]
  ------------------
  842|      0|				continue;
  843|       |
  844|       |#ifdef VIPS_DEBUG
  845|       |			printf("\twriting %s to %p\n",
  846|       |				g_param_spec_get_name(pspec), arg);
  847|       |#endif /*VIPS_DEBUG */
  848|       |
  849|       |			/* It'd be nice to be able to test for arg being a
  850|       |			 * valid gobject pointer, since passing in a valid
  851|       |			 * pointer (and having us destroy it) is a common
  852|       |			 * error and a cause of hard-to-find leaks.
  853|       |			 *
  854|       |			 * Unfortunately, G_IS_OBJECT() can't be given an
  855|       |			 * arbitrary pointer for testing -- you're very likely
  856|       |			 * to get coredumps.
  857|       |			 */
  858|       |
  859|   151k|			g_object_get(G_OBJECT(operation),
  ------------------
  |  |   51|   151k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   151k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   151k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  860|   151k|				g_param_spec_get_name(pspec), arg, NULL);
  861|       |
  862|       |			/* If the pspec is an object, that will up the ref
  863|       |			 * count. We want to hand over the ref, so we have to
  864|       |			 * knock it down again.
  865|       |			 */
  866|   151k|			if (G_IS_PARAM_SPEC_OBJECT(pspec)) {
  ------------------
  |  |  491|   151k|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|   151k|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|   151k|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|   151k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|   151k|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|   151k|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 151k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|   151k|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|   151k|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 151k, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 151k, False: 909]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|   151k|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|   151k|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|   151k|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|   151k|  else \
  |  |  |  |  |  | 2321|   151k|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|   151k|  __r; \
  |  |  |  |  |  | 2323|   151k|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 151k, False: 909]
  |  |  ------------------
  ------------------
  867|   151k|				GObject *object;
  868|       |
  869|   151k|				object = *((GObject **) arg);
  870|   151k|				g_object_unref(object);
  871|   151k|			}
  872|       |
  873|   151k|			VIPS_ARGUMENT_COLLECT_END
  ------------------
  |  |  429|   151k|	}
  ------------------
  874|   382k|		}
  875|  1.60M|	}
  876|  1.60M|	VIPS_ARGUMENT_FOR_ALL_END
  ------------------
  |  |  372|  1.60M|	} \
  |  |  373|   160k|	}
  ------------------
  877|       |
  878|   160k|	return 0;
  879|   160k|}
operation.c:vips_operation_get_valist_optional:
  883|   160k|{
  884|   160k|	char *name;
  885|       |
  886|   160k|	VIPS_DEBUG_MSG("vips_operation_get_valist_optional:\n");
  ------------------
  |  |   47|   160k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   160k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   160k|	{ \
  |  |   49|   160k|		; \
  |  |   50|   160k|	} \
  |  |   51|   160k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   160k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  887|       |
  888|   217k|	for (name = va_arg(ap, char *); name; name = va_arg(ap, char *)) {
  ------------------
  |  Branch (888:34): [True: 57.5k, False: 160k]
  ------------------
  889|  57.5k|		GParamSpec *pspec;
  890|  57.5k|		VipsArgumentClass *argument_class;
  891|  57.5k|		VipsArgumentInstance *argument_instance;
  892|       |
  893|  57.5k|		VIPS_DEBUG_MSG("\tname = '%s' (%p)\n", name, name);
  ------------------
  |  |   47|  57.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  57.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  57.5k|	{ \
  |  |   49|  57.5k|		; \
  |  |   50|  57.5k|	} \
  |  |   51|  57.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  57.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  894|       |
  895|  57.5k|		if (vips_object_get_argument(VIPS_OBJECT(operation), name,
  ------------------
  |  |  433|  57.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  57.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  57.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (895:7): [True: 0, False: 57.5k]
  ------------------
  896|  57.5k|				&pspec, &argument_class, &argument_instance))
  897|      0|			return -1;
  898|       |
  899|   115k|		VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap);
  ------------------
  |  |  399|  57.5k|	if ((ARG_CLASS->flags & VIPS_ARGUMENT_INPUT)) { \
  |  |  ------------------
  |  |  |  Branch (399:6): [True: 57.5k, False: 0]
  |  |  ------------------
  |  |  400|  57.5k|		GValue value = G_VALUE_INIT; \
  |  |  ------------------
  |  |  |  |  191|  57.5k|#define G_VALUE_INIT  { 0, { { 0 } } }
  |  |  ------------------
  |  |  401|  57.5k|		gchar *error = NULL; \
  |  |  402|  57.5k|\
  |  |  403|  57.5k|		/* Input args are given inline, eg. ("factor", 12.0) \
  |  |  404|  57.5k|		 * and must be collected. \
  |  |  405|  57.5k|		 */ \
  |  |  406|  57.5k|		G_VALUE_COLLECT_INIT(&value, \
  |  |  ------------------
  |  |  |  |   88|  57.5k|#define G_VALUE_COLLECT_INIT(value, _value_type, var_args, flags, __error)		\
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  57.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   89|  57.5k|G_STMT_START {										\
  |  |  |  |   90|  57.5k|  GValue *g_vci_val = (value);								\
  |  |  |  |   91|  57.5k|  guint g_vci_flags = (flags);								\
  |  |  |  |   92|  57.5k|  GTypeValueTable *g_vci_vtab = g_type_value_table_peek (_value_type);			\
  |  |  |  |   93|  57.5k|  const gchar *g_vci_collect_format = g_vci_vtab->collect_format;					\
  |  |  |  |   94|  57.5k|  GTypeCValue g_vci_cvalues[G_VALUE_COLLECT_FORMAT_MAX_LENGTH] = { { 0, }, };		\
  |  |  |  |   95|  57.5k|  guint g_vci_n_values = 0;									\
  |  |  |  |   96|  57.5k|                                                                                        \
  |  |  |  |   97|  57.5k|  g_vci_val->g_type = _value_type;		/* value_meminit() from gvalue.c */		\
  |  |  |  |   98|   115k|  while (*g_vci_collect_format)								\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (98:10): [True: 57.5k, False: 57.5k]
  |  |  |  |  ------------------
  |  |  |  |   99|  57.5k|    {											\
  |  |  |  |  100|  57.5k|      GTypeCValue *g_vci_cvalue = g_vci_cvalues + g_vci_n_values++;					\
  |  |  |  |  101|  57.5k|                                                                                        \
  |  |  |  |  102|  57.5k|      switch (*g_vci_collect_format++)							\
  |  |  |  |  103|  57.5k|	{										\
  |  |  |  |  104|  56.6k|	case G_VALUE_COLLECT_INT:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (104:2): [True: 56.6k, False: 909]
  |  |  |  |  ------------------
  |  |  |  |  105|  56.6k|	  g_vci_cvalue->v_int = va_arg ((var_args), gint);					\
  |  |  |  |  106|  56.6k|	  break;									\
  |  |  |  |  107|      0|	case G_VALUE_COLLECT_LONG:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (107:2): [True: 0, False: 57.5k]
  |  |  |  |  ------------------
  |  |  |  |  108|      0|	  g_vci_cvalue->v_long = va_arg ((var_args), glong);					\
  |  |  |  |  109|      0|	  break;									\
  |  |  |  |  110|      0|	case G_VALUE_COLLECT_INT64:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (110:2): [True: 0, False: 57.5k]
  |  |  |  |  ------------------
  |  |  |  |  111|      0|	  g_vci_cvalue->v_int64 = va_arg ((var_args), gint64);				\
  |  |  |  |  112|      0|	  break;									\
  |  |  |  |  113|      0|	case G_VALUE_COLLECT_DOUBLE:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (113:2): [True: 0, False: 57.5k]
  |  |  |  |  ------------------
  |  |  |  |  114|      0|	  g_vci_cvalue->v_double = va_arg ((var_args), gdouble);				\
  |  |  |  |  115|      0|	  break;									\
  |  |  |  |  116|    909|	case G_VALUE_COLLECT_POINTER:							\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (116:2): [True: 909, False: 56.6k]
  |  |  |  |  ------------------
  |  |  |  |  117|    909|	  g_vci_cvalue->v_pointer = va_arg ((var_args), gpointer);				\
  |  |  |  |  118|    909|	  break;									\
  |  |  |  |  119|      0|	default:									\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (119:2): [True: 0, False: 57.5k]
  |  |  |  |  ------------------
  |  |  |  |  120|      0|	  g_assert_not_reached ();							\
  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  121|  57.5k|	}										\
  |  |  |  |  122|  57.5k|    }											\
  |  |  |  |  123|  57.5k|  *(__error) = g_vci_vtab->collect_value (g_vci_val,						\
  |  |  |  |  124|  57.5k|				       g_vci_n_values,					\
  |  |  |  |  125|  57.5k|				       g_vci_cvalues,					\
  |  |  |  |  126|  57.5k|				       g_vci_flags);						\
  |  |  |  |  127|  57.5k|} G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  57.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  407|  57.5k|			G_PARAM_SPEC_VALUE_TYPE(PSPEC), AP, 0, &error); \
  |  |  408|  57.5k|\
  |  |  409|  57.5k|		/* Don't bother with the error message. \
  |  |  410|  57.5k|		 */ \
  |  |  411|  57.5k|		if (error) { \
  |  |  ------------------
  |  |  |  Branch (411:7): [True: 0, False: 57.5k]
  |  |  ------------------
  |  |  412|      0|			VIPS_DEBUG_MSG("VIPS_OBJECT_COLLECT_SET: err\n"); \
  |  |  ------------------
  |  |  |  |   47|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   48|      0|	{ \
  |  |  |  |   49|      0|		; \
  |  |  |  |   50|      0|	} \
  |  |  |  |   51|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  413|      0|			g_free(error); \
  |  |  414|      0|		}
  ------------------
  900|       |
  901|       |		/* We must collect input args as we walk the name/value list,
  902|       |		 * but we don't do anything with them.
  903|       |		 */
  904|       |
  905|   115k|		VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap);
  ------------------
  |  |  417|  57.5k|	g_value_unset(&value); \
  |  |  418|  57.5k|	} \
  |  |  419|  57.5k|	else if ((ARG_CLASS->flags & VIPS_ARGUMENT_OUTPUT)) \
  |  |  ------------------
  |  |  |  Branch (419:11): [True: 0, False: 0]
  |  |  ------------------
  |  |  420|      0|	{ \
  |  |  421|      0|		void **arg G_GNUC_UNUSED; \
  |  |  422|      0|\
  |  |  423|      0|		/* Output args are a pointer to where to send the \
  |  |  424|      0|		 * result. \
  |  |  425|      0|		 */ \
  |  |  426|      0|		arg = va_arg(AP, void **);
  ------------------
  906|       |
  907|       |		/* Here's an output arg.
  908|       |		 */
  909|       |
  910|       |#ifdef VIPS_DEBUG
  911|       |		printf("\twriting %s to %p\n",
  912|       |			g_param_spec_get_name(pspec), arg);
  913|       |#endif /*VIPS_DEBUG */
  914|       |
  915|       |		/* If the dest pointer is NULL, skip the read.
  916|       |		 */
  917|      0|		if (arg) {
  ------------------
  |  Branch (917:7): [True: 0, False: 0]
  ------------------
  918|      0|			g_object_get(G_OBJECT(operation),
  ------------------
  |  |   51|      0|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  919|      0|				g_param_spec_get_name(pspec), arg,
  920|      0|				NULL);
  921|       |
  922|       |			/* If the pspec is an object, that will up
  923|       |			 * the ref count. We want to hand over the
  924|       |			 * ref, so we have to knock it down again.
  925|       |			 */
  926|      0|			if (G_IS_PARAM_SPEC_OBJECT(pspec)) {
  ------------------
  |  |  491|      0|#define G_IS_PARAM_SPEC_OBJECT(pspec)      (G_TYPE_CHECK_INSTANCE_TYPE ((pspec), G_TYPE_PARAM_OBJECT))
  |  |  ------------------
  |  |  |  |  497|      0|#define G_TYPE_CHECK_INSTANCE_TYPE(instance, g_type)            (_G_TYPE_CIT ((instance), (g_type)))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2314|      0|#  define _G_TYPE_CIT(ip, gt)             (G_GNUC_EXTENSION ({ \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   54|      0|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2315|      0|  GTypeInstance *__inst = (GTypeInstance*) ip; GType __t = gt; gboolean __r; \
  |  |  |  |  |  | 2316|      0|  if (!__inst) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2316:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2317|      0|    __r = FALSE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2318|      0|  else if (__inst->g_class && __inst->g_class->g_type == __t) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (2318:12): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (2318:31): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2319|      0|    __r = TRUE; \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 2320|      0|  else \
  |  |  |  |  |  | 2321|      0|    __r = g_type_check_instance_is_a (__inst, __t); \
  |  |  |  |  |  | 2322|      0|  __r; \
  |  |  |  |  |  | 2323|      0|}))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (491:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  927|      0|				GObject *object;
  928|       |
  929|      0|				object = *((GObject **) arg);
  930|      0|				g_object_unref(object);
  931|      0|			}
  932|      0|		}
  933|       |
  934|      0|		VIPS_ARGUMENT_COLLECT_END
  ------------------
  |  |  429|      0|	}
  ------------------
  935|  57.5k|	}
  936|       |
  937|   160k|	return 0;
  938|   160k|}
operation.c:vips_call_by_name:
  995|   180k|{
  996|   180k|	VipsOperation *operation;
  997|   180k|	int result;
  998|       |
  999|   180k|	VIPS_DEBUG_MSG("vips_call_by_name: starting for %s ...\n",
  ------------------
  |  |   47|   180k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   180k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   180k|	{ \
  |  |   49|   180k|		; \
  |  |   50|   180k|	} \
  |  |   51|   180k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   180k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1000|   180k|		operation_name);
 1001|       |
 1002|   180k|	if (!(operation = vips_operation_new(operation_name)))
  ------------------
  |  Branch (1002:6): [True: 0, False: 180k]
  ------------------
 1003|      0|		return -1;
 1004|       |
 1005|       |	/* Set str options before vargs options, so the user can't override
 1006|       |	 * things we set deliberately.
 1007|       |	 */
 1008|   180k|	if (option_string &&
  ------------------
  |  Branch (1008:6): [True: 51.6k, False: 129k]
  ------------------
 1009|   180k|		vips_object_set_from_string(VIPS_OBJECT(operation),
  ------------------
  |  |  433|  51.6k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  51.6k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  51.6k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1009:3): [True: 0, False: 51.6k]
  ------------------
 1010|  51.6k|			option_string)) {
 1011|      0|		vips_object_unref_outputs(VIPS_OBJECT(operation));
  ------------------
  |  |  433|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1012|      0|		g_object_unref(operation);
 1013|       |
 1014|      0|		return -1;
 1015|      0|	}
 1016|       |
 1017|   180k|	result = vips_call_required_optional(&operation, required, optional);
 1018|       |
 1019|       |	/* Build failed: junk args and back out.
 1020|       |	 */
 1021|   180k|	if (result) {
  ------------------
  |  Branch (1021:6): [True: 20.4k, False: 160k]
  ------------------
 1022|  20.4k|		vips_object_unref_outputs(VIPS_OBJECT(operation));
  ------------------
  |  |  433|  20.4k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  20.4k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  20.4k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1023|  20.4k|		g_object_unref(operation);
 1024|       |
 1025|  20.4k|		return -1;
 1026|  20.4k|	}
 1027|       |
 1028|       |	/* The operation we have built should now have been reffed by one of
 1029|       |	 * its arguments or have finished its work. Either way, we can unref.
 1030|       |	 */
 1031|   160k|	g_object_unref(operation);
 1032|       |
 1033|   160k|	return result;
 1034|   180k|}

vips_rect_isempty:
   97|  1.36M|{
   98|  1.36M|	return r->width <= 0 || r->height <= 0;
  ------------------
  |  Branch (98:9): [True: 0, False: 1.36M]
  |  Branch (98:26): [True: 0, False: 1.36M]
  ------------------
   99|  1.36M|}
vips_rect_includesrect:
  112|   557k|{
  113|   557k|	return r1->left <= r2->left &&
  ------------------
  |  Branch (113:9): [True: 557k, False: 0]
  ------------------
  114|   557k|		r1->top <= r2->top &&
  ------------------
  |  Branch (114:3): [True: 557k, False: 0]
  ------------------
  115|   557k|		r1->left + r1->width >= r2->left + r2->width &&
  ------------------
  |  Branch (115:3): [True: 557k, False: 0]
  ------------------
  116|   557k|		r1->top + r1->height >= r2->top + r2->height;
  ------------------
  |  Branch (116:3): [True: 520k, False: 36.4k]
  ------------------
  117|   557k|}
vips_rect_intersectrect:
  180|  2.46M|{
  181|  2.46M|	int left = VIPS_MAX(r1->left, r2->left);
  ------------------
  |  |   54|  2.46M|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 57.0k, False: 2.41M]
  |  |  ------------------
  ------------------
  182|  2.46M|	int top = VIPS_MAX(r1->top, r2->top);
  ------------------
  |  |   54|  2.46M|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 1.02M, False: 1.43M]
  |  |  ------------------
  ------------------
  183|  2.46M|	int right = VIPS_MIN(VIPS_RECT_RIGHT(r1), VIPS_RECT_RIGHT(r2));
  ------------------
  |  |   55|  2.46M|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 61.8k, False: 2.40M]
  |  |  ------------------
  ------------------
  184|  2.46M|	int bottom = VIPS_MIN(VIPS_RECT_BOTTOM(r1), VIPS_RECT_BOTTOM(r2));
  ------------------
  |  |   55|  2.46M|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 1.27M, False: 1.18M]
  |  |  ------------------
  ------------------
  185|  2.46M|	int width = VIPS_MAX(0, right - left);
  ------------------
  |  |   54|  2.46M|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 2.46M]
  |  |  ------------------
  ------------------
  186|  2.46M|	int height = VIPS_MAX(0, bottom - top);
  ------------------
  |  |   54|  2.46M|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 2.46M]
  |  |  ------------------
  ------------------
  187|       |
  188|  2.46M|	out->left = left;
  189|  2.46M|	out->top = top;
  190|  2.46M|	out->width = width;
  191|  2.46M|	out->height = height;
  192|  2.46M|}

vips__region_start:
  228|   428k|{
  229|   428k|	VipsImage *image = region->im;
  230|       |
  231|   428k|	if (!region->seq && image->start_fn) {
  ------------------
  |  Branch (231:6): [True: 231k, False: 197k]
  |  Branch (231:22): [True: 171k, False: 60.3k]
  ------------------
  232|   171k|		VIPS_GATE_START("vips__region_start: wait");
  ------------------
  |  |   41|   171k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   171k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   171k|	{ \
  |  |   43|   171k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 171k]
  |  |  ------------------
  |  |   44|   171k|			vips__thread_gate_start(NAME); \
  |  |   45|   171k|	} \
  |  |   46|   171k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   171k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|       |
  234|   171k|		g_mutex_lock(image->sslock);
  235|       |
  236|   171k|		VIPS_GATE_STOP("vips__region_start: wait");
  ------------------
  |  |   49|   171k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   171k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|   171k|	{ \
  |  |   51|   171k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 171k]
  |  |  ------------------
  |  |   52|   171k|			vips__thread_gate_stop(NAME); \
  |  |   53|   171k|	} \
  |  |   54|   171k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   171k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  237|       |
  238|   171k|		region->seq = image->start_fn(image,
  239|   171k|			image->client1, image->client2);
  240|       |
  241|   171k|		g_mutex_unlock(image->sslock);
  242|       |
  243|   171k|		if (!region->seq) {
  ------------------
  |  Branch (243:7): [True: 13.1k, False: 157k]
  ------------------
  244|       |#ifdef DEBUG
  245|       |			printf("vips__region_start: start function failed for image %s",
  246|       |				image->filename);
  247|       |#endif /*DEBUG*/
  248|       |
  249|  13.1k|			return -1;
  250|  13.1k|		}
  251|   171k|	}
  252|       |
  253|   415k|	return 0;
  254|   428k|}
vips__region_stop:
  260|   444k|{
  261|   444k|	VipsImage *image = region->im;
  262|       |
  263|   444k|	if (region->seq && image->stop_fn) {
  ------------------
  |  Branch (263:6): [True: 157k, False: 286k]
  |  Branch (263:21): [True: 157k, False: 0]
  ------------------
  264|   157k|		int result;
  265|       |
  266|   157k|		VIPS_GATE_START("vips__region_stop: wait");
  ------------------
  |  |   41|   157k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   157k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   157k|	{ \
  |  |   43|   157k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 157k]
  |  |  ------------------
  |  |   44|   157k|			vips__thread_gate_start(NAME); \
  |  |   45|   157k|	} \
  |  |   46|   157k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   157k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|       |
  268|   157k|		g_mutex_lock(image->sslock);
  269|       |
  270|   157k|		VIPS_GATE_STOP("vips__region_stop: wait");
  ------------------
  |  |   49|   157k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   157k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|   157k|	{ \
  |  |   51|   157k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 157k]
  |  |  ------------------
  |  |   52|   157k|			vips__thread_gate_stop(NAME); \
  |  |   53|   157k|	} \
  |  |   54|   157k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   157k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  271|       |
  272|   157k|		result = image->stop_fn(region->seq,
  273|   157k|			image->client1, image->client2);
  274|       |
  275|   157k|		g_mutex_unlock(image->sslock);
  276|       |
  277|       |		/* stop function can return an error, but we have nothing we
  278|       |		 * can really do with it, sadly.
  279|       |		 */
  280|   157k|		if (result)
  ------------------
  |  Branch (280:7): [True: 0, False: 157k]
  ------------------
  281|      0|			g_warning("stop callback failed for image %s",
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  282|   157k|				image->filename);
  283|       |
  284|   157k|		region->seq = NULL;
  285|   157k|	}
  286|   444k|}
vips__region_take_ownership:
  379|   466k|{
  380|       |	/* Lock so that there's a memory barrier with the thread doing the
  381|       |	 * vips__region_no_ownership() before us.
  382|       |	 */
  383|   466k|	VIPS_GATE_START("vips__region_take_ownership: wait");
  ------------------
  |  |   41|   466k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   466k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   466k|	{ \
  |  |   43|   466k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 466k]
  |  |  ------------------
  |  |   44|   466k|			vips__thread_gate_start(NAME); \
  |  |   45|   466k|	} \
  |  |   46|   466k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   466k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  384|       |
  385|   466k|	g_mutex_lock(region->im->sslock);
  386|       |
  387|   466k|	VIPS_GATE_STOP("vips__region_take_ownership: wait");
  ------------------
  |  |   49|   466k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   466k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|   466k|	{ \
  |  |   51|   466k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 466k]
  |  |  ------------------
  |  |   52|   466k|			vips__thread_gate_stop(NAME); \
  |  |   53|   466k|	} \
  |  |   54|   466k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   466k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  388|       |
  389|   466k|	if (region->thread != g_thread_self()) {
  ------------------
  |  Branch (389:6): [True: 466k, False: 0]
  ------------------
  390|   466k|		g_assert(region->thread == NULL);
  ------------------
  |  |  166|   466k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   466k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   466k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  391|       |
  392|       |		/* We don't want to move shared buffers: the other region
  393|       |		 * using this buffer will still be on the other thread.
  394|       |		 * Not sure if this will ever happen: if it does, we'll
  395|       |		 * need to dup the buffer.
  396|       |		 */
  397|   466k|		g_assert(!region->buffer ||
  ------------------
  |  |  166|   466k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   466k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   466k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  398|   466k|			region->buffer->ref_count == 1);
  399|       |
  400|   466k|		region->thread = g_thread_self();
  401|   466k|	}
  402|       |
  403|   466k|	g_mutex_unlock(region->im->sslock);
  404|   466k|}
vips__region_check_ownership:
  408|  1.44M|{
  409|  1.44M|	if (region->thread) {
  ------------------
  |  Branch (409:6): [True: 1.25M, False: 186k]
  ------------------
  410|  1.25M|		g_assert(region->thread == g_thread_self());
  ------------------
  |  |  166|  1.25M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.25M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.25M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  411|  1.25M|		if (region->buffer && region->buffer->cache)
  ------------------
  |  Branch (411:7): [True: 249k, False: 1.00M]
  |  Branch (411:25): [True: 72.8k, False: 176k]
  ------------------
  412|  1.25M|			g_assert(region->thread ==
  ------------------
  |  |  166|  72.8k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  72.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  72.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|  1.25M|				region->buffer->cache->thread);
  414|  1.25M|	}
  415|  1.44M|}
vips__region_no_ownership:
  422|   251k|{
  423|   251k|	VIPS_GATE_START("vips__region_no_ownership: wait");
  ------------------
  |  |   41|   251k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   251k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   251k|	{ \
  |  |   43|   251k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 251k]
  |  |  ------------------
  |  |   44|   251k|			vips__thread_gate_start(NAME); \
  |  |   45|   251k|	} \
  |  |   46|   251k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   251k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  424|       |
  425|   251k|	g_mutex_lock(region->im->sslock);
  426|       |
  427|   251k|	VIPS_GATE_STOP("vips__region_no_ownership: wait");
  ------------------
  |  |   49|   251k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   251k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|   251k|	{ \
  |  |   51|   251k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 251k]
  |  |  ------------------
  |  |   52|   251k|			vips__thread_gate_stop(NAME); \
  |  |   53|   251k|	} \
  |  |   54|   251k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   251k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  428|       |
  429|   251k|	vips__region_check_ownership(region);
  430|       |
  431|   251k|	region->thread = NULL;
  432|   251k|	if (region->buffer)
  ------------------
  |  Branch (432:6): [True: 21.6k, False: 229k]
  ------------------
  433|  21.6k|		vips_buffer_undone(region->buffer);
  434|       |
  435|   251k|	g_mutex_unlock(region->im->sslock);
  436|   251k|}
vips_region_new:
  505|   444k|{
  506|   444k|	VipsRegion *region;
  507|       |
  508|       |	/* Ref quickly, we want to make sure we keep the image around.
  509|       |	 * We can't use the property system, we need to be very threaded.
  510|       |	 */
  511|   444k|	g_object_ref(image);
  512|   444k|	g_assert(G_OBJECT(image)->ref_count > 1);
  ------------------
  |  |  166|   444k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   444k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   444k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  513|   444k|	g_assert(vips_object_sanity(VIPS_OBJECT(image)));
  ------------------
  |  |  166|   444k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   444k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   444k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  514|       |
  515|   444k|	region = VIPS_REGION(g_object_new(VIPS_TYPE_REGION, NULL));
  ------------------
  |  |   52|   444k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   444k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   444k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|   444k|		VIPS_TYPE_REGION, VipsRegion))
  ------------------
  516|   444k|	region->im = image;
  517|       |
  518|   444k|	if (vips_object_build(VIPS_OBJECT(region))) {
  ------------------
  |  |  433|   444k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   444k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   444k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (518:6): [True: 0, False: 444k]
  ------------------
  519|      0|		VIPS_UNREF(region);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  520|      0|		return NULL;
  521|      0|	}
  522|       |
  523|   444k|	g_assert(vips_object_sanity(VIPS_OBJECT(region)));
  ------------------
  |  |  166|   444k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   444k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   444k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  524|       |
  525|   444k|	return region;
  526|   444k|}
vips_region_buffer:
  545|   482k|{
  546|   482k|	VipsImage *im = reg->im;
  547|       |
  548|   482k|	VipsRect image;
  549|   482k|	VipsRect clipped;
  550|       |
  551|   482k|	vips__region_check_ownership(reg);
  552|       |
  553|       |	/* Clip against image.
  554|       |	 */
  555|   482k|	image.top = 0;
  556|   482k|	image.left = 0;
  557|   482k|	image.width = im->Xsize;
  558|   482k|	image.height = im->Ysize;
  559|   482k|	vips_rect_intersectrect(r, &image, &clipped);
  560|       |
  561|       |	/* Test for empty.
  562|       |	 */
  563|   482k|	if (vips_rect_isempty(&clipped)) {
  ------------------
  |  Branch (563:6): [True: 0, False: 482k]
  ------------------
  564|      0|		vips_error("VipsRegion",
  565|      0|			"%s", _("valid clipped to nothing"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  566|      0|		return -1;
  567|      0|	}
  568|       |
  569|   482k|	VIPS_FREEF(vips_window_unref, reg->window);
  ------------------
  |  |   41|   482k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   482k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   482k|	{ \
  |  |   43|   482k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 482k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   482k|	} \
  |  |   48|   482k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   482k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  570|       |
  571|       |	/* Have we been asked to drop caches? We want to throw everything
  572|       |	 * away.
  573|       |	 *
  574|       |	 * If not, try to reuse the current buffer.
  575|       |	 */
  576|   482k|	if (reg->invalid) {
  ------------------
  |  Branch (576:6): [True: 0, False: 482k]
  ------------------
  577|      0|		VIPS_FREEF(vips_buffer_unref, reg->buffer);
  ------------------
  |  |   41|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      0|	{ \
  |  |   43|      0|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|      0|	} \
  |  |   48|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  578|      0|		reg->invalid = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  579|       |
  580|      0|		if (!(reg->buffer = vips_buffer_new(im, &clipped)))
  ------------------
  |  Branch (580:7): [True: 0, False: 0]
  ------------------
  581|      0|			return -1;
  582|      0|	}
  583|   482k|	else {
  584|       |		/* We combine buffer unref and new buffer ref in one call
  585|       |		 * to reduce malloc/free cycling.
  586|       |		 */
  587|   482k|		if (!(reg->buffer =
  ------------------
  |  Branch (587:7): [True: 0, False: 482k]
  ------------------
  588|   482k|					vips_buffer_unref_ref(reg->buffer, im, &clipped)))
  589|      0|			return -1;
  590|   482k|	}
  591|       |
  592|       |	/* Init new stuff.
  593|       |	 */
  594|   482k|	reg->valid = reg->buffer->area;
  595|   482k|	reg->bpl = VIPS_IMAGE_SIZEOF_PEL(im) * reg->buffer->area.width;
  ------------------
  |  |  384|   482k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|   482k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  596|   482k|	reg->type = VIPS_REGION_BUFFER;
  597|   482k|	reg->data = reg->buffer->buf;
  598|       |
  599|   482k|	return 0;
  600|   482k|}
vips_region_image:
  615|  45.2k|{
  616|  45.2k|	VipsImage *image = reg->im;
  617|       |
  618|  45.2k|	VipsRect all;
  619|  45.2k|	VipsRect clipped;
  620|       |
  621|       |	/* Sanity check.
  622|       |	 */
  623|  45.2k|	vips__region_check_ownership(reg);
  624|       |
  625|       |	/* Clip against image.
  626|       |	 */
  627|  45.2k|	all.top = 0;
  628|  45.2k|	all.left = 0;
  629|  45.2k|	all.width = image->Xsize;
  630|  45.2k|	all.height = image->Ysize;
  631|  45.2k|	vips_rect_intersectrect(r, &all, &clipped);
  632|       |
  633|  45.2k|	if (vips_rect_isempty(&clipped)) {
  ------------------
  |  Branch (633:6): [True: 0, False: 45.2k]
  ------------------
  634|      0|		vips_error("VipsRegion",
  635|      0|			"%s", _("valid clipped to nothing"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  636|      0|		return -1;
  637|      0|	}
  638|       |
  639|  45.2k|	reg->invalid = FALSE;
  ------------------
  |  |  794|  45.2k|#define	FALSE	(0)
  ------------------
  640|  45.2k|	VIPS_FREEF(vips_buffer_unref, reg->buffer);
  ------------------
  |  |   41|  45.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  45.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  45.2k|	{ \
  |  |   43|  45.2k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 45.2k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|  45.2k|	} \
  |  |   48|  45.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  45.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  641|       |
  642|  45.2k|	if (image->data) {
  ------------------
  |  Branch (642:6): [True: 45.2k, False: 0]
  ------------------
  643|       |		/* We have the whole image available ... easy!
  644|       |		 */
  645|  45.2k|		VIPS_FREEF(vips_window_unref, reg->window);
  ------------------
  |  |   41|  45.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  45.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  45.2k|	{ \
  |  |   43|  45.2k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 45.2k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|  45.2k|	} \
  |  |   48|  45.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  45.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  646|       |
  647|       |		/* We can't just set valid = whole image, since this may be an
  648|       |		 * incompletely calculated memory buffer. Just set valid to r.
  649|       |		 */
  650|  45.2k|		reg->valid = clipped;
  651|  45.2k|		reg->bpl = VIPS_IMAGE_SIZEOF_LINE(image);
  ------------------
  |  |  386|  45.2k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|  45.2k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  45.2k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  652|  45.2k|		reg->data = VIPS_IMAGE_ADDR(image, clipped.left, clipped.top);
  ------------------
  |  |  418|  45.2k|	((I)->data + \
  |  |  419|  45.2k|		(Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \
  |  |  ------------------
  |  |  |  |  386|  45.2k|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|  45.2k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|  45.2k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  420|  45.2k|		(X) *VIPS_IMAGE_SIZEOF_PEL(I))
  |  |  ------------------
  |  |  |  |  384|  45.2k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|  45.2k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  653|  45.2k|		reg->type = VIPS_REGION_OTHER_IMAGE;
  654|  45.2k|	}
  655|      0|	else if (image->dtype == VIPS_IMAGE_OPENIN) {
  ------------------
  |  Branch (655:11): [True: 0, False: 0]
  ------------------
  656|       |		/* No complete image data ... but we can use a rolling window.
  657|       |		 */
  658|      0|		reg->type = VIPS_REGION_WINDOW;
  659|      0|		if (!(reg->window = vips_window_take(reg->window, image,
  ------------------
  |  Branch (659:7): [True: 0, False: 0]
  ------------------
  660|      0|				  clipped.top, clipped.height)))
  661|      0|			return -1;
  662|       |
  663|       |		/* Note the area the window actually represents.
  664|       |		 */
  665|      0|		reg->valid.left = 0;
  666|      0|		reg->valid.top = reg->window->top;
  667|      0|		reg->valid.width = image->Xsize;
  668|      0|		reg->valid.height = reg->window->height;
  669|      0|		reg->bpl = VIPS_IMAGE_SIZEOF_LINE(image);
  ------------------
  |  |  386|      0|	(VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize)
  |  |  ------------------
  |  |  |  |  384|      0|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  ------------------
  |  |  |  |  |  |  382|      0|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  670|      0|		reg->data = reg->window->data;
  671|      0|	}
  672|      0|	else {
  673|      0|		VIPS_FREEF(vips_window_unref, reg->window);
  ------------------
  |  |   41|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      0|	{ \
  |  |   43|      0|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|      0|	} \
  |  |   48|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  674|       |
  675|      0|		vips_error("VipsRegion", "%s", _("bad image type"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  676|      0|		return -1;
  677|      0|	}
  678|       |
  679|  45.2k|	return 0;
  680|  45.2k|}
vips_region_region:
  708|   364k|{
  709|   364k|	VipsRect image;
  710|   364k|	VipsRect wanted;
  711|   364k|	VipsRect clipped;
  712|   364k|	VipsRect clipped2;
  713|   364k|	VipsRect final;
  714|       |
  715|       |	/* Sanity check.
  716|       |	 */
  717|   364k|	if (!dest->data) {
  ------------------
  |  Branch (717:6): [True: 0, False: 364k]
  ------------------
  718|      0|		vips_error("VipsRegion",
  719|      0|			"%s", _("no pixel data on attached image"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  720|      0|		return -1;
  721|      0|	}
  722|   364k|	if (VIPS_IMAGE_SIZEOF_PEL(dest->im) !=
  ------------------
  |  |  384|   364k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|   364k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  |  Branch (722:6): [True: 0, False: 364k]
  ------------------
  723|   364k|		VIPS_IMAGE_SIZEOF_PEL(reg->im)) {
  ------------------
  |  |  384|   364k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|   364k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  724|      0|		vips_error("VipsRegion",
  725|      0|			"%s", _("images do not match in pixel size"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  726|      0|		return -1;
  727|      0|	}
  728|   364k|	vips__region_check_ownership(reg);
  729|       |
  730|       |	/* We can't test
  731|       |
  732|       |		g_assert(dest->thread == g_thread_self());
  733|       |
  734|       |	 * since we can have several threads writing to the same region in
  735|       |	 * threadgroup.
  736|       |	 */
  737|       |
  738|       |	/* Clip r against size of the image.
  739|       |	 */
  740|   364k|	image.top = 0;
  741|   364k|	image.left = 0;
  742|   364k|	image.width = reg->im->Xsize;
  743|   364k|	image.height = reg->im->Ysize;
  744|   364k|	vips_rect_intersectrect(r, &image, &clipped);
  745|       |
  746|       |	/* Translate to dest's coordinate space and clip against the available
  747|       |	 * pixels.
  748|       |	 */
  749|   364k|	wanted.left = x + (clipped.left - r->left);
  750|   364k|	wanted.top = y + (clipped.top - r->top);
  751|   364k|	wanted.width = clipped.width;
  752|   364k|	wanted.height = clipped.height;
  753|       |
  754|       |	/* Test that dest->valid is large enough.
  755|       |	 */
  756|   364k|	if (!vips_rect_includesrect(&dest->valid, &wanted)) {
  ------------------
  |  Branch (756:6): [True: 0, False: 364k]
  ------------------
  757|      0|		vips_error("VipsRegion",
  758|      0|			"%s", _("dest too small"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  759|      0|		return -1;
  760|      0|	}
  761|       |
  762|       |	/* Clip against the available pixels.
  763|       |	 */
  764|   364k|	vips_rect_intersectrect(&wanted, &dest->valid, &clipped2);
  765|       |
  766|       |	/* Translate back to reg's coordinate space and set as valid.
  767|       |	 */
  768|   364k|	final.left = r->left + (clipped2.left - wanted.left);
  769|   364k|	final.top = r->top + (clipped2.top - wanted.top);
  770|   364k|	final.width = clipped2.width;
  771|   364k|	final.height = clipped2.height;
  772|       |
  773|       |	/* Test for empty.
  774|       |	 */
  775|   364k|	if (vips_rect_isempty(&final)) {
  ------------------
  |  Branch (775:6): [True: 0, False: 364k]
  ------------------
  776|      0|		vips_error("VipsRegion",
  777|      0|			"%s", _("valid clipped to nothing"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  778|      0|		return -1;
  779|      0|	}
  780|       |
  781|       |	/* Init new stuff.
  782|       |	 */
  783|   364k|	VIPS_FREEF(vips_buffer_unref, reg->buffer);
  ------------------
  |  |   41|   364k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   364k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   364k|	{ \
  |  |   43|   364k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 154k, False: 209k]
  |  |  ------------------
  |  |   44|   154k|			(void) F((S)); \
  |  |   45|   154k|			(S) = 0; \
  |  |   46|   154k|		} \
  |  |   47|   364k|	} \
  |  |   48|   364k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   364k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  784|   364k|	VIPS_FREEF(vips_window_unref, reg->window);
  ------------------
  |  |   41|   364k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   364k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   364k|	{ \
  |  |   43|   364k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 364k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   364k|	} \
  |  |   48|   364k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   364k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  785|   364k|	reg->invalid = FALSE;
  ------------------
  |  |  794|   364k|#define	FALSE	(0)
  ------------------
  786|   364k|	reg->valid = final;
  787|   364k|	reg->bpl = dest->bpl;
  788|   364k|	reg->data = VIPS_REGION_ADDR(dest, clipped2.left, clipped2.top);
  ------------------
  |  |  227|   364k|	((R)->data + \
  |  |  228|   364k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   364k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   364k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   364k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   364k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   364k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  789|   364k|	reg->type = VIPS_REGION_OTHER_REGION;
  790|       |
  791|   364k|	return 0;
  792|   364k|}
vips_region_fill:
  860|   274k|{
  861|   274k|	g_assert(reg->im->dtype == VIPS_IMAGE_PARTIAL);
  ------------------
  |  |  166|   274k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   274k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   274k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  862|   274k|	g_assert(reg->im->generate_fn);
  ------------------
  |  |  166|   274k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   274k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   274k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  863|       |
  864|       |	/* You'd think we could check reg and see if it already has some of
  865|       |	 * the pixels we need. If it does, we could copy them and only
  866|       |	 * generate the new ones.
  867|       |	 *
  868|       |	 * However, we usually have neighbouring regions on different threads,
  869|       |	 * so from the point of view of this thread, we will get no overlaps
  870|       |	 * on successive prepare requests.
  871|       |	 */
  872|       |
  873|       |	/* Should have local memory.
  874|       |	 */
  875|   274k|	if (vips_region_buffer(reg, r))
  ------------------
  |  Branch (875:6): [True: 0, False: 274k]
  ------------------
  876|      0|		return -1;
  877|       |
  878|       |	/* Evaluate into out_region, if we've not got calculated pixels.
  879|       |	 */
  880|   274k|	if (!reg->buffer->done) {
  ------------------
  |  Branch (880:6): [True: 272k, False: 2.37k]
  ------------------
  881|   272k|		if (fn(reg, a))
  ------------------
  |  Branch (881:7): [True: 65.9k, False: 206k]
  ------------------
  882|  65.9k|			return -1;
  883|       |
  884|       |		/* Publish our results.
  885|       |		 */
  886|   206k|		if (reg->buffer)
  ------------------
  |  Branch (886:7): [True: 51.3k, False: 154k]
  ------------------
  887|  51.3k|			vips_buffer_done(reg->buffer);
  888|   206k|	}
  889|       |
  890|   208k|	return 0;
  891|   274k|}
vips_region_paint:
  923|   118k|{
  924|   118k|	VipsRect clipped;
  925|       |
  926|   118k|	vips_rect_intersectrect(r, &reg->valid, &clipped);
  927|   118k|	if (!vips_rect_isempty(&clipped)) {
  ------------------
  |  Branch (927:6): [True: 118k, False: 0]
  ------------------
  928|   118k|		VipsPel *q = VIPS_REGION_ADDR(reg, clipped.left, clipped.top);
  ------------------
  |  |  227|   118k|	((R)->data + \
  |  |  228|   118k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   118k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   118k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   118k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   118k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   118k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  929|   118k|		size_t ls = VIPS_REGION_LSKIP(reg);
  ------------------
  |  |  195|   118k|	((size_t) ((R)->bpl))
  ------------------
  930|   118k|		size_t wd = clipped.width * VIPS_IMAGE_SIZEOF_PEL(reg->im);
  ------------------
  |  |  384|   118k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|   118k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
  931|   118k|		int y;
  932|       |
  933|   118k|		if (vips_band_format_isint(reg->im->BandFmt)) {
  ------------------
  |  Branch (933:7): [True: 118k, False: 10]
  ------------------
  934|   288k|			for (y = 0; y < clipped.height; y++) {
  ------------------
  |  Branch (934:16): [True: 169k, False: 118k]
  ------------------
  935|   169k|				memset((char *) q, value, wd);
  936|   169k|				q += ls;
  937|   169k|			}
  938|   118k|		}
  939|     10|		else {
  940|     10|			gboolean iscomplex =
  941|     10|				vips_band_format_iscomplex(reg->im->BandFmt);
  942|     10|			int nele = clipped.width * reg->im->Bands *
  943|     10|				(iscomplex ? 2 : 1);
  ------------------
  |  Branch (943:6): [True: 0, False: 10]
  ------------------
  944|     10|			VipsPel *q1;
  945|       |
  946|     10|			switch (reg->im->BandFmt) {
  947|     10|			case VIPS_FORMAT_FLOAT:
  ------------------
  |  Branch (947:4): [True: 10, False: 0]
  ------------------
  948|     10|			case VIPS_FORMAT_COMPLEX:
  ------------------
  |  Branch (948:4): [True: 0, False: 10]
  ------------------
  949|     10|				FILL_LINE(float, q, nele, value);
  ------------------
  |  |  894|     10|	{ \
  |  |  895|     10|		int x; \
  |  |  896|     10|		TYPE *QT = (TYPE *) Q; \
  |  |  897|     10|\
  |  |  898|    360|		for (x = 0; x < (N); x++) \
  |  |  ------------------
  |  |  |  Branch (898:15): [True: 350, False: 10]
  |  |  ------------------
  |  |  899|    350|			QT[x] = (V); \
  |  |  900|     10|	}
  ------------------
  950|     10|				break;
  951|       |
  952|      0|			case VIPS_FORMAT_DOUBLE:
  ------------------
  |  Branch (952:4): [True: 0, False: 10]
  ------------------
  953|      0|			case VIPS_FORMAT_DPCOMPLEX:
  ------------------
  |  Branch (953:4): [True: 0, False: 10]
  ------------------
  954|      0|				FILL_LINE(double, q, nele, value);
  ------------------
  |  |  894|      0|	{ \
  |  |  895|      0|		int x; \
  |  |  896|      0|		TYPE *QT = (TYPE *) Q; \
  |  |  897|      0|\
  |  |  898|      0|		for (x = 0; x < (N); x++) \
  |  |  ------------------
  |  |  |  Branch (898:15): [True: 0, False: 0]
  |  |  ------------------
  |  |  899|      0|			QT[x] = (V); \
  |  |  900|      0|	}
  ------------------
  955|      0|				break;
  956|       |
  957|      0|			default:
  ------------------
  |  Branch (957:4): [True: 0, False: 10]
  ------------------
  958|      0|				g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  959|     10|			}
  960|       |
  961|     10|			q1 = q + ls;
  962|       |
  963|    230|			for (y = 1; y < clipped.height; y++) {
  ------------------
  |  Branch (963:16): [True: 220, False: 10]
  ------------------
  964|    220|				memcpy((char *) q1, (char *) q, wd);
  965|    220|				q1 += ls;
  966|    220|			}
  967|     10|		}
  968|   118k|	}
  969|   118k|}
vips_region_black:
 1032|   118k|{
 1033|   118k|	vips_region_paint(reg, &reg->valid, 0);
 1034|   118k|}
vips_region_copy:
 1053|   246k|{
 1054|   246k|	size_t len = VIPS_IMAGE_SIZEOF_PEL(reg->im) * r->width;
  ------------------
  |  |  384|   246k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  ------------------
  |  |  |  |  382|   246k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  ------------------
  ------------------
 1055|   246k|	VipsPel *p = VIPS_REGION_ADDR(reg, r->left, r->top);
  ------------------
  |  |  227|   246k|	((R)->data + \
  |  |  228|   246k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   246k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   246k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   246k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   246k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   246k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1056|   246k|	VipsPel *q = VIPS_REGION_ADDR(dest, x, y);
  ------------------
  |  |  227|   246k|	((R)->data + \
  |  |  228|   246k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   246k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   246k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   246k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   246k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   246k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|   246k|	size_t plsk = VIPS_REGION_LSKIP(reg);
  ------------------
  |  |  195|   246k|	((size_t) ((R)->bpl))
  ------------------
 1058|   246k|	size_t qlsk = VIPS_REGION_LSKIP(dest);
  ------------------
  |  |  195|   246k|	((size_t) ((R)->bpl))
  ------------------
 1059|       |
 1060|   246k|	int z;
 1061|       |
 1062|       |#ifdef DEBUG
 1063|       |	/* Find the area we will write to in dest.
 1064|       |	 */
 1065|       |	VipsRect output;
 1066|       |
 1067|       |	printf("vips_region_copy: sanity check\n");
 1068|       |
 1069|       |	output.left = x;
 1070|       |	output.top = y;
 1071|       |	output.width = r->width;
 1072|       |	output.height = r->height;
 1073|       |
 1074|       |	/* Must be inside dest->valid.
 1075|       |	 */
 1076|       |	g_assert(vips_rect_includesrect(&dest->valid, &output));
 1077|       |
 1078|       |	/* Check the area we are reading from in reg.
 1079|       |	 */
 1080|       |	g_assert(vips_rect_includesrect(&reg->valid, r));
 1081|       |
 1082|       |	/* VipsPel size must be the same.
 1083|       |	 */
 1084|       |	g_assert(VIPS_IMAGE_SIZEOF_PEL(reg->im) ==
 1085|       |		VIPS_IMAGE_SIZEOF_PEL(dest->im));
 1086|       |#endif /*DEBUG*/
 1087|       |
 1088|       |	/* Copy the scanlines.
 1089|       |	 *
 1090|       |	 * Special case: if the two sets of scanlines are end-to-end (this
 1091|       |	 * happens if we are copying complete regions) we can do a single
 1092|       |	 * memcpy() for the whole thing. This is a little faster since we
 1093|       |	 * won't have to do unaligned copies.
 1094|       |	 */
 1095|   246k|	if (len == plsk &&
  ------------------
  |  Branch (1095:6): [True: 246k, False: 0]
  ------------------
 1096|   246k|		len == qlsk)
  ------------------
  |  Branch (1096:3): [True: 228k, False: 17.9k]
  ------------------
 1097|   228k|		memcpy(q, p, len * r->height);
 1098|  17.9k|	else
 1099|   510k|		for (z = 0; z < r->height; z++) {
  ------------------
  |  Branch (1099:15): [True: 492k, False: 17.9k]
  ------------------
 1100|   492k|			memcpy(q, p, len);
 1101|       |
 1102|   492k|			p += plsk;
 1103|   492k|			q += qlsk;
 1104|   492k|		}
 1105|   246k|}
vips_region_prepare:
 1657|   301k|{
 1658|   301k|	VipsImage *im = reg->im;
 1659|       |
 1660|   301k|	VipsRect save = *r;
 1661|       |
 1662|   301k|	vips__region_check_ownership(reg);
 1663|       |
 1664|   301k|	if (vips_image_iskilled(im))
  ------------------
  |  Branch (1664:6): [True: 0, False: 301k]
  ------------------
 1665|      0|		return -1;
 1666|       |
 1667|       |	/* We use save for sanity checking valid: we test at the end that the
 1668|       |	 * pixels we have generated are indeed all the ones that were asked
 1669|       |	 * for.
 1670|       |	 *
 1671|       |	 * However, r may be clipped by the image size, so we need to clip
 1672|       |	 * save as well to make sure we don't fail the assert due to that.
 1673|       |	 */
 1674|   301k|	{
 1675|   301k|		VipsRect image;
 1676|       |
 1677|   301k|		image.left = 0;
 1678|   301k|		image.top = 0;
 1679|   301k|		image.width = reg->im->Xsize;
 1680|   301k|		image.height = reg->im->Ysize;
 1681|   301k|		vips_rect_intersectrect(&save, &image, &save);
 1682|   301k|	}
 1683|       |
 1684|       |#ifdef DEBUG
 1685|       |	printf("vips_region_prepare: "
 1686|       |		   "left = %d, top = %d, width = %d, height = %d\n",
 1687|       |		r->left, r->top, r->width, r->height);
 1688|       |#endif /*DEBUG*/
 1689|       |
 1690|   301k|	switch (im->dtype) {
 1691|   274k|	case VIPS_IMAGE_PARTIAL:
  ------------------
  |  Branch (1691:2): [True: 274k, False: 27.3k]
  ------------------
 1692|   274k|		if (vips_region_fill(reg, r, vips_region_generate, NULL))
  ------------------
  |  Branch (1692:7): [True: 65.9k, False: 208k]
  ------------------
 1693|  65.9k|			return -1;
 1694|       |
 1695|   208k|		break;
 1696|       |
 1697|   208k|	case VIPS_IMAGE_SETBUF:
  ------------------
  |  Branch (1697:2): [True: 27.3k, False: 274k]
  ------------------
 1698|  27.3k|	case VIPS_IMAGE_SETBUF_FOREIGN:
  ------------------
  |  Branch (1698:2): [True: 0, False: 301k]
  ------------------
 1699|  27.3k|	case VIPS_IMAGE_MMAPIN:
  ------------------
  |  Branch (1699:2): [True: 0, False: 301k]
  ------------------
 1700|  27.3k|	case VIPS_IMAGE_MMAPINRW:
  ------------------
  |  Branch (1700:2): [True: 0, False: 301k]
  ------------------
 1701|  27.3k|	case VIPS_IMAGE_OPENIN:
  ------------------
  |  Branch (1701:2): [True: 0, False: 301k]
  ------------------
 1702|       |		/* Attach to existing buffer.
 1703|       |		 */
 1704|  27.3k|		if (vips_region_image(reg, r))
  ------------------
  |  Branch (1704:7): [True: 0, False: 27.3k]
  ------------------
 1705|      0|			return -1;
 1706|       |
 1707|  27.3k|		break;
 1708|       |
 1709|  27.3k|	default:
  ------------------
  |  Branch (1709:2): [True: 0, False: 301k]
  ------------------
 1710|      0|		vips_error("vips_region_prepare",
 1711|      0|			_("unable to input from a %s image"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1712|      0|			vips_enum_string(VIPS_TYPE_DEMAND_STYLE, im->dtype));
  ------------------
  |  |  136|      0|#define VIPS_TYPE_DEMAND_STYLE (vips_demand_style_get_type())
  ------------------
 1713|      0|		return -1;
 1714|   301k|	}
 1715|       |
 1716|       |	/* valid should now include all the pixels that were asked for.
 1717|       |	 */
 1718|   301k|	g_assert(vips_rect_includesrect(&reg->valid, &save));
  ------------------
  |  |  166|   301k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   235k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   301k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1719|       |
 1720|   235k|	return 0;
 1721|   301k|}
vips_region_prepare_to:
 1787|   156k|{
 1788|   156k|	VipsImage *im = reg->im;
 1789|   156k|	VipsRect image;
 1790|   156k|	VipsRect wanted;
 1791|   156k|	VipsRect clipped;
 1792|   156k|	VipsRect clipped2;
 1793|   156k|	VipsRect final;
 1794|       |
 1795|   156k|	if (vips_image_iskilled(im))
  ------------------
  |  Branch (1795:6): [True: 0, False: 156k]
  ------------------
 1796|      0|		return -1;
 1797|       |
 1798|       |	/* Sanity check.
 1799|       |	 */
 1800|   156k|	if (!dest->data ||
  ------------------
  |  Branch (1800:6): [True: 0, False: 156k]
  ------------------
 1801|   156k|		dest->im->BandFmt != reg->im->BandFmt ||
  ------------------
  |  Branch (1801:3): [True: 0, False: 156k]
  ------------------
 1802|   156k|		dest->im->Bands != reg->im->Bands) {
  ------------------
  |  Branch (1802:3): [True: 0, False: 156k]
  ------------------
 1803|      0|		vips_error("vips_region_prepare_to",
 1804|      0|			"%s", _("inappropriate region type"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1805|      0|		return -1;
 1806|      0|	}
 1807|       |
 1808|       |	/* clip r first against the size of reg->im, then again against the
 1809|       |	 * memory we have available to write to on dest. Just like
 1810|       |	 * vips_region_region()
 1811|       |	 */
 1812|   156k|	image.top = 0;
 1813|   156k|	image.left = 0;
 1814|   156k|	image.width = reg->im->Xsize;
 1815|   156k|	image.height = reg->im->Ysize;
 1816|   156k|	vips_rect_intersectrect(r, &image, &clipped);
 1817|       |
 1818|   156k|	g_assert(clipped.left == r->left);
  ------------------
  |  |  166|   156k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   156k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   156k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1819|   156k|	g_assert(clipped.top == r->top);
  ------------------
  |  |  166|   156k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   156k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   156k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1820|       |
 1821|   156k|	wanted.left = x + (clipped.left - r->left);
 1822|   156k|	wanted.top = y + (clipped.top - r->top);
 1823|   156k|	wanted.width = clipped.width;
 1824|   156k|	wanted.height = clipped.height;
 1825|       |
 1826|       |	/* Test that dest->valid is large enough.
 1827|       |	 */
 1828|   156k|	if (!vips_rect_includesrect(&dest->valid, &wanted)) {
  ------------------
  |  Branch (1828:6): [True: 0, False: 156k]
  ------------------
 1829|      0|		vips_error("vips_region_prepare_to",
 1830|      0|			"%s", _("dest too small"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1831|      0|		return -1;
 1832|      0|	}
 1833|       |
 1834|   156k|	vips_rect_intersectrect(&wanted, &dest->valid, &clipped2);
 1835|       |
 1836|       |	/* Translate back to reg's coordinate space and set as valid.
 1837|       |	 */
 1838|   156k|	final.left = r->left + (clipped2.left - wanted.left);
 1839|   156k|	final.top = r->top + (clipped2.top - wanted.top);
 1840|   156k|	final.width = clipped2.width;
 1841|   156k|	final.height = clipped2.height;
 1842|       |
 1843|   156k|	x = clipped2.left;
 1844|   156k|	y = clipped2.top;
 1845|       |
 1846|   156k|	if (vips_rect_isempty(&final)) {
  ------------------
  |  Branch (1846:6): [True: 0, False: 156k]
  ------------------
 1847|      0|		vips_error("vips_region_prepare_to",
 1848|      0|			"%s", _("valid clipped to nothing"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1849|      0|		return -1;
 1850|      0|	}
 1851|       |
 1852|       |#ifdef DEBUG
 1853|       |	printf("vips_region_prepare_to: "
 1854|       |		   "left = %d, top = %d, width = %d, height = %d\n",
 1855|       |		final.left, final.top, final.width, final.height);
 1856|       |#endif /*DEBUG*/
 1857|       |
 1858|       |	/* Input or output image type?
 1859|       |	 */
 1860|   156k|	switch (im->dtype) {
 1861|      0|	case VIPS_IMAGE_OPENOUT:
  ------------------
  |  Branch (1861:2): [True: 0, False: 156k]
  ------------------
 1862|   119k|	case VIPS_IMAGE_PARTIAL:
  ------------------
  |  Branch (1862:2): [True: 119k, False: 37.2k]
  ------------------
 1863|       |		/* We are generating with a sequence.
 1864|       |		 */
 1865|   119k|		if (vips_region_prepare_to_generate(reg, dest, &final, x, y))
  ------------------
  |  Branch (1865:7): [True: 24.1k, False: 95.1k]
  ------------------
 1866|  24.1k|			return -1;
 1867|       |
 1868|  95.1k|		break;
 1869|       |
 1870|  95.1k|	case VIPS_IMAGE_MMAPIN:
  ------------------
  |  Branch (1870:2): [True: 0, False: 156k]
  ------------------
 1871|      0|	case VIPS_IMAGE_MMAPINRW:
  ------------------
  |  Branch (1871:2): [True: 0, False: 156k]
  ------------------
 1872|      0|	case VIPS_IMAGE_OPENIN:
  ------------------
  |  Branch (1872:2): [True: 0, False: 156k]
  ------------------
 1873|       |		/* Attach to existing buffer and copy to dest.
 1874|       |		 */
 1875|      0|		if (vips_region_image(reg, &final))
  ------------------
  |  Branch (1875:7): [True: 0, False: 0]
  ------------------
 1876|      0|			return -1;
 1877|      0|		vips_region_copy(reg, dest, &final, x, y);
 1878|       |
 1879|      0|		break;
 1880|       |
 1881|  37.2k|	case VIPS_IMAGE_SETBUF:
  ------------------
  |  Branch (1881:2): [True: 37.2k, False: 119k]
  ------------------
 1882|  37.2k|	case VIPS_IMAGE_SETBUF_FOREIGN:
  ------------------
  |  Branch (1882:2): [True: 0, False: 156k]
  ------------------
 1883|       |		/* Could be either input or output. If there is a generate
 1884|       |		 * function, we are outputting.
 1885|       |		 */
 1886|  37.2k|		if (im->generate_fn) {
  ------------------
  |  Branch (1886:7): [True: 37.2k, False: 0]
  ------------------
 1887|  37.2k|			if (vips_region_prepare_to_generate(reg,
  ------------------
  |  Branch (1887:8): [True: 10.7k, False: 26.4k]
  ------------------
 1888|  37.2k|					dest, &final, x, y))
 1889|  10.7k|				return -1;
 1890|  37.2k|		}
 1891|      0|		else {
 1892|      0|			if (vips_region_image(reg, &final))
  ------------------
  |  Branch (1892:8): [True: 0, False: 0]
  ------------------
 1893|      0|				return -1;
 1894|      0|			vips_region_copy(reg, dest, &final, x, y);
 1895|      0|		}
 1896|       |
 1897|  26.4k|		break;
 1898|       |
 1899|  26.4k|	default:
  ------------------
  |  Branch (1899:2): [True: 0, False: 156k]
  ------------------
 1900|      0|		vips_error("vips_region_prepare_to",
 1901|      0|			_("unable to input from a %s image"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1902|      0|			vips_enum_nick(VIPS_TYPE_DEMAND_STYLE, im->dtype));
  ------------------
  |  |  136|      0|#define VIPS_TYPE_DEMAND_STYLE (vips_demand_style_get_type())
  ------------------
 1903|      0|		return -1;
 1904|   156k|	}
 1905|       |
 1906|       |	/* We've written fresh pixels to dest, it's no longer invalid (if it
 1907|       |	 * was).
 1908|       |	 *
 1909|       |	 * We need this extra thing here because, unlike
 1910|       |	 * vips_region_prepare(), we don't vips_region_buffer() dest before
 1911|       |	 * writing it.
 1912|       |	 */
 1913|   121k|	dest->invalid = FALSE;
  ------------------
  |  |  794|   121k|#define	FALSE	(0)
  ------------------
 1914|       |
 1915|   121k|	return 0;
 1916|   156k|}
vips__region_count_pixels:
 2071|  3.34k|{
 2072|  3.34k|	VipsImage *image = region->im;
 2073|  3.34k|	VipsImagePixels *pixels = g_object_get_qdata(G_OBJECT(image),
  ------------------
  |  |   51|  3.34k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  3.34k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  3.34k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2074|  3.34k|		vips__image_pixels_quark);
 2075|       |
 2076|  3.34k|	g_mutex_lock(&vips__global_lock);
 2077|  3.34k|	if (!pixels->tpels)
  ------------------
  |  Branch (2077:6): [True: 860, False: 2.48k]
  ------------------
 2078|    860|		pixels->tpels = VIPS_IMAGE_N_PELS(image);
  ------------------
  |  |  392|    860|	((guint64) (I)->Xsize * (I)->Ysize)
  ------------------
 2079|  3.34k|	if (!pixels->nickname)
  ------------------
  |  Branch (2079:6): [True: 860, False: 2.48k]
  ------------------
 2080|    860|		pixels->nickname = nickname;
 2081|  3.34k|	pixels->npels += region->valid.width * region->valid.height;
 2082|  3.34k|	g_mutex_unlock(&vips__global_lock);
 2083|  3.34k|}
region.c:vips_region_class_init:
  468|      1|{
  469|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  471|       |
  472|      1|	gobject_class->finalize = vips_region_finalize;
  473|      1|	gobject_class->dispose = vips_region_dispose;
  474|       |
  475|      1|	vobject_class->summary = vips_region_summary;
  476|      1|	vobject_class->dump = vips_region_dump;
  477|      1|	vobject_class->build = vips_region_build;
  478|      1|}
region.c:vips_region_finalize:
  208|   444k|{
  209|       |#ifdef VIPS_DEBUG
  210|       |	VIPS_DEBUG_MSG("vips_region_finalize: ");
  211|       |	vips_object_print_name(VIPS_OBJECT(gobject));
  212|       |	VIPS_DEBUG_MSG("\n");
  213|       |#endif /*VIPS_DEBUG*/
  214|       |
  215|       |#ifdef VIPS_DEBUG
  216|       |	g_mutex_lock(&vips__global_lock);
  217|       |	vips__regions_all = g_slist_remove(vips__regions_all, gobject);
  218|       |	g_mutex_unlock(&vips__global_lock);
  219|       |#endif /*VIPS_DEBUG*/
  220|       |
  221|   444k|	G_OBJECT_CLASS(vips_region_parent_class)->finalize(gobject);
  ------------------
  |  |   58|   444k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   444k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   444k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|   444k|}
region.c:vips_region_dispose:
  290|   444k|{
  291|   444k|	VipsRegion *region = VIPS_REGION(gobject);
  ------------------
  |  |   52|   444k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   444k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   444k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|   444k|		VIPS_TYPE_REGION, VipsRegion))
  ------------------
  292|   444k|	VipsImage *image = region->im;
  293|       |
  294|       |#ifdef VIPS_DEBUG
  295|       |	VIPS_DEBUG_MSG("vips_region_dispose: ");
  296|       |	vips_object_print_name(VIPS_OBJECT(gobject));
  297|       |	VIPS_DEBUG_MSG("\n");
  298|       |#endif /*VIPS_DEBUG*/
  299|       |
  300|   444k|	vips_object_preclose(VIPS_OBJECT(gobject));
  ------------------
  |  |  433|   444k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   444k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   444k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  301|       |
  302|       |	/* Stop this sequence.
  303|       |	 */
  304|   444k|	vips__region_stop(region);
  305|       |
  306|       |	/* Free any attached memory.
  307|       |	 */
  308|   444k|	VIPS_FREEF(vips_window_unref, region->window);
  ------------------
  |  |   41|   444k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   444k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   444k|	{ \
  |  |   43|   444k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 444k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   444k|	} \
  |  |   48|   444k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   444k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|   444k|	VIPS_FREEF(vips_buffer_unref, region->buffer);
  ------------------
  |  |   41|   444k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   444k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   444k|	{ \
  |  |   43|   444k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 291k, False: 153k]
  |  |  ------------------
  |  |   44|   291k|			(void) F((S)); \
  |  |   45|   291k|			(S) = 0; \
  |  |   46|   291k|		} \
  |  |   47|   444k|	} \
  |  |   48|   444k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   444k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  310|       |
  311|       |	/* Detach from image.
  312|       |	 */
  313|   444k|	VIPS_GATE_START("vips_region_dispose: wait");
  ------------------
  |  |   41|   444k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   444k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   444k|	{ \
  |  |   43|   444k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 444k]
  |  |  ------------------
  |  |   44|   444k|			vips__thread_gate_start(NAME); \
  |  |   45|   444k|	} \
  |  |   46|   444k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   444k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  314|       |
  315|   444k|	g_mutex_lock(image->sslock);
  316|       |
  317|   444k|	VIPS_GATE_STOP("vips_region_dispose: wait");
  ------------------
  |  |   49|   444k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   444k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|   444k|	{ \
  |  |   51|   444k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 444k]
  |  |  ------------------
  |  |   52|   444k|			vips__thread_gate_stop(NAME); \
  |  |   53|   444k|	} \
  |  |   54|   444k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   444k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  318|       |
  319|   444k|	image->regions = g_slist_remove(image->regions, region);
  320|       |
  321|   444k|	g_mutex_unlock(image->sslock);
  322|       |
  323|   444k|	region->im = NULL;
  324|       |
  325|   444k|	g_object_unref(image);
  326|       |
  327|   444k|	G_OBJECT_CLASS(vips_region_parent_class)->dispose(gobject);
  ------------------
  |  |   58|   444k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   444k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   444k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  328|   444k|}
region.c:vips_region_build:
  440|   444k|{
  441|   444k|	VipsRegion *region = VIPS_REGION(object);
  ------------------
  |  |   52|   444k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   444k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   444k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   53|   444k|		VIPS_TYPE_REGION, VipsRegion))
  ------------------
  442|   444k|	VipsImage *image = region->im;
  443|       |
  444|   444k|	VIPS_DEBUG_MSG("vips_region_build: %p\n", region);
  ------------------
  |  |   47|   444k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   444k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   444k|	{ \
  |  |   49|   444k|		; \
  |  |   50|   444k|	} \
  |  |   51|   444k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   444k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  445|       |
  446|   444k|	if (VIPS_OBJECT_CLASS(vips_region_parent_class)->build(object))
  ------------------
  |  |  435|   444k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|   444k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   444k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (446:6): [True: 0, False: 444k]
  ------------------
  447|      0|		return -1;
  448|       |
  449|   444k|	vips__region_take_ownership(region);
  450|       |
  451|       |	/* We're usually inside the ss lock anyway. But be safe ...
  452|       |	 */
  453|   444k|	VIPS_GATE_START("vips_region_build: wait");
  ------------------
  |  |   41|   444k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   444k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   444k|	{ \
  |  |   43|   444k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 444k]
  |  |  ------------------
  |  |   44|   444k|			vips__thread_gate_start(NAME); \
  |  |   45|   444k|	} \
  |  |   46|   444k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   444k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  454|       |
  455|   444k|	g_mutex_lock(image->sslock);
  456|       |
  457|   444k|	VIPS_GATE_STOP("vips_region_build: wait");
  ------------------
  |  |   49|   444k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   444k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|   444k|	{ \
  |  |   51|   444k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 444k]
  |  |  ------------------
  |  |   52|   444k|			vips__thread_gate_stop(NAME); \
  |  |   53|   444k|	} \
  |  |   54|   444k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   444k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  458|       |
  459|   444k|	image->regions = g_slist_prepend(image->regions, region);
  460|       |
  461|   444k|	g_mutex_unlock(image->sslock);
  462|       |
  463|   444k|	return 0;
  464|   444k|}
region.c:vips_region_init:
  482|   444k|{
  483|   444k|	region->type = VIPS_REGION_NONE;
  484|       |
  485|       |#ifdef VIPS_DEBUG
  486|       |	g_mutex_lock(&vips__global_lock);
  487|       |	vips__regions_all = g_slist_prepend(vips__regions_all, region);
  488|       |	printf("vips_region_init: %d regions in vips\n",
  489|       |		g_slist_length(vips__regions_all));
  490|       |	g_mutex_unlock(&vips__global_lock);
  491|       |#endif /*VIPS_DEBUG*/
  492|   444k|}
region.c:vips_region_generate:
 1611|   428k|{
 1612|   428k|	VipsImage *im = reg->im;
 1613|       |
 1614|   428k|	gboolean stop;
 1615|       |
 1616|       |	/* Start new sequence, if necessary.
 1617|       |	 */
 1618|   428k|	if (vips__region_start(reg))
  ------------------
  |  Branch (1618:6): [True: 13.1k, False: 415k]
  ------------------
 1619|  13.1k|		return -1;
 1620|       |
 1621|       |	/* Ask for evaluation.
 1622|       |	 */
 1623|   415k|	stop = FALSE;
  ------------------
  |  |  794|   415k|#define	FALSE	(0)
  ------------------
 1624|   415k|	if (im->generate_fn(reg, reg->seq, im->client1, im->client2, &stop))
  ------------------
  |  Branch (1624:6): [True: 87.7k, False: 327k]
  ------------------
 1625|  87.7k|		return -1;
 1626|   327k|	if (stop) {
  ------------------
  |  Branch (1626:6): [True: 0, False: 327k]
  ------------------
 1627|      0|		vips_error("vips_region_generate",
 1628|      0|			"%s", _("stop requested"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1629|      0|		return -1;
 1630|      0|	}
 1631|       |
 1632|   327k|	return 0;
 1633|   327k|}
region.c:vips_region_prepare_to_generate:
 1729|   156k|{
 1730|   156k|	VipsImage *im = reg->im;
 1731|   156k|	VipsPel *p;
 1732|       |
 1733|   156k|	if (!im->generate_fn) {
  ------------------
  |  Branch (1733:6): [True: 0, False: 156k]
  ------------------
 1734|      0|		vips_error("vips_region_prepare_to",
 1735|      0|			"%s", _("incomplete header"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1736|      0|		return -1;
 1737|      0|	}
 1738|       |
 1739|   156k|	if (vips_region_region(reg, dest, r, x, y))
  ------------------
  |  Branch (1739:6): [True: 0, False: 156k]
  ------------------
 1740|      0|		return -1;
 1741|       |
 1742|       |	/* Remember where reg is pointing now.
 1743|       |	 */
 1744|   156k|	p = VIPS_REGION_ADDR(reg, reg->valid.left, reg->valid.top);
  ------------------
  |  |  227|   156k|	((R)->data + \
  |  |  228|   156k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   156k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   156k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   156k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   156k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   156k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1745|       |
 1746|       |	/* Run sequence into reg.
 1747|       |	 */
 1748|   156k|	if (vips_region_generate(reg, NULL))
  ------------------
  |  Branch (1748:6): [True: 34.9k, False: 121k]
  ------------------
 1749|  34.9k|		return -1;
 1750|       |
 1751|       |	/* The generate function may not have actually made any pixels ... it
 1752|       |	 * might just have redirected reg to point somewhere else. If it has,
 1753|       |	 * we need an extra copy operation.
 1754|       |	 */
 1755|   121k|	if (VIPS_REGION_ADDR(reg, reg->valid.left, reg->valid.top) != p)
  ------------------
  |  |  227|   121k|	((R)->data + \
  |  |  228|   121k|		((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \
  |  |  ------------------
  |  |  |  |  195|   121k|	((size_t) ((R)->bpl))
  |  |  ------------------
  |  |  229|   121k|		((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R))
  |  |  ------------------
  |  |  |  |  201|   121k|	(VIPS_IMAGE_SIZEOF_PEL((R)->im))
  |  |  |  |  ------------------
  |  |  |  |  |  |  384|   121k|	(VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  382|   121k|	(vips_format_sizeof_unsafe((I)->BandFmt))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1755:6): [True: 52.7k, False: 68.8k]
  ------------------
 1756|  52.7k|		vips_region_copy(reg, dest, r, x, y);
 1757|       |
 1758|   121k|	return 0;
 1759|   156k|}

vips__reorder_set_input:
  171|   228k|{
  172|   228k|	VipsReorder *reorder = vips_reorder_get(image);
  173|       |
  174|   228k|	int i;
  175|   228k|	int total;
  176|       |
  177|       |	/* We have to support being called more than once on the same image.
  178|       |	 * Two cases:
  179|       |	 *
  180|       |	 * 1. in the first call, no images were set ... we throw away
  181|       |	 * everything from the first call and try again. foreign can do this.
  182|       |	 *
  183|       |	 * 2. warn if the args were different and do nothing.
  184|       |	 */
  185|   228k|	if (reorder->source) {
  ------------------
  |  Branch (185:6): [True: 31.3k, False: 196k]
  ------------------
  186|  31.3k|		if (reorder->n_inputs == 0) {
  ------------------
  |  Branch (186:7): [True: 31.3k, False: 0]
  ------------------
  187|  31.3k|			reorder->n_sources = 0;
  188|  31.3k|			vips_reorder_free(reorder);
  189|  31.3k|		}
  190|      0|		else {
  191|      0|			for (i = 0; in[i]; i++)
  ------------------
  |  Branch (191:16): [True: 0, False: 0]
  ------------------
  192|      0|				if (i >= reorder->n_inputs ||
  ------------------
  |  Branch (192:9): [True: 0, False: 0]
  ------------------
  193|      0|					in[i] != reorder->input[i]) {
  ------------------
  |  Branch (193:6): [True: 0, False: 0]
  ------------------
  194|       |					/* Should never happen.
  195|       |					 */
  196|      0|					g_warning("vips__reorder_set_input: args differ\n");
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  197|      0|					break;
  198|      0|				}
  199|       |
  200|      0|			return 0;
  201|      0|		}
  202|  31.3k|	}
  203|       |
  204|       |	/* Make a copy of the input array.
  205|       |	 */
  206|   385k|	for (i = 0; in[i]; i++)
  ------------------
  |  Branch (206:14): [True: 157k, False: 228k]
  ------------------
  207|   157k|		;
  208|   228k|	reorder->n_inputs = i;
  209|   228k|	reorder->input = VIPS_ARRAY(NULL, reorder->n_inputs + 1, VipsImage *);
  ------------------
  |  |   72|   228k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|   228k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|   228k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|   228k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|   228k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|   228k|	reorder->score = VIPS_ARRAY(NULL, reorder->n_inputs, int);
  ------------------
  |  |   72|   228k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|   228k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|   228k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|   228k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|   228k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  211|   228k|	reorder->recomp_order = VIPS_ARRAY(NULL, reorder->n_inputs, int);
  ------------------
  |  |   72|   228k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|   228k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|   228k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|   228k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|   228k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  212|   228k|	if (!reorder->input)
  ------------------
  |  Branch (212:6): [True: 0, False: 228k]
  ------------------
  213|      0|		return -1;
  214|   228k|	if (reorder->n_inputs &&
  ------------------
  |  Branch (214:6): [True: 156k, False: 72.1k]
  ------------------
  215|   228k|		(!reorder->score ||
  ------------------
  |  Branch (215:4): [True: 0, False: 156k]
  ------------------
  216|   156k|			!reorder->recomp_order))
  ------------------
  |  Branch (216:4): [True: 0, False: 156k]
  ------------------
  217|      0|		return -1;
  218|       |
  219|   385k|	for (i = 0; i < reorder->n_inputs; i++) {
  ------------------
  |  Branch (219:14): [True: 157k, False: 228k]
  ------------------
  220|   157k|		reorder->input[i] = in[i];
  221|   157k|		reorder->score[i] = 0;
  222|   157k|		reorder->recomp_order[i] = i;
  223|   157k|	}
  224|   228k|	reorder->input[i] = NULL;
  225|       |
  226|       |	/* Find the total number of source images -- this gives an upper bound
  227|       |	 * to the size of the unique source image array we will need.
  228|       |	 */
  229|   228k|	total = 0;
  230|   385k|	for (i = 0; i < reorder->n_inputs; i++)
  ------------------
  |  Branch (230:14): [True: 157k, False: 228k]
  ------------------
  231|   157k|		total += vips_reorder_get(reorder->input[i])->n_sources;
  232|       |
  233|       |	/* No source images means this must itself be a source image, so it has
  234|       |	 * a source image of itself.
  235|       |	 */
  236|   228k|	total = VIPS_MAX(1, total);
  ------------------
  |  |   54|   228k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 79.1k, False: 148k]
  |  |  ------------------
  ------------------
  237|       |
  238|   228k|	reorder->source = VIPS_ARRAY(NULL, total + 1, VipsImage *);
  ------------------
  |  |   72|   228k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|   228k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|   228k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|   228k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|   228k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|   228k|	reorder->cumulative_margin = VIPS_ARRAY(NULL, total, int);
  ------------------
  |  |   72|   228k|	((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|   228k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|   228k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|   228k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|   228k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  240|   228k|	if (!reorder->source ||
  ------------------
  |  Branch (240:6): [True: 0, False: 228k]
  ------------------
  241|   228k|		!reorder->cumulative_margin)
  ------------------
  |  Branch (241:3): [True: 0, False: 228k]
  ------------------
  242|      0|		return -1;
  243|       |
  244|       |	/* Copy source images over, removing duplicates. If we find a
  245|       |	 * duplicate, we have a reordering opportunity, and we adjust the
  246|       |	 * scores of the two images containing the dupe.
  247|       |	 */
  248|   385k|	for (i = 0; i < reorder->n_inputs; i++) {
  ------------------
  |  Branch (248:14): [True: 157k, False: 228k]
  ------------------
  249|   157k|		VipsReorder *input = vips_reorder_get(reorder->input[i]);
  250|       |
  251|   157k|		int j;
  252|       |
  253|   307k|		for (j = 0; j < input->n_sources; j++) {
  ------------------
  |  Branch (253:15): [True: 150k, False: 157k]
  ------------------
  254|   150k|			int k;
  255|       |
  256|       |			/* Search for dupe.
  257|       |			 */
  258|   150k|			for (k = 0; k < reorder->n_sources; k++)
  ------------------
  |  Branch (258:16): [True: 1.50k, False: 148k]
  ------------------
  259|  1.50k|				if (reorder->source[k] == input->source[j])
  ------------------
  |  Branch (259:9): [True: 1.50k, False: 0]
  ------------------
  260|  1.50k|					break;
  261|       |
  262|   150k|			if (k < reorder->n_sources) {
  ------------------
  |  Branch (262:8): [True: 1.50k, False: 148k]
  ------------------
  263|       |				/* Found a dupe. Does this new use of
  264|       |				 * input->source[j] have a larger or smaller
  265|       |				 * margin? Adjust the score to reflect the
  266|       |				 * change, note the new max.
  267|       |				 */
  268|  1.50k|				reorder->score[i] +=
  269|  1.50k|					input->cumulative_margin[j] -
  270|  1.50k|					reorder->cumulative_margin[k];
  271|       |
  272|  1.50k|				reorder->cumulative_margin[k] = VIPS_MAX(
  ------------------
  |  |   54|  1.50k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 0, False: 1.50k]
  |  |  ------------------
  ------------------
  273|  1.50k|					reorder->cumulative_margin[k],
  274|  1.50k|					input->cumulative_margin[j]);
  275|  1.50k|			}
  276|   148k|			else {
  277|       |				/* No dupe, just add to the table.
  278|       |				 */
  279|   148k|				reorder->source[reorder->n_sources] =
  280|   148k|					input->source[j];
  281|   148k|				reorder->cumulative_margin[reorder->n_sources] =
  282|   148k|					input->cumulative_margin[j];
  283|   148k|				reorder->n_sources += 1;
  284|   148k|			}
  285|   150k|		}
  286|   157k|	}
  287|       |
  288|       |	/* Sort recomp_order by score. qsort_r() is a GNU libc thing, don't use
  289|       |	 * it.
  290|       |	 */
  291|   228k|	if (reorder->n_inputs > 1)
  ------------------
  |  Branch (291:6): [True: 1.04k, False: 227k]
  ------------------
  292|       |#if GLIB_CHECK_VERSION(2, 82, 0)
  293|       |		g_sort_array
  294|       |#else
  295|  1.04k|		g_qsort_with_data
  296|  1.04k|#endif
  297|  1.04k|			(reorder->recomp_order,
  298|  1.04k|				reorder->n_inputs,
  299|  1.04k|				sizeof(int),
  300|  1.04k|				vips_reorder_compare_score, reorder);
  301|       |
  302|       |	/* No sources ... make one, us!
  303|       |	 */
  304|   228k|	if (reorder->n_inputs == 0) {
  ------------------
  |  Branch (304:6): [True: 72.1k, False: 156k]
  ------------------
  305|  72.1k|		reorder->source[0] = image;
  306|  72.1k|		reorder->cumulative_margin[0] = 0;
  307|  72.1k|		reorder->n_sources = 1;
  308|  72.1k|	}
  309|       |
  310|       |#ifdef DEBUG
  311|       |	vips_reorder_print(reorder);
  312|       |#endif /*DEBUG*/
  313|       |
  314|   228k|	return 0;
  315|   228k|}
vips_reorder_prepare_many:
  335|  10.1k|{
  336|  10.1k|	VipsReorder *reorder = vips_reorder_get(image);
  337|       |
  338|  10.1k|	int i;
  339|       |
  340|  23.3k|	for (i = 0; i < reorder->n_inputs; i++) {
  ------------------
  |  Branch (340:14): [True: 13.7k, False: 9.64k]
  ------------------
  341|  13.7k|		g_assert(regions[i]);
  ------------------
  |  |  166|  13.7k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  13.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  13.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  342|       |
  343|  13.7k|		if (vips_region_prepare(
  ------------------
  |  Branch (343:7): [True: 514, False: 13.2k]
  ------------------
  344|  13.7k|				regions[reorder->recomp_order[i]], r))
  345|    514|			return -1;
  346|  13.7k|	}
  347|       |
  348|  9.64k|	return 0;
  349|  10.1k|}
vips__reorder_clear:
  379|  7.08k|{
  380|  7.08k|	g_object_set_qdata(G_OBJECT(image),
  ------------------
  |  |   51|  7.08k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|  7.08k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  7.08k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  381|  7.08k|		vips__image_reorder_quark, NULL);
  382|  7.08k|}
vips__reorder_init:
  386|      2|{
  387|      2|	if (!vips__image_reorder_quark)
  ------------------
  |  Branch (387:6): [True: 2, False: 0]
  ------------------
  388|      2|		vips__image_reorder_quark =
  389|      2|			g_quark_from_static_string("vips-image-reorder");
  390|      2|}
reorder.c:vips_reorder_get:
  136|   553k|{
  137|   553k|	VipsReorder *reorder;
  138|       |
  139|   553k|	if ((reorder = g_object_get_qdata(G_OBJECT(image),
  ------------------
  |  |   51|   553k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   553k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   553k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (139:6): [True: 349k, False: 203k]
  ------------------
  140|   553k|			 vips__image_reorder_quark)))
  141|   349k|		return reorder;
  142|       |
  143|   203k|	reorder = VIPS_NEW(NULL, VipsReorder);
  ------------------
  |  |   70|   203k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|   203k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|   203k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|   203k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|   203k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  144|   203k|	reorder->image = image;
  145|   203k|	reorder->n_inputs = 0;
  146|   203k|	reorder->input = NULL;
  147|   203k|	reorder->score = NULL;
  148|   203k|	reorder->recomp_order = NULL;
  149|   203k|	reorder->n_sources = 0;
  150|   203k|	reorder->source = NULL;
  151|   203k|	reorder->cumulative_margin = NULL;
  152|       |
  153|   203k|	g_object_set_qdata_full(G_OBJECT(image), vips__image_reorder_quark,
  ------------------
  |  |   51|   203k|#define G_OBJECT(object)            (G_TYPE_CHECK_INSTANCE_CAST ((object), G_TYPE_OBJECT, GObject))
  |  |  ------------------
  |  |  |  |  484|   203k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   203k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  154|   203k|		reorder, (GDestroyNotify) vips_reorder_destroy);
  155|       |
  156|   203k|	return reorder;
  157|   553k|}
reorder.c:vips_reorder_destroy:
  129|   203k|{
  130|   203k|	vips_reorder_free(reorder);
  131|   203k|	VIPS_FREE(reorder);
  ------------------
  |  |   50|   203k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   203k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   203k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   203k|	{ \
  |  |  |  |   43|   203k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 203k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|   203k|			(void) F((S)); \
  |  |  |  |   45|   203k|			(S) = 0; \
  |  |  |  |   46|   203k|		} \
  |  |  |  |   47|   203k|	} \
  |  |  |  |   48|   203k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   203k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|   203k|}
reorder.c:vips_reorder_free:
  115|   235k|{
  116|       |	/* We free explicitly, rather than using VIPS_ARRAY(image, ...), since
  117|       |	 * we need to make sure these pointers are valid to this point in the
  118|       |	 * close cycle.
  119|       |	 */
  120|   235k|	VIPS_FREE(reorder->input);
  ------------------
  |  |   50|   235k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   235k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   235k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   235k|	{ \
  |  |  |  |   43|   235k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 227k, False: 7.06k]
  |  |  |  |  ------------------
  |  |  |  |   44|   227k|			(void) F((S)); \
  |  |  |  |   45|   227k|			(S) = 0; \
  |  |  |  |   46|   227k|		} \
  |  |  |  |   47|   235k|	} \
  |  |  |  |   48|   235k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   235k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  121|   235k|	VIPS_FREE(reorder->score);
  ------------------
  |  |   50|   235k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   235k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   235k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   235k|	{ \
  |  |  |  |   43|   235k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 155k, False: 79.1k]
  |  |  |  |  ------------------
  |  |  |  |   44|   155k|			(void) F((S)); \
  |  |  |  |   45|   155k|			(S) = 0; \
  |  |  |  |   46|   155k|		} \
  |  |  |  |   47|   235k|	} \
  |  |  |  |   48|   235k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   235k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  122|   235k|	VIPS_FREE(reorder->recomp_order);
  ------------------
  |  |   50|   235k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   235k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   235k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   235k|	{ \
  |  |  |  |   43|   235k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 155k, False: 79.1k]
  |  |  |  |  ------------------
  |  |  |  |   44|   155k|			(void) F((S)); \
  |  |  |  |   45|   155k|			(S) = 0; \
  |  |  |  |   46|   155k|		} \
  |  |  |  |   47|   235k|	} \
  |  |  |  |   48|   235k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   235k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  123|   235k|	VIPS_FREE(reorder->source);
  ------------------
  |  |   50|   235k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   235k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   235k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   235k|	{ \
  |  |  |  |   43|   235k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 227k, False: 7.06k]
  |  |  |  |  ------------------
  |  |  |  |   44|   227k|			(void) F((S)); \
  |  |  |  |   45|   227k|			(S) = 0; \
  |  |  |  |   46|   227k|		} \
  |  |  |  |   47|   235k|	} \
  |  |  |  |   48|   235k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   235k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  124|   235k|	VIPS_FREE(reorder->cumulative_margin);
  ------------------
  |  |   50|   235k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|   235k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|   235k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|   235k|	{ \
  |  |  |  |   43|   235k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 227k, False: 7.06k]
  |  |  |  |  ------------------
  |  |  |  |   44|   227k|			(void) F((S)); \
  |  |  |  |   45|   227k|			(S) = 0; \
  |  |  |  |   46|   227k|		} \
  |  |  |  |   47|   235k|	} \
  |  |  |  |   48|   235k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|   235k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  125|   235k|}
reorder.c:vips_reorder_compare_score:
  161|  1.50k|{
  162|  1.50k|	int i1 = *((int *) a);
  163|  1.50k|	int i2 = *((int *) b);
  164|  1.50k|	VipsReorder *reorder = (VipsReorder *) arg;
  165|       |
  166|  1.50k|	return reorder->score[i2] - reorder->score[i1];
  167|  1.50k|}

vips_sbuf_new_from_source:
  113|  7.74k|{
  114|  7.74k|	VipsSbuf *sbuf;
  115|       |
  116|  7.74k|	g_assert(source);
  ------------------
  |  |  166|  7.74k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  7.74k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.74k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  117|       |
  118|  7.74k|	sbuf = VIPS_SBUF(g_object_new(VIPS_TYPE_SBUF,
  ------------------
  |  |   46|  7.74k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  7.74k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  7.74k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   47|  7.74k|		VIPS_TYPE_SBUF, VipsSbuf))
  ------------------
  119|  7.74k|		"input", source,
  120|  7.74k|		NULL));
  121|       |
  122|  7.74k|	if (vips_object_build(VIPS_OBJECT(sbuf))) {
  ------------------
  |  |  433|  7.74k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  7.74k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  7.74k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (122:6): [True: 0, False: 7.74k]
  ------------------
  123|      0|		VIPS_UNREF(sbuf);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  124|      0|		return NULL;
  125|      0|	}
  126|       |
  127|  7.74k|	return sbuf;
  128|  7.74k|}
vips_sbuf_getc:
  189|  14.3k|{
  190|  14.3k|	if (sbuf->read_point == sbuf->chars_in_buffer &&
  ------------------
  |  Branch (190:6): [True: 14.3k, False: 0]
  ------------------
  191|  14.3k|		vips_sbuf_refill(sbuf) <= 0)
  ------------------
  |  Branch (191:3): [True: 5.31k, False: 9.05k]
  ------------------
  192|  5.31k|		return -1;
  193|       |
  194|  14.3k|	g_assert(sbuf->read_point < sbuf->chars_in_buffer);
  ------------------
  |  |  166|  14.3k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  9.05k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  195|       |
  196|  9.05k|	return sbuf->input_buffer[sbuf->read_point++];
  197|  14.3k|}
vips_sbuf_require:
  247|    266|{
  248|    266|	g_assert(require < VIPS_SBUF_BUFFER_SIZE);
  ------------------
  |  |  166|    266|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    266|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    266|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|    266|	g_assert(sbuf->chars_in_buffer >= 0);
  ------------------
  |  |  166|    266|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    266|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    266|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  250|    266|	g_assert(sbuf->chars_in_buffer <= VIPS_SBUF_BUFFER_SIZE);
  ------------------
  |  |  166|    266|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    266|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    266|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  251|    266|	g_assert(sbuf->read_point >= 0);
  ------------------
  |  |  166|    266|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    266|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    266|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  252|    266|	g_assert(sbuf->read_point <= sbuf->chars_in_buffer);
  ------------------
  |  |  166|    266|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|    266|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    266|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  253|       |
  254|    266|	VIPS_DEBUG_MSG("vips_sbuf_require: %d\n", require);
  ------------------
  |  |   47|    266|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|    266|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|    266|	{ \
  |  |   49|    266|		; \
  |  |   50|    266|	} \
  |  |   51|    266|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|    266|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|       |
  256|    266|	if (sbuf->read_point + require > sbuf->chars_in_buffer) {
  ------------------
  |  Branch (256:6): [True: 266, False: 0]
  ------------------
  257|       |		/* Areas can overlap, so we must memmove().
  258|       |		 */
  259|    266|		memmove(sbuf->input_buffer,
  260|    266|			sbuf->input_buffer + sbuf->read_point,
  261|    266|			sbuf->chars_in_buffer - sbuf->read_point);
  262|    266|		sbuf->chars_in_buffer -= sbuf->read_point;
  263|    266|		sbuf->read_point = 0;
  264|       |
  265|    366|		while (require > sbuf->chars_in_buffer) {
  ------------------
  |  Branch (265:10): [True: 268, False: 98]
  ------------------
  266|    268|			unsigned char *to = sbuf->input_buffer +
  267|    268|				sbuf->chars_in_buffer;
  268|    268|			int space_available =
  269|    268|				VIPS_SBUF_BUFFER_SIZE -
  ------------------
  |  |   59|    268|#define VIPS_SBUF_BUFFER_SIZE (4096)
  ------------------
  270|    268|				sbuf->chars_in_buffer;
  271|    268|			gint64 bytes_read;
  272|       |
  273|    268|			if ((bytes_read = vips_source_read(sbuf->source,
  ------------------
  |  Branch (273:8): [True: 0, False: 268]
  ------------------
  274|    268|					 to, space_available)) < 0)
  275|      0|				return -1;
  276|    268|			if (bytes_read == 0) {
  ------------------
  |  Branch (276:8): [True: 168, False: 100]
  ------------------
  277|    168|				vips_error(
  278|    168|					vips_connection_nick(VIPS_CONNECTION(
  ------------------
  |  |   48|    168|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|    168|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|    168|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|    168|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  279|    168|						sbuf->source)),
  280|    168|					"%s", _("end of file"));
  ------------------
  |  |   30|    168|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|    168|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  281|    168|				return -1;
  282|    168|			}
  283|       |
  284|    100|			to[bytes_read] = '\0';
  285|    100|			sbuf->chars_in_buffer += bytes_read;
  286|    100|		}
  287|    266|	}
  288|       |
  289|     98|	return 0;
  290|    266|}
vips_sbuf_get_line:
  344|  17.0k|{
  345|  17.0k|	int write_point;
  346|  17.0k|	int space_remaining;
  347|  17.0k|	int ch;
  348|       |
  349|  17.0k|	VIPS_DEBUG_MSG("vips_sbuf_get_line:\n");
  ------------------
  |  |   47|  17.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  17.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  17.0k|	{ \
  |  |   49|  17.0k|		; \
  |  |   50|  17.0k|	} \
  |  |   51|  17.0k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  350|       |
  351|  17.0k|	write_point = 0;
  352|  17.0k|	space_remaining = VIPS_SBUF_BUFFER_SIZE;
  ------------------
  |  |   59|  17.0k|#define VIPS_SBUF_BUFFER_SIZE (4096)
  ------------------
  353|       |
  354|  2.26M|	while ((ch = VIPS_SBUF_GETC(sbuf)) != -1 &&
  ------------------
  |  |  109|  2.26M|#define VIPS_SBUF_GETC(S) ( \
  |  |  110|  2.26M|	(S)->read_point < (S)->chars_in_buffer \
  |  |  ------------------
  |  |  |  Branch (110:2): [True: 2.25M, False: 13.4k]
  |  |  ------------------
  |  |  111|  2.26M|		? (S)->input_buffer[(S)->read_point++] \
  |  |  112|  2.26M|		: vips_sbuf_getc(S))
  ------------------
  |  Branch (354:9): [True: 2.26M, False: 5.28k]
  ------------------
  355|  2.26M|		ch != '\n' &&
  ------------------
  |  Branch (355:3): [True: 2.25M, False: 11.6k]
  ------------------
  356|  2.26M|		space_remaining > 0) {
  ------------------
  |  Branch (356:3): [True: 2.25M, False: 125]
  ------------------
  357|  2.25M|		sbuf->line[write_point] = ch;
  358|  2.25M|		write_point += 1;
  359|  2.25M|		space_remaining -= 1;
  360|  2.25M|	}
  361|  17.0k|	sbuf->line[write_point] = '\0';
  362|       |
  363|       |	/* If we hit EOF immediately, return EOF.
  364|       |	 */
  365|  17.0k|	if (ch == -1 &&
  ------------------
  |  Branch (365:6): [True: 5.28k, False: 11.7k]
  ------------------
  366|  17.0k|		write_point == 0)
  ------------------
  |  Branch (366:3): [True: 195, False: 5.09k]
  ------------------
  367|    195|		return NULL;
  368|       |
  369|       |	/* If the final char in the buffer is \r, this is probably a DOS file
  370|       |	 * and we should remove that too.
  371|       |	 *
  372|       |	 * There's a chance this could incorrectly remove \r in very long
  373|       |	 * lines, but ignore this.
  374|       |	 */
  375|  16.8k|	if (write_point > 0 &&
  ------------------
  |  Branch (375:6): [True: 16.2k, False: 595]
  ------------------
  376|  16.8k|		sbuf->line[write_point - 1] == '\r')
  ------------------
  |  Branch (376:3): [True: 632, False: 15.6k]
  ------------------
  377|    632|		sbuf->line[write_point - 1] = '\0';
  378|       |	/* If we filled the output line without seeing \n, keep going to the
  379|       |	 * next \n.
  380|       |	 */
  381|  16.8k|	if (ch != '\n' &&
  ------------------
  |  Branch (381:6): [True: 5.21k, False: 11.6k]
  ------------------
  382|  16.8k|		space_remaining == 0) {
  ------------------
  |  Branch (382:3): [True: 128, False: 5.08k]
  ------------------
  383|  3.96M|		while ((ch = VIPS_SBUF_GETC(sbuf)) != -1 &&
  ------------------
  |  |  109|  3.96M|#define VIPS_SBUF_GETC(S) ( \
  |  |  110|  3.96M|	(S)->read_point < (S)->chars_in_buffer \
  |  |  ------------------
  |  |  |  Branch (110:2): [True: 3.96M, False: 962]
  |  |  ------------------
  |  |  111|  3.96M|		? (S)->input_buffer[(S)->read_point++] \
  |  |  112|  3.96M|		: vips_sbuf_getc(S))
  ------------------
  |  Branch (383:10): [True: 3.96M, False: 25]
  ------------------
  384|  3.96M|			ch != '\n')
  ------------------
  |  Branch (384:4): [True: 3.96M, False: 103]
  ------------------
  385|  3.96M|			;
  386|    128|	}
  387|       |
  388|  16.8k|	VIPS_DEBUG_MSG("    %s\n", sbuf->line);
  ------------------
  |  |   47|  16.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  16.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  16.8k|	{ \
  |  |   49|  16.8k|		; \
  |  |   50|  16.8k|	} \
  |  |   51|  16.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  16.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  389|       |
  390|  16.8k|	return (const char *) sbuf->line;
  391|  17.0k|}
sbuf.c:vips_sbuf_class_init:
   77|      1|{
   78|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   79|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|       |
   81|      1|	gobject_class->set_property = vips_object_set_property;
   82|      1|	gobject_class->get_property = vips_object_get_property;
   83|       |
   84|      1|	object_class->nickname = "sbuf";
   85|      1|	object_class->description = _("buffered source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
   86|       |
   87|      1|	VIPS_ARG_OBJECT(class, "input", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
   88|      1|		_("Input"),
   89|      1|		_("Source to load from"),
   90|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
   91|      1|		G_STRUCT_OFFSET(VipsSbuf, source),
   92|      1|		VIPS_TYPE_SOURCE);
   93|      1|}
sbuf.c:vips_sbuf_init:
   97|  7.74k|{
   98|  7.74k|	sbuf->read_point = 0;
   99|  7.74k|	sbuf->chars_in_buffer = 0;
  100|  7.74k|	sbuf->input_buffer[0] = '\0';
  101|  7.74k|}
sbuf.c:vips_sbuf_refill:
  152|  14.3k|{
  153|  14.3k|	gint64 bytes_read;
  154|       |
  155|  14.3k|	VIPS_DEBUG_MSG("vips_sbuf_refill:\n");
  ------------------
  |  |   47|  14.3k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  14.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  14.3k|	{ \
  |  |   49|  14.3k|		; \
  |  |   50|  14.3k|	} \
  |  |   51|  14.3k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  156|       |
  157|       |	/* We should not discard any unread bytes.
  158|       |	 */
  159|  14.3k|	g_assert(sbuf->read_point == sbuf->chars_in_buffer);
  ------------------
  |  |  166|  14.3k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  14.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  14.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  160|       |
  161|  14.3k|	bytes_read = vips_source_read(sbuf->source,
  162|  14.3k|		sbuf->input_buffer, VIPS_SBUF_BUFFER_SIZE);
  ------------------
  |  |   59|  14.3k|#define VIPS_SBUF_BUFFER_SIZE (4096)
  ------------------
  163|  14.3k|	if (bytes_read == -1)
  ------------------
  |  Branch (163:6): [True: 0, False: 14.3k]
  ------------------
  164|      0|		return -1;
  165|       |
  166|  14.3k|	sbuf->read_point = 0;
  167|  14.3k|	sbuf->chars_in_buffer = bytes_read;
  168|       |
  169|       |	/* Always add a null byte so we can use strchr() etc. on lines. This is
  170|       |	 * safe because input_buffer is VIPS_SBUF_BUFFER_SIZE + 1 bytes.
  171|       |	 */
  172|  14.3k|	sbuf->input_buffer[bytes_read] = '\0';
  173|       |
  174|  14.3k|	return bytes_read;
  175|  14.3k|}

vips_semaphore_init:
   60|   287k|{
   61|   287k|	s->v = v;
   62|   287k|	s->name = name;
   63|   287k|	s->mutex = vips_g_mutex_new();
   64|   287k|	s->cond = vips_g_cond_new();
   65|   287k|}
vips_semaphore_destroy:
   69|   287k|{
   70|   287k|	VIPS_FREEF(vips_g_mutex_free, s->mutex);
  ------------------
  |  |   41|   287k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   287k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   287k|	{ \
  |  |   43|   287k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 287k, False: 0]
  |  |  ------------------
  |  |   44|   287k|			(void) F((S)); \
  |  |   45|   287k|			(S) = 0; \
  |  |   46|   287k|		} \
  |  |   47|   287k|	} \
  |  |   48|   287k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   287k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   71|   287k|	VIPS_FREEF(vips_g_cond_free, s->cond);
  ------------------
  |  |   41|   287k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   287k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   287k|	{ \
  |  |   43|   287k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 287k, False: 0]
  |  |  ------------------
  |  |   44|   287k|			(void) F((S)); \
  |  |   45|   287k|			(S) = 0; \
  |  |   46|   287k|		} \
  |  |   47|   287k|	} \
  |  |   48|   287k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   287k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   72|   287k|}
vips_semaphore_upn:
   79|   431k|{
   80|   431k|	int value_after_op;
   81|       |
   82|   431k|	g_mutex_lock(s->mutex);
   83|   431k|	s->v += n;
   84|   431k|	value_after_op = s->v;
   85|       |
   86|       |	/* If we are only incrementing by one, we only need to wake a single
   87|       |	 * thread. If we are incrementing by a lot, we must wake all threads.
   88|       |	 */
   89|   431k|	if (n == 1)
  ------------------
  |  Branch (89:6): [True: 314k, False: 117k]
  ------------------
   90|   314k|		g_cond_signal(s->cond);
   91|   117k|	else
   92|   117k|		g_cond_broadcast(s->cond);
   93|   431k|	g_mutex_unlock(s->mutex);
   94|       |
   95|       |#ifdef DEBUG_IO
   96|       |	printf("vips_semaphore_upn(\"%s\",%d) = %d\n",
   97|       |		s->name, n, value_after_op);
   98|       |	if (value_after_op > 1)
   99|       |		vips_error("vips_semaphore_upn", "up over 1!");
  100|       |#endif /*DEBUG_IO*/
  101|       |
  102|   431k|	return value_after_op;
  103|   431k|}
vips_semaphore_up:
  109|   196k|{
  110|   196k|	return vips_semaphore_upn(s, 1);
  111|   196k|}
vips_semaphore_downn:
  158|  87.4k|{
  159|  87.4k|	g_assert(n >= 0);
  ------------------
  |  |  166|  87.4k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  87.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  87.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  160|       |
  161|  87.4k|	return vips__semaphore_downn_until(s, n, -1);
  162|  87.4k|}
vips_semaphore_down:
  168|   161k|{
  169|   161k|	return vips__semaphore_downn_until(s, 1, -1);
  170|   161k|}
vips_semaphore_down_timeout:
  178|      8|{
  179|      8|	gint64 end_time = g_get_monotonic_time() + timeout;
  180|       |
  181|      8|	return vips__semaphore_downn_until(s, 1, end_time);
  182|      8|}
semaphore.c:vips__semaphore_downn_until:
  118|   248k|{
  119|   248k|	int value_after_op;
  120|       |
  121|   248k|	VIPS_GATE_START("vips__semaphore_downn_until: wait");
  ------------------
  |  |   41|   248k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   248k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   248k|	{ \
  |  |   43|   248k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 248k]
  |  |  ------------------
  |  |   44|   248k|			vips__thread_gate_start(NAME); \
  |  |   45|   248k|	} \
  |  |   46|   248k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   248k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  122|       |
  123|   248k|	g_mutex_lock(s->mutex);
  124|       |
  125|   413k|	while (s->v < n) {
  ------------------
  |  Branch (125:9): [True: 164k, False: 248k]
  ------------------
  126|   164k|		if (end_time == -1)
  ------------------
  |  Branch (126:7): [True: 164k, False: 9]
  ------------------
  127|   164k|			vips__worker_cond_wait(s->cond, s->mutex);
  128|      9|		else if (!g_cond_wait_until(s->cond, s->mutex, end_time)) {
  ------------------
  |  Branch (128:12): [True: 0, False: 9]
  ------------------
  129|       |			/* timeout has passed.
  130|       |			 */
  131|      0|			g_mutex_unlock(s->mutex);
  132|       |
  133|      0|			VIPS_GATE_STOP("vips__semaphore_downn_until: wait");
  ------------------
  |  |   49|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|      0|	{ \
  |  |   51|      0|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   52|      0|			vips__thread_gate_stop(NAME); \
  |  |   53|      0|	} \
  |  |   54|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  134|      0|			return -1;
  135|      0|		}
  136|   164k|	}
  137|       |
  138|   248k|	s->v -= n;
  139|   248k|	value_after_op = s->v;
  140|       |
  141|   248k|	g_mutex_unlock(s->mutex);
  142|       |
  143|       |#ifdef DEBUG_IO
  144|       |	printf("vips__semaphore_downn_until(\"%s\",%d): %d\n",
  145|       |		s->name, n, value_after_op);
  146|       |#endif /*DEBUG_IO*/
  147|       |
  148|   248k|	VIPS_GATE_STOP("vips__semaphore_downn_until: wait");
  ------------------
  |  |   49|   248k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   248k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|   248k|	{ \
  |  |   51|   248k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 248k]
  |  |  ------------------
  |  |   52|   248k|			vips__thread_gate_stop(NAME); \
  |  |   53|   248k|	} \
  |  |   54|   248k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   248k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|       |
  150|   248k|	return value_after_op;
  151|   248k|}

vips_sink_base_init:
  359|  39.5k|{
  360|       |	/* Always clear kill before we start looping. See the
  361|       |	 * call to vips_image_iskilled() below.
  362|       |	 */
  363|  39.5k|	vips_image_set_kill(image, FALSE);
  ------------------
  |  |  794|  39.5k|#define	FALSE	(0)
  ------------------
  364|       |
  365|  39.5k|	sink_base->im = image;
  366|  39.5k|	sink_base->x = 0;
  367|  39.5k|	sink_base->y = 0;
  368|       |
  369|  39.5k|	vips_get_tile_size(image,
  370|  39.5k|		&sink_base->tile_width, &sink_base->tile_height,
  371|  39.5k|		&sink_base->n_lines);
  372|       |
  373|  39.5k|	sink_base->processed = 0;
  374|  39.5k|}
vips_sink_base_progress:
  430|  18.5k|{
  431|  18.5k|	SinkBase *sink_base = (SinkBase *) a;
  432|       |
  433|  18.5k|	VIPS_DEBUG_MSG("vips_sink_base_progress:\n");
  ------------------
  |  |   47|  18.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  18.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  18.5k|	{ \
  |  |   49|  18.5k|		; \
  |  |   50|  18.5k|	} \
  |  |   51|  18.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  18.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  434|       |
  435|       |	/* Trigger any eval callbacks on our source image and
  436|       |	 * check for errors.
  437|       |	 */
  438|  18.5k|	vips_image_eval(sink_base->im, sink_base->processed);
  439|  18.5k|	if (vips_image_iskilled(sink_base->im))
  ------------------
  |  Branch (439:6): [True: 0, False: 18.5k]
  ------------------
  440|      0|		return -1;
  441|       |
  442|  18.5k|	return 0;
  443|  18.5k|}

vips_sink_disc:
  509|  21.6k|{
  510|  21.6k|	Write write;
  511|  21.6k|	int result;
  512|       |
  513|  21.6k|	vips_image_preeval(im);
  514|       |
  515|  21.6k|	write_init(&write, im, write_fn, a);
  516|       |
  517|  21.6k|	result = 0;
  518|  21.6k|	if (!write.buf ||
  ------------------
  |  Branch (518:6): [True: 0, False: 21.6k]
  ------------------
  519|  21.6k|		!write.buf_back ||
  ------------------
  |  Branch (519:3): [True: 0, False: 21.6k]
  ------------------
  520|  21.6k|		wbuffer_position(write.buf, 0, write.sink_base.n_lines) ||
  ------------------
  |  Branch (520:3): [True: 0, False: 21.6k]
  ------------------
  521|  21.6k|		vips_threadpool_run(im,
  ------------------
  |  Branch (521:3): [True: 13.2k, False: 8.38k]
  ------------------
  522|  21.6k|			write_thread_state_new,
  523|  21.6k|			wbuffer_allocate_fn,
  524|  21.6k|			wbuffer_work_fn,
  525|  21.6k|			vips_sink_base_progress,
  526|  21.6k|			&write))
  527|  13.2k|		result = -1;
  528|       |
  529|       |	/* Just before allocate signalled stop, it set write.buf writing. We
  530|       |	 * need to wait for this write to finish.
  531|       |	 *
  532|       |	 * We can't just free the buffers (which will wait for the bg threads
  533|       |	 * to finish), since the bg thread might see the kill before it gets a
  534|       |	 * chance to write.
  535|       |	 *
  536|       |	 * If the pool exited with an error, write.buf might not have been
  537|       |	 * started (if the allocate failed), and in any case, we don't care if
  538|       |	 * the final write went through or not.
  539|       |	 */
  540|  21.6k|	if (!result)
  ------------------
  |  Branch (540:6): [True: 8.38k, False: 13.2k]
  ------------------
  541|  8.38k|		vips_semaphore_down(&write.buf->done);
  542|       |
  543|  21.6k|	vips_image_posteval(im);
  544|       |
  545|       |	/* The final write might have failed, pick up any error code.
  546|       |	 */
  547|  21.6k|	result |= write_check_error(&write);
  548|       |
  549|  21.6k|	write_free(&write);
  550|       |
  551|  21.6k|	vips_image_minimise_all(im);
  552|       |
  553|  21.6k|	return result;
  554|  21.6k|}
sinkdisc.c:write_thread_state_class_init:
  133|      1|{
  134|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  135|       |
  136|      1|	object_class->nickname = "writethreadstate";
  137|      1|	object_class->description = _("per-thread state for sinkdisc");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  138|      1|}
sinkdisc.c:write_thread_state_init:
  142|  21.6k|{
  143|  21.6k|	state->buf = NULL;
  144|  21.6k|}
sinkdisc.c:write_init:
  456|  21.6k|{
  457|  21.6k|	vips_sink_base_init(&write->sink_base, image);
  458|       |
  459|  21.6k|	write->buf = wbuffer_new(write);
  460|  21.6k|	write->buf_back = wbuffer_new(write);
  461|  21.6k|	write->write_fn = write_fn;
  462|  21.6k|	write->a = a;
  463|  21.6k|}
sinkdisc.c:wbuffer_new:
  227|  43.2k|{
  228|  43.2k|	WriteBuffer *wbuffer;
  229|       |
  230|  43.2k|	if (!(wbuffer = VIPS_NEW(NULL, WriteBuffer)))
  ------------------
  |  |   70|  43.2k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  43.2k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  43.2k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  43.2k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  43.2k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (230:6): [True: 0, False: 43.2k]
  ------------------
  231|      0|		return NULL;
  232|  43.2k|	wbuffer->write = write;
  233|  43.2k|	wbuffer->region = NULL;
  234|  43.2k|	vips_semaphore_init(&wbuffer->go, 0, "go");
  235|  43.2k|	vips_semaphore_init(&wbuffer->nwrite, 0, "nwrite");
  236|  43.2k|	vips_semaphore_init(&wbuffer->done, 0, "done");
  237|  43.2k|	vips_semaphore_init(&wbuffer->finish, 0, "finish");
  238|  43.2k|	wbuffer->write_errno = 0;
  239|  43.2k|	wbuffer->running = FALSE;
  ------------------
  |  |  794|  43.2k|#define	FALSE	(0)
  ------------------
  240|  43.2k|	wbuffer->kill = FALSE;
  ------------------
  |  |  794|  43.2k|#define	FALSE	(0)
  ------------------
  241|       |
  242|  43.2k|	if (!(wbuffer->region = vips_region_new(write->sink_base.im))) {
  ------------------
  |  Branch (242:6): [True: 0, False: 43.2k]
  ------------------
  243|      0|		wbuffer_free(wbuffer);
  244|      0|		return NULL;
  245|      0|	}
  246|       |
  247|       |	/* The worker threads need to be able to move the buffers around.
  248|       |	 */
  249|  43.2k|	vips__region_no_ownership(wbuffer->region);
  250|       |
  251|       |	/* Make this last (picks up parts of wbuffer on startup).
  252|       |	 */
  253|  43.2k|	if (vips_thread_execute("wbuffer", wbuffer_write_thread, wbuffer)) {
  ------------------
  |  Branch (253:6): [True: 0, False: 43.2k]
  ------------------
  254|      0|		wbuffer_free(wbuffer);
  255|      0|		return NULL;
  256|      0|	}
  257|       |
  258|  43.2k|	wbuffer->running = TRUE;
  ------------------
  |  |  798|  43.2k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  43.2k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  259|       |
  260|  43.2k|	return wbuffer;
  261|  43.2k|}
sinkdisc.c:wbuffer_free:
  156|  43.2k|{
  157|       |	/* Is there a thread running this region? Kill it!
  158|       |	 */
  159|  43.2k|	if (wbuffer->running) {
  ------------------
  |  Branch (159:6): [True: 43.2k, False: 0]
  ------------------
  160|  43.2k|		wbuffer->kill = TRUE;
  ------------------
  |  |  798|  43.2k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  43.2k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  161|  43.2k|		vips_semaphore_up(&wbuffer->go);
  162|       |
  163|  43.2k|		vips_semaphore_down(&wbuffer->finish);
  164|       |
  165|  43.2k|		VIPS_DEBUG_MSG("wbuffer_free:\n");
  ------------------
  |  |   47|  43.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  43.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  43.2k|	{ \
  |  |   49|  43.2k|		; \
  |  |   50|  43.2k|	} \
  |  |   51|  43.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  43.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|       |
  167|  43.2k|		wbuffer->running = FALSE;
  ------------------
  |  |  794|  43.2k|#define	FALSE	(0)
  ------------------
  168|  43.2k|	}
  169|       |
  170|  43.2k|	VIPS_UNREF(wbuffer->region);
  ------------------
  |  |   57|  43.2k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  43.2k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  43.2k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  43.2k|	{ \
  |  |  |  |   43|  43.2k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 43.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  43.2k|			(void) F((S)); \
  |  |  |  |   45|  43.2k|			(S) = 0; \
  |  |  |  |   46|  43.2k|		} \
  |  |  |  |   47|  43.2k|	} \
  |  |  |  |   48|  43.2k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  43.2k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  171|  43.2k|	vips_semaphore_destroy(&wbuffer->go);
  172|  43.2k|	vips_semaphore_destroy(&wbuffer->nwrite);
  173|  43.2k|	vips_semaphore_destroy(&wbuffer->done);
  174|  43.2k|	vips_semaphore_destroy(&wbuffer->finish);
  175|  43.2k|	g_free(wbuffer);
  176|  43.2k|}
sinkdisc.c:wbuffer_write_thread:
  198|  43.2k|{
  199|  43.2k|	WriteBuffer *wbuffer = (WriteBuffer *) data;
  200|       |
  201|  51.6k|	for (;;) {
  202|       |		/* Wait to be told to write.
  203|       |		 */
  204|  51.6k|		vips_semaphore_down(&wbuffer->go);
  205|       |
  206|  51.6k|		if (wbuffer->kill)
  ------------------
  |  Branch (206:7): [True: 43.2k, False: 8.38k]
  ------------------
  207|  43.2k|			break;
  208|       |
  209|       |		/* Now block until the last worker finishes on this buffer.
  210|       |		 */
  211|  8.38k|		vips_semaphore_downn(&wbuffer->nwrite, 0);
  212|       |
  213|  8.38k|		wbuffer_write(wbuffer);
  214|       |
  215|       |		/* Signal write complete.
  216|       |		 */
  217|  8.38k|		vips_semaphore_up(&wbuffer->done);
  218|  8.38k|	}
  219|       |
  220|       |	/* We are exiting: tell the main thread.
  221|       |	 */
  222|  43.2k|	vips_semaphore_up(&wbuffer->finish);
  223|  43.2k|}
sinkdisc.c:wbuffer_write:
  180|  8.38k|{
  181|  8.38k|	Write *write = wbuffer->write;
  182|       |
  183|  8.38k|	VIPS_DEBUG_MSG("wbuffer_write: %d bytes from wbuffer %p\n",
  ------------------
  |  |   47|  8.38k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  8.38k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  8.38k|	{ \
  |  |   49|  8.38k|		; \
  |  |   50|  8.38k|	} \
  |  |   51|  8.38k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  184|  8.38k|		wbuffer->region->bpl * wbuffer->area.height, wbuffer);
  185|       |
  186|  8.38k|	VIPS_GATE_START("wbuffer_write: work");
  ------------------
  |  |   41|  8.38k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  8.38k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  8.38k|	{ \
  |  |   43|  8.38k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 8.38k]
  |  |  ------------------
  |  |   44|  8.38k|			vips__thread_gate_start(NAME); \
  |  |   45|  8.38k|	} \
  |  |   46|  8.38k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|       |
  188|  8.38k|	wbuffer->write_errno = write->write_fn(wbuffer->region,
  189|  8.38k|		&wbuffer->area, write->a);
  190|       |
  191|  8.38k|	VIPS_GATE_STOP("wbuffer_write: work");
  ------------------
  |  |   49|  8.38k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  8.38k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  8.38k|	{ \
  |  |   51|  8.38k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 8.38k]
  |  |  ------------------
  |  |   52|  8.38k|			vips__thread_gate_stop(NAME); \
  |  |   53|  8.38k|	} \
  |  |   54|  8.38k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|  8.38k|}
sinkdisc.c:wbuffer_position:
  291|  21.6k|{
  292|  21.6k|	VipsRect image, area;
  293|  21.6k|	int result;
  294|       |
  295|  21.6k|	image.left = 0;
  296|  21.6k|	image.top = 0;
  297|  21.6k|	image.width = wbuffer->write->sink_base.im->Xsize;
  298|  21.6k|	image.height = wbuffer->write->sink_base.im->Ysize;
  299|       |
  300|  21.6k|	area.left = 0;
  301|  21.6k|	area.top = top;
  302|  21.6k|	area.width = wbuffer->write->sink_base.im->Xsize;
  303|  21.6k|	area.height = height;
  304|       |
  305|  21.6k|	vips_rect_intersectrect(&area, &image, &wbuffer->area);
  306|       |
  307|       |	/* The workers take turns to move the buffers.
  308|       |	 */
  309|  21.6k|	vips__region_take_ownership(wbuffer->region);
  310|       |
  311|  21.6k|	result = vips_region_buffer(wbuffer->region, &wbuffer->area);
  312|       |
  313|  21.6k|	vips__region_no_ownership(wbuffer->region);
  314|       |
  315|       |	/* This should be an exclusive buffer, hopefully.
  316|       |	 */
  317|  21.6k|	if (!result)
  ------------------
  |  Branch (317:6): [True: 21.6k, False: 0]
  ------------------
  318|  21.6k|		g_assert(!wbuffer->region->buffer->done);
  ------------------
  |  |  166|  21.6k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  319|       |
  320|  21.6k|	return result;
  321|  21.6k|}
sinkdisc.c:write_thread_state_new:
  148|  21.6k|{
  149|  21.6k|	return VIPS_THREAD_STATE(vips_object_new(
  ------------------
  |  |   60|  21.6k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  21.6k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  21.6k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|  21.6k|		VIPS_TYPE_THREAD_STATE, VipsThreadState))
  ------------------
  150|  21.6k|		write_thread_state_get_type(),
  151|  21.6k|		vips_thread_state_set, im, a));
  152|  21.6k|}
sinkdisc.c:wbuffer_allocate_fn:
  330|  49.1k|{
  331|  49.1k|	WriteThreadState *wstate = (WriteThreadState *) state;
  332|  49.1k|	Write *write = (Write *) a;
  333|  49.1k|	SinkBase *sink_base = (SinkBase *) write;
  334|       |
  335|  49.1k|	VipsRect image;
  336|  49.1k|	VipsRect tile;
  337|       |
  338|  49.1k|	VIPS_DEBUG_MSG("wbuffer_allocate_fn:\n");
  ------------------
  |  |   47|  49.1k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  49.1k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  49.1k|	{ \
  |  |   49|  49.1k|		; \
  |  |   50|  49.1k|	} \
  |  |   51|  49.1k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  49.1k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  339|       |
  340|       |	/* Is the state x/y OK? New line or maybe new buffer or maybe even
  341|       |	 * all done.
  342|       |	 */
  343|  49.1k|	if (sink_base->x >= write->buf->area.width) {
  ------------------
  |  Branch (343:6): [True: 27.4k, False: 21.6k]
  ------------------
  344|  27.4k|		sink_base->x = 0;
  345|  27.4k|		sink_base->y += sink_base->tile_height;
  346|       |
  347|  27.4k|		if (sink_base->y >= VIPS_RECT_BOTTOM(&write->buf->area)) {
  ------------------
  |  |   49|  27.4k|#define VIPS_RECT_BOTTOM(R) ((R)->top + (R)->height)
  ------------------
  |  Branch (347:7): [True: 8.38k, False: 19.1k]
  ------------------
  348|  8.38k|			VIPS_DEBUG_MSG("wbuffer_allocate_fn: "
  ------------------
  |  |   47|  8.38k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  8.38k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  8.38k|	{ \
  |  |   49|  8.38k|		; \
  |  |   50|  8.38k|	} \
  |  |   51|  8.38k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  349|  8.38k|						   "finished top = %d, height = %d\n",
  350|  8.38k|				write->buf->area.top, write->buf->area.height);
  351|       |
  352|       |			/* Block until the write of the previous buffer
  353|       |			 * is done, then set write of this buffer going.
  354|       |			 */
  355|  8.38k|			if (wbuffer_flush(write)) {
  ------------------
  |  Branch (355:8): [True: 0, False: 8.38k]
  ------------------
  356|      0|				*stop = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  357|      0|				return -1;
  358|      0|			}
  359|       |
  360|       |			/* End of image?
  361|       |			 */
  362|  8.38k|			if (sink_base->y >= sink_base->im->Ysize) {
  ------------------
  |  Branch (362:8): [True: 8.38k, False: 0]
  ------------------
  363|  8.38k|				*stop = TRUE;
  ------------------
  |  |  798|  8.38k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  8.38k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  364|  8.38k|				return 0;
  365|  8.38k|			}
  366|       |
  367|  8.38k|			VIPS_DEBUG_MSG("wbuffer_allocate_fn: "
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|  8.38k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  368|      0|						   "starting top = %d, height = %d\n",
  369|      0|				sink_base->y, sink_base->n_lines);
  370|       |
  371|       |			/* Swap buffers.
  372|       |			 */
  373|      0|			VIPS_SWAP(WriteBuffer *, write->buf, write->buf_back);
  ------------------
  |  |  114|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  115|      0|	{ \
  |  |  116|      0|		TYPE t = (A); \
  |  |  117|      0|		(A) = (B); \
  |  |  118|      0|		(B) = t; \
  |  |  119|      0|	} \
  |  |  120|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  374|       |
  375|       |			/* Position buf at the new y.
  376|       |			 */
  377|      0|			if (wbuffer_position(write->buf,
  ------------------
  |  Branch (377:8): [True: 0, False: 0]
  ------------------
  378|      0|					sink_base->y, sink_base->n_lines)) {
  379|      0|				*stop = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  380|      0|				return -1;
  381|      0|			}
  382|       |
  383|       |			/* This will be the first tile of a new buffer ... mark this as a
  384|       |			 * good place to stall for a moment if we want to stress the
  385|       |			 * caching system. See threadpool.c.
  386|       |			 */
  387|      0|            state->stall = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  388|      0|		}
  389|  27.4k|	}
  390|       |
  391|       |	/* x, y and buf are good: save params for thread.
  392|       |	 */
  393|  40.7k|	image.left = 0;
  394|  40.7k|	image.top = 0;
  395|  40.7k|	image.width = sink_base->im->Xsize;
  396|  40.7k|	image.height = sink_base->im->Ysize;
  397|  40.7k|	tile.left = sink_base->x;
  398|  40.7k|	tile.top = sink_base->y;
  399|  40.7k|	tile.width = sink_base->tile_width;
  400|  40.7k|	tile.height = sink_base->tile_height;
  401|  40.7k|	vips_rect_intersectrect(&image, &tile, &state->pos);
  402|       |
  403|       |	/* The thread needs to know which buffer it's writing to.
  404|       |	 */
  405|  40.7k|	wstate->buf = write->buf;
  406|       |
  407|  40.7k|	VIPS_DEBUG_MSG("  thread %p allocated "
  ------------------
  |  |   47|  40.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  40.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  40.7k|	{ \
  |  |   49|  40.7k|		; \
  |  |   50|  40.7k|	} \
  |  |   51|  40.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  40.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  408|  40.7k|				   "left = %d, top = %d, width = %d, height = %d\n",
  409|  40.7k|		g_thread_self(),
  410|  40.7k|		tile.left, tile.top, tile.width, tile.height);
  411|       |
  412|       |	/* Add to the number of writers on the buffer.
  413|       |	 */
  414|  40.7k|	vips_semaphore_upn(&write->buf->nwrite, -1);
  415|       |
  416|       |	/* Move state on.
  417|       |	 */
  418|  40.7k|	sink_base->x += sink_base->tile_width;
  419|       |
  420|       |	/* Add the number of pixels we've just allocated to progress.
  421|       |	 */
  422|  40.7k|	sink_base->processed += state->pos.width * state->pos.height;
  423|       |
  424|  40.7k|	return 0;
  425|  49.1k|}
sinkdisc.c:wbuffer_flush:
  267|  8.38k|{
  268|  8.38k|	VIPS_DEBUG_MSG("wbuffer_flush:\n");
  ------------------
  |  |   47|  8.38k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  8.38k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  8.38k|	{ \
  |  |   49|  8.38k|		; \
  |  |   50|  8.38k|	} \
  |  |   51|  8.38k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|       |
  270|       |	/* Block until the other buffer has been written. We have to do this
  271|       |	 * before we can set this buffer writing or we'll lose output ordering.
  272|       |	 */
  273|  8.38k|	if (write->buf->area.top > 0) {
  ------------------
  |  Branch (273:6): [True: 0, False: 8.38k]
  ------------------
  274|      0|		vips_semaphore_down(&write->buf_back->done);
  275|       |
  276|      0|		if (write_check_error(write))
  ------------------
  |  Branch (276:7): [True: 0, False: 0]
  ------------------
  277|      0|			return -1;
  278|      0|	}
  279|       |
  280|       |	/* Set the background writer going for this buffer.
  281|       |	 */
  282|  8.38k|	vips_semaphore_up(&write->buf->go);
  283|       |
  284|  8.38k|	return 0;
  285|  8.38k|}
sinkdisc.c:wbuffer_work_fn:
  431|  40.7k|{
  432|  40.7k|	WriteThreadState *wstate = (WriteThreadState *) state;
  433|       |
  434|  40.7k|	int result;
  435|       |
  436|  40.7k|	VIPS_DEBUG_MSG("wbuffer_work_fn: thread %p, %d x %d\n",
  ------------------
  |  |   47|  40.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  40.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  40.7k|	{ \
  |  |   49|  40.7k|		; \
  |  |   50|  40.7k|	} \
  |  |   51|  40.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  40.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  437|  40.7k|		g_thread_self(),
  438|  40.7k|		state->pos.left, state->pos.top);
  439|       |
  440|  40.7k|	result = vips_region_prepare_to(state->reg, wstate->buf->region,
  441|  40.7k|		&state->pos, state->pos.left, state->pos.top);
  442|       |
  443|  40.7k|	VIPS_DEBUG_MSG("wbuffer_work_fn: thread %p result = %d\n",
  ------------------
  |  |   47|  40.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  40.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  40.7k|	{ \
  |  |   49|  40.7k|		; \
  |  |   50|  40.7k|	} \
  |  |   51|  40.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  40.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  444|  40.7k|		g_thread_self(), result);
  445|       |
  446|       |	/* Tell the bg write thread we've left.
  447|       |	 */
  448|  40.7k|	vips_semaphore_upn(&wstate->buf->nwrite, 1);
  449|       |
  450|  40.7k|	return result;
  451|  40.7k|}
sinkdisc.c:write_check_error:
  103|  21.6k|{
  104|  21.6k|	if (write->buf->write_errno ||
  ------------------
  |  Branch (104:6): [True: 0, False: 21.6k]
  ------------------
  105|  21.6k|		write->buf_back->write_errno) {
  ------------------
  |  Branch (105:3): [True: 0, False: 21.6k]
  ------------------
  106|      0|		vips_error_system(write->buf->write_errno ?
  ------------------
  |  Branch (106:21): [True: 0, False: 0]
  ------------------
  107|      0|			write->buf->write_errno : write->buf_back->write_errno,
  108|      0|			"wbuffer_write", "%s", _("write failed"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  109|      0|		return -1;
  110|      0|	}
  111|       |
  112|  21.6k|	return 0;
  113|  21.6k|}
sinkdisc.c:write_free:
  467|  21.6k|{
  468|  21.6k|	VIPS_FREEF(wbuffer_free, write->buf);
  ------------------
  |  |   41|  21.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  21.6k|	{ \
  |  |   43|  21.6k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 21.6k, False: 0]
  |  |  ------------------
  |  |   44|  21.6k|			(void) F((S)); \
  |  |   45|  21.6k|			(S) = 0; \
  |  |   46|  21.6k|		} \
  |  |   47|  21.6k|	} \
  |  |   48|  21.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  469|  21.6k|	VIPS_FREEF(wbuffer_free, write->buf_back);
  ------------------
  |  |   41|  21.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  21.6k|	{ \
  |  |   43|  21.6k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 21.6k, False: 0]
  |  |  ------------------
  |  |   44|  21.6k|			(void) F((S)); \
  |  |   45|  21.6k|			(S) = 0; \
  |  |   46|  21.6k|		} \
  |  |   47|  21.6k|	} \
  |  |   48|  21.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|  21.6k|}

vips_sink_memory:
  325|  17.8k|{
  326|  17.8k|	SinkMemory memory;
  327|  17.8k|	int result;
  328|       |
  329|  17.8k|	if (sink_memory_init(&memory, image))
  ------------------
  |  Branch (329:6): [True: 0, False: 17.8k]
  ------------------
  330|      0|		return -1;
  331|       |
  332|  17.8k|	vips_image_preeval(image);
  333|       |
  334|  17.8k|	result = 0;
  335|  17.8k|	sink_memory_area_position(memory.area, 0, memory.sink_base.n_lines);
  336|  17.8k|	if (vips_threadpool_run(image,
  ------------------
  |  Branch (336:6): [True: 10.7k, False: 7.08k]
  ------------------
  337|  17.8k|			sink_memory_thread_state_new,
  338|  17.8k|			sink_memory_area_allocate_fn,
  339|  17.8k|			sink_memory_area_work_fn,
  340|  17.8k|			vips_sink_base_progress,
  341|  17.8k|			&memory))
  342|  10.7k|		result = -1;
  343|       |
  344|  17.8k|	vips_image_posteval(image);
  345|       |
  346|  17.8k|	sink_memory_free(&memory);
  347|       |
  348|  17.8k|	vips_image_minimise_all(image);
  349|       |
  350|  17.8k|	VIPS_DEBUG_MSG("vips_sink_memory: done\n");
  ------------------
  |  |   47|  17.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  17.8k|	{ \
  |  |   49|  17.8k|		; \
  |  |   50|  17.8k|	} \
  |  |   51|  17.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  351|       |
  352|  17.8k|	return result;
  353|  17.8k|}
sinkmemory.c:sink_memory_thread_state_class_init:
  105|      1|{
  106|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|       |
  108|      1|	object_class->nickname = "sinkmemorythreadstate";
  109|      1|	object_class->description = _("per-thread state for sinkmemory");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  110|      1|}
sinkmemory.c:sink_memory_thread_state_init:
  114|  17.8k|{
  115|  17.8k|}
sinkmemory.c:sink_memory_init:
  289|  17.8k|{
  290|  17.8k|	VipsRect all;
  291|       |
  292|  17.8k|	vips_sink_base_init(&memory->sink_base, image);
  293|  17.8k|	memory->area = NULL;
  294|  17.8k|	memory->old_area = NULL;
  295|       |
  296|  17.8k|	all.left = 0;
  297|  17.8k|	all.top = 0;
  298|  17.8k|	all.width = image->Xsize;
  299|  17.8k|	all.height = image->Ysize;
  300|       |
  301|  17.8k|	if (!(memory->region = vips_region_new(image)) ||
  ------------------
  |  Branch (301:6): [True: 0, False: 17.8k]
  ------------------
  302|  17.8k|		vips_region_image(memory->region, &all) ||
  ------------------
  |  Branch (302:3): [True: 0, False: 17.8k]
  ------------------
  303|  17.8k|		!(memory->area = sink_memory_area_new(memory)) ||
  ------------------
  |  Branch (303:3): [True: 0, False: 17.8k]
  ------------------
  304|  17.8k|		!(memory->old_area = sink_memory_area_new(memory))) {
  ------------------
  |  Branch (304:3): [True: 0, False: 17.8k]
  ------------------
  305|      0|		sink_memory_free(memory);
  306|      0|		return -1;
  307|      0|	}
  308|       |
  309|  17.8k|	return 0;
  310|  17.8k|}
sinkmemory.c:sink_memory_area_new:
  134|  35.7k|{
  135|  35.7k|	SinkMemoryArea *area;
  136|       |
  137|  35.7k|	if (!(area = VIPS_NEW(NULL, SinkMemoryArea)))
  ------------------
  |  |   70|  35.7k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  35.7k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  35.7k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  35.7k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  35.7k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (137:6): [True: 0, False: 35.7k]
  ------------------
  138|      0|		return NULL;
  139|  35.7k|	area->memory = memory;
  140|  35.7k|	vips_semaphore_init(&area->nwrite, 0, "nwrite");
  141|       |
  142|  35.7k|	return area;
  143|  35.7k|}
sinkmemory.c:sink_memory_area_position:
  149|  17.8k|{
  150|  17.8k|	SinkMemory *memory = area->memory;
  151|       |
  152|  17.8k|	VipsRect all, rect;
  153|       |
  154|  17.8k|	all.left = 0;
  155|  17.8k|	all.top = 0;
  156|  17.8k|	all.width = memory->sink_base.im->Xsize;
  157|  17.8k|	all.height = memory->sink_base.im->Ysize;
  158|       |
  159|  17.8k|	rect.left = 0;
  160|  17.8k|	rect.top = top;
  161|  17.8k|	rect.width = memory->sink_base.im->Xsize;
  162|  17.8k|	rect.height = height;
  163|       |
  164|  17.8k|	vips_rect_intersectrect(&all, &rect, &area->rect);
  165|  17.8k|}
sinkmemory.c:sink_memory_thread_state_new:
  119|  17.8k|{
  120|  17.8k|	return VIPS_THREAD_STATE(vips_object_new(
  ------------------
  |  |   60|  17.8k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  17.8k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  17.8k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|  17.8k|		VIPS_TYPE_THREAD_STATE, VipsThreadState))
  ------------------
  121|  17.8k|		sink_memory_thread_state_get_type(),
  122|  17.8k|		vips_thread_state_set, image, a));
  123|  17.8k|}
sinkmemory.c:sink_memory_area_allocate_fn:
  175|  44.3k|{
  176|  44.3k|	SinkMemoryThreadState *smstate = (SinkMemoryThreadState *) state;
  177|  44.3k|	SinkMemory *memory = (SinkMemory *) a;
  178|  44.3k|	SinkBase *sink_base = (SinkBase *) memory;
  179|       |
  180|  44.3k|	VipsRect image;
  181|  44.3k|	VipsRect tile;
  182|       |
  183|  44.3k|	VIPS_DEBUG_MSG("sink_memory_area_allocate_fn: %p\n", g_thread_self());
  ------------------
  |  |   47|  44.3k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  44.3k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  44.3k|	{ \
  |  |   49|  44.3k|		; \
  |  |   50|  44.3k|	} \
  |  |   51|  44.3k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  44.3k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  184|       |
  185|       |	/* Is the state x/y OK? New line or maybe new buffer or maybe even
  186|       |	 * all done.
  187|       |	 */
  188|  44.3k|	if (sink_base->x >= memory->area->rect.width) {
  ------------------
  |  Branch (188:6): [True: 26.4k, False: 17.8k]
  ------------------
  189|  26.4k|		sink_base->x = 0;
  190|  26.4k|		sink_base->y += sink_base->tile_height;
  191|       |
  192|  26.4k|		if (sink_base->y >= VIPS_RECT_BOTTOM(&memory->area->rect)) {
  ------------------
  |  |   49|  26.4k|#define VIPS_RECT_BOTTOM(R) ((R)->top + (R)->height)
  ------------------
  |  Branch (192:7): [True: 7.08k, False: 19.4k]
  ------------------
  193|       |			/* Block until the previous area is done.
  194|       |			 */
  195|  7.08k|			if (memory->area->rect.top > 0)
  ------------------
  |  Branch (195:8): [True: 0, False: 7.08k]
  ------------------
  196|      0|				vips_semaphore_downn(
  197|      0|					&memory->old_area->nwrite, 0);
  198|       |
  199|       |			/* End of image?
  200|       |			 */
  201|  7.08k|			if (sink_base->y >= sink_base->im->Ysize) {
  ------------------
  |  Branch (201:8): [True: 7.08k, False: 0]
  ------------------
  202|  7.08k|				*stop = TRUE;
  ------------------
  |  |  798|  7.08k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  7.08k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  203|  7.08k|				return 0;
  204|  7.08k|			}
  205|       |
  206|       |			/* Swap buffers.
  207|       |			 */
  208|  7.08k|			VIPS_SWAP(SinkMemoryArea *,
  ------------------
  |  |  114|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |  115|      0|	{ \
  |  |  116|      0|		TYPE t = (A); \
  |  |  117|      0|		(A) = (B); \
  |  |  118|      0|		(B) = t; \
  |  |  119|      0|	} \
  |  |  120|  7.08k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  7.08k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|      0|				memory->area, memory->old_area);
  210|       |
  211|       |			/* Position buf at the new y.
  212|       |			 */
  213|      0|			sink_memory_area_position(memory->area,
  214|      0|				sink_base->y, sink_base->n_lines);
  215|      0|		}
  216|  26.4k|	}
  217|       |
  218|       |	/* x, y and buf are good: save params for thread.
  219|       |	 */
  220|  37.2k|	image.left = 0;
  221|  37.2k|	image.top = 0;
  222|  37.2k|	image.width = sink_base->im->Xsize;
  223|  37.2k|	image.height = sink_base->im->Ysize;
  224|  37.2k|	tile.left = sink_base->x;
  225|  37.2k|	tile.top = sink_base->y;
  226|  37.2k|	tile.width = sink_base->tile_width;
  227|  37.2k|	tile.height = sink_base->tile_height;
  228|  37.2k|	vips_rect_intersectrect(&image, &tile, &state->pos);
  229|       |
  230|       |	/* The thread needs to know which area it's writing to.
  231|       |	 */
  232|  37.2k|	smstate->area = memory->area;
  233|       |
  234|  37.2k|	VIPS_DEBUG_MSG("  %p allocated %d x %d:\n",
  ------------------
  |  |   47|  37.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  37.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  37.2k|	{ \
  |  |   49|  37.2k|		; \
  |  |   50|  37.2k|	} \
  |  |   51|  37.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  37.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  235|  37.2k|		g_thread_self(), state->pos.left, state->pos.top);
  236|       |
  237|       |	/* Add to the number of writers on the area.
  238|       |	 */
  239|  37.2k|	vips_semaphore_upn(&memory->area->nwrite, -1);
  240|       |
  241|       |	/* Move state on.
  242|       |	 */
  243|  37.2k|	sink_base->x += sink_base->tile_width;
  244|       |
  245|       |	/* Add the number of pixels we've just allocated to progress.
  246|       |	 */
  247|  37.2k|	sink_base->processed += state->pos.width * state->pos.height;
  248|       |
  249|  37.2k|	return 0;
  250|  44.3k|}
sinkmemory.c:sink_memory_area_work_fn:
  256|  37.2k|{
  257|  37.2k|	SinkMemory *memory = (SinkMemory *) a;
  258|  37.2k|	SinkMemoryThreadState *smstate = (SinkMemoryThreadState *) state;
  259|  37.2k|	SinkMemoryArea *area = smstate->area;
  260|       |
  261|  37.2k|	int result;
  262|       |
  263|  37.2k|	VIPS_DEBUG_MSG("sink_memory_area_work_fn: %p %d x %d\n",
  ------------------
  |  |   47|  37.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  37.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  37.2k|	{ \
  |  |   49|  37.2k|		; \
  |  |   50|  37.2k|	} \
  |  |   51|  37.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  37.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  264|  37.2k|		g_thread_self(), state->pos.left, state->pos.top);
  265|       |
  266|  37.2k|	result = vips_region_prepare_to(state->reg, memory->region,
  267|  37.2k|		&state->pos, state->pos.left, state->pos.top);
  268|       |
  269|  37.2k|	VIPS_DEBUG_MSG("sink_memory_area_work_fn: %p result = %d\n",
  ------------------
  |  |   47|  37.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  37.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  37.2k|	{ \
  |  |   49|  37.2k|		; \
  |  |   50|  37.2k|	} \
  |  |   51|  37.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  37.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  270|  37.2k|		g_thread_self(), result);
  271|       |
  272|       |	/* Tell the allocator we're done.
  273|       |	 */
  274|  37.2k|	vips_semaphore_upn(&area->nwrite, 1);
  275|       |
  276|  37.2k|	return result;
  277|  37.2k|}
sinkmemory.c:sink_memory_free:
  281|  17.8k|{
  282|  17.8k|	VIPS_FREEF(sink_memory_area_free, memory->area);
  ------------------
  |  |   41|  17.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  17.8k|	{ \
  |  |   43|  17.8k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 17.8k, False: 0]
  |  |  ------------------
  |  |   44|  17.8k|			(void) F((S)); \
  |  |   45|  17.8k|			(S) = 0; \
  |  |   46|  17.8k|		} \
  |  |   47|  17.8k|	} \
  |  |   48|  17.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  283|  17.8k|	VIPS_FREEF(sink_memory_area_free, memory->old_area);
  ------------------
  |  |   41|  17.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  17.8k|	{ \
  |  |   43|  17.8k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 17.8k, False: 0]
  |  |  ------------------
  |  |   44|  17.8k|			(void) F((S)); \
  |  |   45|  17.8k|			(S) = 0; \
  |  |   46|  17.8k|		} \
  |  |   47|  17.8k|	} \
  |  |   48|  17.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|  17.8k|	VIPS_UNREF(memory->region);
  ------------------
  |  |   57|  17.8k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  17.8k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  17.8k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  17.8k|	{ \
  |  |  |  |   43|  17.8k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 17.8k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  17.8k|			(void) F((S)); \
  |  |  |  |   45|  17.8k|			(S) = 0; \
  |  |  |  |   46|  17.8k|		} \
  |  |  |  |   47|  17.8k|	} \
  |  |  |  |   48|  17.8k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  17.8k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  285|  17.8k|}
sinkmemory.c:sink_memory_area_free:
  127|  35.7k|{
  128|  35.7k|	vips_semaphore_destroy(&area->nwrite);
  129|  35.7k|	g_free(area);
  130|  35.7k|}

sinkscreen.c:render_thread_state_class_init:
  192|      1|{
  193|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|       |
  195|      1|	object_class->nickname = "renderthreadstate";
  196|      1|	object_class->description = _("per-thread state for render");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  197|      1|}

vips_source_new_from_blob:
  460|   195k|{
  461|   195k|	VipsSource *source;
  462|       |
  463|   195k|	VIPS_DEBUG_MSG("vips_source_new_from_blob: %p\n", blob);
  ------------------
  |  |   47|   195k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   195k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   195k|	{ \
  |  |   49|   195k|		; \
  |  |   50|   195k|	} \
  |  |   51|   195k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   195k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  464|       |
  465|   195k|	source = VIPS_SOURCE(g_object_new(VIPS_TYPE_SOURCE,
  ------------------
  |  |  106|   195k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   195k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   195k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|   195k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  466|   195k|		"blob", blob,
  467|   195k|		NULL));
  468|       |
  469|   195k|	if (vips_object_build(VIPS_OBJECT(source))) {
  ------------------
  |  |  433|   195k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|   195k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   195k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (469:6): [True: 0, False: 195k]
  ------------------
  470|      0|		VIPS_UNREF(source);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  471|      0|		return NULL;
  472|      0|	}
  473|       |
  474|   195k|	SANITY(source);
  475|       |
  476|   195k|	return source;
  477|   195k|}
vips_source_new_from_memory:
  532|   195k|{
  533|   195k|	VipsSource *source;
  534|   195k|	VipsBlob *blob;
  535|       |
  536|   195k|	VIPS_DEBUG_MSG("vips_source_new_from_buffer: %p, length = %zd\n",
  ------------------
  |  |   47|   195k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   195k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   195k|	{ \
  |  |   49|   195k|		; \
  |  |   50|   195k|	} \
  |  |   51|   195k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   195k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  537|   195k|		data, length);
  538|       |
  539|       |	/* We don't take a copy of the data or free it.
  540|       |	 */
  541|   195k|	blob = vips_blob_new(NULL, data, length);
  542|       |
  543|   195k|	source = vips_source_new_from_blob(blob);
  544|       |
  545|   195k|	vips_area_unref(VIPS_AREA(blob));
  ------------------
  |  |  137|   195k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  546|       |
  547|   195k|	SANITY(source);
  548|       |
  549|   195k|	return source;
  550|   195k|}
vips_source_minimise:
  593|  95.9k|{
  594|  95.9k|	VipsConnection *connection = VIPS_CONNECTION(source);
  ------------------
  |  |   48|  95.9k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  95.9k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  95.9k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|  95.9k|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  595|       |
  596|  95.9k|	SANITY(source);
  597|       |
  598|  95.9k|	(void) vips_source_test_features(source);
  599|       |
  600|  95.9k|	if (connection->filename &&
  ------------------
  |  Branch (600:6): [True: 0, False: 95.9k]
  ------------------
  601|  95.9k|		connection->descriptor != -1 &&
  ------------------
  |  Branch (601:3): [True: 0, False: 0]
  ------------------
  602|  95.9k|		connection->tracked_descriptor == connection->descriptor &&
  ------------------
  |  Branch (602:3): [True: 0, False: 0]
  ------------------
  603|  95.9k|		!source->is_pipe) {
  ------------------
  |  Branch (603:3): [True: 0, False: 0]
  ------------------
  604|       |#ifdef DEBUG_MINIMISE
  605|       |		printf("vips_source_minimise: %p %s\n",
  606|       |			source,
  607|       |			vips_connection_nick(VIPS_CONNECTION(source)));
  608|       |#endif /*DEBUG_MINIMISE*/
  609|       |
  610|      0|		vips_tracked_close(connection->tracked_descriptor);
  611|      0|		connection->tracked_descriptor = -1;
  612|      0|		connection->descriptor = -1;
  613|      0|	}
  614|       |
  615|  95.9k|	SANITY(source);
  616|  95.9k|}
vips_source_unminimise:
  631|  9.00M|{
  632|  9.00M|	VipsConnection *connection = VIPS_CONNECTION(source);
  ------------------
  |  |   48|  9.00M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  9.00M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  9.00M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|  9.00M|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  633|       |
  634|  9.00M|	if (connection->descriptor == -1 &&
  ------------------
  |  Branch (634:6): [True: 9.00M, False: 0]
  ------------------
  635|  9.00M|		connection->tracked_descriptor == -1 &&
  ------------------
  |  Branch (635:3): [True: 9.00M, False: 0]
  ------------------
  636|  9.00M|		connection->filename) {
  ------------------
  |  Branch (636:3): [True: 0, False: 9.00M]
  ------------------
  637|      0|		int fd;
  638|       |
  639|       |#ifdef DEBUG_MINIMISE
  640|       |		printf("vips_source_unminimise: %p %s\n",
  641|       |			source,
  642|       |			vips_connection_nick(VIPS_CONNECTION(source)));
  643|       |#endif /*DEBUG_MINIMISE*/
  644|       |
  645|      0|		if ((fd = vips_tracked_open(connection->filename,
  ------------------
  |  Branch (645:7): [True: 0, False: 0]
  ------------------
  646|      0|				 MODE_READ, 0)) == -1) {
  ------------------
  |  |   77|      0|#define MODE_READ CLOEXEC(BINARYIZE(O_RDONLY))
  |  |  ------------------
  |  |  |  |   68|      0|#define CLOEXEC(M) ((M) | O_CLOEXEC)
  |  |  ------------------
  ------------------
  647|      0|			vips_error_system(errno,
  648|      0|				vips_connection_nick(connection),
  649|      0|				"%s", _("unable to open for read"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  650|      0|			return -1;
  651|      0|		}
  652|       |
  653|      0|		connection->tracked_descriptor = fd;
  654|      0|		connection->descriptor = fd;
  655|       |
  656|      0|		if (vips_source_test_seek(source))
  ------------------
  |  Branch (656:7): [True: 0, False: 0]
  ------------------
  657|      0|			return -1;
  658|       |
  659|       |		/* It might be a named pipe.
  660|       |		 */
  661|      0|		if (!source->is_pipe) {
  ------------------
  |  Branch (661:7): [True: 0, False: 0]
  ------------------
  662|      0|			VIPS_DEBUG_MSG("vips_source_unminimise: restoring "
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  663|      0|						   "read position %" G_GINT64_FORMAT "\n",
  664|      0|				source->read_position);
  665|      0|			if (vips__seek(connection->descriptor,
  ------------------
  |  Branch (665:8): [True: 0, False: 0]
  ------------------
  666|      0|					source->read_position, SEEK_SET) == -1)
  667|      0|				return -1;
  668|      0|		}
  669|      0|	}
  670|       |
  671|  9.00M|	return 0;
  672|  9.00M|}
vips_source_decode:
  689|  5.42k|{
  690|  5.42k|	VIPS_DEBUG_MSG("vips_source_decode:\n");
  ------------------
  |  |   47|  5.42k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  5.42k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  5.42k|	{ \
  |  |   49|  5.42k|		; \
  |  |   50|  5.42k|	} \
  |  |   51|  5.42k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  5.42k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  691|       |
  692|  5.42k|	SANITY(source);
  693|       |
  694|  5.42k|	if (!source->decode) {
  ------------------
  |  Branch (694:6): [True: 5.42k, False: 0]
  ------------------
  695|  5.42k|		source->decode = TRUE;
  ------------------
  |  |  798|  5.42k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  5.42k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  696|       |
  697|  5.42k|		VIPS_FREEF(g_byte_array_unref, source->sniff);
  ------------------
  |  |   41|  5.42k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  5.42k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  5.42k|	{ \
  |  |   43|  5.42k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 5.42k, False: 0]
  |  |  ------------------
  |  |   44|  5.42k|			(void) F((S)); \
  |  |   45|  5.42k|			(S) = 0; \
  |  |   46|  5.42k|		} \
  |  |   47|  5.42k|	} \
  |  |   48|  5.42k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  5.42k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  698|       |
  699|       |		/* Now decode is set, header_bytes will be freed once it's
  700|       |		 * exhausted, see vips_source_read().
  701|       |		 */
  702|  5.42k|	}
  703|       |
  704|  5.42k|	vips_source_minimise(source);
  705|       |
  706|  5.42k|	SANITY(source);
  707|       |
  708|  5.42k|	return 0;
  709|  5.42k|}
vips_source_read:
  746|  1.53M|{
  747|  1.53M|	VipsSourceClass *class = VIPS_SOURCE_GET_CLASS(source);
  ------------------
  |  |  116|  1.53M|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  1.53M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  1.53M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  117|  1.53M|		VIPS_TYPE_SOURCE, VipsSourceClass))
  ------------------
  748|       |
  749|  1.53M|	gint64 total_read;
  750|       |
  751|  1.53M|	VIPS_DEBUG_MSG("vips_source_read:\n");
  ------------------
  |  |   47|  1.53M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.53M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  1.53M|	{ \
  |  |   49|  1.53M|		; \
  |  |   50|  1.53M|	} \
  |  |   51|  1.53M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.53M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  752|       |
  753|  1.53M|	SANITY(source);
  754|       |
  755|  1.53M|	if (vips_source_unminimise(source) ||
  ------------------
  |  Branch (755:6): [True: 0, False: 1.53M]
  ------------------
  756|  1.53M|		vips_source_test_features(source))
  ------------------
  |  Branch (756:3): [True: 0, False: 1.53M]
  ------------------
  757|      0|		return -1;
  758|       |
  759|  1.53M|	total_read = 0;
  760|       |
  761|  1.53M|	if (source->data) {
  ------------------
  |  Branch (761:6): [True: 1.53M, False: 0]
  ------------------
  762|       |		/* The whole thing is in memory somehow.
  763|       |		 */
  764|  1.53M|		gint64 available = VIPS_MIN(length,
  ------------------
  |  |   55|  1.53M|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 1.40M, False: 128k]
  |  |  ------------------
  ------------------
  765|  1.53M|			source->length - source->read_position);
  766|       |
  767|  1.53M|		VIPS_DEBUG_MSG("    %zd bytes from memory\n", available);
  ------------------
  |  |   47|  1.53M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.53M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  1.53M|	{ \
  |  |   49|  1.53M|		; \
  |  |   50|  1.53M|	} \
  |  |   51|  1.53M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.53M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  768|  1.53M|		memcpy(buffer,
  769|  1.53M|			(char *) source->data + source->read_position, available);
  770|  1.53M|		source->read_position += available;
  771|  1.53M|		total_read += available;
  772|  1.53M|	}
  773|      0|	else {
  774|       |		/* Some kind of filesystem or custom source.
  775|       |		 *
  776|       |		 * Get what we can from header_bytes. We may need to read
  777|       |		 * some more after this.
  778|       |		 */
  779|      0|		if (source->header_bytes &&
  ------------------
  |  Branch (779:7): [True: 0, False: 0]
  ------------------
  780|      0|			source->read_position < source->header_bytes->len) {
  ------------------
  |  Branch (780:4): [True: 0, False: 0]
  ------------------
  781|      0|			gint64 available = VIPS_MIN(length,
  ------------------
  |  |   55|      0|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  782|      0|				source->header_bytes->len - source->read_position);
  783|       |
  784|      0|			VIPS_DEBUG_MSG("    %zd bytes from cache\n", available);
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  785|      0|			memcpy(buffer,
  786|      0|				source->header_bytes->data + source->read_position, available);
  787|      0|			source->read_position += available;
  788|      0|			buffer = (char *) buffer + available;
  789|      0|			length -= available;
  790|      0|			total_read += available;
  791|      0|		}
  792|       |
  793|       |		/* We're in pixel decode mode and we've exhausted the header
  794|       |		 * cache. We can safely junk it.
  795|       |		 */
  796|      0|		if (source->decode &&
  ------------------
  |  Branch (796:7): [True: 0, False: 0]
  ------------------
  797|      0|			source->header_bytes &&
  ------------------
  |  Branch (797:4): [True: 0, False: 0]
  ------------------
  798|      0|			source->read_position >= source->header_bytes->len)
  ------------------
  |  Branch (798:4): [True: 0, False: 0]
  ------------------
  799|      0|			VIPS_FREEF(g_byte_array_unref, source->header_bytes);
  ------------------
  |  |   41|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|      0|	{ \
  |  |   43|      0|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|      0|	} \
  |  |   48|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  800|       |
  801|       |		/* Any more bytes requested? Call the read() vfunc.
  802|       |		 */
  803|      0|		if (length > 0) {
  ------------------
  |  Branch (803:7): [True: 0, False: 0]
  ------------------
  804|      0|			gint64 bytes_read;
  805|       |
  806|      0|			VIPS_DEBUG_MSG("    calling class->read()\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  807|      0|			bytes_read = class->read(source, buffer, length);
  808|      0|			VIPS_DEBUG_MSG("    %zd bytes from read()\n", bytes_read);
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  809|      0|			if (bytes_read == -1) {
  ------------------
  |  Branch (809:8): [True: 0, False: 0]
  ------------------
  810|      0|				vips_error_system(errno,
  811|      0|					vips_connection_nick(VIPS_CONNECTION(source)),
  ------------------
  |  |   48|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|      0|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  812|      0|					"%s", _("read error"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  813|      0|				return -1;
  814|      0|			}
  815|       |
  816|       |			/* We need to save bytes if we're in header mode and
  817|       |			 * we can't seek or map.
  818|       |			 */
  819|      0|			if (source->header_bytes &&
  ------------------
  |  Branch (819:8): [True: 0, False: 0]
  ------------------
  820|      0|				source->is_pipe &&
  ------------------
  |  Branch (820:5): [True: 0, False: 0]
  ------------------
  821|      0|				!source->decode &&
  ------------------
  |  Branch (821:5): [True: 0, False: 0]
  ------------------
  822|      0|				bytes_read > 0)
  ------------------
  |  Branch (822:5): [True: 0, False: 0]
  ------------------
  823|      0|				g_byte_array_append(source->header_bytes, buffer, bytes_read);
  824|       |
  825|      0|			source->read_position += bytes_read;
  826|      0|			total_read += bytes_read;
  827|      0|		}
  828|      0|	}
  829|       |
  830|  1.53M|	VIPS_DEBUG_MSG("    %zd bytes total\n", total_read);
  ------------------
  |  |   47|  1.53M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  1.53M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  1.53M|	{ \
  |  |   49|  1.53M|		; \
  |  |   50|  1.53M|	} \
  |  |   51|  1.53M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.53M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  831|       |
  832|  1.53M|	SANITY(source);
  833|       |
  834|  1.53M|	return total_read;
  835|  1.53M|}
vips_source_is_mappable:
  990|  10.8k|{
  991|  10.8k|	if (vips_source_unminimise(source) ||
  ------------------
  |  Branch (991:6): [True: 0, False: 10.8k]
  ------------------
  992|  10.8k|		vips_source_test_features(source))
  ------------------
  |  Branch (992:3): [True: 0, False: 10.8k]
  ------------------
  993|      0|		return -1;
  994|       |
  995|       |	/* Already a memory object, or there's a filename we can map, or
  996|       |	 * there's a seekable descriptor.
  997|       |	 */
  998|  10.8k|	return source->data ||
  ------------------
  |  Branch (998:9): [True: 10.8k, False: 0]
  ------------------
  999|  10.8k|		VIPS_CONNECTION(source)->filename ||
  ------------------
  |  |   48|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|      0|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  |  Branch (999:3): [True: 0, False: 0]
  ------------------
 1000|  10.8k|		(!source->is_pipe &&
  ------------------
  |  Branch (1000:4): [True: 0, False: 0]
  ------------------
 1001|      0|			VIPS_CONNECTION(source)->descriptor != -1);
  ------------------
  |  |   48|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|      0|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  |  Branch (1001:4): [True: 0, False: 0]
  ------------------
 1002|  10.8k|}
vips_source_map:
 1047|  15.0k|{
 1048|  15.0k|	VIPS_DEBUG_MSG("vips_source_map:\n");
  ------------------
  |  |   47|  15.0k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  15.0k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  15.0k|	{ \
  |  |   49|  15.0k|		; \
  |  |   50|  15.0k|	} \
  |  |   51|  15.0k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  15.0k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1049|       |
 1050|  15.0k|	SANITY(source);
 1051|       |
 1052|  15.0k|	if (vips_source_unminimise(source) ||
  ------------------
  |  Branch (1052:6): [True: 0, False: 15.0k]
  ------------------
 1053|  15.0k|		vips_source_test_features(source))
  ------------------
  |  Branch (1053:3): [True: 0, False: 15.0k]
  ------------------
 1054|      0|		return NULL;
 1055|       |
 1056|       |	/* Try to map the file into memory, if possible. Some filesystems have
 1057|       |	 * mmap disabled, so we don't give up if this fails.
 1058|       |	 */
 1059|  15.0k|	if (!source->data &&
  ------------------
  |  Branch (1059:6): [True: 0, False: 15.0k]
  ------------------
 1060|  15.0k|		vips_source_is_mappable(source))
  ------------------
  |  Branch (1060:3): [True: 0, False: 0]
  ------------------
 1061|      0|		(void) vips_source_descriptor_to_memory(source);
 1062|       |
 1063|       |	/* If it's not a pipe, we can rewind, get the length, and read the
 1064|       |	 * whole thing.
 1065|       |	 */
 1066|  15.0k|	if (!source->data &&
  ------------------
  |  Branch (1066:6): [True: 0, False: 15.0k]
  ------------------
 1067|  15.0k|		!source->is_pipe &&
  ------------------
  |  Branch (1067:3): [True: 0, False: 0]
  ------------------
 1068|  15.0k|		vips_source_read_to_memory(source))
  ------------------
  |  Branch (1068:3): [True: 0, False: 0]
  ------------------
 1069|      0|		return NULL;
 1070|       |
 1071|       |	/* We don't know the length and must read and assemble in chunks.
 1072|       |	 */
 1073|  15.0k|	if (source->is_pipe &&
  ------------------
  |  Branch (1073:6): [True: 0, False: 15.0k]
  ------------------
 1074|  15.0k|		vips_source_pipe_read_to_position(source, -1))
  ------------------
  |  Branch (1074:3): [True: 0, False: 0]
  ------------------
 1075|      0|		return NULL;
 1076|       |
 1077|  15.0k|	if (length_out)
  ------------------
  |  Branch (1077:6): [True: 15.0k, False: 0]
  ------------------
 1078|  15.0k|		*length_out = source->length;
 1079|       |
 1080|  15.0k|	SANITY(source);
 1081|       |
 1082|  15.0k|	return source->data;
 1083|  15.0k|}
vips_source_seek:
 1136|  2.51M|{
 1137|  2.51M|	const char *nick = vips_connection_nick(VIPS_CONNECTION(source));
  ------------------
  |  |   48|  2.51M|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  2.51M|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  2.51M|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|  2.51M|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
 1138|  2.51M|	VipsSourceClass *class = VIPS_SOURCE_GET_CLASS(source);
  ------------------
  |  |  116|  2.51M|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  2.51M|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  2.51M|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  117|  2.51M|		VIPS_TYPE_SOURCE, VipsSourceClass))
  ------------------
 1139|       |
 1140|  2.51M|	gint64 new_pos;
 1141|       |
 1142|  2.51M|	VIPS_DEBUG_MSG(
  ------------------
  |  |   47|  2.51M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  2.51M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  2.51M|	{ \
  |  |   49|  2.51M|		; \
  |  |   50|  2.51M|	} \
  |  |   51|  2.51M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.51M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1143|  2.51M|		"vips_source_seek: offset = %" G_GINT64_FORMAT ", whence = %d\n",
 1144|  2.51M|		offset, whence);
 1145|       |
 1146|  2.51M|	if (vips_source_unminimise(source) ||
  ------------------
  |  Branch (1146:6): [True: 0, False: 2.51M]
  ------------------
 1147|  2.51M|		vips_source_test_features(source))
  ------------------
  |  Branch (1147:3): [True: 0, False: 2.51M]
  ------------------
 1148|      0|		return -1;
 1149|       |
 1150|  2.51M|	if (source->data) {
  ------------------
  |  Branch (1150:6): [True: 2.51M, False: 0]
  ------------------
 1151|  2.51M|		switch (whence) {
 1152|  1.50M|		case SEEK_SET:
  ------------------
  |  Branch (1152:3): [True: 1.50M, False: 1.00M]
  ------------------
 1153|  1.50M|			new_pos = offset;
 1154|  1.50M|			break;
 1155|       |
 1156|   761k|		case SEEK_CUR:
  ------------------
  |  Branch (1156:3): [True: 761k, False: 1.75M]
  ------------------
 1157|   761k|			new_pos = source->read_position + offset;
 1158|   761k|			break;
 1159|       |
 1160|   245k|		case SEEK_END:
  ------------------
  |  Branch (1160:3): [True: 245k, False: 2.26M]
  ------------------
 1161|   245k|			new_pos = source->length + offset;
 1162|   245k|			break;
 1163|       |
 1164|      0|		default:
  ------------------
  |  Branch (1164:3): [True: 0, False: 2.51M]
  ------------------
 1165|      0|			vips_error(nick, "%s", _("bad 'whence'"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1166|      0|			return -1;
 1167|  2.51M|		}
 1168|  2.51M|	}
 1169|      0|	else if (source->is_pipe) {
  ------------------
  |  Branch (1169:11): [True: 0, False: 0]
  ------------------
 1170|      0|		switch (whence) {
 1171|      0|		case SEEK_SET:
  ------------------
  |  Branch (1171:3): [True: 0, False: 0]
  ------------------
 1172|      0|			new_pos = offset;
 1173|      0|			break;
 1174|       |
 1175|      0|		case SEEK_CUR:
  ------------------
  |  Branch (1175:3): [True: 0, False: 0]
  ------------------
 1176|      0|			new_pos = source->read_position + offset;
 1177|      0|			break;
 1178|       |
 1179|      0|		case SEEK_END:
  ------------------
  |  Branch (1179:3): [True: 0, False: 0]
  ------------------
 1180|       |			/* We have to read the whole source into memory to get
 1181|       |			 * the length.
 1182|       |			 */
 1183|      0|			if (vips_source_pipe_read_to_position(source, -1))
  ------------------
  |  Branch (1183:8): [True: 0, False: 0]
  ------------------
 1184|      0|				return -1;
 1185|       |
 1186|      0|			new_pos = source->length + offset;
 1187|      0|			break;
 1188|       |
 1189|      0|		default:
  ------------------
  |  Branch (1189:3): [True: 0, False: 0]
  ------------------
 1190|      0|			vips_error(nick, "%s", _("bad 'whence'"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1191|      0|			return -1;
 1192|      0|		}
 1193|      0|	}
 1194|      0|	else {
 1195|      0|		if ((new_pos = class->seek(source, offset, whence)) == -1)
  ------------------
  |  Branch (1195:7): [True: 0, False: 0]
  ------------------
 1196|      0|			return -1;
 1197|      0|	}
 1198|       |
 1199|       |	/* For pipes, we have to fake seek by reading to that point. This
 1200|       |	 * might hit EOF and turn the pipe into a memory source.
 1201|       |	 */
 1202|  2.51M|	if (source->is_pipe &&
  ------------------
  |  Branch (1202:6): [True: 0, False: 2.51M]
  ------------------
 1203|  2.51M|		vips_source_pipe_read_to_position(source, new_pos))
  ------------------
  |  Branch (1203:3): [True: 0, False: 0]
  ------------------
 1204|      0|		return -1;
 1205|       |
 1206|       |	/* Don't allow out of range seeks.
 1207|       |	 */
 1208|  2.51M|	if (new_pos < 0 ||
  ------------------
  |  Branch (1208:6): [True: 771, False: 2.51M]
  ------------------
 1209|  2.51M|		(source->length != -1 && new_pos > source->length)) {
  ------------------
  |  Branch (1209:4): [True: 2.51M, False: 0]
  |  Branch (1209:28): [True: 98.4k, False: 2.41M]
  ------------------
 1210|  99.2k|		vips_error(nick,
 1211|  99.2k|			_("bad seek to %" G_GINT64_FORMAT), new_pos);
  ------------------
  |  |   30|  99.2k|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|  99.2k|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1212|  99.2k|		return -1;
 1213|  99.2k|	}
 1214|       |
 1215|  2.41M|	source->read_position = new_pos;
 1216|       |
 1217|  2.41M|	VIPS_DEBUG_MSG("    new_pos = %" G_GINT64_FORMAT "\n", new_pos);
  ------------------
  |  |   47|  2.41M|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  2.41M|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  2.41M|	{ \
  |  |   49|  2.41M|		; \
  |  |   50|  2.41M|	} \
  |  |   51|  2.41M|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.41M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1218|       |
 1219|  2.41M|	return new_pos;
 1220|  2.51M|}
vips_source_rewind:
 1235|   223k|{
 1236|   223k|	VIPS_DEBUG_MSG("vips_source_rewind:\n");
  ------------------
  |  |   47|   223k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   223k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   223k|	{ \
  |  |   49|   223k|		; \
  |  |   50|   223k|	} \
  |  |   51|   223k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   223k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1237|       |
 1238|   223k|	SANITY(source);
 1239|       |
 1240|   223k|	if (vips_source_test_features(source) ||
  ------------------
  |  Branch (1240:6): [True: 0, False: 223k]
  ------------------
 1241|   223k|		vips_source_seek(source, 0, SEEK_SET) != 0)
  ------------------
  |  Branch (1241:3): [True: 0, False: 223k]
  ------------------
 1242|      0|		return -1;
 1243|       |
 1244|       |	/* Back into sniff + header decode state.
 1245|       |	 */
 1246|   223k|	source->decode = FALSE;
  ------------------
  |  |  794|   223k|#define	FALSE	(0)
  ------------------
 1247|   223k|	if (!source->sniff)
  ------------------
  |  Branch (1247:6): [True: 0, False: 223k]
  ------------------
 1248|      0|		source->sniff = g_byte_array_new();
 1249|       |
 1250|   223k|	SANITY(source);
 1251|       |
 1252|   223k|	return 0;
 1253|   223k|}
vips_source_length:
 1267|   245k|{
 1268|   245k|	gint64 length;
 1269|   245k|	gint64 read_position;
 1270|       |
 1271|   245k|	VIPS_DEBUG_MSG("vips_source_length:\n");
  ------------------
  |  |   47|   245k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   245k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   245k|	{ \
  |  |   49|   245k|		; \
  |  |   50|   245k|	} \
  |  |   51|   245k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   245k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1272|       |
 1273|   245k|	if (vips_source_test_features(source))
  ------------------
  |  Branch (1273:6): [True: 0, False: 245k]
  ------------------
 1274|      0|		return -1;
 1275|       |
 1276|   245k|	read_position = vips_source_seek(source, 0, SEEK_CUR);
 1277|   245k|	length = vips_source_seek(source, 0, SEEK_END);
 1278|   245k|	vips_source_seek(source, read_position, SEEK_SET);
 1279|       |
 1280|   245k|	return length;
 1281|   245k|}
vips_source_sniff_at_most:
 1299|   148k|{
 1300|   148k|	unsigned char *q;
 1301|   148k|	gint64 read_position;
 1302|       |
 1303|   148k|	VIPS_DEBUG_MSG("vips_source_sniff_at_most: %zd bytes\n", length);
  ------------------
  |  |   47|   148k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   148k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   148k|	{ \
  |  |   49|   148k|		; \
  |  |   50|   148k|	} \
  |  |   51|   148k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   148k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1304|       |
 1305|   148k|	SANITY(source);
 1306|       |
 1307|   148k|	if (vips_source_test_features(source) ||
  ------------------
  |  Branch (1307:6): [True: 0, False: 148k]
  ------------------
 1308|   148k|		vips_source_rewind(source))
  ------------------
  |  Branch (1308:3): [True: 0, False: 148k]
  ------------------
 1309|      0|		return -1;
 1310|       |
 1311|   148k|	g_byte_array_set_size(source->sniff, length);
 1312|       |
 1313|   148k|	read_position = 0;
 1314|   148k|	q = source->sniff->data;
 1315|   296k|	while (read_position < length) {
  ------------------
  |  Branch (1315:9): [True: 149k, False: 147k]
  ------------------
 1316|   149k|		gint64 bytes_read;
 1317|       |
 1318|   149k|		bytes_read = vips_source_read(source, q, length - read_position);
 1319|   149k|		if (bytes_read == -1)
  ------------------
  |  Branch (1319:7): [True: 0, False: 149k]
  ------------------
 1320|      0|			return -1;
 1321|   149k|		if (bytes_read == 0)
  ------------------
  |  Branch (1321:7): [True: 1.00k, False: 148k]
  ------------------
 1322|  1.00k|			break;
 1323|       |
 1324|   148k|		read_position += bytes_read;
 1325|   148k|		q += bytes_read;
 1326|   148k|	}
 1327|       |
 1328|   148k|	SANITY(source);
 1329|       |
 1330|   148k|	*data = source->sniff->data;
 1331|       |
 1332|   148k|	return read_position;
 1333|   148k|}
vips_source_sniff:
 1347|   148k|{
 1348|   148k|	unsigned char *data;
 1349|   148k|	gint64 bytes_read;
 1350|       |
 1351|   148k|	if (vips_source_test_features(source))
  ------------------
  |  Branch (1351:6): [True: 0, False: 148k]
  ------------------
 1352|      0|		return NULL;
 1353|       |
 1354|   148k|	bytes_read = vips_source_sniff_at_most(source, &data, length);
 1355|   148k|	if (bytes_read == -1)
  ------------------
  |  Branch (1355:6): [True: 0, False: 148k]
  ------------------
 1356|      0|		return NULL;
 1357|   148k|	if (bytes_read < length)
  ------------------
  |  Branch (1357:6): [True: 1.00k, False: 147k]
  ------------------
 1358|  1.00k|		return NULL;
 1359|       |
 1360|   147k|	return data;
 1361|   148k|}
source.c:vips_source_class_init:
  349|      1|{
  350|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  351|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  352|       |
  353|      1|	gobject_class->finalize = vips_source_finalize;
  354|      1|	gobject_class->set_property = vips_object_set_property;
  355|      1|	gobject_class->get_property = vips_object_get_property;
  356|       |
  357|      1|	object_class->nickname = "source";
  358|      1|	object_class->description = _("input source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  359|       |
  360|      1|	object_class->build = vips_source_build;
  361|       |
  362|      1|	class->read = vips_source_read_real;
  363|      1|	class->seek = vips_source_seek_real;
  364|       |
  365|      1|	VIPS_ARG_BOXED(class, "blob", 3,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  366|      1|		_("Blob"),
  367|      1|		_("Blob to load from"),
  368|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  369|      1|		G_STRUCT_OFFSET(VipsSource, blob),
  370|      1|		VIPS_TYPE_BLOB);
  371|      1|}
source.c:vips_source_finalize:
  250|   195k|{
  251|   195k|	VipsSource *source = VIPS_SOURCE(gobject);
  ------------------
  |  |  106|   195k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   195k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   195k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|   195k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  252|       |
  253|       |#ifdef DEBUG_MINIMISE
  254|       |	printf("vips_source_finalize: %p\n", source);
  255|       |#endif /*DEBUG_MINIMISE*/
  256|       |
  257|   195k|	VIPS_FREEF(g_byte_array_unref, source->header_bytes);
  ------------------
  |  |   41|   195k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   195k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   195k|	{ \
  |  |   43|   195k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 195k]
  |  |  ------------------
  |  |   44|      0|			(void) F((S)); \
  |  |   45|      0|			(S) = 0; \
  |  |   46|      0|		} \
  |  |   47|   195k|	} \
  |  |   48|   195k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   195k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  258|   195k|	VIPS_FREEF(g_byte_array_unref, source->sniff);
  ------------------
  |  |   41|   195k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   195k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   195k|	{ \
  |  |   43|   195k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 189k, False: 5.42k]
  |  |  ------------------
  |  |   44|   189k|			(void) F((S)); \
  |  |   45|   189k|			(S) = 0; \
  |  |   46|   189k|		} \
  |  |   47|   195k|	} \
  |  |   48|   195k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   195k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|   195k|	if (source->mmap_baseaddr) {
  ------------------
  |  Branch (259:6): [True: 0, False: 195k]
  ------------------
  260|      0|		vips__munmap(source->mmap_baseaddr, source->mmap_length);
  261|      0|		source->mmap_baseaddr = NULL;
  262|      0|	}
  263|       |
  264|   195k|	G_OBJECT_CLASS(vips_source_parent_class)->finalize(gobject);
  ------------------
  |  |   58|   195k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|   195k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   195k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  265|   195k|}
source.c:vips_source_build:
  269|   195k|{
  270|   195k|	VipsConnection *connection = VIPS_CONNECTION(object);
  ------------------
  |  |   48|   195k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   195k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   195k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|   195k|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  271|   195k|	VipsSource *source = VIPS_SOURCE(object);
  ------------------
  |  |  106|   195k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|   195k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|   195k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|   195k|		VIPS_TYPE_SOURCE, VipsSource))
  ------------------
  272|       |
  273|   195k|	VIPS_DEBUG_MSG("vips_source_build: %p\n", source);
  ------------------
  |  |   47|   195k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   195k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   195k|	{ \
  |  |   49|   195k|		; \
  |  |   50|   195k|	} \
  |  |   51|   195k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   195k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|       |
  275|   195k|	if (VIPS_OBJECT_CLASS(vips_source_parent_class)->build(object))
  ------------------
  |  |  435|   195k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|   195k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|   195k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (275:6): [True: 0, False: 195k]
  ------------------
  276|      0|		return -1;
  277|       |
  278|   195k|	if (vips_object_argument_isset(object, "filename") &&
  ------------------
  |  Branch (278:6): [True: 0, False: 195k]
  ------------------
  279|   195k|		vips_object_argument_isset(object, "descriptor")) {
  ------------------
  |  Branch (279:3): [True: 0, False: 0]
  ------------------
  280|      0|		vips_error(vips_connection_nick(connection),
  281|      0|			"%s", _("don't set 'filename' and 'descriptor'"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  282|      0|		return -1;
  283|      0|	}
  284|       |
  285|       |	/* unminimise will open the filename.
  286|       |	 */
  287|   195k|	if (vips_object_argument_isset(object, "filename") &&
  ------------------
  |  Branch (287:6): [True: 0, False: 195k]
  ------------------
  288|   195k|		vips_source_unminimise(source))
  ------------------
  |  Branch (288:3): [True: 0, False: 0]
  ------------------
  289|      0|		return -1;
  290|       |
  291|   195k|	if (vips_object_argument_isset(object, "descriptor")) {
  ------------------
  |  Branch (291:6): [True: 0, False: 195k]
  ------------------
  292|      0|		connection->descriptor = dup(connection->descriptor);
  293|      0|		connection->close_descriptor = connection->descriptor;
  294|       |
  295|       |#ifdef G_OS_WIN32
  296|       |		/* Windows will create eg. stdin and stdout in text mode.
  297|       |		 * We always read in binary mode.
  298|       |		 */
  299|       |		_setmode(connection->descriptor, _O_BINARY);
  300|       |#endif /*G_OS_WIN32*/
  301|      0|	}
  302|       |
  303|   195k|	if (vips_object_argument_isset(object, "blob")) {
  ------------------
  |  Branch (303:6): [True: 195k, False: 0]
  ------------------
  304|   195k|		size_t length;
  305|       |
  306|   195k|		if (!(source->data = vips_blob_get(source->blob, &length)))
  ------------------
  |  Branch (306:7): [True: 0, False: 195k]
  ------------------
  307|      0|			return -1;
  308|       |
  309|   195k|		source->length = VIPS_MIN(length, G_MAXSSIZE);
  ------------------
  |  |   55|   195k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 195k, False: 0]
  |  |  ------------------
  ------------------
  310|   195k|	}
  311|       |
  312|   195k|	return 0;
  313|   195k|}
source.c:vips_source_init:
  375|   195k|{
  376|   195k|	source->length = -1;
  377|   195k|	source->sniff = g_byte_array_new();
  378|   195k|	source->header_bytes = g_byte_array_new();
  379|   195k|}
source.c:vips_source_test_features:
  163|  4.93M|{
  164|  4.93M|	if (vips_source_unminimise(source) ||
  ------------------
  |  Branch (164:6): [True: 0, False: 4.93M]
  ------------------
  165|  4.93M|		vips_source_test_seek(source))
  ------------------
  |  Branch (165:3): [True: 0, False: 4.93M]
  ------------------
  166|      0|		return -1;
  167|       |
  168|  4.93M|	return 0;
  169|  4.93M|}
source.c:vips_source_test_seek:
  115|  4.93M|{
  116|  4.93M|	if (!source->have_tested_seek) {
  ------------------
  |  Branch (116:6): [True: 195k, False: 4.73M]
  ------------------
  117|   195k|		VipsSourceClass *class = VIPS_SOURCE_GET_CLASS(source);
  ------------------
  |  |  116|   195k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|   195k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|   195k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  117|   195k|		VIPS_TYPE_SOURCE, VipsSourceClass))
  ------------------
  118|       |
  119|   195k|		source->have_tested_seek = TRUE;
  ------------------
  |  |  798|   195k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   195k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  120|       |
  121|   195k|		VIPS_DEBUG_MSG("vips_source_can_seek: testing seek ..\n");
  ------------------
  |  |   47|   195k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   195k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   195k|	{ \
  |  |   49|   195k|		; \
  |  |   50|   195k|	} \
  |  |   51|   195k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   195k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  122|       |
  123|       |		/* Can we seek this input?
  124|       |		 *
  125|       |		 * We need to call the method directly rather than via
  126|       |		 * vips_source_seek() etc. or we might trigger seek emulation.
  127|       |		 */
  128|   195k|		if (source->data ||
  ------------------
  |  Branch (128:7): [True: 195k, False: 0]
  ------------------
  129|   195k|			class->seek(source, 0, SEEK_CUR) != -1) {
  ------------------
  |  Branch (129:4): [True: 0, False: 0]
  ------------------
  130|   195k|			gint64 length;
  131|       |
  132|   195k|			VIPS_DEBUG_MSG("    seekable source\n");
  ------------------
  |  |   47|   195k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   195k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   195k|	{ \
  |  |   49|   195k|		; \
  |  |   50|   195k|	} \
  |  |   51|   195k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   195k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  133|       |
  134|       |			/* We should be able to get the length of seekable
  135|       |			 * objects.
  136|       |			 */
  137|   195k|			if ((length = vips_source_length(source)) == -1)
  ------------------
  |  Branch (137:8): [True: 0, False: 195k]
  ------------------
  138|      0|				return -1;
  139|       |
  140|   195k|			source->length = length;
  141|       |
  142|       |			/* If we can seek, we won't need to save header bytes.
  143|       |			 */
  144|   195k|			VIPS_FREEF(g_byte_array_unref, source->header_bytes);
  ------------------
  |  |   41|   195k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   195k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   195k|	{ \
  |  |   43|   195k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 195k, False: 0]
  |  |  ------------------
  |  |   44|   195k|			(void) F((S)); \
  |  |   45|   195k|			(S) = 0; \
  |  |   46|   195k|		} \
  |  |   47|   195k|	} \
  |  |   48|   195k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   195k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  145|   195k|		}
  146|      0|		else {
  147|       |			/* Not seekable. This must be some kind of pipe.
  148|       |			 */
  149|      0|			VIPS_DEBUG_MSG("    not seekable\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  150|      0|			source->is_pipe = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  151|      0|		}
  152|   195k|	}
  153|       |
  154|  4.93M|	return 0;
  155|  4.93M|}

sourcecustom.c:vips_source_custom_class_init:
  165|      1|{
  166|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|      1|	VipsSourceClass *source_class = VIPS_SOURCE_CLASS(class);
  ------------------
  |  |  109|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  110|      1|		VIPS_TYPE_SOURCE, VipsSourceClass))
  ------------------
  169|       |
  170|      1|	gobject_class->dispose = vips_source_custom_dispose;
  171|       |
  172|      1|	object_class->nickname = "source_custom";
  173|      1|	object_class->description = _("Custom source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  174|       |
  175|      1|	source_class->read = vips_source_custom_read_real;
  176|      1|	source_class->seek = vips_source_custom_seek_real;
  177|       |
  178|      1|	class->read = vips_source_custom_read_signal_real;
  179|      1|	class->seek = vips_source_custom_seek_signal_real;
  180|       |
  181|       |	/**
  182|       |	 * VipsSourceCustom::read:
  183|       |	 * @source_custom: the source being operated on
  184|       |	 * @buffer: %gpointer, buffer to fill
  185|       |	 * @size: %gint64, size of buffer
  186|       |	 *
  187|       |	 * This signal is emitted to read bytes from the source into @buffer.
  188|       |	 *
  189|       |	 * Returns: the number of bytes read. Return 0 for EOF.
  190|       |	 */
  191|      1|	vips_source_custom_signals[SIG_READ] = g_signal_new("read",
  192|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  193|      1|		G_SIGNAL_ACTION,
  194|      1|		G_STRUCT_OFFSET(VipsSourceCustomClass, read),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  195|      1|		NULL, NULL,
  196|      1|		vips_INT64__POINTER_INT64,
  197|      1|		G_TYPE_INT64, 2,
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|      1|		G_TYPE_POINTER, G_TYPE_INT64);
  ------------------
  |  |  160|      1|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		G_TYPE_POINTER, G_TYPE_INT64);
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  199|       |
  200|       |	/**
  201|       |	 * VipsSourceCustom::seek:
  202|       |	 * @source_custom: the source being operated on
  203|       |	 * @offset: %gint64, seek offset
  204|       |	 * @whence: %gint, seek origin
  205|       |	 *
  206|       |	 * This signal is emitted to seek the source. The handler should
  207|       |	 * change the source position appropriately.
  208|       |	 *
  209|       |	 * The handler for an unseekable source should always return -1.
  210|       |	 *
  211|       |	 * Returns: the new seek position.
  212|       |	 */
  213|      1|	vips_source_custom_signals[SIG_SEEK] = g_signal_new("seek",
  214|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  215|      1|		G_SIGNAL_ACTION,
  216|      1|		G_STRUCT_OFFSET(VipsSourceCustomClass, seek),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  217|      1|		NULL, NULL,
  218|      1|		vips_INT64__INT64_INT,
  219|      1|		G_TYPE_INT64, 2,
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|      1|		G_TYPE_INT64, G_TYPE_INT);
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		G_TYPE_INT64, G_TYPE_INT);
  ------------------
  |  |   94|      1|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  221|      1|}

system.c:vips_system_class_init:
  259|      1|{
  260|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  261|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  262|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  263|       |
  264|      1|	gobject_class->dispose = vips_system_dispose;
  265|      1|	gobject_class->set_property = vips_object_set_property;
  266|      1|	gobject_class->get_property = vips_object_get_property;
  267|       |
  268|      1|	vobject_class->nickname = "system";
  269|      1|	vobject_class->description = _("run an external command");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  270|      1|	vobject_class->build = vips_system_build;
  271|       |
  272|       |	/* Commands can have side-effects, so don't cache them.
  273|       |	 */
  274|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  275|       |
  276|      1|	VIPS_ARG_BOXED(class, "in", 0,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  277|      1|		_("Input"),
  278|      1|		_("Array of input images"),
  279|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  280|      1|		G_STRUCT_OFFSET(VipsSystem, in),
  281|      1|		VIPS_TYPE_ARRAY_IMAGE);
  282|       |
  283|      1|	VIPS_ARG_IMAGE(class, "out", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  284|      1|		_("Output"),
  285|      1|		_("Output image"),
  286|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  287|      1|		G_STRUCT_OFFSET(VipsSystem, out));
  288|       |
  289|      1|	VIPS_ARG_STRING(class, "cmd_format", 2,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  290|      1|		_("Command"),
  291|      1|		_("Command to run"),
  292|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  293|      1|		G_STRUCT_OFFSET(VipsSystem, cmd_format),
  294|      1|		NULL);
  295|       |
  296|      1|	VIPS_ARG_STRING(class, "in_format", 2,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  297|      1|		_("Input format"),
  298|      1|		_("Format for input filename"),
  299|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  300|      1|		G_STRUCT_OFFSET(VipsSystem, in_format),
  301|      1|		NULL);
  302|       |
  303|      1|	VIPS_ARG_STRING(class, "out_format", 2,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  304|      1|		_("Output format"),
  305|      1|		_("Format for output filename"),
  306|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  307|      1|		G_STRUCT_OFFSET(VipsSystem, out_format),
  308|      1|		NULL);
  309|       |
  310|      1|	VIPS_ARG_STRING(class, "log", 2,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
  311|      1|		_("Log"),
  312|      1|		_("Command log"),
  313|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  314|      1|		G_STRUCT_OFFSET(VipsSystem, log),
  315|      1|		NULL);
  316|      1|}

vips_target_new_to_memory:
  389|  21.6k|{
  390|  21.6k|	VipsTarget *target;
  391|       |
  392|  21.6k|	VIPS_DEBUG_MSG("vips_target_new_to_memory:\n");
  ------------------
  |  |   47|  21.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  21.6k|	{ \
  |  |   49|  21.6k|		; \
  |  |   50|  21.6k|	} \
  |  |   51|  21.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  393|       |
  394|  21.6k|	target = VIPS_TARGET(g_object_new(VIPS_TYPE_TARGET,
  ------------------
  |  |  382|  21.6k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  21.6k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  21.6k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  383|  21.6k|		VIPS_TYPE_TARGET, VipsTarget))
  ------------------
  395|  21.6k|		"memory", TRUE,
  396|  21.6k|		NULL));
  397|       |
  398|  21.6k|	if (vips_object_build(VIPS_OBJECT(target))) {
  ------------------
  |  |  433|  21.6k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  ------------------
  |  |  |  |  484|  21.6k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  21.6k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (398:6): [True: 0, False: 21.6k]
  ------------------
  399|      0|		VIPS_UNREF(target);
  ------------------
  |  |   57|      0|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|      0|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|      0|	{ \
  |  |  |  |   43|      0|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|      0|	} \
  |  |  |  |   48|      0|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  400|      0|		return NULL;
  401|      0|	}
  402|       |
  403|  21.6k|	return target;
  404|  21.6k|}
vips_target_write:
  515|   106k|{
  516|   106k|	VIPS_DEBUG_MSG("vips_target_write: %zd bytes\n", length);
  ------------------
  |  |   47|   106k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   106k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|   106k|	{ \
  |  |   49|   106k|		; \
  |  |   50|   106k|	} \
  |  |   51|   106k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   106k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|       |
  518|   106k|	if (length > VIPS_TARGET_BUFFER_SIZE - target->write_point &&
  ------------------
  |  |  397|   106k|#define VIPS_TARGET_BUFFER_SIZE (8500)
  ------------------
  |  Branch (518:6): [True: 2.42k, False: 104k]
  ------------------
  519|   106k|		vips_target_flush(target))
  ------------------
  |  Branch (519:3): [True: 0, False: 2.42k]
  ------------------
  520|      0|		return -1;
  521|       |
  522|   106k|	if (length > VIPS_TARGET_BUFFER_SIZE - target->write_point) {
  ------------------
  |  |  397|   106k|#define VIPS_TARGET_BUFFER_SIZE (8500)
  ------------------
  |  Branch (522:6): [True: 0, False: 106k]
  ------------------
  523|       |		/* Still too large? Do an unbuffered write.
  524|       |		 */
  525|      0|		if (vips_target_write_unbuffered(target, buffer, length))
  ------------------
  |  Branch (525:7): [True: 0, False: 0]
  ------------------
  526|      0|			return -1;
  527|      0|	}
  528|   106k|	else {
  529|   106k|		memcpy(target->output_buffer + target->write_point,
  530|   106k|			buffer, length);
  531|   106k|		target->write_point += length;
  532|   106k|	}
  533|       |
  534|   106k|	return 0;
  535|   106k|}
vips_target_end:
  617|  8.38k|{
  618|  8.38k|	VipsTargetClass *class = VIPS_TARGET_GET_CLASS(target);
  ------------------
  |  |  392|  8.38k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  8.38k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  8.38k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  393|  8.38k|		VIPS_TYPE_TARGET, VipsTargetClass))
  ------------------
  619|       |
  620|  8.38k|	VIPS_DEBUG_MSG("vips_target_end:\n");
  ------------------
  |  |   47|  8.38k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  8.38k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  8.38k|	{ \
  |  |   49|  8.38k|		; \
  |  |   50|  8.38k|	} \
  |  |   51|  8.38k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  8.38k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  621|       |
  622|  8.38k|	if (target->ended)
  ------------------
  |  Branch (622:6): [True: 0, False: 8.38k]
  ------------------
  623|      0|		return 0;
  624|       |
  625|  8.38k|	if (vips_target_flush(target))
  ------------------
  |  Branch (625:6): [True: 0, False: 8.38k]
  ------------------
  626|      0|		return -1;
  627|       |
  628|       |	/* Move the target buffer into the blob so it can be read out.
  629|       |	 */
  630|  8.38k|	if (target->memory_buffer) {
  ------------------
  |  Branch (630:6): [True: 8.38k, False: 0]
  ------------------
  631|  8.38k|		const char *data;
  632|  8.38k|		size_t length;
  633|       |
  634|  8.38k|		length = target->memory_buffer->len;
  635|  8.38k|		data = g_string_free(target->memory_buffer, FALSE);
  ------------------
  |  |  794|  8.38k|#define	FALSE	(0)
  ------------------
  636|  8.38k|		target->memory_buffer = NULL;
  637|  8.38k|		vips_blob_set(target->blob,
  638|  8.38k|			(VipsCallbackFn) vips_area_free_cb, data, length);
  639|  8.38k|	}
  640|      0|	else {
  641|      0|		if (class->end(target))
  ------------------
  |  Branch (641:7): [True: 0, False: 0]
  ------------------
  642|      0|			return -1;
  643|      0|	}
  644|       |
  645|  8.38k|	target->ended = TRUE;
  ------------------
  |  |  798|  8.38k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  8.38k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  646|       |
  647|  8.38k|	return 0;
  648|  8.38k|}
target.c:vips_target_class_init:
  274|      1|{
  275|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  276|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  277|       |
  278|      1|	gobject_class->finalize = vips_target_finalize;
  279|      1|	gobject_class->set_property = vips_object_set_property;
  280|      1|	gobject_class->get_property = vips_object_get_property;
  281|       |
  282|      1|	object_class->nickname = "target";
  283|      1|	object_class->description = _("Target");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  284|       |
  285|      1|	object_class->build = vips_target_build;
  286|       |
  287|      1|	class->write = vips_target_write_real;
  288|      1|	class->read = vips_target_read_real;
  289|      1|	class->seek = vips_target_seek_real;
  290|      1|	class->end = vips_target_end_real;
  291|      1|	class->finish = vips_target_finish_real;
  292|       |
  293|      1|	VIPS_ARG_BOOL(class, "memory", 3,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  294|      1|		_("Memory"),
  295|      1|		_("File descriptor should output to memory"),
  296|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  297|      1|		G_STRUCT_OFFSET(VipsTarget, memory),
  298|      1|		FALSE);
  299|       |
  300|       |	/* SET_ALWAYS means that blob is set by C and the obj system is not
  301|       |	 * involved in creation or destruction. It can be read at any time.
  302|       |	 */
  303|      1|	VIPS_ARG_BOXED(class, "blob", 4,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  304|      1|		_("Blob"),
  305|      1|		_("Blob to save to"),
  306|      1|		VIPS_ARGUMENT_SET_ALWAYS,
  307|      1|		G_STRUCT_OFFSET(VipsTarget, blob),
  308|      1|		VIPS_TYPE_BLOB);
  309|      1|}
target.c:vips_target_finalize:
   76|  21.6k|{
   77|  21.6k|	VipsTarget *target = VIPS_TARGET(gobject);
  ------------------
  |  |  382|  21.6k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  21.6k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  21.6k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  383|  21.6k|		VIPS_TYPE_TARGET, VipsTarget))
  ------------------
   78|       |
   79|  21.6k|	VIPS_DEBUG_MSG("vips_target_finalize:\n");
  ------------------
  |  |   47|  21.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  21.6k|	{ \
  |  |   49|  21.6k|		; \
  |  |   50|  21.6k|	} \
  |  |   51|  21.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   80|       |
   81|  21.6k|	if (target->memory_buffer) {
  ------------------
  |  Branch (81:6): [True: 13.2k, False: 8.38k]
  ------------------
   82|  13.2k|		g_string_free(target->memory_buffer, TRUE);
  ------------------
  |  |  798|  13.2k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  13.2k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
   83|  13.2k|		target->memory_buffer = NULL;
   84|  13.2k|	}
   85|       |
   86|  21.6k|	if (target->blob) {
  ------------------
  |  Branch (86:6): [True: 0, False: 21.6k]
  ------------------
   87|      0|		vips_area_unref(VIPS_AREA(target->blob));
  ------------------
  |  |  137|      0|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
   88|      0|		target->blob = NULL;
   89|      0|	}
   90|       |
   91|  21.6k|	if (target->delete_on_close &&
  ------------------
  |  Branch (91:6): [True: 0, False: 21.6k]
  ------------------
   92|  21.6k|		target->delete_on_close_filename)
  ------------------
  |  Branch (92:3): [True: 0, False: 0]
  ------------------
   93|      0|		g_unlink(target->delete_on_close_filename);
   94|       |
   95|  21.6k|	VIPS_FREE(target->delete_on_close_filename);
  ------------------
  |  |   50|  21.6k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  21.6k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  21.6k|	{ \
  |  |  |  |   43|  21.6k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 0, False: 21.6k]
  |  |  |  |  ------------------
  |  |  |  |   44|      0|			(void) F((S)); \
  |  |  |  |   45|      0|			(S) = 0; \
  |  |  |  |   46|      0|		} \
  |  |  |  |   47|  21.6k|	} \
  |  |  |  |   48|  21.6k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|       |
   97|  21.6k|	G_OBJECT_CLASS(vips_target_parent_class)->finalize(gobject);
  ------------------
  |  |   58|  21.6k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  21.6k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  21.6k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|  21.6k|}
target.c:vips_target_build:
  102|  21.6k|{
  103|  21.6k|	VipsConnection *connection = VIPS_CONNECTION(object);
  ------------------
  |  |   48|  21.6k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  21.6k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  21.6k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|  21.6k|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  104|  21.6k|	VipsTarget *target = VIPS_TARGET(object);
  ------------------
  |  |  382|  21.6k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  21.6k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  21.6k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  383|  21.6k|		VIPS_TYPE_TARGET, VipsTarget))
  ------------------
  105|       |
  106|  21.6k|	VIPS_DEBUG_MSG("vips_target_build: %p\n", connection);
  ------------------
  |  |   47|  21.6k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  21.6k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  21.6k|	{ \
  |  |   49|  21.6k|		; \
  |  |   50|  21.6k|	} \
  |  |   51|  21.6k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  21.6k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  107|       |
  108|  21.6k|	if (VIPS_OBJECT_CLASS(vips_target_parent_class)->build(object))
  ------------------
  |  |  435|  21.6k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  21.6k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  21.6k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (108:6): [True: 0, False: 21.6k]
  ------------------
  109|      0|		return -1;
  110|       |
  111|  21.6k|	if (vips_object_argument_isset(object, "filename") &&
  ------------------
  |  Branch (111:6): [True: 0, False: 21.6k]
  ------------------
  112|  21.6k|		vips_object_argument_isset(object, "descriptor")) {
  ------------------
  |  Branch (112:3): [True: 0, False: 0]
  ------------------
  113|      0|		vips_error(vips_connection_nick(connection),
  114|      0|			"%s", _("don't set 'filename' and 'descriptor'"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  115|      0|		return -1;
  116|      0|	}
  117|       |
  118|  21.6k|	if (connection->filename) {
  ------------------
  |  Branch (118:6): [True: 0, False: 21.6k]
  ------------------
  119|      0|		const char *filename = connection->filename;
  120|       |
  121|      0|		int fd;
  122|       |
  123|       |		/* 0644 is rw user, r group and other.
  124|       |		 */
  125|      0|		if ((fd = vips_tracked_open(filename,
  ------------------
  |  Branch (125:7): [True: 0, False: 0]
  ------------------
  126|      0|				 MODE_READWRITE, 0644)) == -1) {
  ------------------
  |  |   70|      0|#define MODE_READWRITE CLOEXEC(BINARYIZE(O_RDWR | O_CREAT | O_TRUNC))
  |  |  ------------------
  |  |  |  |   68|      0|#define CLOEXEC(M) ((M) | O_CLOEXEC)
  |  |  ------------------
  ------------------
  127|      0|			vips_error_system(errno,
  128|      0|				vips_connection_nick(connection),
  129|      0|				"%s", _("unable to open for write"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  130|      0|			return -1;
  131|      0|		}
  132|       |
  133|      0|		connection->tracked_descriptor = fd;
  134|      0|		connection->descriptor = fd;
  135|      0|	}
  136|  21.6k|	else if (vips_object_argument_isset(object, "descriptor")) {
  ------------------
  |  Branch (136:11): [True: 0, False: 21.6k]
  ------------------
  137|      0|		connection->descriptor = dup(connection->descriptor);
  138|      0|		connection->close_descriptor = connection->descriptor;
  139|       |
  140|       |#ifdef G_OS_WIN32
  141|       |		/* Windows will create eg. stdin and stdout in text mode.
  142|       |		 * We always write in binary mode.
  143|       |		 */
  144|       |		_setmode(connection->descriptor, _O_BINARY);
  145|       |#endif /*G_OS_WIN32*/
  146|      0|	}
  147|  21.6k|	else if (target->memory)
  ------------------
  |  Branch (147:11): [True: 21.6k, False: 0]
  ------------------
  148|  21.6k|		target->memory_buffer =
  149|  21.6k|			g_string_sized_new(VIPS_TARGET_BUFFER_SIZE);
  ------------------
  |  |  397|  21.6k|#define VIPS_TARGET_BUFFER_SIZE (8500)
  ------------------
  150|       |
  151|  21.6k|	return 0;
  152|  21.6k|}
target.c:vips_target_write_real:
  156|  10.8k|{
  157|  10.8k|	VipsConnection *connection = VIPS_CONNECTION(target);
  ------------------
  |  |   48|  10.8k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|  10.8k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|  10.8k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|  10.8k|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  158|       |
  159|  10.8k|	gint64 result;
  160|       |
  161|  10.8k|	VIPS_DEBUG_MSG("vips_target_write_real: %zd bytes\n", length);
  ------------------
  |  |   47|  10.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  10.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  10.8k|	{ \
  |  |   49|  10.8k|		; \
  |  |   50|  10.8k|	} \
  |  |   51|  10.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  10.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  162|       |
  163|  10.8k|	if (target->memory_buffer) {
  ------------------
  |  Branch (163:6): [True: 10.8k, False: 0]
  ------------------
  164|  10.8k|		VIPS_DEBUG_MSG("vips_target_write_real: to position %zd\n",
  ------------------
  |  |   47|  10.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  10.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  10.8k|	{ \
  |  |   49|  10.8k|		; \
  |  |   50|  10.8k|	} \
  |  |   51|  10.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  10.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  165|  10.8k|			target->position);
  166|       |
  167|  10.8k|		g_string_overwrite_len(target->memory_buffer, target->position,
  168|  10.8k|			data, length);
  169|  10.8k|		target->position += length;
  170|  10.8k|		result = length;
  171|  10.8k|	}
  172|      0|	else
  173|      0|		result = write(connection->descriptor, data, length);
  174|       |
  175|  10.8k|	return result;
  176|  10.8k|}
target.c:vips_target_init:
  313|  21.6k|{
  314|  21.6k|	target->blob = vips_blob_new(NULL, NULL, 0);
  315|  21.6k|	target->write_point = 0;
  316|  21.6k|}
target.c:vips_target_flush:
  487|  10.8k|{
  488|  10.8k|	g_assert(target->write_point >= 0);
  ------------------
  |  |  166|  10.8k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  10.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  10.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  489|  10.8k|	g_assert(target->write_point <= VIPS_TARGET_BUFFER_SIZE);
  ------------------
  |  |  166|  10.8k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  10.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  10.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  490|       |
  491|  10.8k|	VIPS_DEBUG_MSG("vips_target_flush:\n");
  ------------------
  |  |   47|  10.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  10.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  10.8k|	{ \
  |  |   49|  10.8k|		; \
  |  |   50|  10.8k|	} \
  |  |   51|  10.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  10.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  492|       |
  493|  10.8k|	if (target->write_point > 0) {
  ------------------
  |  Branch (493:6): [True: 10.8k, False: 0]
  ------------------
  494|  10.8k|		if (vips_target_write_unbuffered(target,
  ------------------
  |  Branch (494:7): [True: 0, False: 10.8k]
  ------------------
  495|  10.8k|				target->output_buffer, target->write_point))
  496|      0|			return -1;
  497|  10.8k|		target->write_point = 0;
  498|  10.8k|	}
  499|       |
  500|  10.8k|	return 0;
  501|  10.8k|}
target.c:vips_target_write_unbuffered:
  453|  10.8k|{
  454|  10.8k|	VipsTargetClass *class = VIPS_TARGET_GET_CLASS(target);
  ------------------
  |  |  392|  10.8k|	(G_TYPE_INSTANCE_GET_CLASS((obj), \
  |  |  ------------------
  |  |  |  |  527|  10.8k|#define G_TYPE_INSTANCE_GET_CLASS(instance, g_type, c_type)     (_G_TYPE_IGC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2310|  10.8k|#define _G_TYPE_IGC(ip, gt, ct)         ((ct*) (((GTypeInstance*) ip)->g_class))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  393|  10.8k|		VIPS_TYPE_TARGET, VipsTargetClass))
  ------------------
  455|       |
  456|  10.8k|	VIPS_DEBUG_MSG("vips_target_write_unbuffered:\n");
  ------------------
  |  |   47|  10.8k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  10.8k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  10.8k|	{ \
  |  |   49|  10.8k|		; \
  |  |   50|  10.8k|	} \
  |  |   51|  10.8k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  10.8k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  457|       |
  458|  10.8k|	if (target->ended)
  ------------------
  |  Branch (458:6): [True: 0, False: 10.8k]
  ------------------
  459|      0|		return 0;
  460|       |
  461|  21.6k|	while (length > 0) {
  ------------------
  |  Branch (461:9): [True: 10.8k, False: 10.8k]
  ------------------
  462|       |		// write() uses int not size_t on windows, so we need to chunk
  463|       |		// ... max 1gb, why not
  464|  10.8k|		int chunk_size = VIPS_MIN(1024 * 1024 * 1024, length);
  ------------------
  |  |   55|  10.8k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 10.8k]
  |  |  ------------------
  ------------------
  465|  10.8k|		gint64 bytes_written = class->write(target, data, chunk_size);
  466|       |
  467|       |		/* n == 0 isn't strictly an error, but we treat it as
  468|       |		 * one to make sure we don't get stuck in this loop.
  469|       |		 */
  470|  10.8k|		if (bytes_written <= 0) {
  ------------------
  |  Branch (470:7): [True: 0, False: 10.8k]
  ------------------
  471|      0|			vips_error_system(errno,
  472|      0|				vips_connection_nick(
  473|      0|					VIPS_CONNECTION(target)),
  ------------------
  |  |   48|      0|	(G_TYPE_CHECK_INSTANCE_CAST((obj), \
  |  |  ------------------
  |  |  |  |  484|      0|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2305|      0|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   49|      0|		VIPS_TYPE_CONNECTION, VipsConnection))
  ------------------
  474|      0|				"%s", _("write error"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  475|      0|			return -1;
  476|      0|		}
  477|       |
  478|  10.8k|		length -= bytes_written;
  479|  10.8k|		data = (char *) data + bytes_written;
  480|  10.8k|	}
  481|       |
  482|  10.8k|	return 0;
  483|  10.8k|}

targetcustom.c:vips_target_custom_class_init:
  230|      1|{
  231|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  232|      1|	VipsTargetClass *target_class = VIPS_TARGET_CLASS(class);
  ------------------
  |  |  385|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  386|      1|		VIPS_TYPE_TARGET, VipsTargetClass))
  ------------------
  233|       |
  234|      1|	object_class->nickname = "target_custom";
  235|      1|	object_class->description = _("Custom target");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  236|       |
  237|      1|	target_class->write = vips_target_custom_write_real;
  238|      1|	target_class->read = vips_target_custom_read_real;
  239|      1|	target_class->seek = vips_target_custom_seek_real;
  240|      1|	target_class->end = vips_target_custom_end_real;
  241|      1|	target_class->finish = vips_target_custom_finish_real;
  242|       |
  243|      1|	class->write = vips_target_custom_write_signal_real;
  244|      1|	class->read = vips_target_custom_read_signal_real;
  245|      1|	class->seek = vips_target_custom_seek_signal_real;
  246|      1|	class->end = vips_target_custom_end_signal_real;
  247|      1|	class->finish = vips_target_custom_finish_signal_real;
  248|       |
  249|       |	/**
  250|       |	 * VipsTargetCustom::write:
  251|       |	 * @target_custom: the target being operated on
  252|       |	 * @data: %pointer, bytes to write
  253|       |	 * @length: %gint64, number of bytes
  254|       |	 *
  255|       |	 * This signal is emitted to write bytes to the target.
  256|       |	 *
  257|       |	 * Returns: the number of bytes written.
  258|       |	 */
  259|      1|	vips_target_custom_signals[SIG_WRITE] = g_signal_new("write",
  260|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  261|      1|		G_SIGNAL_ACTION,
  262|      1|		G_STRUCT_OFFSET(VipsTargetCustomClass, write),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  263|      1|		NULL, NULL,
  264|      1|		vips_INT64__POINTER_INT64,
  265|      1|		G_TYPE_INT64, 2,
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  266|      1|		G_TYPE_POINTER, G_TYPE_INT64);
  ------------------
  |  |  160|      1|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		G_TYPE_POINTER, G_TYPE_INT64);
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|       |
  268|       |	/**
  269|       |	 * VipsTargetCustom::read:
  270|       |	 * @target_custom: the target being operated on
  271|       |	 * @buffer: %gpointer, buffer to fill
  272|       |	 * @size: %gint64, size of buffer
  273|       |	 *
  274|       |	 * This signal is emitted to read bytes from the target into @buffer.
  275|       |	 *
  276|       |	 * The handler for an unreadable target should always return -1.
  277|       |	 *
  278|       |	 * Returns: the number of bytes read. Return 0 for EOF.
  279|       |	 */
  280|      1|	vips_target_custom_signals[SIG_READ] = g_signal_new("read",
  281|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  282|      1|		G_SIGNAL_ACTION,
  283|      1|		G_STRUCT_OFFSET(VipsTargetCustomClass, read),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  284|      1|		NULL, NULL,
  285|      1|		vips_INT64__POINTER_INT64,
  286|      1|		G_TYPE_INT64, 2,
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  287|      1|		G_TYPE_POINTER, G_TYPE_INT64);
  ------------------
  |  |  160|      1|#define G_TYPE_POINTER			G_TYPE_MAKE_FUNDAMENTAL (17)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		G_TYPE_POINTER, G_TYPE_INT64);
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  288|       |
  289|       |	/**
  290|       |	 * VipsTargetCustom::seek:
  291|       |	 * @target_custom: the target being operated on
  292|       |	 * @offset: %gint64, seek offset
  293|       |	 * @whence: %gint, seek origin
  294|       |	 *
  295|       |	 * This signal is emitted to seek the target. The handler should
  296|       |	 * change the target position appropriately.
  297|       |	 *
  298|       |	 * The handler for an unseekable target should always return -1.
  299|       |	 *
  300|       |	 * Returns: the new seek position.
  301|       |	 */
  302|      1|	vips_target_custom_signals[SIG_SEEK] = g_signal_new("seek",
  303|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  304|      1|		G_SIGNAL_ACTION,
  305|      1|		G_STRUCT_OFFSET(VipsTargetCustomClass, seek),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  306|      1|		NULL, NULL,
  307|      1|		vips_INT64__INT64_INT,
  308|      1|		G_TYPE_INT64, 2,
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|      1|		G_TYPE_INT64, G_TYPE_INT);
  ------------------
  |  |  118|      1|#define G_TYPE_INT64			G_TYPE_MAKE_FUNDAMENTAL (10)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
              		G_TYPE_INT64, G_TYPE_INT);
  ------------------
  |  |   94|      1|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  310|       |
  311|       |	/**
  312|       |	 * VipsTargetCustom::end:
  313|       |	 * @target_custom: the target being operated on
  314|       |	 *
  315|       |	 * This signal is emitted at the end of write. The target should do
  316|       |	 * any finishing necessary.
  317|       |	 *
  318|       |	 * Returns: 0 on success, -1 on error.
  319|       |	 */
  320|      1|	vips_target_custom_signals[SIG_END] = g_signal_new("end",
  321|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  322|      1|		G_SIGNAL_ACTION,
  323|      1|		G_STRUCT_OFFSET(VipsTargetCustomClass, end),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  324|      1|		NULL, NULL,
  325|      1|		vips_INT__VOID,
  326|      1|		G_TYPE_INT, 0);
  ------------------
  |  |   94|      1|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  327|       |
  328|       |	/**
  329|       |	 * VipsTargetCustom::finish:
  330|       |	 * @target_custom: the target being operated on
  331|       |	 *
  332|       |	 * Deprecated for VipsTargetCustom::end.
  333|       |	 */
  334|      1|	vips_target_custom_signals[SIG_FINISH] = g_signal_new("finish",
  335|      1|		G_TYPE_FROM_CLASS(class),
  ------------------
  |  |  613|      1|#define G_TYPE_FROM_CLASS(g_class)                              (((GTypeClass*) (g_class))->g_type)
  ------------------
  336|      1|		G_SIGNAL_ACTION,
  337|      1|		G_STRUCT_OFFSET(VipsTargetCustomClass, finish),
  ------------------
  |  |  833|      1|      ((glong) offsetof (struct_type, member))
  ------------------
  338|      1|		NULL, NULL,
  339|      1|		g_cclosure_marshal_VOID__VOID,
  340|      1|		G_TYPE_NONE, 0);
  ------------------
  |  |   62|      1|#define G_TYPE_NONE			G_TYPE_MAKE_FUNDAMENTAL (1)
  |  |  ------------------
  |  |  |  |  221|      1|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      1|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  341|      1|}

vips_thread_isvips:
   86|  1.42M|{
   87|  1.42M|	return g_private_get(&is_vips_thread_key) != NULL;
   88|  1.42M|}
vips_g_mutex_new:
   95|  1.22M|{
   96|  1.22M|	GMutex *mutex;
   97|       |
   98|  1.22M|	mutex = g_new(GMutex, 1);
  ------------------
  |  |  282|  1.22M|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|  1.22M|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  1.22M|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  1.22M|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  1.22M|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  1.22M|	  gpointer __p;						\
  |  |  |  |  231|  1.22M|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 1.22M]
  |  |  |  |  ------------------
  |  |  |  |  232|  1.22M|	    __p = g_##func (__n);				\
  |  |  |  |  233|  1.22M|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 1.22M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|  1.22M|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 1.22M]
  |  |  |  |  |  Branch (234:26): [True: 1.22M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  1.22M|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  1.22M|	  else							\
  |  |  |  |  237|  1.22M|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  1.22M|	  __p;							\
  |  |  |  |  239|  1.22M|	}))
  |  |  ------------------
  ------------------
   99|  1.22M|	g_mutex_init(mutex);
  100|       |
  101|  1.22M|	return mutex;
  102|  1.22M|}
vips_g_mutex_free:
  106|  1.22M|{
  107|  1.22M|	g_mutex_clear(mutex);
  108|  1.22M|	g_free(mutex);
  109|  1.22M|}
vips_g_cond_new:
  113|   307k|{
  114|   307k|	GCond *cond;
  115|       |
  116|   307k|	cond = g_new(GCond, 1);
  ------------------
  |  |  282|   307k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|   307k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|   307k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|   307k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|   307k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|   307k|	  gpointer __p;						\
  |  |  |  |  231|   307k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 307k]
  |  |  |  |  ------------------
  |  |  |  |  232|   307k|	    __p = g_##func (__n);				\
  |  |  |  |  233|   307k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 307k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|   307k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 307k]
  |  |  |  |  |  Branch (234:26): [True: 307k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|   307k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|   307k|	  else							\
  |  |  |  |  237|   307k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|   307k|	  __p;							\
  |  |  |  |  239|   307k|	}))
  |  |  ------------------
  ------------------
  117|   307k|	g_cond_init(cond);
  118|       |
  119|   307k|	return cond;
  120|   307k|}
vips_g_cond_free:
  124|   307k|{
  125|   307k|	g_cond_clear(cond);
  126|   307k|	g_free(cond);
  127|   307k|}
vips_g_thread_new:
  159|     11|{
  160|     11|	GThread *thread;
  161|     11|	VipsThreadInfo *info;
  162|     11|	GError *error = NULL;
  163|       |
  164|     11|	info = g_new(VipsThreadInfo, 1);
  ------------------
  |  |  282|     11|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|     11|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|     11|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|     11|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|     11|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|     11|	  gpointer __p;						\
  |  |  |  |  231|     11|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 11]
  |  |  |  |  ------------------
  |  |  |  |  232|     11|	    __p = g_##func (__n);				\
  |  |  |  |  233|     11|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 11, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|     11|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 11]
  |  |  |  |  |  Branch (234:26): [True: 11, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|     11|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|     11|	  else							\
  |  |  |  |  237|     11|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|     11|	  __p;							\
  |  |  |  |  239|     11|	}))
  |  |  ------------------
  ------------------
  165|     11|	info->domain = domain;
  166|     11|	info->func = func;
  167|     11|	info->data = data;
  168|       |
  169|     11|	thread = g_thread_try_new(domain, vips_thread_run, info, &error);
  170|       |
  171|     11|	VIPS_DEBUG_MSG_RED("vips_g_thread_new: g_thread_create(%s) = %p\n",
  ------------------
  |  |   63|     11|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|     11|#define G_STMT_START  do
  |  |  ------------------
  |  |   64|     11|	{ \
  |  |   65|     11|		; \
  |  |   66|     11|	} \
  |  |   67|     11|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     11|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  172|     11|		domain, thread);
  173|       |
  174|     11|	if (!thread) {
  ------------------
  |  Branch (174:6): [True: 0, False: 11]
  ------------------
  175|      0|		if (error)
  ------------------
  |  Branch (175:7): [True: 0, False: 0]
  ------------------
  176|      0|			vips_g_error(&error);
  177|      0|		else
  178|      0|			vips_error(domain,
  179|      0|				"%s", _("unable to create thread"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  180|      0|	}
  181|       |
  182|     11|	return thread;
  183|     11|}
vips_concurrency_set:
  235|      2|{
  236|       |	/* Tell the threads system how much concurrency we expect.
  237|       |	 */
  238|      2|	if (concurrency < 1)
  ------------------
  |  Branch (238:6): [True: 0, False: 2]
  ------------------
  239|      0|		concurrency = vips__concurrency_get_default();
  240|      2|	else if (concurrency > MAX_THREADS) {
  ------------------
  |  |   63|      2|#define MAX_THREADS (1024)
  ------------------
  |  Branch (240:11): [True: 0, False: 2]
  ------------------
  241|      0|		concurrency = MAX_THREADS;
  ------------------
  |  |   63|      0|#define MAX_THREADS (1024)
  ------------------
  242|       |
  243|      0|		g_warning(_("threads clipped to %d"), MAX_THREADS);
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  244|      0|	}
  245|       |
  246|      2|	vips__concurrency = concurrency;
  247|      2|}
vips_concurrency_get:
  275|   136k|{
  276|   136k|	return vips__concurrency;
  277|   136k|}
vips_get_tile_size:
  297|  96.9k|{
  298|  96.9k|	const int nthr = vips_concurrency_get();
  299|  96.9k|	const int typical_image_width = 1000;
  300|       |
  301|       |	/* Compiler warnings.
  302|       |	 */
  303|  96.9k|	*tile_width = 1;
  304|  96.9k|	*tile_height = 1;
  305|       |
  306|       |	/* Pick a render geometry.
  307|       |	 */
  308|  96.9k|	switch (im->dhint) {
  309|  2.83k|	case VIPS_DEMAND_STYLE_SMALLTILE:
  ------------------
  |  Branch (309:2): [True: 2.83k, False: 94.0k]
  ------------------
  310|  2.83k|		*tile_width = vips__tile_width;
  311|  2.83k|		*tile_height = vips__tile_height;
  312|  2.83k|		break;
  313|       |
  314|      0|	case VIPS_DEMAND_STYLE_ANY:
  ------------------
  |  Branch (314:2): [True: 0, False: 96.9k]
  ------------------
  315|  18.7k|	case VIPS_DEMAND_STYLE_FATSTRIP:
  ------------------
  |  Branch (315:2): [True: 18.7k, False: 78.1k]
  ------------------
  316|  18.7k|		*tile_width = im->Xsize;
  317|  18.7k|		*tile_height = vips__fatstrip_height;
  318|  18.7k|		break;
  319|       |
  320|  75.3k|	case VIPS_DEMAND_STYLE_THINSTRIP:
  ------------------
  |  Branch (320:2): [True: 75.3k, False: 21.5k]
  ------------------
  321|  75.3k|		*tile_width = im->Xsize;
  322|       |		/* Only enable thinstrip height for very wide images -- the
  323|       |		 * overheads are too high to be worthwhile otherwise.
  324|       |		 */
  325|  75.3k|		*tile_height = im->Xsize > 10000
  ------------------
  |  Branch (325:18): [True: 0, False: 75.3k]
  ------------------
  326|  75.3k|			? vips__thinstrip_height
  327|  75.3k|			: vips__fatstrip_height;
  328|  75.3k|		break;
  329|       |
  330|      0|	default:
  ------------------
  |  Branch (330:2): [True: 0, False: 96.9k]
  ------------------
  331|      0|		g_assert_not_reached();
  ------------------
  |  |  161|      0|#define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert_not_reached()          G_STMT_START { (void) 0; __builtin_unreachable (); } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|  96.9k|	}
  333|       |
  334|       |	/* We can't set n_lines for the current demand style: a later bit of
  335|       |	 * the pipeline might see a different hint and we need to synchronise
  336|       |	 * buffer sizes everywhere.
  337|       |	 *
  338|       |	 * We also can't depend on the current image size, since that might
  339|       |	 * change down the pipeline too. Pick a typical image width.
  340|       |	 *
  341|       |	 * Pick the maximum buffer size we might possibly need, then round up
  342|       |	 * to a multiple of tileheight.
  343|       |	 */
  344|  96.9k|	*n_lines = vips__tile_height *
  345|  96.9k|		VIPS_ROUND_UP(vips__tile_width * nthr,
  ------------------
  |  |  111|  96.9k|#define VIPS_ROUND_UP(N, P) (VIPS_ROUND_DOWN((N) + (P) -1, (P)))
  |  |  ------------------
  |  |  |  |  110|  96.9k|#define VIPS_ROUND_DOWN(N, P) ((N) - ((N) % (P)))
  |  |  ------------------
  ------------------
  346|  96.9k|			typical_image_width) /
  347|  96.9k|		typical_image_width;
  348|  96.9k|	*n_lines = VIPS_MAX(*n_lines, vips__fatstrip_height * nthr);
  ------------------
  |  |   54|  96.9k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 96.9k, False: 0]
  |  |  ------------------
  ------------------
  349|  96.9k|	*n_lines = VIPS_MAX(*n_lines, vips__thinstrip_height * nthr);
  ------------------
  |  |   54|  96.9k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 96.9k, False: 0]
  |  |  ------------------
  ------------------
  350|  96.9k|	*n_lines = VIPS_ROUND_UP(*n_lines, *tile_height);
  ------------------
  |  |  111|  96.9k|#define VIPS_ROUND_UP(N, P) (VIPS_ROUND_DOWN((N) + (P) -1, (P)))
  |  |  ------------------
  |  |  |  |  110|  96.9k|#define VIPS_ROUND_DOWN(N, P) ((N) - ((N) % (P)))
  |  |  ------------------
  ------------------
  351|       |
  352|       |	/* We make this assumption in several places.
  353|       |	 */
  354|  96.9k|	g_assert(*n_lines % *tile_height == 0);
  ------------------
  |  |  166|  96.9k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  96.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  96.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  355|       |
  356|  96.9k|	VIPS_DEBUG_MSG("vips_get_tile_size: %d by %d patches, "
  ------------------
  |  |   47|  96.9k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  96.9k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  96.9k|	{ \
  |  |   49|  96.9k|		; \
  |  |   50|  96.9k|	} \
  |  |   51|  96.9k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  96.9k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|  96.9k|				   "groups of %d scanlines\n",
  358|  96.9k|		*tile_width, *tile_height, *n_lines);
  359|  96.9k|}
vips__thread_init:
  363|      2|{
  364|      2|	if (vips__concurrency == 0)
  ------------------
  |  Branch (364:6): [True: 2, False: 0]
  ------------------
  365|      2|		vips__concurrency = vips__concurrency_get_default();
  366|      2|}
thread.c:vips_thread_run:
  137|     11|{
  138|     11|	VipsThreadInfo *info = (VipsThreadInfo *) data;
  139|       |
  140|     11|	void *result;
  141|       |
  142|       |	/* Set this to something (anything) to tag this thread as a vips
  143|       |	 * worker. No need to call g_private_replace as there is no
  144|       |	 * GDestroyNotify handler associated with a worker.
  145|       |	 */
  146|     11|	g_private_set(&is_vips_thread_key, info);
  147|       |
  148|     11|	result = info->func(info->data);
  149|       |
  150|     11|	g_free(info);
  151|       |
  152|     11|	vips_thread_shutdown();
  153|       |
  154|     11|	return result;
  155|     11|}
thread.c:vips__concurrency_get_default:
  190|      2|{
  191|      2|	const char *str;
  192|      2|	int nthr;
  193|      2|	int x;
  194|       |
  195|       |	/* Tell the threads system how much concurrency we expect.
  196|       |	 */
  197|      2|	if (vips__concurrency > 0)
  ------------------
  |  Branch (197:6): [True: 0, False: 2]
  ------------------
  198|      0|		nthr = vips__concurrency;
  199|      2|	else if (
  200|      2|		((str = g_getenv("VIPS_CONCURRENCY"))
  ------------------
  |  Branch (200:3): [True: 0, False: 2]
  ------------------
  201|       |#if ENABLE_DEPRECATED
  202|       |			|| (str = g_getenv("IM_CONCURRENCY"))
  203|       |#endif
  204|      2|				) &&
  205|      2|		(x = atoi(str)) > 0)
  ------------------
  |  Branch (205:3): [True: 0, False: 0]
  ------------------
  206|      0|		nthr = x;
  207|      2|	else
  208|      2|		nthr = g_get_num_processors();
  209|       |
  210|      2|	if (nthr < 1 ||
  ------------------
  |  Branch (210:6): [True: 0, False: 2]
  ------------------
  211|      2|		nthr > MAX_THREADS) {
  ------------------
  |  |   63|      2|#define MAX_THREADS (1024)
  ------------------
  |  Branch (211:3): [True: 0, False: 2]
  ------------------
  212|      0|		nthr = VIPS_CLIP(1, nthr, MAX_THREADS);
  ------------------
  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  213|       |
  214|      0|		g_warning(_("threads clipped to %d"), nthr);
  ------------------
  |  |  338|      0|#define g_warning(...)  g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|      0|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  339|      0|                               G_LOG_LEVEL_WARNING,  \
  |  |  340|      0|                               __VA_ARGS__)
  ------------------
  215|      0|	}
  216|       |
  217|      2|	return nthr;
  218|      2|}

vips__threadpool_init:
  116|      2|{
  117|       |	/* 3 is the useful minimum, and huge values can crash the machine.
  118|       |	 */
  119|      2|	const char *max_threads_env = g_getenv("VIPS_MAX_THREADS");
  120|      2|	int max_threads = max_threads_env
  ------------------
  |  Branch (120:20): [True: 0, False: 2]
  ------------------
  121|      2|		? VIPS_CLIP(3, atoi(max_threads_env), MAX_THREADS)
  ------------------
  |  |   57|      0|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|      0|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 0, False: 0]
  |  |  |  |  |  Branch (54:32): [True: 0, False: 0]
  |  |  |  |  |  Branch (54:44): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  122|      2|		: 0;
  123|       |
  124|      2|	if (g_getenv("VIPS_STALL"))
  ------------------
  |  Branch (124:6): [True: 0, False: 2]
  ------------------
  125|      0|		vips__stall = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  126|       |
  127|       |	/* max_threads > 0 will create a set of threads on startup. This is
  128|       |	 * necessary for wasm, but may break on systems that try to fork()
  129|       |	 * after init.
  130|       |	 */
  131|      2|	vips__threadset = vips_threadset_new(max_threads);
  132|      2|}
vips_thread_execute:
  153|  82.7k|{
  154|  82.7k|	return vips_threadset_run(vips__threadset, domain, func, data);
  155|  82.7k|}
vips_thread_state_set:
  208|  39.5k|{
  209|  39.5k|	VipsThreadState *state = (VipsThreadState *) object;
  210|  39.5k|	VipsImage *im = (VipsImage *) a;
  211|       |
  212|  39.5k|	VIPS_DEBUG_MSG("vips_thread_state_set: image %p\n", im);
  ------------------
  |  |   47|  39.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  39.5k|	{ \
  |  |   49|  39.5k|		; \
  |  |   50|  39.5k|	} \
  |  |   51|  39.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  213|       |
  214|  39.5k|	state->im = im;
  215|  39.5k|	state->a = b;
  216|       |
  217|  39.5k|	return NULL;
  218|  39.5k|}
vips__worker_lock:
  455|   206k|{
  456|   206k|	VipsWorker *worker = (VipsWorker *) g_private_get(&worker_key);
  457|       |
  458|   206k|	if (worker)
  ------------------
  |  Branch (458:6): [True: 206k, False: 0]
  ------------------
  459|   206k|		g_atomic_int_inc(&worker->pool->n_waiting);
  ------------------
  |  |  143|   206k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|   206k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  144|   206k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|   206k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  145|   206k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (145:13): [Folded - Ignored]
  |  |  ------------------
  |  |  146|   206k|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  147|   206k|  }))
  ------------------
  460|   206k|	g_mutex_lock(mutex);
  461|   206k|	if (worker)
  ------------------
  |  Branch (461:6): [True: 206k, False: 0]
  ------------------
  462|   206k|		g_atomic_int_dec_and_test(&worker->pool->n_waiting);
  ------------------
  |  |  149|   206k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|   206k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  150|   206k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|   206k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  151|   206k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (151:13): [Folded - Ignored]
  |  |  ------------------
  |  |  152|   206k|    __atomic_fetch_sub ((atomic), 1, __ATOMIC_SEQ_CST) == 1;                 \
  |  |  153|   206k|  }))
  ------------------
  463|   206k|}
vips__worker_cond_wait:
  467|   164k|{
  468|   164k|	VipsWorker *worker = (VipsWorker *) g_private_get(&worker_key);
  469|       |
  470|   164k|	if (worker)
  ------------------
  |  Branch (470:6): [True: 31.6k, False: 132k]
  ------------------
  471|  31.6k|		g_atomic_int_inc(&worker->pool->n_waiting);
  ------------------
  |  |  143|  31.6k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|  31.6k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  144|  31.6k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|  31.6k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  145|  31.6k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (145:13): [Folded - Ignored]
  |  |  ------------------
  |  |  146|  31.6k|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  147|  31.6k|  }))
  ------------------
  472|   164k|	g_cond_wait(cond, mutex);
  473|   164k|	if (worker)
  ------------------
  |  Branch (473:6): [True: 31.6k, False: 132k]
  ------------------
  474|  31.6k|		g_atomic_int_dec_and_test(&worker->pool->n_waiting);
  ------------------
  |  |  149|  31.6k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|  31.6k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  150|  31.6k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|  31.6k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  151|  31.6k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (151:13): [Folded - Ignored]
  |  |  ------------------
  |  |  152|  31.6k|    __atomic_fetch_sub ((atomic), 1, __ATOMIC_SEQ_CST) == 1;                 \
  |  |  153|  31.6k|  }))
  ------------------
  475|   164k|}
vips_threadpool_run:
  655|  39.5k|{
  656|  39.5k|	VipsThreadpool *pool;
  657|  39.5k|	int result;
  658|  39.5k|	int n_waiting;
  659|  39.5k|	int n_working;
  660|       |
  661|  39.5k|	if (!(pool = vips_threadpool_new(im)))
  ------------------
  |  Branch (661:6): [True: 0, False: 39.5k]
  ------------------
  662|      0|		return -1;
  663|       |
  664|  39.5k|	pool->start = start;
  665|  39.5k|	pool->allocate = allocate;
  666|  39.5k|	pool->work = work;
  667|  39.5k|	pool->a = a;
  668|       |
  669|       |	/* Start with half of the max number of threads, then let it drift up
  670|       |	 * and down with load.
  671|       |	 */
  672|  79.0k|	for (n_working = 0; n_working < 1 + pool->max_workers / 2; n_working++)
  ------------------
  |  Branch (672:22): [True: 39.5k, False: 39.5k]
  ------------------
  673|  39.5k|		if (vips_worker_new(pool)) {
  ------------------
  |  Branch (673:7): [True: 0, False: 39.5k]
  ------------------
  674|      0|			vips_threadpool_free(pool);
  675|      0|			return -1;
  676|      0|		}
  677|       |
  678|  57.7k|	for (;;) {
  679|       |		/* Wait for a tick from a worker.
  680|       |		 */
  681|  57.7k|		vips_semaphore_down(&pool->tick);
  682|       |
  683|  57.7k|		VIPS_DEBUG_MSG("vips_threadpool_run: tick\n");
  ------------------
  |  |   47|  57.7k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  57.7k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  57.7k|	{ \
  |  |   49|  57.7k|		; \
  |  |   50|  57.7k|	} \
  |  |   51|  57.7k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  57.7k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  684|       |
  685|  57.7k|		if (pool->stop ||
  ------------------
  |  Branch (685:7): [True: 15.1k, False: 42.6k]
  ------------------
  686|  57.7k|			pool->error)
  ------------------
  |  Branch (686:4): [True: 24.0k, False: 18.5k]
  ------------------
  687|  39.1k|			break;
  688|       |
  689|  18.5k|		if (progress &&
  ------------------
  |  Branch (689:7): [True: 18.5k, False: 0]
  ------------------
  690|  18.5k|			progress(pool->a))
  ------------------
  |  Branch (690:4): [True: 0, False: 18.5k]
  ------------------
  691|      0|			pool->error = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  692|       |
  693|  18.5k|		if (pool->stop ||
  ------------------
  |  Branch (693:7): [True: 357, False: 18.2k]
  ------------------
  694|  18.5k|			pool->error)
  ------------------
  |  Branch (694:4): [True: 3, False: 18.2k]
  ------------------
  695|    360|			break;
  696|       |
  697|  18.2k|		n_waiting = g_atomic_int_get(&pool->n_waiting);
  ------------------
  |  |   91|  18.2k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|  18.2k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |   92|  18.2k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|  18.2k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |   93|  18.2k|    gint gaig_temp;                                                          \
  |  |   94|  18.2k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (94:13): [Folded - Ignored]
  |  |  ------------------
  |  |   95|  18.2k|    __atomic_load ((gint *)(atomic), &gaig_temp, __ATOMIC_SEQ_CST);          \
  |  |   96|  18.2k|    (gint) gaig_temp;                                                        \
  |  |   97|  18.2k|  }))
  ------------------
  698|  18.2k|		VIPS_DEBUG_MSG("n_waiting = %d\n", n_waiting);
  ------------------
  |  |   47|  18.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  18.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  18.2k|	{ \
  |  |   49|  18.2k|		; \
  |  |   50|  18.2k|	} \
  |  |   51|  18.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  18.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  699|  18.2k|		VIPS_DEBUG_MSG("n_working = %d\n", n_working);
  ------------------
  |  |   47|  18.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  18.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  18.2k|	{ \
  |  |   49|  18.2k|		; \
  |  |   50|  18.2k|	} \
  |  |   51|  18.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  18.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  700|  18.2k|		VIPS_DEBUG_MSG("exit = %d\n", pool->exit);
  ------------------
  |  |   47|  18.2k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  18.2k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  18.2k|	{ \
  |  |   49|  18.2k|		; \
  |  |   50|  18.2k|	} \
  |  |   51|  18.2k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  18.2k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  701|       |
  702|  18.2k|		if (n_waiting > 3 &&
  ------------------
  |  Branch (702:7): [True: 0, False: 18.2k]
  ------------------
  703|  18.2k|			n_working > 1) {
  ------------------
  |  Branch (703:4): [True: 0, False: 0]
  ------------------
  704|      0|			VIPS_DEBUG_MSG("shrinking thread pool\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  705|      0|			g_atomic_int_inc(&pool->exit);
  ------------------
  |  |  143|      0|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|      0|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  144|      0|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|      0|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  145|      0|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (145:13): [Folded - Ignored]
  |  |  ------------------
  |  |  146|      0|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  147|      0|  }))
  ------------------
  706|      0|			n_working -= 1;
  707|      0|		}
  708|  18.2k|		else if (n_waiting < 2 &&
  ------------------
  |  Branch (708:12): [True: 18.2k, False: 0]
  ------------------
  709|  18.2k|			n_working < pool->max_workers) {
  ------------------
  |  Branch (709:4): [True: 0, False: 18.2k]
  ------------------
  710|      0|			VIPS_DEBUG_MSG("expanding thread pool\n");
  ------------------
  |  |   47|      0|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      0|	{ \
  |  |   49|      0|		; \
  |  |   50|      0|	} \
  |  |   51|      0|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  711|      0|			if (vips_worker_new(pool)) {
  ------------------
  |  Branch (711:8): [True: 0, False: 0]
  ------------------
  712|      0|				vips_threadpool_free(pool);
  713|      0|				return -1;
  714|      0|			}
  715|      0|			n_working += 1;
  716|      0|		}
  717|  18.2k|	}
  718|       |
  719|       |	/* This will block until the last worker completes.
  720|       |	 */
  721|  39.5k|	vips_threadpool_wait(pool);
  722|       |
  723|       |	/* Return 0 for success.
  724|       |	 */
  725|  39.5k|	result = pool->error ? -1 : 0;
  ------------------
  |  Branch (725:11): [True: 24.0k, False: 15.4k]
  ------------------
  726|       |
  727|  39.5k|	vips_threadpool_free(pool);
  728|       |
  729|  39.5k|	if (!vips_image_get_concurrency(im, 0))
  ------------------
  |  Branch (729:6): [True: 39.5k, False: 0]
  ------------------
  730|  39.5k|		g_info("threadpool completed with %d workers", n_working);
  ------------------
  |  |  341|  39.5k|#define g_info(...)     g_log (G_LOG_DOMAIN,         \
  |  |  ------------------
  |  |  |  |   12|  39.5k|#define G_LOG_DOMAIN "VIPS"
  |  |  ------------------
  |  |  342|  39.5k|                               G_LOG_LEVEL_INFO,     \
  |  |  343|  39.5k|                               __VA_ARGS__)
  ------------------
  731|       |
  732|       |	/* "minimise" is only emitted for top-level threadpools.
  733|       |	 */
  734|  39.5k|	if (!vips_image_get_typeof(im, "vips-no-minimise"))
  ------------------
  |  Branch (734:6): [True: 39.5k, False: 0]
  ------------------
  735|  39.5k|		vips_image_minimise_all(im);
  736|       |
  737|  39.5k|	return result;
  738|  39.5k|}
threadpool.c:vips_thread_state_class_init:
  185|      1|{
  186|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  187|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |
  189|      1|	gobject_class->dispose = vips_thread_state_dispose;
  190|       |
  191|      1|	object_class->build = vips_thread_state_build;
  192|      1|	object_class->nickname = "threadstate";
  193|      1|	object_class->description = _("per-thread state for vipsthreadpool");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  194|      1|}
threadpool.c:vips_thread_state_dispose:
  161|  39.5k|{
  162|  39.5k|	VipsThreadState *state = (VipsThreadState *) gobject;
  163|       |
  164|  39.5k|	VIPS_DEBUG_MSG("vips_thread_state_dispose:\n");
  ------------------
  |  |   47|  39.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  39.5k|	{ \
  |  |   49|  39.5k|		; \
  |  |   50|  39.5k|	} \
  |  |   51|  39.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  165|       |
  166|  39.5k|	VIPS_UNREF(state->reg);
  ------------------
  |  |   57|  39.5k|#define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X))
  |  |  ------------------
  |  |  |  |   41|  39.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  39.5k|	{ \
  |  |  |  |   43|  39.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 39.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  39.5k|			(void) F((S)); \
  |  |  |  |   45|  39.5k|			(S) = 0; \
  |  |  |  |   46|  39.5k|		} \
  |  |  |  |   47|  39.5k|	} \
  |  |  |  |   48|  39.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  167|       |
  168|  39.5k|	G_OBJECT_CLASS(vips_thread_state_parent_class)->dispose(gobject);
  ------------------
  |  |   58|  39.5k|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|  39.5k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  39.5k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  169|  39.5k|}
threadpool.c:vips_thread_state_build:
  173|  39.5k|{
  174|  39.5k|	VipsThreadState *state = (VipsThreadState *) object;
  175|       |
  176|  39.5k|	if (!(state->reg = vips_region_new(state->im)))
  ------------------
  |  Branch (176:6): [True: 0, False: 39.5k]
  ------------------
  177|      0|		return -1;
  178|       |
  179|  39.5k|	return VIPS_OBJECT_CLASS(vips_thread_state_parent_class)
  ------------------
  |  |  435|  39.5k|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|  39.5k|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|  39.5k|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|  39.5k|		->build(object);
  181|  39.5k|}
threadpool.c:vips_thread_state_init:
  198|  39.5k|{
  199|  39.5k|	VIPS_DEBUG_MSG("vips_thread_state_init:\n");
  ------------------
  |  |   47|  39.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  39.5k|	{ \
  |  |   49|  39.5k|		; \
  |  |   50|  39.5k|	} \
  |  |   51|  39.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  200|       |
  201|  39.5k|	state->reg = NULL;
  202|  39.5k|	state->stop = FALSE;
  ------------------
  |  |  794|  39.5k|#define	FALSE	(0)
  ------------------
  203|  39.5k|	state->stall = FALSE;
  ------------------
  |  |  794|  39.5k|#define	FALSE	(0)
  ------------------
  204|  39.5k|}
threadpool.c:vips_threadpool_new:
  502|  39.5k|{
  503|  39.5k|	VipsThreadpool *pool;
  504|  39.5k|	int tile_width;
  505|  39.5k|	int tile_height;
  506|  39.5k|	gint64 n_tiles;
  507|  39.5k|	int n_lines;
  508|       |
  509|       |	/* Allocate and init new thread block.
  510|       |	 */
  511|  39.5k|	if (!(pool = VIPS_NEW(NULL, VipsThreadpool)))
  ------------------
  |  |   70|  39.5k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  39.5k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  39.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  39.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  39.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (511:6): [True: 0, False: 39.5k]
  ------------------
  512|      0|		return NULL;
  513|  39.5k|	pool->im = im;
  514|  39.5k|	pool->allocate = NULL;
  515|  39.5k|	pool->work = NULL;
  516|  39.5k|	pool->allocate_lock = vips_g_mutex_new();
  517|  39.5k|	pool->max_workers = vips_concurrency_get();
  518|  39.5k|	vips_semaphore_init(&pool->n_workers, 0, "n_workers");
  519|  39.5k|	vips_semaphore_init(&pool->tick, 0, "tick");
  520|  39.5k|	pool->error = FALSE;
  ------------------
  |  |  794|  39.5k|#define	FALSE	(0)
  ------------------
  521|  39.5k|	pool->stop = FALSE;
  ------------------
  |  |  794|  39.5k|#define	FALSE	(0)
  ------------------
  522|  39.5k|	pool->exit = 0;
  523|       |
  524|       |	/* If this is a tiny image, we won't need all max_workers threads.
  525|       |	 * Guess how
  526|       |	 * many tiles we might need to cover the image and use that to limit
  527|       |	 * the number of threads we create.
  528|       |	 */
  529|  39.5k|	vips_get_tile_size(im, &tile_width, &tile_height, &n_lines);
  530|  39.5k|	n_tiles = (1 + (gint64) im->Xsize / tile_width) *
  531|  39.5k|		(1 + (gint64) im->Ysize / tile_height);
  532|  39.5k|	n_tiles = VIPS_CLIP(1, n_tiles, 1024);
  ------------------
  |  |   57|  39.5k|#define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V)))
  |  |  ------------------
  |  |  |  |   54|  79.0k|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (54:25): [True: 0, False: 39.5k]
  |  |  |  |  |  Branch (54:32): [True: 0, False: 39.5k]
  |  |  |  |  |  Branch (54:44): [True: 0, False: 39.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  533|  39.5k|	pool->max_workers = VIPS_MIN(pool->max_workers, n_tiles);
  ------------------
  |  |   55|  39.5k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 38.1k, False: 1.41k]
  |  |  ------------------
  ------------------
  534|       |
  535|       |	/* VIPS_META_CONCURRENCY on the image can optionally override
  536|       |	 * concurrency.
  537|       |	 */
  538|  39.5k|	pool->max_workers = vips_image_get_concurrency(im, pool->max_workers);
  539|       |
  540|  39.5k|	VIPS_DEBUG_MSG("vips_threadpool_new: \"%s\" (%p), with %d threads\n",
  ------------------
  |  |   47|  39.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  39.5k|	{ \
  |  |   49|  39.5k|		; \
  |  |   50|  39.5k|	} \
  |  |   51|  39.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  541|  39.5k|		im->filename, pool, pool->max_workers);
  542|       |
  543|  39.5k|	return pool;
  544|  39.5k|}
threadpool.c:vips_worker_new:
  428|  39.5k|{
  429|  39.5k|	VipsWorker *worker;
  430|       |
  431|  39.5k|	if (!(worker = VIPS_NEW(NULL, VipsWorker)))
  ------------------
  |  |   70|  39.5k|	((T *) VIPS_MALLOC(OBJ, sizeof(T)))
  |  |  ------------------
  |  |  |  |   68|  39.5k|	(vips_malloc(VIPS_OBJECT(OBJ), S))
  |  |  |  |  ------------------
  |  |  |  |  |  |  433|  39.5k|	(G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  484|  39.5k|#define G_TYPE_CHECK_INSTANCE_CAST(instance, g_type, c_type)    (_G_TYPE_CIC ((instance), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2305|  39.5k|#  define _G_TYPE_CIC(ip, gt, ct)       ((ct*) ip)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (431:6): [True: 0, False: 39.5k]
  ------------------
  432|      0|		return -1;
  433|  39.5k|	worker->pool = pool;
  434|  39.5k|	worker->state = NULL;
  435|       |
  436|       |	/* We can't build the state here, it has to be done by the worker
  437|       |	 * itself the first time that allocate runs so that any regions are
  438|       |	 * owned by the correct thread.
  439|       |	 */
  440|       |
  441|  39.5k|	if (vips_thread_execute("worker", vips_thread_main_loop, worker)) {
  ------------------
  |  Branch (441:6): [True: 0, False: 39.5k]
  ------------------
  442|      0|		g_free(worker);
  443|      0|		return -1;
  444|      0|	}
  445|       |
  446|       |	/* One more worker in the pool.
  447|       |	 */
  448|  39.5k|	vips_semaphore_upn(&pool->n_workers, -1);
  449|       |
  450|  39.5k|	return 0;
  451|  39.5k|}
threadpool.c:vips_thread_main_loop:
  383|  39.5k|{
  384|  39.5k|	VipsWorker *worker = (VipsWorker *) a;
  385|  39.5k|	VipsThreadpool *pool = worker->pool;
  386|       |
  387|  39.5k|	g_assert(pool == worker->pool);
  ------------------
  |  |  166|  39.5k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  388|       |
  389|  39.5k|	VIPS_GATE_START("vips_thread_main_loop: thread");
  ------------------
  |  |   41|  39.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  39.5k|	{ \
  |  |   43|  39.5k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 39.5k]
  |  |  ------------------
  |  |   44|  39.5k|			vips__thread_gate_start(NAME); \
  |  |   45|  39.5k|	} \
  |  |   46|  39.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  390|       |
  391|  39.5k|	g_private_set(&worker_key, worker);
  392|       |
  393|       |	/* Process work units! Always tick, even if we are stopping, so the
  394|       |	 * main thread will wake up for exit.
  395|       |	 */
  396|   133k|	while (!pool->stop &&
  ------------------
  |  Branch (396:9): [True: 117k, False: 15.4k]
  ------------------
  397|   133k|		!worker->stop &&
  ------------------
  |  Branch (397:3): [True: 93.4k, False: 24.0k]
  ------------------
  398|   133k|		!pool->error) {
  ------------------
  |  Branch (398:3): [True: 93.4k, False: 0]
  ------------------
  399|  93.4k|		VIPS_GATE_START("vips_worker_work_unit: u");
  ------------------
  |  |   41|  93.4k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  93.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  93.4k|	{ \
  |  |   43|  93.4k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 93.4k]
  |  |  ------------------
  |  |   44|  93.4k|			vips__thread_gate_start(NAME); \
  |  |   45|  93.4k|	} \
  |  |   46|  93.4k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  93.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  400|  93.4k|		vips_worker_work_unit(worker);
  401|  93.4k|		VIPS_GATE_STOP("vips_worker_work_unit: u");
  ------------------
  |  |   49|  93.4k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  93.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  93.4k|	{ \
  |  |   51|  93.4k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 93.4k]
  |  |  ------------------
  |  |   52|  93.4k|			vips__thread_gate_stop(NAME); \
  |  |   53|  93.4k|	} \
  |  |   54|  93.4k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  93.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  402|  93.4k|		vips_semaphore_up(&pool->tick);
  403|  93.4k|	}
  404|       |
  405|  39.5k|	VIPS_GATE_STOP("vips_thread_main_loop: thread");
  ------------------
  |  |   49|  39.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  39.5k|	{ \
  |  |   51|  39.5k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 39.5k]
  |  |  ------------------
  |  |   52|  39.5k|			vips__thread_gate_stop(NAME); \
  |  |   53|  39.5k|	} \
  |  |   54|  39.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|       |	/* unreffing the worker state will trigger stop in the threadstate, so
  408|       |	 * we need to single-thread.
  409|       |	 */
  410|  39.5k|	g_mutex_lock(pool->allocate_lock);
  411|       |
  412|  39.5k|	VIPS_FREEF(g_object_unref, worker->state);
  ------------------
  |  |   41|  39.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  39.5k|	{ \
  |  |   43|  39.5k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 39.5k, False: 0]
  |  |  ------------------
  |  |   44|  39.5k|			(void) F((S)); \
  |  |   45|  39.5k|			(S) = 0; \
  |  |   46|  39.5k|		} \
  |  |   47|  39.5k|	} \
  |  |   48|  39.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|       |
  414|  39.5k|	g_mutex_unlock(pool->allocate_lock);
  415|       |
  416|  39.5k|	VIPS_FREE(worker);
  ------------------
  |  |   50|  39.5k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  39.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  39.5k|	{ \
  |  |  |  |   43|  39.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 39.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  39.5k|			(void) F((S)); \
  |  |  |  |   45|  39.5k|			(S) = 0; \
  |  |  |  |   46|  39.5k|		} \
  |  |  |  |   47|  39.5k|	} \
  |  |  |  |   48|  39.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  417|  39.5k|	g_private_set(&worker_key, NULL);
  418|       |
  419|       |	/* We are done: tell the main thread.
  420|       |	 */
  421|  39.5k|	vips_semaphore_upn(&pool->n_workers, 1);
  422|  39.5k|}
threadpool.c:vips_worker_work_unit:
  309|  93.4k|{
  310|  93.4k|	VipsThreadpool *pool = worker->pool;
  311|       |
  312|  93.4k|	VIPS_GATE_START("vips_worker_work_unit: wait");
  ------------------
  |  |   41|  93.4k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  93.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  93.4k|	{ \
  |  |   43|  93.4k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 0, False: 93.4k]
  |  |  ------------------
  |  |   44|  93.4k|			vips__thread_gate_start(NAME); \
  |  |   45|  93.4k|	} \
  |  |   46|  93.4k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  93.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  313|       |
  314|  93.4k|	vips__worker_lock(pool->allocate_lock);
  315|       |
  316|  93.4k|	VIPS_GATE_STOP("vips_worker_work_unit: wait");
  ------------------
  |  |   49|  93.4k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  93.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |   50|  93.4k|	{ \
  |  |   51|  93.4k|		if (vips__thread_profile) \
  |  |  ------------------
  |  |  |  Branch (51:7): [True: 0, False: 93.4k]
  |  |  ------------------
  |  |   52|  93.4k|			vips__thread_gate_stop(NAME); \
  |  |   53|  93.4k|	} \
  |  |   54|  93.4k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  93.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|       |
  318|       |	/* Has another worker signaled stop while we've been waiting?
  319|       |	 */
  320|  93.4k|	if (pool->stop) {
  ------------------
  |  Branch (320:6): [True: 0, False: 93.4k]
  ------------------
  321|      0|		worker->stop = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  322|      0|		g_mutex_unlock(pool->allocate_lock);
  323|      0|		return;
  324|      0|	}
  325|       |
  326|       |	/* Has a thread been asked to exit? Volunteer if yes.
  327|       |	 */
  328|  93.4k|	if (g_atomic_int_add(&pool->exit, -1) > 0) {
  ------------------
  |  |  162|  93.4k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|  93.4k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  163|  93.4k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|  93.4k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  164|  93.4k|    (void) (0 ? *(atomic) ^ (val) : 1);                                      \
  |  |  ------------------
  |  |  |  Branch (164:13): [Folded - Ignored]
  |  |  ------------------
  |  |  165|  93.4k|    (gint) __atomic_fetch_add ((atomic), (val), __ATOMIC_SEQ_CST);           \
  |  |  166|  93.4k|  }))
  ------------------
  |  Branch (328:6): [True: 0, False: 93.4k]
  ------------------
  329|       |		/* A thread had been asked to exit, and we've grabbed the
  330|       |		 * flag.
  331|       |		 */
  332|      0|		worker->stop = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  333|      0|		g_mutex_unlock(pool->allocate_lock);
  334|      0|		return;
  335|      0|	}
  336|  93.4k|	else {
  337|       |		/* No one had been asked to exit and we've mistakenly taken
  338|       |		 * the exit count below zero. Put it back up again.
  339|       |		 */
  340|  93.4k|		g_atomic_int_inc(&pool->exit);
  ------------------
  |  |  143|  93.4k|  (G_GNUC_EXTENSION ({                                                       \
  |  |  ------------------
  |  |  |  |   54|  93.4k|#define G_GNUC_EXTENSION __extension__
  |  |  ------------------
  |  |  144|  93.4k|    G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gint));                     \
  |  |  ------------------
  |  |  |  |  745|  93.4k|#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
  |  |  ------------------
  |  |  145|  93.4k|    (void) (0 ? *(atomic) ^ *(atomic) : 1);                                  \
  |  |  ------------------
  |  |  |  Branch (145:13): [Folded - Ignored]
  |  |  ------------------
  |  |  146|  93.4k|    (void) __atomic_fetch_add ((atomic), 1, __ATOMIC_SEQ_CST);               \
  |  |  147|  93.4k|  }))
  ------------------
  341|  93.4k|	}
  342|       |
  343|  93.4k|	if (vips_worker_allocate(worker)) {
  ------------------
  |  Branch (343:6): [True: 0, False: 93.4k]
  ------------------
  344|      0|		pool->error = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  345|      0|		worker->stop = TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  346|      0|		g_mutex_unlock(pool->allocate_lock);
  347|      0|		return;
  348|      0|	}
  349|       |
  350|       |	/* Have we just signalled stop?
  351|       |	 */
  352|  93.4k|	if (pool->stop) {
  ------------------
  |  Branch (352:6): [True: 15.4k, False: 78.0k]
  ------------------
  353|  15.4k|		worker->stop = TRUE;
  ------------------
  |  |  798|  15.4k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  15.4k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  354|  15.4k|		g_mutex_unlock(pool->allocate_lock);
  355|  15.4k|		return;
  356|  15.4k|	}
  357|       |
  358|  78.0k|	g_mutex_unlock(pool->allocate_lock);
  359|       |
  360|  78.0k|	if (worker->state->stall &&
  ------------------
  |  Branch (360:6): [True: 0, False: 78.0k]
  ------------------
  361|  78.0k|		vips__stall) {
  ------------------
  |  Branch (361:3): [True: 0, False: 0]
  ------------------
  362|       |		/* Sleep for 0.5s. Handy for stressing the seq system. Stall
  363|       |		 * is set by allocate funcs in various places.
  364|       |		 */
  365|      0|		g_usleep(500000);
  366|      0|		worker->state->stall = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  367|      0|		printf("vips_worker_work_unit: stall done, releasing y = %d ...\n",
  368|      0|			worker->state->y);
  369|      0|	}
  370|       |
  371|       |	/* Process a work unit.
  372|       |	 */
  373|  78.0k|	if (pool->work(worker->state, pool->a)) {
  ------------------
  |  Branch (373:6): [True: 24.0k, False: 53.9k]
  ------------------
  374|  24.0k|		worker->stop = TRUE;
  ------------------
  |  |  798|  24.0k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  24.0k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  375|  24.0k|		pool->error = TRUE;
  ------------------
  |  |  798|  24.0k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  24.0k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  376|  24.0k|	}
  377|  78.0k|}
threadpool.c:vips_worker_allocate:
  289|  93.4k|{
  290|  93.4k|	VipsThreadpool *pool = worker->pool;
  291|       |
  292|  93.4k|	g_assert(!pool->stop);
  ------------------
  |  |  166|  93.4k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  93.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  93.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  293|       |
  294|  93.4k|	if (!worker->state &&
  ------------------
  |  Branch (294:6): [True: 39.5k, False: 53.9k]
  ------------------
  295|  93.4k|		!(worker->state = pool->start(pool->im, pool->a)))
  ------------------
  |  Branch (295:3): [True: 0, False: 39.5k]
  ------------------
  296|      0|		return -1;
  297|       |
  298|  93.4k|	if (pool->allocate(worker->state, pool->a, &pool->stop))
  ------------------
  |  Branch (298:6): [True: 0, False: 93.4k]
  ------------------
  299|      0|		return -1;
  300|       |
  301|  93.4k|	return 0;
  302|  93.4k|}
threadpool.c:vips_threadpool_free:
  488|  39.5k|{
  489|  39.5k|	VIPS_DEBUG_MSG("vips_threadpool_free: \"%s\" (%p)\n",
  ------------------
  |  |   47|  39.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|  39.5k|	{ \
  |  |   49|  39.5k|		; \
  |  |   50|  39.5k|	} \
  |  |   51|  39.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  490|  39.5k|		pool->im->filename, pool);
  491|       |
  492|  39.5k|	vips_threadpool_wait(pool);
  493|       |
  494|  39.5k|	VIPS_FREEF(vips_g_mutex_free, pool->allocate_lock);
  ------------------
  |  |   41|  39.5k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  39.5k|	{ \
  |  |   43|  39.5k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 39.5k, False: 0]
  |  |  ------------------
  |  |   44|  39.5k|			(void) F((S)); \
  |  |   45|  39.5k|			(S) = 0; \
  |  |   46|  39.5k|		} \
  |  |   47|  39.5k|	} \
  |  |   48|  39.5k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  495|  39.5k|	vips_semaphore_destroy(&pool->n_workers);
  496|  39.5k|	vips_semaphore_destroy(&pool->tick);
  497|  39.5k|	VIPS_FREE(pool);
  ------------------
  |  |   50|  39.5k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  39.5k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  39.5k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  39.5k|	{ \
  |  |  |  |   43|  39.5k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 39.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  39.5k|			(void) F((S)); \
  |  |  |  |   45|  39.5k|			(S) = 0; \
  |  |  |  |   46|  39.5k|		} \
  |  |  |  |   47|  39.5k|	} \
  |  |  |  |   48|  39.5k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  39.5k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  498|  39.5k|}
threadpool.c:vips_threadpool_wait:
  479|  79.0k|{
  480|       |	/* Wait for them all to exit.
  481|       |	 */
  482|  79.0k|	pool->stop = TRUE;
  ------------------
  |  |  798|  79.0k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|  79.0k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  483|  79.0k|	vips_semaphore_downn(&pool->n_workers, 0);
  484|  79.0k|}

vips_threadset_new:
  266|      2|{
  267|      2|	VipsThreadset *set;
  268|       |
  269|      2|	set = g_new0(VipsThreadset, 1);
  ------------------
  |  |  299|      2|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|      2|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|      2|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|      2|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|      2|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|      2|	  gpointer __p;						\
  |  |  |  |  231|      2|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  232|      2|	    __p = g_##func (__n);				\
  |  |  |  |  233|      2|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|      2|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 2]
  |  |  |  |  |  Branch (234:26): [True: 2, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|      2|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|      2|	  else							\
  |  |  |  |  237|      2|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|      2|	  __p;							\
  |  |  |  |  239|      2|	}))
  |  |  ------------------
  ------------------
  270|      2|	set->queue = g_async_queue_new();
  271|      2|	vips_semaphore_init(&set->idle, 0, "idle");
  272|      2|	set->max_threads = max_threads;
  273|       |
  274|      2|	if (set->max_threads > 0)
  ------------------
  |  Branch (274:6): [True: 0, False: 2]
  ------------------
  275|      0|		for (int i = 0; i < set->max_threads; i++) {
  ------------------
  |  Branch (275:19): [True: 0, False: 0]
  ------------------
  276|      0|			if (!vips_threadset_add_thread(set)) {
  ------------------
  |  Branch (276:8): [True: 0, False: 0]
  ------------------
  277|      0|				vips_threadset_free(set);
  278|      0|				return NULL;
  279|      0|			}
  280|      0|		}
  281|       |
  282|      2|	return set;
  283|      2|}
vips_threadset_run:
  303|  82.7k|{
  304|  82.7k|	VipsThreadExec *task;
  305|       |
  306|  82.7k|	g_async_queue_lock(set->queue);
  307|       |
  308|       |	/* Create a new thread if there are no waiting threads in the queue.
  309|       |	 */
  310|  82.7k|	if (g_async_queue_length_unlocked(set->queue) >= 0)
  ------------------
  |  Branch (310:6): [True: 19, False: 82.7k]
  ------------------
  311|     19|		if (!vips_threadset_add_thread(set)) {
  ------------------
  |  Branch (311:7): [True: 0, False: 19]
  ------------------
  312|      0|			g_async_queue_unlock(set->queue);
  313|       |
  314|       |			/* Thread create has failed.
  315|       |			 */
  316|      0|			return -1;
  317|      0|		}
  318|       |
  319|       |	/* Allocate the task and push it into the queue.
  320|       |	 */
  321|  82.7k|	task = g_new0(VipsThreadExec, 1);
  ------------------
  |  |  299|  82.7k|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|  82.7k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  82.7k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  82.7k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  82.7k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  82.7k|	  gpointer __p;						\
  |  |  |  |  231|  82.7k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 82.7k]
  |  |  |  |  ------------------
  |  |  |  |  232|  82.7k|	    __p = g_##func (__n);				\
  |  |  |  |  233|  82.7k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 82.7k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|  82.7k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 82.7k]
  |  |  |  |  |  Branch (234:26): [True: 82.7k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  82.7k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  82.7k|	  else							\
  |  |  |  |  237|  82.7k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  82.7k|	  __p;							\
  |  |  |  |  239|  82.7k|	}))
  |  |  ------------------
  ------------------
  322|  82.7k|	task->domain = domain;
  323|  82.7k|	task->func = func;
  324|  82.7k|	task->data = data;
  325|       |
  326|  82.7k|	g_async_queue_push_unlocked(set->queue, task);
  327|  82.7k|	g_async_queue_unlock(set->queue);
  328|       |
  329|  82.7k|	return 0;
  330|  82.7k|}
threadset.c:vips_threadset_add_thread:
  212|     19|{
  213|     19|	gboolean reused = FALSE;
  ------------------
  |  |  794|     19|#define	FALSE	(0)
  ------------------
  214|       |
  215|       |	/* There are already sufficient threads running.
  216|       |	 */
  217|     19|	if (set->max_threads > 0 &&
  ------------------
  |  Branch (217:6): [True: 0, False: 19]
  ------------------
  218|     19|		set->n_threads >= set->max_threads)
  ------------------
  |  Branch (218:3): [True: 0, False: 0]
  ------------------
  219|      0|		return TRUE;
  ------------------
  |  |  798|      0|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      0|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  220|       |
  221|     19|	if (set->n_idle_threads > 0) {
  ------------------
  |  Branch (221:6): [True: 8, False: 11]
  ------------------
  222|      8|		vips_semaphore_up(&set->idle);
  223|       |
  224|      8|		set->n_idle_threads--;
  225|      8|		reused = TRUE;
  ------------------
  |  |  798|      8|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|      8|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  226|      8|	}
  227|       |
  228|     19|	if (!reused) {
  ------------------
  |  Branch (228:6): [True: 11, False: 8]
  ------------------
  229|       |		/* No idle thread was found, we have to start a new one.
  230|       |		 */
  231|     11|		GThread *thread;
  232|       |
  233|     11|		if (!(thread = vips_g_thread_new("libvips worker",
  ------------------
  |  Branch (233:7): [True: 0, False: 11]
  ------------------
  234|     11|				  vips_threadset_work, set)))
  235|      0|			return FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
  236|       |
  237|       |		/* Ensure threads are freed on exit.
  238|       |		 */
  239|     11|		g_thread_unref(thread);
  240|       |
  241|     11|		set->n_threads++;
  242|     11|		set->n_threads_highwater =
  243|     11|			VIPS_MAX(set->n_threads_highwater, set->n_threads);
  ------------------
  |  |   54|     11|#define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (54:25): [True: 4, False: 7]
  |  |  ------------------
  ------------------
  244|     11|	}
  245|       |
  246|     19|	return TRUE;
  ------------------
  |  |  798|     19|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|     19|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  247|     19|}
threadset.c:vips_threadset_work:
  133|     11|{
  134|     11|	VipsThreadset *set = (VipsThreadset *) pointer;
  135|     11|	gboolean cleanup = FALSE;
  ------------------
  |  |  794|     11|#define	FALSE	(0)
  ------------------
  136|       |
  137|     11|	VIPS_DEBUG_MSG("vips_threadset_work: starting %p\n", g_thread_self());
  ------------------
  |  |   47|     11|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|     11|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|     11|	{ \
  |  |   49|     11|		; \
  |  |   50|     11|	} \
  |  |   51|     11|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     11|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  138|       |
  139|     11|	g_async_queue_lock(set->queue);
  140|       |
  141|  82.8k|	for (;;) {
  142|       |		/* Pop a task from the queue. If the number of threads is limited,
  143|       |		 * this will block until a task becomes available. Otherwise, it
  144|       |		 * waits for at least 1/2 second before being marked as idle.
  145|       |		 */
  146|  82.8k|		VipsThreadExec *task = set->max_threads > 0
  ------------------
  |  Branch (146:26): [True: 0, False: 82.8k]
  ------------------
  147|  82.8k|			? g_async_queue_pop_unlocked(set->queue)
  148|  82.8k|			: g_async_queue_timeout_pop_unlocked(set->queue,
  149|  82.8k|				  G_USEC_PER_SEC / 2);
  ------------------
  |  |   42|  82.8k|#define G_USEC_PER_SEC 1000000
  ------------------
  150|       |
  151|       |		/* Request to exit? Leave this thread.
  152|       |		 */
  153|  82.8k|		if (set->exit) {
  ------------------
  |  Branch (153:7): [True: 0, False: 82.8k]
  ------------------
  154|       |			/* The last thread should cleanup the set.
  155|       |			 */
  156|      0|			cleanup = set->n_threads == 1;
  157|      0|			break;
  158|      0|		}
  159|       |
  160|       |		/* No task available? Wait for being reused.
  161|       |		 */
  162|  82.8k|		if (task == NULL) {
  ------------------
  |  Branch (162:7): [True: 15, False: 82.8k]
  ------------------
  163|     15|			if (!vips_threadset_reuse_wait(set)) {
  ------------------
  |  Branch (163:8): [True: 7, False: 8]
  ------------------
  164|      7|				set->n_idle_threads--;
  165|      7|				break;
  166|      7|			}
  167|       |
  168|      8|			continue;
  169|     15|		}
  170|       |
  171|       |		/* A task was received and there was no request to exit.
  172|       |		 */
  173|  82.8k|		g_async_queue_unlock(set->queue);
  174|       |
  175|       |		/* If we're profiling, attach a prof struct to this thread.
  176|       |		 */
  177|  82.8k|		if (vips__thread_profile)
  ------------------
  |  Branch (177:7): [True: 0, False: 82.8k]
  ------------------
  178|      0|			vips__thread_profile_attach(task->domain);
  179|       |
  180|       |		/* Execute the task.
  181|       |		 */
  182|  82.8k|		task->func(task->data, NULL);
  183|       |
  184|       |		/* Free any thread-private resources -- they will not be
  185|       |		 * useful for the next task to use this thread.
  186|       |		 */
  187|  82.8k|		vips_thread_shutdown();
  188|  82.8k|		VIPS_FREE(task);
  ------------------
  |  |   50|  82.8k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  82.8k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  82.8k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  82.8k|	{ \
  |  |  |  |   43|  82.8k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 82.7k, False: 4]
  |  |  |  |  ------------------
  |  |  |  |   44|  82.7k|			(void) F((S)); \
  |  |  |  |   45|  82.7k|			(S) = 0; \
  |  |  |  |   46|  82.7k|		} \
  |  |  |  |   47|  82.8k|	} \
  |  |  |  |   48|  82.8k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  82.8k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|       |
  190|  82.8k|		g_async_queue_lock(set->queue);
  191|  82.8k|	}
  192|       |
  193|       |	/* Timed-out or exit has been requested, decrement number of threads.
  194|       |	 */
  195|     11|	set->n_threads--;
  196|     11|	VIPS_DEBUG_MSG(
  ------------------
  |  |   47|     11|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|     11|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|     11|	{ \
  |  |   49|     11|		; \
  |  |   50|     11|	} \
  |  |   51|     11|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     11|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|     11|		"vips_threadset_work: stopping %p (%d remaining, %d idle)\n",
  198|     11|		g_thread_self(), set->n_threads, set->n_idle_threads);
  199|       |
  200|     11|	g_async_queue_unlock(set->queue);
  201|       |
  202|     11|	if (cleanup)
  ------------------
  |  Branch (202:6): [True: 0, False: 11]
  ------------------
  203|      0|		vips_threadset_free_internal(set);
  204|       |
  205|     11|	return NULL;
  206|     11|}
threadset.c:vips_threadset_reuse_wait:
  102|     15|{
  103|     15|	int result;
  104|       |
  105|       |	/* A superfluous thread? Leave this thread.
  106|       |	 */
  107|     15|	if (++set->n_idle_threads > max_idle_threads)
  ------------------
  |  Branch (107:6): [True: 7, False: 8]
  ------------------
  108|      7|		return FALSE;
  ------------------
  |  |  794|      7|#define	FALSE	(0)
  ------------------
  109|       |
  110|      8|	g_async_queue_unlock(set->queue);
  111|       |
  112|       |	/* Wait for at least 15 seconds before leaving this thread.
  113|       |	 */
  114|      8|	result = vips_semaphore_down_timeout(&set->idle, max_idle_time);
  115|       |
  116|      8|	g_async_queue_lock(set->queue);
  117|       |
  118|      8|	return result != -1;
  119|     15|}

vips_area_copy:
  139|  2.16M|{
  140|  2.16M|	g_mutex_lock(area->lock);
  141|       |
  142|  2.16M|	g_assert(area->count > 0);
  ------------------
  |  |  166|  2.16M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  2.16M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.16M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  143|       |
  144|  2.16M|	area->count += 1;
  145|       |
  146|       |#ifdef DEBUG
  147|       |	printf("vips_area_copy: %p count = %d\n", area, area->count);
  148|       |#endif /*DEBUG*/
  149|       |
  150|  2.16M|	g_mutex_unlock(area->lock);
  151|       |
  152|  2.16M|	return area;
  153|  2.16M|}
vips_area_free_cb:
  157|   407k|{
  158|   407k|	g_free(mem);
  159|       |
  160|   407k|	return 0;
  161|   407k|}
vips_area_unref:
  177|  2.81M|{
  178|  2.81M|	g_mutex_lock(area->lock);
  179|       |
  180|  2.81M|	g_assert(area->count > 0);
  ------------------
  |  |  166|  2.81M|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  2.81M|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.81M|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  181|       |
  182|  2.81M|	area->count -= 1;
  183|       |
  184|       |#ifdef DEBUG
  185|       |	printf("vips_area_unref: %p count = %d\n", area, area->count);
  186|       |#endif /*DEBUG*/
  187|       |
  188|  2.81M|	if (vips__leak) {
  ------------------
  |  Branch (188:6): [True: 0, False: 2.81M]
  ------------------
  189|      0|		g_mutex_lock(&vips__global_lock);
  190|      0|		g_assert(g_slist_find(vips_area_all, area));
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|      0|		g_mutex_unlock(&vips__global_lock);
  192|      0|	}
  193|       |
  194|  2.81M|	if (area->count == 0) {
  ------------------
  |  Branch (194:6): [True: 656k, False: 2.15M]
  ------------------
  195|   656k|		vips_area_free(area);
  196|       |
  197|   656k|		g_mutex_unlock(area->lock);
  198|       |
  199|   656k|		VIPS_FREEF(vips_g_mutex_free, area->lock);
  ------------------
  |  |   41|   656k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|   656k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|   656k|	{ \
  |  |   43|   656k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 656k, False: 0]
  |  |  ------------------
  |  |   44|   656k|			(void) F((S)); \
  |  |   45|   656k|			(S) = 0; \
  |  |   46|   656k|		} \
  |  |   47|   656k|	} \
  |  |   48|   656k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   656k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  200|       |
  201|   656k|		g_free(area);
  202|       |
  203|   656k|		if (vips__leak) {
  ------------------
  |  Branch (203:7): [True: 0, False: 656k]
  ------------------
  204|      0|			g_mutex_lock(&vips__global_lock);
  205|      0|			vips_area_all = g_slist_remove(vips_area_all, area);
  206|      0|			g_mutex_unlock(&vips__global_lock);
  207|      0|		}
  208|       |
  209|       |#ifdef DEBUG
  210|       |		g_mutex_lock(&vips__global_lock);
  211|       |		printf("vips_area_unref: free .. total = %d\n",
  212|       |			g_slist_length(vips_area_all));
  213|       |		g_mutex_unlock(&vips__global_lock);
  214|       |#endif /*DEBUG*/
  215|   656k|	}
  216|  2.15M|	else
  217|  2.15M|		g_mutex_unlock(area->lock);
  218|  2.81M|}
vips_area_new:
  254|   656k|{
  255|   656k|	VipsArea *area;
  256|       |
  257|   656k|	area = g_new(VipsArea, 1);
  ------------------
  |  |  282|   656k|#define g_new(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc)
  |  |  ------------------
  |  |  |  |  227|   656k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|   656k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|   656k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|   656k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|   656k|	  gpointer __p;						\
  |  |  |  |  231|   656k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 656k]
  |  |  |  |  ------------------
  |  |  |  |  232|   656k|	    __p = g_##func (__n);				\
  |  |  |  |  233|   656k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 656k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  234|   656k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 656k]
  |  |  |  |  |  Branch (234:26): [True: 656k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|   656k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|   656k|	  else							\
  |  |  |  |  237|   656k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|   656k|	  __p;							\
  |  |  |  |  239|   656k|	}))
  |  |  ------------------
  ------------------
  258|   656k|	area->count = 1;
  259|   656k|	area->lock = vips_g_mutex_new();
  260|   656k|	area->length = 0;
  261|   656k|	area->data = data;
  262|   656k|	area->free_fn = free_fn;
  263|   656k|	area->type = 0;
  264|   656k|	area->sizeof_type = 0;
  265|       |
  266|   656k|	if (vips__leak) {
  ------------------
  |  Branch (266:6): [True: 0, False: 656k]
  ------------------
  267|      0|		g_mutex_lock(&vips__global_lock);
  268|      0|		vips_area_all = g_slist_prepend(vips_area_all, area);
  269|      0|		g_mutex_unlock(&vips__global_lock);
  270|      0|	}
  271|       |
  272|       |#ifdef DEBUG
  273|       |	g_mutex_lock(&vips__global_lock);
  274|       |	printf("vips_area_new: %p count = %d (%d in total)\n",
  275|       |		area, area->count,
  276|       |		g_slist_length(vips_area_all));
  277|       |	g_mutex_unlock(&vips__global_lock);
  278|       |#endif /*DEBUG*/
  279|       |
  280|   656k|	return area;
  281|   656k|}
vips_area_new_array:
  323|  23.8k|{
  324|  23.8k|	VipsArea *area;
  325|  23.8k|	void *array;
  326|       |
  327|  23.8k|	array = g_malloc(n * sizeof_type);
  328|  23.8k|	area = vips_area_new((VipsCallbackFn) vips_area_free_cb, array);
  329|  23.8k|	area->n = n;
  330|  23.8k|	area->length = n * sizeof_type;
  331|  23.8k|	area->type = type;
  332|  23.8k|	area->sizeof_type = sizeof_type;
  333|       |
  334|  23.8k|	return area;
  335|  23.8k|}
vips_area_new_array_object:
  367|  1.04k|{
  368|  1.04k|	GObject **array;
  369|  1.04k|	VipsArea *area;
  370|       |
  371|  1.04k|	array = g_new0(GObject *, n + 1);
  ------------------
  |  |  299|  1.04k|#define g_new0(struct_type, n_structs)			_G_NEW (struct_type, n_structs, malloc0)
  |  |  ------------------
  |  |  |  |  227|  1.04k|	(struct_type *) (G_GNUC_EXTENSION ({			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   54|  1.04k|#define G_GNUC_EXTENSION __extension__
  |  |  |  |  ------------------
  |  |  |  |  228|  1.04k|	  gsize __n = (gsize) (n_structs);			\
  |  |  |  |  229|  1.04k|	  gsize __s = sizeof (struct_type);			\
  |  |  |  |  230|  1.04k|	  gpointer __p;						\
  |  |  |  |  231|  1.04k|	  if (__s == 1)						\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:8): [True: 0, False: 1.04k]
  |  |  |  |  ------------------
  |  |  |  |  232|  1.04k|	    __p = g_##func (__n);				\
  |  |  |  |  233|  1.04k|	  else if (__builtin_constant_p (__n) &&		\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (233:13): [True: 0, False: 1.04k]
  |  |  |  |  ------------------
  |  |  |  |  234|  1.04k|	           (__s == 0 || __n <= G_MAXSIZE / __s))	\
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (234:14): [True: 0, False: 0]
  |  |  |  |  |  Branch (234:26): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  235|  1.04k|	    __p = g_##func (__n * __s);				\
  |  |  |  |  236|  1.04k|	  else							\
  |  |  |  |  237|  1.04k|	    __p = g_##func##_n (__n, __s);			\
  |  |  |  |  238|  1.04k|	  __p;							\
  |  |  |  |  239|  1.04k|	}))
  |  |  ------------------
  ------------------
  372|  1.04k|	area = vips_area_new((VipsCallbackFn) vips_area_free_array_object,
  373|  1.04k|		array);
  374|  1.04k|	area->n = n;
  375|  1.04k|	area->length = n * sizeof(GObject *);
  376|  1.04k|	area->type = G_TYPE_OBJECT;
  ------------------
  |  |  178|  1.04k|#define G_TYPE_OBJECT			G_TYPE_MAKE_FUNDAMENTAL (20)
  |  |  ------------------
  |  |  |  |  221|  1.04k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  1.04k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  377|  1.04k|	area->sizeof_type = sizeof(GObject *);
  378|       |
  379|  1.04k|	return area;
  380|  1.04k|}
vips_area_get_data:
  399|   266k|{
  400|   266k|	if (!area)
  ------------------
  |  Branch (400:6): [True: 0, False: 266k]
  ------------------
  401|      0|		return NULL;
  402|       |
  403|   266k|	if (length)
  ------------------
  |  Branch (403:6): [True: 243k, False: 22.7k]
  ------------------
  404|   243k|		*length = area->length;
  405|   266k|	if (n)
  ------------------
  |  Branch (405:6): [True: 0, False: 266k]
  ------------------
  406|      0|		*n = area->n;
  407|   266k|	if (type)
  ------------------
  |  Branch (407:6): [True: 0, False: 266k]
  ------------------
  408|      0|		*type = area->type;
  409|   266k|	if (sizeof_type)
  ------------------
  |  Branch (409:6): [True: 0, False: 266k]
  ------------------
  410|      0|		*sizeof_type = area->sizeof_type;
  411|       |
  412|   266k|	return area->data;
  413|   266k|}
vips_ref_string_new:
  577|   359k|{
  578|   359k|	VipsArea *area;
  579|       |
  580|   359k|	char *utf8_str = g_utf8_make_valid(str, -1);
  581|       |
  582|   359k|	area = vips_area_new((VipsCallbackFn) vips_area_free_cb, utf8_str);
  583|       |
  584|       |	/* Handy place to cache this.
  585|       |	 */
  586|   359k|	area->length = strlen(utf8_str);
  587|       |
  588|   359k|	return (VipsRefString *) area;
  589|   359k|}
vips_blob_new:
  653|   272k|{
  654|   272k|	VipsArea *area;
  655|       |
  656|   272k|	area = vips_area_new(free_fn, (void *) data);
  657|   272k|	area->length = length;
  658|       |
  659|   272k|	return (VipsBlob *) area;
  660|   272k|}
vips_blob_get:
  702|   197k|{
  703|   197k|	return vips_area_get_data(VIPS_AREA(blob),
  ------------------
  |  |  137|   197k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  704|   197k|		length, NULL, NULL, NULL);
  705|   197k|}
vips_blob_set:
  724|  8.38k|{
  725|  8.38k|	VipsArea *area = VIPS_AREA(blob);
  ------------------
  |  |  137|  8.38k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
  726|       |
  727|  8.38k|	g_mutex_lock(area->lock);
  728|       |
  729|  8.38k|	vips_area_free(area);
  730|       |
  731|  8.38k|	area->free_fn = free_fn;
  732|  8.38k|	area->length = length;
  733|  8.38k|	area->data = (void *) data;
  734|       |
  735|  8.38k|	g_mutex_unlock(area->lock);
  736|  8.38k|}
vips_array_double_new:
 1069|      4|{
 1070|      4|	VipsArea *area;
 1071|      4|	double *array_copy;
 1072|       |
 1073|      4|	area = vips_area_new_array(G_TYPE_DOUBLE, sizeof(double), n);
  ------------------
  |  |  148|      4|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  221|      4|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      4|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1074|      4|	array_copy = vips_area_get_data(area, NULL, NULL, NULL, NULL);
 1075|      4|	memcpy(array_copy, array, n * sizeof(double));
 1076|       |
 1077|      4|	return (VipsArrayDouble *) area;
 1078|      4|}
vips_array_double_newv:
 1094|  21.6k|{
 1095|  21.6k|	va_list ap;
 1096|  21.6k|	VipsArea *area;
 1097|  21.6k|	double *array;
 1098|  21.6k|	int i;
 1099|       |
 1100|  21.6k|	area = vips_area_new_array(G_TYPE_DOUBLE, sizeof(double), n);
  ------------------
  |  |  148|  21.6k|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  221|  21.6k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  21.6k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1101|  21.6k|	array = vips_area_get_data(area, NULL, NULL, NULL, NULL);
 1102|       |
 1103|  21.6k|	va_start(ap, n);
 1104|  43.3k|	for (i = 0; i < n; i++)
  ------------------
  |  Branch (1104:14): [True: 21.6k, False: 21.6k]
  ------------------
 1105|  21.6k|		array[i] = va_arg(ap, double);
 1106|  21.6k|	va_end(ap);
 1107|       |
 1108|  21.6k|	return (VipsArrayDouble *) area;
 1109|  21.6k|}
vips_array_image_new:
 1290|  1.04k|{
 1291|  1.04k|	VipsArea *area;
 1292|  1.04k|	VipsImage **array_copy;
 1293|  1.04k|	int i;
 1294|       |
 1295|  1.04k|	area = vips_area_new_array_object(n);
 1296|  1.04k|	area->type = VIPS_TYPE_IMAGE;
  ------------------
  |  |  169|  1.04k|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  ------------------
 1297|       |
 1298|  1.04k|	array_copy = vips_area_get_data(area, NULL, NULL, NULL, NULL);
 1299|  3.58k|	for (i = 0; i < n; i++) {
  ------------------
  |  Branch (1299:14): [True: 2.54k, False: 1.04k]
  ------------------
 1300|  2.54k|		array_copy[i] = (VipsImage *) array[i];
 1301|  2.54k|		g_object_ref(array_copy[i]);
 1302|  2.54k|	}
 1303|       |
 1304|  1.04k|	return (VipsArrayImage *) area;
 1305|  1.04k|}
vips_array_image_get:
 1462|  1.04k|{
 1463|  1.04k|	VipsArea *area = VIPS_AREA(array);
  ------------------
  |  |  137|  1.04k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 1464|       |
 1465|  1.04k|	g_assert(area->type == VIPS_TYPE_IMAGE);
  ------------------
  |  |  166|  1.04k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  1.04k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  1.04k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1466|       |
 1467|  1.04k|	if (n)
  ------------------
  |  Branch (1467:6): [True: 1.04k, False: 0]
  ------------------
 1468|  1.04k|		*n = area->n;
 1469|       |
 1470|  1.04k|	return (VipsImage **) VIPS_ARRAY_ADDR(array, 0);
  ------------------
  |  |  127|  1.04k|	((void *) ((VipsPel *) VIPS_AREA(X)->data + \
  |  |  ------------------
  |  |  |  |  137|  1.04k|#define VIPS_AREA(X) ((VipsArea *) (X))
  |  |  ------------------
  |  |  128|  1.04k|		VIPS_AREA(X)->sizeof_type * (I)))
  |  |  ------------------
  |  |  |  |  137|  1.04k|#define VIPS_AREA(X) ((VipsArea *) (X))
  |  |  ------------------
  ------------------
 1471|  1.04k|}
vips_value_get_area:
 1536|  46.6k|{
 1537|  46.6k|	VipsArea *area;
 1538|       |
 1539|  46.6k|	area = g_value_get_boxed(value);
 1540|       |
 1541|  46.6k|	return vips_area_get_data(area, length, NULL, NULL, NULL);
 1542|  46.6k|}
vips_value_set_ref_string:
 1631|   359k|{
 1632|   359k|	VipsRefString *ref_str;
 1633|       |
 1634|   359k|	g_assert(G_VALUE_TYPE(value) == VIPS_TYPE_REF_STRING);
  ------------------
  |  |  166|   359k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|   359k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|   359k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1635|       |
 1636|   359k|	ref_str = vips_ref_string_new(str);
 1637|   359k|	g_value_set_boxed(value, ref_str);
 1638|   359k|	vips_area_unref(VIPS_AREA(ref_str));
  ------------------
  |  |  137|   359k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 1639|   359k|}
vips_value_set_blob:
 1662|  25.4k|{
 1663|  25.4k|	VipsBlob *blob;
 1664|       |
 1665|  25.4k|	g_assert(G_VALUE_TYPE(value) == VIPS_TYPE_BLOB);
  ------------------
  |  |  166|  25.4k|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|  25.4k|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  25.4k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1666|       |
 1667|  25.4k|	blob = vips_blob_new(free_fn, data, length);
 1668|  25.4k|	g_value_set_boxed(value, blob);
 1669|  25.4k|	vips_area_unref(VIPS_AREA(blob));
  ------------------
  |  |  137|  25.4k|#define VIPS_AREA(X) ((VipsArea *) (X))
  ------------------
 1670|  25.4k|}
vips_value_get_blob:
 1717|  46.6k|{
 1718|  46.6k|	return vips_value_get_area(value, length);
 1719|  46.6k|}
vips_value_set_array:
 1735|  2.17k|{
 1736|  2.17k|	VipsArea *area;
 1737|       |
 1738|  2.17k|	area = vips_area_new_array(type, sizeof_type, n);
 1739|  2.17k|	g_value_set_boxed(value, area);
 1740|  2.17k|	vips_area_unref(area);
 1741|  2.17k|}
vips_value_get_array:
 1761|  2.17k|{
 1762|  2.17k|	VipsArea *area;
 1763|       |
 1764|       |	/* Can't check value type, because we may get called from
 1765|       |	 * vips_*_get_type().
 1766|       |	 */
 1767|       |
 1768|  2.17k|	if (!(area = g_value_get_boxed(value)))
  ------------------
  |  Branch (1768:6): [True: 0, False: 2.17k]
  ------------------
 1769|      0|		return NULL;
 1770|  2.17k|	if (n)
  ------------------
  |  Branch (1770:6): [True: 0, False: 2.17k]
  ------------------
 1771|      0|		*n = area->n;
 1772|  2.17k|	if (type)
  ------------------
  |  Branch (1772:6): [True: 0, False: 2.17k]
  ------------------
 1773|      0|		*type = area->type;
 1774|  2.17k|	if (sizeof_type)
  ------------------
  |  Branch (1774:6): [True: 0, False: 2.17k]
  ------------------
 1775|      0|		*sizeof_type = area->sizeof_type;
 1776|       |
 1777|  2.17k|	return area->data;
 1778|  2.17k|}
vips_value_get_array_int:
 1794|  1.40k|{
 1795|  1.40k|	return vips_value_get_array(value, n, NULL, NULL);
 1796|  1.40k|}
vips_value_set_array_int:
 1810|  1.40k|{
 1811|  1.40k|	vips_value_set_array(value, n, G_TYPE_INT, sizeof(int));
  ------------------
  |  |   94|  1.40k|#define G_TYPE_INT			G_TYPE_MAKE_FUNDAMENTAL (6)
  |  |  ------------------
  |  |  |  |  221|  1.40k|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  1.40k|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1812|       |
 1813|  1.40k|	if (array) {
  ------------------
  |  Branch (1813:6): [True: 1.40k, False: 0]
  ------------------
 1814|  1.40k|		int *array_copy;
 1815|       |
 1816|  1.40k|		array_copy = vips_value_get_array_int(value, NULL);
 1817|  1.40k|		memcpy(array_copy, array, n * sizeof(int));
 1818|  1.40k|	}
 1819|  1.40k|}
vips_value_get_array_double:
 1835|    769|{
 1836|    769|	return vips_value_get_array(value, n, NULL, NULL);
 1837|    769|}
vips_value_set_array_double:
 1851|    769|{
 1852|    769|	vips_value_set_array(value, n, G_TYPE_DOUBLE, sizeof(double));
  ------------------
  |  |  148|    769|#define G_TYPE_DOUBLE			G_TYPE_MAKE_FUNDAMENTAL (15)
  |  |  ------------------
  |  |  |  |  221|    769|#define	G_TYPE_MAKE_FUNDAMENTAL(x)	((GType) ((x) << G_TYPE_FUNDAMENTAL_SHIFT))
  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    769|#define	G_TYPE_FUNDAMENTAL_SHIFT	(2)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1853|       |
 1854|    769|	if (array) {
  ------------------
  |  Branch (1854:6): [True: 769, False: 0]
  ------------------
 1855|    769|		double *array_copy;
 1856|       |
 1857|    769|		array_copy = vips_value_get_array_double(value, NULL);
 1858|    769|		memcpy(array_copy, array, n * sizeof(double));
 1859|    769|	}
 1860|    769|}
vips__meta_init_types:
 1941|      2|{
 1942|      2|	(void) vips_thing_get_type();
 1943|      2|	(void) vips_save_string_get_type();
 1944|      2|	(void) vips_area_get_type();
 1945|      2|	(void) vips_ref_string_get_type();
 1946|      2|	(void) vips_blob_get_type();
 1947|      2|	(void) vips_array_int_get_type();
 1948|      2|	(void) vips_array_double_get_type();
 1949|      2|	(void) vips_array_image_get_type();
 1950|       |
 1951|       |	/* Register transform functions to convert between an array of
 1952|       |	 * integers and doubles. This is set here to prevent a recursive
 1953|       |	 * call chain.
 1954|       |	 */
 1955|      2|	g_value_register_transform_func(VIPS_TYPE_ARRAY_INT,
  ------------------
  |  |  221|      2|#define VIPS_TYPE_ARRAY_INT (vips_array_int_get_type())
  ------------------
 1956|      2|		VIPS_TYPE_ARRAY_DOUBLE, transform_array_int_array_double);
  ------------------
  |  |  201|      2|#define VIPS_TYPE_ARRAY_DOUBLE (vips_array_double_get_type())
  ------------------
 1957|      2|	g_value_register_transform_func(VIPS_TYPE_ARRAY_DOUBLE,
  ------------------
  |  |  201|      2|#define VIPS_TYPE_ARRAY_DOUBLE (vips_array_double_get_type())
  ------------------
 1958|      2|		VIPS_TYPE_ARRAY_INT, transform_array_double_array_int);
  ------------------
  |  |  221|      2|#define VIPS_TYPE_ARRAY_INT (vips_array_int_get_type())
  ------------------
 1959|      2|}
type.c:vips_area_free:
  165|   665k|{
  166|   665k|	if (area->free_fn &&
  ------------------
  |  Branch (166:6): [True: 408k, False: 256k]
  ------------------
  167|   665k|		area->data) {
  ------------------
  |  Branch (167:3): [True: 408k, False: 0]
  ------------------
  168|   408k|		area->free_fn(area->data, area);
  169|   408k|		area->free_fn = NULL;
  170|   408k|	}
  171|       |
  172|   665k|	area->data = NULL;
  173|   665k|}
type.c:vips_area_free_array_object:
  339|  1.03k|{
  340|  1.03k|	int i;
  341|       |
  342|  3.56k|	for (i = 0; i < area->n; i++)
  ------------------
  |  Branch (342:14): [True: 2.53k, False: 1.03k]
  ------------------
  343|  2.53k|		VIPS_FREEF(g_object_unref, array[i]);
  ------------------
  |  |   41|  2.53k|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|  2.53k|#define G_STMT_START  do
  |  |  ------------------
  |  |   42|  2.53k|	{ \
  |  |   43|  2.53k|		if (S) { \
  |  |  ------------------
  |  |  |  Branch (43:7): [True: 2.53k, False: 0]
  |  |  ------------------
  |  |   44|  2.53k|			(void) F((S)); \
  |  |   45|  2.53k|			(S) = 0; \
  |  |   46|  2.53k|		} \
  |  |   47|  2.53k|	} \
  |  |   48|  2.53k|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|  2.53k|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  344|  1.03k|	VIPS_FREE(array);
  ------------------
  |  |   50|  1.03k|#define VIPS_FREE(S) VIPS_FREEF(g_free, (S));
  |  |  ------------------
  |  |  |  |   41|  1.03k|	G_STMT_START \
  |  |  |  |  ------------------
  |  |  |  |  |  |  854|  1.03k|#define G_STMT_START  do
  |  |  |  |  ------------------
  |  |  |  |   42|  1.03k|	{ \
  |  |  |  |   43|  1.03k|		if (S) { \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (43:7): [True: 1.03k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   44|  1.03k|			(void) F((S)); \
  |  |  |  |   45|  1.03k|			(S) = 0; \
  |  |  |  |   46|  1.03k|		} \
  |  |  |  |   47|  1.03k|	} \
  |  |  |  |   48|  1.03k|	G_STMT_END
  |  |  |  |  ------------------
  |  |  |  |  |  |  862|  1.03k|#define G_STMT_END    while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  345|       |
  346|  1.03k|	area->n = 0;
  347|       |
  348|  1.03k|	return 0;
  349|  1.03k|}

vips_slist_map2:
   94|  1.47M|{
   95|  1.47M|	GSList *copy;
   96|  1.47M|	GSList *i;
   97|  1.47M|	void *result;
   98|       |
   99|  1.47M|	copy = g_slist_copy(list);
  100|  1.47M|	result = NULL;
  101|  5.43M|	for (i = copy; i && !(result = fn(i->data, a, b)); i = i->next)
  ------------------
  |  Branch (101:17): [True: 4.01M, False: 1.42M]
  |  Branch (101:22): [True: 3.96M, False: 51.6k]
  ------------------
  102|  3.96M|		;
  103|  1.47M|	g_slist_free(copy);
  104|       |
  105|  1.47M|	return result;
  106|  1.47M|}
vips_iscasepostfix:
  253|   281k|{
  254|   281k|	int m = strlen(a);
  255|   281k|	int n = strlen(b);
  256|       |
  257|   281k|	if (n > m)
  ------------------
  |  Branch (257:6): [True: 21.6k, False: 259k]
  ------------------
  258|  21.6k|		return FALSE;
  ------------------
  |  |  794|  21.6k|#define	FALSE	(0)
  ------------------
  259|       |
  260|   259k|	return g_ascii_strcasecmp(a + m - n, b) == 0;
  261|   281k|}
vips_isprefix:
  269|  32.8M|{
  270|  32.8M|	int i;
  271|       |
  272|  34.0M|	for (i = 0; a[i] && b[i]; i++)
  ------------------
  |  Branch (272:14): [True: 33.9M, False: 107k]
  |  Branch (272:22): [True: 21.7M, False: 12.2M]
  ------------------
  273|  21.7M|		if (a[i] != b[i])
  ------------------
  |  Branch (273:7): [True: 20.5M, False: 1.19M]
  ------------------
  274|  20.5M|			return FALSE;
  ------------------
  |  |  794|  20.5M|#define	FALSE	(0)
  ------------------
  275|       |
  276|       |	/* If there's stuff left in a but b has finished, we must have a
  277|       |	 * mismatch.
  278|       |	 */
  279|  12.3M|	if (a[i] && !b[i])
  ------------------
  |  Branch (279:6): [True: 12.2M, False: 107k]
  |  Branch (279:14): [True: 12.2M, False: 0]
  ------------------
  280|  12.2M|		return FALSE;
  ------------------
  |  |  794|  12.2M|#define	FALSE	(0)
  ------------------
  281|       |
  282|   107k|	return TRUE;
  ------------------
  |  |  798|   107k|#define	TRUE	(!FALSE)
  |  |  ------------------
  |  |  |  |  794|   107k|#define	FALSE	(0)
  |  |  ------------------
  ------------------
  283|  12.3M|}
vips_break_token:
  360|     11|{
  361|     11|	char *p;
  362|     11|	char *q;
  363|       |
  364|       |	/* Is the string empty? If yes, return NULL immediately.
  365|       |	 */
  366|     11|	if (!str ||
  ------------------
  |  Branch (366:6): [True: 0, False: 11]
  ------------------
  367|     11|		!*str)
  ------------------
  |  Branch (367:3): [True: 1, False: 10]
  ------------------
  368|      1|		return NULL;
  369|       |
  370|       |	/* Skip initial break characters.
  371|       |	 */
  372|     10|	p = str + strspn(str, brk);
  373|       |
  374|       |	/* No item?
  375|       |	 */
  376|     10|	if (!*p)
  ------------------
  |  Branch (376:6): [True: 0, False: 10]
  ------------------
  377|      0|		return NULL;
  378|       |
  379|       |	/* We have a token ... search for the first break character after the
  380|       |	 * token. strcspne() allows '\' to escape breaks, see above.
  381|       |	 */
  382|     10|	p += strcspne(p, brk);
  383|       |
  384|       |	/* Is there string left?
  385|       |	 */
  386|     10|	if (*p) {
  ------------------
  |  Branch (386:6): [True: 9, False: 1]
  ------------------
  387|       |		/* Write in an end-of-string mark and return the start of the
  388|       |		 * next token.
  389|       |		 */
  390|      9|		*p++ = '\0';
  391|      9|		p += strspn(p, brk);
  392|      9|	}
  393|       |
  394|       |	/* There may be escaped break characters in str. Loop, squashing them
  395|       |	 * out.
  396|       |	 */
  397|     10|	for (q = strchr(str, '\\'); q && *q; q = strchr(q, '\\')) {
  ------------------
  |  Branch (397:30): [True: 0, False: 10]
  |  Branch (397:35): [True: 0, False: 0]
  ------------------
  398|      0|		memmove(q, q + 1, strlen(q));
  399|       |
  400|       |		/* If there's \\, we don't want to squash out the second \.
  401|       |		 */
  402|      0|		q += 1;
  403|      0|	}
  404|       |
  405|     10|	return p;
  406|     10|}
vips_filename_suffix_match:
  413|   259k|{
  414|   259k|	char *basename;
  415|   259k|	char *q;
  416|   259k|	int result;
  417|   259k|	const char **p;
  418|       |
  419|       |	/* Drop any directory components.
  420|       |	 */
  421|   259k|	basename = g_path_get_basename(path);
  422|       |
  423|       |	/* Zap any trailing [] options.
  424|       |	 */
  425|   259k|	if ((q = (char *) vips__find_rightmost_brackets(basename)))
  ------------------
  |  Branch (425:6): [True: 0, False: 259k]
  ------------------
  426|      0|		*q = '\0';
  427|       |
  428|   259k|	result = 0;
  429|   519k|	for (p = suffixes; *p; p++)
  ------------------
  |  Branch (429:21): [True: 281k, False: 238k]
  ------------------
  430|   281k|		if (vips_iscasepostfix(basename, *p)) {
  ------------------
  |  Branch (430:7): [True: 21.6k, False: 259k]
  ------------------
  431|  21.6k|			result = 1;
  432|  21.6k|			break;
  433|  21.6k|		}
  434|       |
  435|   259k|	g_free(basename);
  436|       |
  437|   259k|	return result;
  438|   259k|}
vips__gslist_gvalue_merge:
  887|   157k|{
  888|   157k|	const GSList *i, *j;
  889|   157k|	GSList *tail;
  890|       |
  891|   157k|	tail = NULL;
  892|       |
  893|   157k|	for (i = b; i; i = i->next) {
  ------------------
  |  Branch (893:14): [True: 0, False: 157k]
  ------------------
  894|      0|		GValue *value = (GValue *) i->data;
  895|       |
  896|      0|		g_assert(G_VALUE_TYPE(value) == VIPS_TYPE_REF_STRING);
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  897|       |
  898|      0|		for (j = a; j; j = j->next) {
  ------------------
  |  Branch (898:15): [True: 0, False: 0]
  ------------------
  899|      0|			GValue *value2 = (GValue *) j->data;
  900|       |
  901|      0|			g_assert(G_VALUE_TYPE(value2) ==
  ------------------
  |  |  166|      0|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|      0|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      0|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  902|      0|				VIPS_TYPE_REF_STRING);
  903|       |
  904|       |			/* Just do a pointer compare ... good enough 99.9% of
  905|       |			 * the time.
  906|       |			 */
  907|      0|			if (vips_value_get_ref_string(value, NULL) ==
  ------------------
  |  Branch (907:8): [True: 0, False: 0]
  ------------------
  908|      0|				vips_value_get_ref_string(value2, NULL))
  909|      0|				break;
  910|      0|		}
  911|       |
  912|      0|		if (!j)
  ------------------
  |  Branch (912:7): [True: 0, False: 0]
  ------------------
  913|      0|			tail = g_slist_prepend(tail,
  914|      0|				vips__gvalue_copy(value));
  915|      0|	}
  916|       |
  917|   157k|	a = g_slist_concat(a, g_slist_reverse(tail));
  918|       |
  919|   157k|	return a;
  920|   157k|}
vips_existsf:
 1047|     11|{
 1048|     11|	va_list ap;
 1049|     11|	char *path;
 1050|     11|	gboolean result;
 1051|       |
 1052|     11|	va_start(ap, name);
 1053|     11|	path = g_strdup_vprintf(name, ap);
 1054|     11|	va_end(ap);
 1055|       |
 1056|     11|	result = g_file_test(path, G_FILE_TEST_EXISTS);
 1057|       |
 1058|     11|	g_free(path);
 1059|       |
 1060|     11|	return result;
 1061|     11|}
vips__token_get:
 1156|   812k|{
 1157|   812k|	const char *q;
 1158|   812k|	int ch;
 1159|   812k|	int n;
 1160|       |
 1161|       |	/* string return defaults to "".
 1162|       |	 */
 1163|   812k|	if (size > 0)
  ------------------
  |  Branch (1163:6): [True: 812k, False: 0]
  ------------------
 1164|   812k|		string[0] = '\0';
 1165|       |
 1166|       |	/* Parse this token with p.
 1167|       |	 */
 1168|   812k|	if (!p)
  ------------------
  |  Branch (1168:6): [True: 0, False: 812k]
  ------------------
 1169|      0|		return NULL;
 1170|       |
 1171|       |	/* Skip initial whitespace.
 1172|       |	 */
 1173|   812k|	p += strspn(p, " \t\n\r");
 1174|   812k|	if (!p[0])
  ------------------
  |  Branch (1174:6): [True: 406k, False: 406k]
  ------------------
 1175|   406k|		return NULL;
 1176|       |
 1177|   406k|	switch ((ch = p[0])) {
 1178|  51.6k|	case '[':
  ------------------
  |  Branch (1178:2): [True: 51.6k, False: 354k]
  ------------------
 1179|  51.6k|		*token = VIPS_TOKEN_LEFT;
 1180|  51.6k|		p += 1;
 1181|  51.6k|		break;
 1182|       |
 1183|  51.6k|	case ']':
  ------------------
  |  Branch (1183:2): [True: 51.6k, False: 354k]
  ------------------
 1184|  51.6k|		*token = VIPS_TOKEN_RIGHT;
 1185|  51.6k|		p += 1;
 1186|  51.6k|		break;
 1187|       |
 1188|      0|	case '=':
  ------------------
  |  Branch (1188:2): [True: 0, False: 406k]
  ------------------
 1189|      0|		*token = VIPS_TOKEN_EQUALS;
 1190|      0|		p += 1;
 1191|      0|		break;
 1192|       |
 1193|      0|	case ',':
  ------------------
  |  Branch (1193:2): [True: 0, False: 406k]
  ------------------
 1194|      0|		*token = VIPS_TOKEN_COMMA;
 1195|      0|		p += 1;
 1196|      0|		break;
 1197|       |
 1198|      0|	case '"':
  ------------------
  |  Branch (1198:2): [True: 0, False: 406k]
  ------------------
 1199|      0|	case '\'':
  ------------------
  |  Branch (1199:2): [True: 0, False: 406k]
  ------------------
 1200|       |		/* Parse a quoted string. Copy up to " or end of string, interpret
 1201|       |		 * any \",
 1202|       |		 */
 1203|      0|		*token = VIPS_TOKEN_STRING;
 1204|       |
 1205|      0|		do {
 1206|       |			/* Move q to the next matching quote, or the end of the string.
 1207|       |			 */
 1208|      0|			if (!(q = strchr(p + 1, ch)))
  ------------------
  |  Branch (1208:8): [True: 0, False: 0]
  ------------------
 1209|      0|				q = p + strlen(p);
 1210|       |
 1211|       |			// number of characters we copy to the output
 1212|      0|			n = VIPS_MIN(q - p - 1, size - 1);
  ------------------
  |  |   55|      0|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1213|      0|			g_strlcpy(string, p + 1, n + 1);
 1214|       |
 1215|       |			/* We might have stopped at an escaped quote. If the
 1216|       |			 * char before the end is a backslash, swap it for a quote.
 1217|       |			 */
 1218|      0|			if (q[-1] == '\\')
  ------------------
  |  Branch (1218:8): [True: 0, False: 0]
  ------------------
 1219|      0|				string[n - 1] = ch;
 1220|       |
 1221|      0|			string += n;
 1222|      0|			size -= n;
 1223|      0|			p = q;
 1224|      0|		} while (p[0] && p[-1] == '\\');
  ------------------
  |  Branch (1224:12): [True: 0, False: 0]
  |  Branch (1224:20): [True: 0, False: 0]
  ------------------
 1225|       |
 1226|       |		// step over the terminating quote, if we hit one
 1227|      0|		if (p[0] == ch)
  ------------------
  |  Branch (1227:7): [True: 0, False: 0]
  ------------------
 1228|      0|			p += 1;
 1229|       |
 1230|      0|		break;
 1231|       |
 1232|   302k|	default:
  ------------------
  |  Branch (1232:2): [True: 302k, False: 103k]
  ------------------
 1233|       |		/* It's an unquoted string: read up to the next non-string character.
 1234|       |		 * We don't allow two strings next to each other, so the next break
 1235|       |		 * must be brackets, equals, comma.
 1236|       |		 */
 1237|   302k|		*token = VIPS_TOKEN_STRING;
 1238|   302k|		q = p + strcspn(p, "[]=,");
 1239|       |
 1240|   302k|		n = VIPS_MIN(q - p, size);
  ------------------
  |  |   55|   302k|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 302k, False: 0]
  |  |  ------------------
  ------------------
 1241|   302k|		g_strlcpy(string, p, n + 1);
 1242|   302k|		p = q;
 1243|       |
 1244|       |		/* We remove leading whitespace, so we trim trailing whitespace from
 1245|       |		 * unquoted strings too. Only if the string hasn't been truncated.
 1246|       |		 */
 1247|   302k|		if (n != size)
  ------------------
  |  Branch (1247:7): [True: 302k, False: 0]
  ------------------
 1248|   302k|			while (n > 0 && g_ascii_isspace(string[n - 1])) {
  ------------------
  |  |   81|   302k|  ((g_ascii_table[(guchar) (c)] & G_ASCII_SPACE) != 0)
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 302k]
  |  |  ------------------
  ------------------
  |  Branch (1248:11): [True: 302k, False: 0]
  ------------------
 1249|      0|				string[n - 1] = '\0';
 1250|      0|				n--;
 1251|      0|			}
 1252|       |
 1253|   302k|		break;
 1254|   406k|	}
 1255|       |
 1256|   406k|	return p;
 1257|   406k|}
vips__token_must:
 1264|   103k|{
 1265|   103k|	if (!(p = vips__token_get(p, token, string, size))) {
  ------------------
  |  Branch (1265:6): [True: 0, False: 103k]
  ------------------
 1266|      0|		vips_error("get_token",
 1267|      0|			"%s", _("unexpected end of string"));
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1268|      0|		return NULL;
 1269|      0|	}
 1270|       |
 1271|   103k|	return p;
 1272|   103k|}
vips__token_need:
 1279|  51.6k|{
 1280|  51.6k|	VipsToken token;
 1281|       |
 1282|  51.6k|	if (!(p = vips__token_must(p, &token, string, size)))
  ------------------
  |  Branch (1282:6): [True: 0, False: 51.6k]
  ------------------
 1283|      0|		return NULL;
 1284|  51.6k|	if (token != need_token) {
  ------------------
  |  Branch (1284:6): [True: 0, False: 51.6k]
  ------------------
 1285|      0|		vips_error("get_token", _("expected %s, saw %s"),
  ------------------
  |  |   30|      0|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      0|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1286|      0|			vips_enum_nick(VIPS_TYPE_TOKEN, need_token),
  ------------------
  |  |  178|      0|#define VIPS_TYPE_TOKEN (vips_token_get_type())
  ------------------
 1287|      0|			vips_enum_nick(VIPS_TYPE_TOKEN, token));
  ------------------
  |  |  178|      0|#define VIPS_TYPE_TOKEN (vips_token_get_type())
  ------------------
 1288|      0|		return NULL;
 1289|      0|	}
 1290|       |
 1291|  51.6k|	return p;
 1292|  51.6k|}
vips__token_segment:
 1302|  51.6k|{
 1303|  51.6k|	const char *q;
 1304|       |
 1305|  51.6k|	if (!(q = vips__token_must(p, token, string, size)))
  ------------------
  |  Branch (1305:6): [True: 0, False: 51.6k]
  ------------------
 1306|      0|		return NULL;
 1307|       |
 1308|       |	/* If we stopped on [, read up to the matching ].
 1309|       |	 */
 1310|  51.6k|	if (*token == VIPS_TOKEN_STRING &&
  ------------------
  |  Branch (1310:6): [True: 0, False: 51.6k]
  ------------------
 1311|  51.6k|		q[0] == '[') {
  ------------------
  |  Branch (1311:3): [True: 0, False: 0]
  ------------------
 1312|      0|		VipsToken sub_token;
 1313|      0|		char sub_string[VIPS_PATH_MAX];
 1314|      0|		int depth;
 1315|      0|		int i;
 1316|       |
 1317|      0|		depth = 0;
 1318|      0|		do {
 1319|      0|			if (!(q = vips__token_must(q, &sub_token,
  ------------------
  |  Branch (1319:8): [True: 0, False: 0]
  ------------------
 1320|      0|					  sub_string, VIPS_PATH_MAX)))
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 1321|      0|				return NULL;
 1322|       |
 1323|      0|			switch (sub_token) {
 1324|      0|			case VIPS_TOKEN_LEFT:
  ------------------
  |  Branch (1324:4): [True: 0, False: 0]
  ------------------
 1325|      0|				depth += 1;
 1326|      0|				break;
 1327|       |
 1328|      0|			case VIPS_TOKEN_RIGHT:
  ------------------
  |  Branch (1328:4): [True: 0, False: 0]
  ------------------
 1329|      0|				depth -= 1;
 1330|      0|				break;
 1331|       |
 1332|      0|			default:
  ------------------
  |  Branch (1332:4): [True: 0, False: 0]
  ------------------
 1333|      0|				break;
 1334|      0|			}
 1335|      0|		} while (!(sub_token == VIPS_TOKEN_RIGHT && depth == 0));
  ------------------
  |  Branch (1335:14): [True: 0, False: 0]
  |  Branch (1335:47): [True: 0, False: 0]
  ------------------
 1336|       |
 1337|      0|		i = VIPS_MIN(q - p, size);
  ------------------
  |  |   55|      0|#define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B))
  |  |  ------------------
  |  |  |  Branch (55:25): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1338|      0|		g_strlcpy(string, p, i + 1);
 1339|      0|	}
 1340|       |
 1341|  51.6k|	return q;
 1342|  51.6k|}
vips__find_rightmost_brackets:
 1386|   302k|{
 1387|   302k|	const char *start[MAX_TOKENS + 1];
 1388|   302k|	VipsToken tokens[MAX_TOKENS];
 1389|   302k|	char str[VIPS_PATH_MAX];
 1390|   302k|	int n, i;
 1391|   302k|	int nest;
 1392|       |
 1393|   302k|	start[0] = p;
 1394|   302k|	for (n = 0;
 1395|   605k|		 n < MAX_TOKENS &&
  ------------------
  |  | 1367|  1.21M|#define MAX_TOKENS (1000)
  ------------------
  |  Branch (1395:4): [True: 605k, False: 0]
  ------------------
 1396|   605k|		 (p = vips__token_get(start[n], &tokens[n],
  ------------------
  |  Branch (1396:4): [True: 302k, False: 302k]
  ------------------
 1397|   605k|			  str, VIPS_PATH_MAX));
  ------------------
  |  |  245|   605k|#define VIPS_PATH_MAX (4096)
  ------------------
 1398|   302k|		 n++, start[n] = p)
 1399|   302k|		;
 1400|       |
 1401|       |	/* Too many tokens?
 1402|       |	 */
 1403|   302k|	if (n >= MAX_TOKENS)
  ------------------
  |  | 1367|   302k|#define MAX_TOKENS (1000)
  ------------------
  |  Branch (1403:6): [True: 0, False: 302k]
  ------------------
 1404|      0|		return NULL;
 1405|       |
 1406|       |	/* No rightmost close bracket?
 1407|       |	 */
 1408|   302k|	if (n == 0 ||
  ------------------
  |  Branch (1408:6): [True: 0, False: 302k]
  ------------------
 1409|   302k|		tokens[n - 1] != VIPS_TOKEN_RIGHT)
  ------------------
  |  Branch (1409:3): [True: 302k, False: 0]
  ------------------
 1410|   302k|		return NULL;
 1411|       |
 1412|      0|	nest = 0;
 1413|      0|	for (i = n - 1; i >= 0; i--) {
  ------------------
  |  Branch (1413:18): [True: 0, False: 0]
  ------------------
 1414|      0|		if (tokens[i] == VIPS_TOKEN_RIGHT)
  ------------------
  |  Branch (1414:7): [True: 0, False: 0]
  ------------------
 1415|      0|			nest += 1;
 1416|      0|		else if (tokens[i] == VIPS_TOKEN_LEFT)
  ------------------
  |  Branch (1416:12): [True: 0, False: 0]
  ------------------
 1417|      0|			nest -= 1;
 1418|       |
 1419|      0|		if (nest == 0)
  ------------------
  |  Branch (1419:7): [True: 0, False: 0]
  ------------------
 1420|      0|			break;
 1421|      0|	}
 1422|       |
 1423|       |	/* No matching left bracket?
 1424|       |	 */
 1425|      0|	if (nest != 0)
  ------------------
  |  Branch (1425:6): [True: 0, False: 0]
  ------------------
 1426|      0|		return NULL;
 1427|       |
 1428|       |	/* This should be the matching left.
 1429|       |	 */
 1430|      0|	return start[i];
 1431|      0|}
vips__filename_split8:
 1439|  43.2k|{
 1440|  43.2k|	char *p;
 1441|       |
 1442|  43.2k|	g_strlcpy(filename, name, VIPS_PATH_MAX);
  ------------------
  |  |  245|  43.2k|#define VIPS_PATH_MAX (4096)
  ------------------
 1443|  43.2k|	if ((p = (char *) vips__find_rightmost_brackets(filename))) {
  ------------------
  |  Branch (1443:6): [True: 0, False: 43.2k]
  ------------------
 1444|      0|		g_strlcpy(option_string, p, VIPS_PATH_MAX);
  ------------------
  |  |  245|      0|#define VIPS_PATH_MAX (4096)
  ------------------
 1445|      0|		*p = '\0';
 1446|      0|	}
 1447|  43.2k|	else
 1448|  43.2k|		g_strlcpy(option_string, "", VIPS_PATH_MAX);
  ------------------
  |  |  245|  43.2k|#define VIPS_PATH_MAX (4096)
  ------------------
 1449|  43.2k|}
vips_amiMSBfirst:
 1482|   205k|{
 1483|       |#if G_BYTE_ORDER == G_BIG_ENDIAN
 1484|       |	return 1;
 1485|       |#elif G_BYTE_ORDER == G_LITTLE_ENDIAN
 1486|       |	return 0;
 1487|       |#else
 1488|       |#error "Byte order not recognised"
 1489|       |#endif
 1490|   205k|}
vips_enum_nick:
 1644|  14.8k|{
 1645|  14.8k|	GEnumValue *value;
 1646|       |
 1647|  14.8k|	if (!(value = g_enum_get_value(g_type_class_ref(enm), v)))
  ------------------
  |  Branch (1647:6): [True: 0, False: 14.8k]
  ------------------
 1648|      0|		return "(null)";
 1649|       |
 1650|  14.8k|	return value->value_nick;
 1651|  14.8k|}
util.c:strcspne:
  292|     10|{
  293|     10|	size_t skip;
  294|       |
  295|       |	/* If \ is one of the reject chars, no need for any looping.
  296|       |	 */
  297|     10|	if (strchr(reject, '\\'))
  ------------------
  |  Branch (297:6): [True: 0, False: 10]
  ------------------
  298|      0|		return strcspn(s, reject);
  299|       |
  300|     10|	skip = 0;
  301|     10|	for (;;) {
  302|     10|		skip += strcspn(s + skip, reject);
  303|       |
  304|       |		/* s[skip] is at the start of the string, or the end, or on a
  305|       |		 * break character.
  306|       |		 */
  307|     10|		if (skip == 0 ||
  ------------------
  |  Branch (307:7): [True: 0, False: 10]
  ------------------
  308|     10|			!s[skip] ||
  ------------------
  |  Branch (308:4): [True: 1, False: 9]
  ------------------
  309|     10|			s[skip - 1] != '\\')
  ------------------
  |  Branch (309:4): [True: 9, False: 0]
  ------------------
  310|     10|			break;
  311|       |
  312|       |		/* So skip points at break char and we have a '\' in the char
  313|       |		 * before. Step over the break.
  314|       |		 */
  315|      0|		skip += 1;
  316|      0|	}
  317|       |
  318|     10|	return skip;
  319|     10|}

vips__vector_init:
   75|      2|{
   76|       |#ifdef HAVE_ORC
   77|       |	orc_init();
   78|       |#endif /*HAVE_ORC*/
   79|       |
   80|       |	/* Check whether any features are being disabled by the environment.
   81|       |	 */
   82|      2|	const char *env;
   83|      2|	if ((env = g_getenv("VIPS_VECTOR")))
  ------------------
  |  Branch (83:6): [True: 0, False: 2]
  ------------------
   84|      0|		return vips_vector_disable_targets(
   85|      0|			g_ascii_strtoll(env, NULL, 0));
   86|       |
   87|       |	/* Look for the deprecated IM_NOVECTOR environment variable as well.
   88|       |	 */
   89|      2|	if (g_getenv("VIPS_NOVECTOR")
  ------------------
  |  Branch (89:6): [True: 0, False: 2]
  ------------------
   90|       |#if ENABLE_DEPRECATED
   91|       |		|| g_getenv("IM_NOVECTOR")
   92|       |#endif
   93|      2|	)
   94|      0|		vips__vector_enabled = FALSE;
  ------------------
  |  |  794|      0|#define	FALSE	(0)
  ------------------
   95|      2|}

countlines.c:vips_countlines_class_init:
  125|      1|{
  126|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  127|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  128|       |
  129|      1|	VIPS_DEBUG_MSG("vips_countlines_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  130|       |
  131|      1|	gobject_class->set_property = vips_object_set_property;
  132|      1|	gobject_class->get_property = vips_object_get_property;
  133|       |
  134|      1|	vobject_class->nickname = "countlines";
  135|      1|	vobject_class->description = _("count lines in an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  136|      1|	vobject_class->build = vips_countlines_build;
  137|       |
  138|      1|	VIPS_ARG_DOUBLE(class, "nolines", 2,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  139|      1|		_("Nolines"),
  140|      1|		_("Number of lines"),
  141|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  142|      1|		G_STRUCT_OFFSET(VipsCountlines, nolines),
  143|      1|		0, 10000000, 0.0);
  144|       |
  145|      1|	VIPS_ARG_ENUM(class, "direction", 3,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  146|      1|		_("Direction"),
  147|      1|		_("Countlines left-right or up-down"),
  148|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  149|      1|		G_STRUCT_OFFSET(VipsCountlines, direction),
  150|      1|		VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL);
  151|      1|}

labelregions.c:vips_labelregions_class_init:
  112|      1|{
  113|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  114|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|       |
  116|      1|	gobject_class->set_property = vips_object_set_property;
  117|      1|	gobject_class->get_property = vips_object_get_property;
  118|       |
  119|      1|	vobject_class->nickname = "labelregions";
  120|      1|	vobject_class->description = _("label regions in an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  121|      1|	vobject_class->build = vips_labelregions_build;
  122|       |
  123|      1|	VIPS_ARG_IMAGE(class, "mask", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  124|      1|		_("Mask"),
  125|      1|		_("Mask of region labels"),
  126|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  127|      1|		G_STRUCT_OFFSET(VipsLabelregions, mask));
  128|       |
  129|      1|	VIPS_ARG_INT(class, "segments", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  130|      1|		_("Segments"),
  131|      1|		_("Number of discrete contiguous regions"),
  132|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  133|      1|		G_STRUCT_OFFSET(VipsLabelregions, segments),
  134|      1|		0, 1000000000, 0);
  135|      1|}

morph.c:vips_morph_class_init:
  932|      1|{
  933|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  934|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  935|       |
  936|      1|	gobject_class->set_property = vips_object_set_property;
  937|      1|	gobject_class->get_property = vips_object_get_property;
  938|       |
  939|       |#ifdef HAVE_ORC
  940|       |	gobject_class->finalize = vips_morph_finalize;
  941|       |#endif /*HAVE_ORC*/
  942|       |
  943|      1|	object_class->nickname = "morph";
  944|      1|	object_class->description = _("morphology operation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  945|      1|	object_class->build = vips_morph_build;
  946|       |
  947|      1|	VIPS_ARG_IMAGE(class, "out", 10,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  948|      1|		_("Output"),
  949|      1|		_("Output image"),
  950|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  951|      1|		G_STRUCT_OFFSET(VipsMorph, out));
  952|       |
  953|      1|	VIPS_ARG_IMAGE(class, "mask", 20,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  954|      1|		_("Mask"),
  955|      1|		_("Input matrix image"),
  956|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  957|      1|		G_STRUCT_OFFSET(VipsMorph, mask));
  958|       |
  959|      1|	VIPS_ARG_ENUM(class, "morph", 103,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  960|      1|		_("Morphology"),
  961|      1|		_("Morphological operation to perform"),
  962|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  963|      1|		G_STRUCT_OFFSET(VipsMorph, morph),
  964|      1|		VIPS_TYPE_OPERATION_MORPHOLOGY,
  965|      1|		VIPS_OPERATION_MORPHOLOGY_ERODE);
  966|      1|}

vips_morphology_operation_init:
  137|      2|{
  138|      2|	extern GType vips_morph_get_type(void);
  139|      2|	extern GType vips_rank_get_type(void);
  140|      2|	extern GType vips_countlines_get_type(void);
  141|      2|	extern GType vips_labelregions_get_type(void);
  142|      2|	extern GType vips_fill_nearest_get_type(void);
  143|       |
  144|      2|	vips_morph_get_type();
  145|      2|	vips_rank_get_type();
  146|      2|	vips_countlines_get_type();
  147|      2|	vips_labelregions_get_type();
  148|      2|	vips_fill_nearest_get_type();
  149|      2|}
morphology.c:vips_morphology_class_init:
  107|      1|{
  108|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  109|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  110|       |
  111|      1|	gobject_class->set_property = vips_object_set_property;
  112|      1|	gobject_class->get_property = vips_object_get_property;
  113|       |
  114|      1|	vobject_class->nickname = "morphology";
  115|      1|	vobject_class->description = _("morphological operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  116|       |
  117|       |	/* Inputs set by subclassess.
  118|       |	 */
  119|       |
  120|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  121|      1|		_("Input"),
  122|      1|		_("Input image argument"),
  123|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  124|      1|		G_STRUCT_OFFSET(VipsMorphology, in));
  125|      1|}

nearest.c:vips_fill_nearest_class_init:
  295|      1|{
  296|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  297|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  298|       |
  299|      1|	gobject_class->finalize = vips_fill_nearest_finalize;
  300|      1|	gobject_class->set_property = vips_object_set_property;
  301|      1|	gobject_class->get_property = vips_object_get_property;
  302|       |
  303|      1|	vobject_class->nickname = "fill_nearest";
  304|      1|	vobject_class->description =
  305|      1|		_("fill image zeros with nearest non-zero pixel");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  306|      1|	vobject_class->build = vips_fill_nearest_build;
  307|       |
  308|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  309|      1|		_("Out"),
  310|      1|		_("Value of nearest non-zero pixel"),
  311|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  312|      1|		G_STRUCT_OFFSET(VipsFillNearest, out));
  313|       |
  314|      1|	VIPS_ARG_IMAGE(class, "distance", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  315|      1|		_("Distance"),
  316|      1|		_("Distance to nearest non-zero pixel"),
  317|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  318|      1|		G_STRUCT_OFFSET(VipsFillNearest, distance));
  319|      1|}

rank.c:vips_rank_class_init:
  552|      1|{
  553|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  554|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  555|       |
  556|      1|	gobject_class->set_property = vips_object_set_property;
  557|      1|	gobject_class->get_property = vips_object_get_property;
  558|       |
  559|      1|	object_class->nickname = "rank";
  560|      1|	object_class->description = _("rank filter");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  561|      1|	object_class->build = vips_rank_build;
  562|       |
  563|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  564|      1|		_("Output"),
  565|      1|		_("Output image"),
  566|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  567|      1|		G_STRUCT_OFFSET(VipsRank, out));
  568|       |
  569|      1|	VIPS_ARG_INT(class, "width", 4,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  570|      1|		_("Width"),
  571|      1|		_("Window width in pixels"),
  572|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  573|      1|		G_STRUCT_OFFSET(VipsRank, width),
  574|      1|		1, 100000, 11);
  575|       |
  576|      1|	VIPS_ARG_INT(class, "height", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  577|      1|		_("Height"),
  578|      1|		_("Window height in pixels"),
  579|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  580|      1|		G_STRUCT_OFFSET(VipsRank, height),
  581|      1|		1, 100000, 11);
  582|       |
  583|      1|	VIPS_ARG_INT(class, "index", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  584|      1|		_("Index"),
  585|      1|		_("Select pixel at index"),
  586|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  587|      1|		G_STRUCT_OFFSET(VipsRank, index),
  588|      1|		0, 100000000, 50);
  589|      1|}

global_balance.c:vips_globalbalance_class_init:
 1912|      1|{
 1913|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1914|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
 1915|       |
 1916|      1|	gobject_class->set_property = vips_object_set_property;
 1917|      1|	gobject_class->get_property = vips_object_get_property;
 1918|       |
 1919|      1|	object_class->nickname = "globalbalance";
 1920|      1|	object_class->description = _("global balance an image mosaic");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1921|      1|	object_class->build = vips_globalbalance_build;
 1922|       |
 1923|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
 1924|      1|		_("Input"),
 1925|      1|		_("Input image"),
 1926|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1927|      1|		G_STRUCT_OFFSET(VipsGlobalbalance, in));
 1928|       |
 1929|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
 1930|      1|		_("Output"),
 1931|      1|		_("Output image"),
 1932|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
 1933|      1|		G_STRUCT_OFFSET(VipsGlobalbalance, out));
 1934|       |
 1935|      1|	VIPS_ARG_DOUBLE(class, "gamma", 5,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
 1936|      1|		_("Gamma"),
 1937|      1|		_("Image gamma"),
 1938|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1939|      1|		G_STRUCT_OFFSET(VipsGlobalbalance, gamma),
 1940|      1|		0.00001, 10, 1.6);
 1941|       |
 1942|      1|	VIPS_ARG_BOOL(class, "int_output", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1943|      1|		_("Int output"),
 1944|      1|		_("Integer output"),
 1945|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1946|      1|		G_STRUCT_OFFSET(VipsGlobalbalance, int_output),
 1947|      1|		FALSE);
 1948|      1|}

match.c:vips_match_class_init:
  184|      1|{
  185|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  186|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  187|       |
  188|      1|	gobject_class->set_property = vips_object_set_property;
  189|      1|	gobject_class->get_property = vips_object_get_property;
  190|       |
  191|      1|	object_class->nickname = "match";
  192|      1|	object_class->description = _("first-order match of two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  193|      1|	object_class->build = vips_match_build;
  194|       |
  195|      1|	VIPS_ARG_IMAGE(class, "ref", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  196|      1|		_("Reference"),
  197|      1|		_("Reference image"),
  198|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  199|      1|		G_STRUCT_OFFSET(VipsMatch, ref));
  200|       |
  201|      1|	VIPS_ARG_IMAGE(class, "sec", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  202|      1|		_("Secondary"),
  203|      1|		_("Secondary image"),
  204|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  205|      1|		G_STRUCT_OFFSET(VipsMatch, sec));
  206|       |
  207|      1|	VIPS_ARG_IMAGE(class, "out", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  208|      1|		_("Output"),
  209|      1|		_("Output image"),
  210|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  211|      1|		G_STRUCT_OFFSET(VipsMatch, out));
  212|       |
  213|      1|	VIPS_ARG_INT(class, "xr1", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  214|      1|		_("xr1"),
  215|      1|		_("Position of first reference tie-point"),
  216|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  217|      1|		G_STRUCT_OFFSET(VipsMatch, xr1),
  218|      1|		-1000000000, 1000000000, 1);
  219|       |
  220|      1|	VIPS_ARG_INT(class, "yr1", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  221|      1|		_("yr1"),
  222|      1|		_("Position of first reference tie-point"),
  223|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  224|      1|		G_STRUCT_OFFSET(VipsMatch, yr1),
  225|      1|		-1000000000, 1000000000, 1);
  226|       |
  227|      1|	VIPS_ARG_INT(class, "xs1", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  228|      1|		_("xs1"),
  229|      1|		_("Position of first secondary tie-point"),
  230|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  231|      1|		G_STRUCT_OFFSET(VipsMatch, xs1),
  232|      1|		-1000000000, 1000000000, 1);
  233|       |
  234|      1|	VIPS_ARG_INT(class, "ys1", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  235|      1|		_("ys1"),
  236|      1|		_("Position of first secondary tie-point"),
  237|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  238|      1|		G_STRUCT_OFFSET(VipsMatch, ys1),
  239|      1|		-1000000000, 1000000000, 1);
  240|       |
  241|      1|	VIPS_ARG_INT(class, "xr2", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  242|      1|		_("xr2"),
  243|      1|		_("Position of second reference tie-point"),
  244|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  245|      1|		G_STRUCT_OFFSET(VipsMatch, xr2),
  246|      1|		-1000000000, 1000000000, 1);
  247|       |
  248|      1|	VIPS_ARG_INT(class, "yr2", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  249|      1|		_("yr2"),
  250|      1|		_("Position of second reference tie-point"),
  251|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  252|      1|		G_STRUCT_OFFSET(VipsMatch, yr2),
  253|      1|		-1000000000, 1000000000, 1);
  254|       |
  255|      1|	VIPS_ARG_INT(class, "xs2", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  256|      1|		_("xs2"),
  257|      1|		_("Position of second secondary tie-point"),
  258|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  259|      1|		G_STRUCT_OFFSET(VipsMatch, xs2),
  260|      1|		-1000000000, 1000000000, 1);
  261|       |
  262|      1|	VIPS_ARG_INT(class, "ys2", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  263|      1|		_("ys2"),
  264|      1|		_("Position of second secondary tie-point"),
  265|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  266|      1|		G_STRUCT_OFFSET(VipsMatch, ys2),
  267|      1|		-1000000000, 1000000000, 1);
  268|       |
  269|      1|	VIPS_ARG_INT(class, "hwindow", 13,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  270|      1|		_("hwindow"),
  271|      1|		_("Half window size"),
  272|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  273|      1|		G_STRUCT_OFFSET(VipsMatch, hwindow),
  274|      1|		0, 1000000000, 5);
  275|       |
  276|      1|	VIPS_ARG_INT(class, "harea", 14,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  277|      1|		_("harea"),
  278|      1|		_("Half area size"),
  279|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  280|      1|		G_STRUCT_OFFSET(VipsMatch, harea),
  281|      1|		0, 1000000000, 15);
  282|       |
  283|      1|	VIPS_ARG_BOOL(class, "search", 15,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  284|      1|		_("Search"),
  285|      1|		_("Search to improve tie-points"),
  286|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  287|      1|		G_STRUCT_OFFSET(VipsMatch, search),
  288|      1|		FALSE);
  289|       |
  290|      1|	VIPS_ARG_INTERPOLATE(class, "interpolate", 16,
  ------------------
  |  |  138|      1|	VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
  |  |  ------------------
  |  |  |  |  125|      1|	{ \
  |  |  |  |  126|      1|		GParamSpec *pspec; \
  |  |  |  |  127|      1|\
  |  |  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  |  |  129|      1|			TYPE, \
  |  |  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  |  |  135|      1|	}
  |  |  ------------------
  ------------------
  291|      1|		_("Interpolate"),
  292|      1|		_("Interpolate pixels with this"),
  293|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  294|      1|		G_STRUCT_OFFSET(VipsMatch, interpolate));
  295|      1|}

matrixinvert.c:vips_matrixinvert_class_init:
  430|      1|{
  431|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  432|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|       |
  434|      1|	gobject_class->dispose = vips_matrixinvert_dispose;
  435|      1|	gobject_class->set_property = vips_object_set_property;
  436|      1|	gobject_class->get_property = vips_object_get_property;
  437|       |
  438|      1|	vobject_class->nickname = "matrixinvert";
  439|      1|	vobject_class->description = _("invert an matrix");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  440|      1|	vobject_class->build = vips_matrixinvert_build;
  441|       |
  442|      1|	VIPS_ARG_IMAGE(class, "in", 0,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  443|      1|		_("Input"),
  444|      1|		_("An square matrix"),
  445|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  446|      1|		G_STRUCT_OFFSET(VipsMatrixinvert, in));
  447|       |
  448|      1|	VIPS_ARG_IMAGE(class, "out", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  449|      1|		_("Output"),
  450|      1|		_("Output matrix"),
  451|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  452|      1|		G_STRUCT_OFFSET(VipsMatrixinvert, out));
  453|      1|}

merge.c:vips_merge_class_init:
  107|      1|{
  108|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  109|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  110|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  111|       |
  112|      1|	gobject_class->set_property = vips_object_set_property;
  113|      1|	gobject_class->get_property = vips_object_get_property;
  114|       |
  115|      1|	object_class->nickname = "merge";
  116|      1|	object_class->description = _("merge two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  117|      1|	object_class->build = vips_merge_build;
  118|       |
  119|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  120|       |
  121|      1|	VIPS_ARG_IMAGE(class, "ref", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  122|      1|		_("Reference"),
  123|      1|		_("Reference image"),
  124|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  125|      1|		G_STRUCT_OFFSET(VipsMerge, ref));
  126|       |
  127|      1|	VIPS_ARG_IMAGE(class, "sec", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  128|      1|		_("Secondary"),
  129|      1|		_("Secondary image"),
  130|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  131|      1|		G_STRUCT_OFFSET(VipsMerge, sec));
  132|       |
  133|      1|	VIPS_ARG_IMAGE(class, "out", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  134|      1|		_("Output"),
  135|      1|		_("Output image"),
  136|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  137|      1|		G_STRUCT_OFFSET(VipsMerge, out));
  138|       |
  139|      1|	VIPS_ARG_ENUM(class, "direction", 4,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  140|      1|		_("Direction"),
  141|      1|		_("Horizontal or vertical merge"),
  142|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  143|      1|		G_STRUCT_OFFSET(VipsMerge, direction),
  144|      1|		VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL);
  145|       |
  146|      1|	VIPS_ARG_INT(class, "dx", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  147|      1|		_("dx"),
  148|      1|		_("Horizontal displacement from sec to ref"),
  149|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  150|      1|		G_STRUCT_OFFSET(VipsMerge, dx),
  151|      1|		-100000000, 1000000000, 1);
  152|       |
  153|      1|	VIPS_ARG_INT(class, "dy", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  154|      1|		_("dy"),
  155|      1|		_("Vertical displacement from sec to ref"),
  156|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  157|      1|		G_STRUCT_OFFSET(VipsMerge, dy),
  158|      1|		-100000000, 1000000000, 1);
  159|       |
  160|      1|	VIPS_ARG_INT(class, "mblend", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  161|      1|		_("Max blend"),
  162|      1|		_("Maximum blend size"),
  163|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  164|      1|		G_STRUCT_OFFSET(VipsMerge, mblend),
  165|      1|		0, 10000, 10);
  166|      1|}

mosaic.c:vips_mosaic_class_init:
  167|      1|{
  168|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  169|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  170|       |
  171|      1|	gobject_class->set_property = vips_object_set_property;
  172|      1|	gobject_class->get_property = vips_object_get_property;
  173|       |
  174|      1|	object_class->nickname = "mosaic";
  175|      1|	object_class->description = _("mosaic two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  176|      1|	object_class->build = vips_mosaic_build;
  177|       |
  178|      1|	VIPS_ARG_IMAGE(class, "ref", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  179|      1|		_("Reference"),
  180|      1|		_("Reference image"),
  181|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  182|      1|		G_STRUCT_OFFSET(VipsMosaic, ref));
  183|       |
  184|      1|	VIPS_ARG_IMAGE(class, "sec", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  185|      1|		_("Secondary"),
  186|      1|		_("Secondary image"),
  187|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  188|      1|		G_STRUCT_OFFSET(VipsMosaic, sec));
  189|       |
  190|      1|	VIPS_ARG_IMAGE(class, "out", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  191|      1|		_("Output"),
  192|      1|		_("Output image"),
  193|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  194|      1|		G_STRUCT_OFFSET(VipsMosaic, out));
  195|       |
  196|      1|	VIPS_ARG_ENUM(class, "direction", 4,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  197|      1|		_("Direction"),
  198|      1|		_("Horizontal or vertical mosaic"),
  199|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  200|      1|		G_STRUCT_OFFSET(VipsMosaic, direction),
  201|      1|		VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL);
  202|       |
  203|      1|	VIPS_ARG_INT(class, "xref", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  204|      1|		_("xref"),
  205|      1|		_("Position of reference tie-point"),
  206|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  207|      1|		G_STRUCT_OFFSET(VipsMosaic, xref),
  208|      1|		0, 1000000000, 1);
  209|       |
  210|      1|	VIPS_ARG_INT(class, "yref", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  211|      1|		_("yref"),
  212|      1|		_("Position of reference tie-point"),
  213|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  214|      1|		G_STRUCT_OFFSET(VipsMosaic, yref),
  215|      1|		0, 1000000000, 1);
  216|       |
  217|      1|	VIPS_ARG_INT(class, "xsec", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  218|      1|		_("xsec"),
  219|      1|		_("Position of secondary tie-point"),
  220|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  221|      1|		G_STRUCT_OFFSET(VipsMosaic, xsec),
  222|      1|		0, 1000000000, 1);
  223|       |
  224|      1|	VIPS_ARG_INT(class, "ysec", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  225|      1|		_("ysec"),
  226|      1|		_("Position of secondary tie-point"),
  227|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  228|      1|		G_STRUCT_OFFSET(VipsMosaic, ysec),
  229|      1|		0, 1000000000, 1);
  230|       |
  231|      1|	VIPS_ARG_INT(class, "hwindow", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  232|      1|		_("hwindow"),
  233|      1|		_("Half window size"),
  234|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  235|      1|		G_STRUCT_OFFSET(VipsMosaic, hwindow),
  236|      1|		0, 1000000000, 5);
  237|       |
  238|      1|	VIPS_ARG_INT(class, "harea", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  239|      1|		_("harea"),
  240|      1|		_("Half area size"),
  241|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  242|      1|		G_STRUCT_OFFSET(VipsMosaic, harea),
  243|      1|		0, 1000000000, 15);
  244|       |
  245|      1|	VIPS_ARG_INT(class, "mblend", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  246|      1|		_("Max blend"),
  247|      1|		_("Maximum blend size"),
  248|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  249|      1|		G_STRUCT_OFFSET(VipsMosaic, mblend),
  250|      1|		0, 10000, 10);
  251|       |
  252|      1|	VIPS_ARG_INT(class, "bandno", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  253|      1|		_("Search band"),
  254|      1|		_("Band to search for features on"),
  255|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  256|      1|		G_STRUCT_OFFSET(VipsMosaic, bandno),
  257|      1|		0, 10000, 0);
  258|       |
  259|      1|	VIPS_ARG_INT(class, "dx0", 13,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  260|      1|		_("Integer offset"),
  261|      1|		_("Detected integer offset"),
  262|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  263|      1|		G_STRUCT_OFFSET(VipsMosaic, dx0),
  264|      1|		-10000000, 10000000, 0);
  265|       |
  266|      1|	VIPS_ARG_INT(class, "dy0", 14,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  267|      1|		_("Integer offset"),
  268|      1|		_("Detected integer offset"),
  269|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  270|      1|		G_STRUCT_OFFSET(VipsMosaic, dy0),
  271|      1|		-10000000, 10000000, 0);
  272|       |
  273|      1|	VIPS_ARG_DOUBLE(class, "scale1", 15,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  274|      1|		_("Scale"),
  275|      1|		_("Detected scale"),
  276|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  277|      1|		G_STRUCT_OFFSET(VipsMosaic, scale1),
  278|      1|		-10000000.0, 10000000.0, 1.0);
  279|       |
  280|      1|	VIPS_ARG_DOUBLE(class, "angle1", 16,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  281|      1|		_("Angle"),
  282|      1|		_("Detected rotation"),
  283|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  284|      1|		G_STRUCT_OFFSET(VipsMosaic, angle1),
  285|      1|		-10000000.0, 10000000.0, 0.0);
  286|       |
  287|      1|	VIPS_ARG_DOUBLE(class, "dx1", 17,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  288|      1|		_("First-order displacement"),
  289|      1|		_("Detected first-order displacement"),
  290|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  291|      1|		G_STRUCT_OFFSET(VipsMosaic, dx1),
  292|      1|		-10000000.0, 10000000.0, 0.0);
  293|       |
  294|      1|	VIPS_ARG_DOUBLE(class, "dy1", 17,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  295|      1|		_("First-order displacement"),
  296|      1|		_("Detected first-order displacement"),
  297|      1|		VIPS_ARGUMENT_OPTIONAL_OUTPUT,
  298|      1|		G_STRUCT_OFFSET(VipsMosaic, dy1),
  299|      1|		-10000000.0, 10000000.0, 0.0);
  300|      1|}

mosaic1.c:vips_mosaic1_class_init:
  486|      1|{
  487|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  488|      1|	VipsObjectClass *object_class = (VipsObjectClass *) class;
  489|       |
  490|      1|	gobject_class->set_property = vips_object_set_property;
  491|      1|	gobject_class->get_property = vips_object_get_property;
  492|       |
  493|      1|	object_class->nickname = "mosaic1";
  494|      1|	object_class->description = _("first-order mosaic of two images");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  495|      1|	object_class->build = vips_mosaic1_build;
  496|       |
  497|      1|	VIPS_ARG_IMAGE(class, "ref", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  498|      1|		_("Reference"),
  499|      1|		_("Reference image"),
  500|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  501|      1|		G_STRUCT_OFFSET(VipsMosaic1, ref));
  502|       |
  503|      1|	VIPS_ARG_IMAGE(class, "sec", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  504|      1|		_("Secondary"),
  505|      1|		_("Secondary image"),
  506|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  507|      1|		G_STRUCT_OFFSET(VipsMosaic1, sec));
  508|       |
  509|      1|	VIPS_ARG_IMAGE(class, "out", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  510|      1|		_("Output"),
  511|      1|		_("Output image"),
  512|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  513|      1|		G_STRUCT_OFFSET(VipsMosaic1, out));
  514|       |
  515|      1|	VIPS_ARG_ENUM(class, "direction", 4,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  516|      1|		_("Direction"),
  517|      1|		_("Horizontal or vertical mosaic"),
  518|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  519|      1|		G_STRUCT_OFFSET(VipsMosaic1, direction),
  520|      1|		VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL);
  521|       |
  522|      1|	VIPS_ARG_INT(class, "xr1", 5,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  523|      1|		_("xr1"),
  524|      1|		_("Position of first reference tie-point"),
  525|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  526|      1|		G_STRUCT_OFFSET(VipsMosaic1, xr1),
  527|      1|		-1000000000, 1000000000, 1);
  528|       |
  529|      1|	VIPS_ARG_INT(class, "yr1", 6,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  530|      1|		_("yr1"),
  531|      1|		_("Position of first reference tie-point"),
  532|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  533|      1|		G_STRUCT_OFFSET(VipsMosaic1, yr1),
  534|      1|		-1000000000, 1000000000, 1);
  535|       |
  536|      1|	VIPS_ARG_INT(class, "xs1", 7,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  537|      1|		_("xs1"),
  538|      1|		_("Position of first secondary tie-point"),
  539|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  540|      1|		G_STRUCT_OFFSET(VipsMosaic1, xs1),
  541|      1|		-1000000000, 1000000000, 1);
  542|       |
  543|      1|	VIPS_ARG_INT(class, "ys1", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  544|      1|		_("ys1"),
  545|      1|		_("Position of first secondary tie-point"),
  546|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  547|      1|		G_STRUCT_OFFSET(VipsMosaic1, ys1),
  548|      1|		-1000000000, 1000000000, 1);
  549|       |
  550|      1|	VIPS_ARG_INT(class, "xr2", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  551|      1|		_("xr2"),
  552|      1|		_("Position of second reference tie-point"),
  553|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  554|      1|		G_STRUCT_OFFSET(VipsMosaic1, xr2),
  555|      1|		-1000000000, 1000000000, 1);
  556|       |
  557|      1|	VIPS_ARG_INT(class, "yr2", 10,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  558|      1|		_("yr2"),
  559|      1|		_("Position of second reference tie-point"),
  560|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  561|      1|		G_STRUCT_OFFSET(VipsMosaic1, yr2),
  562|      1|		-1000000000, 1000000000, 1);
  563|       |
  564|      1|	VIPS_ARG_INT(class, "xs2", 11,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  565|      1|		_("xs2"),
  566|      1|		_("Position of second secondary tie-point"),
  567|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  568|      1|		G_STRUCT_OFFSET(VipsMosaic1, xs2),
  569|      1|		-1000000000, 1000000000, 1);
  570|       |
  571|      1|	VIPS_ARG_INT(class, "ys2", 12,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  572|      1|		_("ys2"),
  573|      1|		_("Position of second secondary tie-point"),
  574|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  575|      1|		G_STRUCT_OFFSET(VipsMosaic1, ys2),
  576|      1|		-1000000000, 1000000000, 1);
  577|       |
  578|      1|	VIPS_ARG_INT(class, "hwindow", 13,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  579|      1|		_("hwindow"),
  580|      1|		_("Half window size"),
  581|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  582|      1|		G_STRUCT_OFFSET(VipsMosaic1, hwindow),
  583|      1|		0, 1000000000, 5);
  584|       |
  585|      1|	VIPS_ARG_INT(class, "harea", 14,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  586|      1|		_("harea"),
  587|      1|		_("Half area size"),
  588|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  589|      1|		G_STRUCT_OFFSET(VipsMosaic1, harea),
  590|      1|		0, 1000000000, 15);
  591|       |
  592|      1|	VIPS_ARG_BOOL(class, "search", 15,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  593|      1|		_("Search"),
  594|      1|		_("Search to improve tie-points"),
  595|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  596|      1|		G_STRUCT_OFFSET(VipsMosaic1, search),
  597|      1|		FALSE);
  598|       |
  599|      1|	VIPS_ARG_INTERPOLATE(class, "interpolate", 16,
  ------------------
  |  |  138|      1|	VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
  |  |  ------------------
  |  |  |  |  125|      1|	{ \
  |  |  |  |  126|      1|		GParamSpec *pspec; \
  |  |  |  |  127|      1|\
  |  |  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  |  |  129|      1|			TYPE, \
  |  |  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  |  |  135|      1|	}
  |  |  ------------------
  ------------------
  600|      1|		_("Interpolate"),
  601|      1|		_("Interpolate pixels with this"),
  602|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  603|      1|		G_STRUCT_OFFSET(VipsMosaic1, interpolate));
  604|       |
  605|      1|	VIPS_ARG_INT(class, "mblend", 17,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  606|      1|		_("Max blend"),
  607|      1|		_("Maximum blend size"),
  608|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  609|      1|		G_STRUCT_OFFSET(VipsMosaic1, mblend),
  610|      1|		0, 10000, 10);
  611|       |
  612|      1|	VIPS_ARG_INT(class, "bandno", 18,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  613|      1|		_("Search band"),
  614|      1|		_("Band to search for features on"),
  615|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  616|      1|		G_STRUCT_OFFSET(VipsMosaic1, bandno),
  617|      1|		0, 10000, 0);
  618|      1|}

vips_mosaicing_operation_init:
   93|      2|{
   94|      2|	extern GType vips_merge_get_type(void);
   95|      2|	extern GType vips_mosaic_get_type(void);
   96|      2|	extern GType vips_mosaic1_get_type(void);
   97|      2|	extern GType vips_match_get_type(void);
   98|      2|	extern GType vips_globalbalance_get_type(void);
   99|      2|	extern GType vips_matrixinvert_get_type(void);
  100|       |
  101|      2|	vips_merge_get_type();
  102|      2|	vips_mosaic_get_type();
  103|      2|	vips_mosaic1_get_type();
  104|      2|	vips_matrixinvert_get_type();
  105|      2|	vips_match_get_type();
  106|      2|	vips_globalbalance_get_type();
  107|      2|}

affine.c:vips_affine_class_init:
  629|      1|{
  630|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  631|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  632|       |
  633|      1|	VIPS_DEBUG_MSG("vips_affine_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  634|       |
  635|      1|	gobject_class->dispose = vips_affine_dispose;
  636|      1|	gobject_class->set_property = vips_object_set_property;
  637|      1|	gobject_class->get_property = vips_object_get_property;
  638|       |
  639|      1|	vobject_class->nickname = "affine";
  640|      1|	vobject_class->description = _("affine transform of an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  641|      1|	vobject_class->build = vips_affine_build;
  642|       |
  643|      1|	VIPS_ARG_BOXED(class, "matrix", 110,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  644|      1|		_("Matrix"),
  645|      1|		_("Transformation matrix"),
  646|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  647|      1|		G_STRUCT_OFFSET(VipsAffine, matrix),
  648|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  649|       |
  650|      1|	VIPS_ARG_INTERPOLATE(class, "interpolate", 2,
  ------------------
  |  |  138|      1|	VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
  |  |  ------------------
  |  |  |  |  125|      1|	{ \
  |  |  |  |  126|      1|		GParamSpec *pspec; \
  |  |  |  |  127|      1|\
  |  |  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  |  |  129|      1|			TYPE, \
  |  |  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  |  |  135|      1|	}
  |  |  ------------------
  ------------------
  651|      1|		_("Interpolate"),
  652|      1|		_("Interpolate pixels with this"),
  653|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  654|      1|		G_STRUCT_OFFSET(VipsAffine, interpolate));
  655|       |
  656|      1|	VIPS_ARG_BOXED(class, "oarea", 111,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  657|      1|		_("Output rect"),
  658|      1|		_("Area of output to generate"),
  659|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  660|      1|		G_STRUCT_OFFSET(VipsAffine, oarea),
  661|      1|		VIPS_TYPE_ARRAY_INT);
  662|       |
  663|      1|	VIPS_ARG_DOUBLE(class, "odx", 112,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  664|      1|		_("Output offset"),
  665|      1|		_("Horizontal output displacement"),
  666|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  667|      1|		G_STRUCT_OFFSET(VipsAffine, odx),
  668|      1|		-10000000, 10000000, 0);
  669|       |
  670|      1|	VIPS_ARG_DOUBLE(class, "ody", 113,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  671|      1|		_("Output offset"),
  672|      1|		_("Vertical output displacement"),
  673|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  674|      1|		G_STRUCT_OFFSET(VipsAffine, ody),
  675|      1|		-10000000, 10000000, 0);
  676|       |
  677|      1|	VIPS_ARG_DOUBLE(class, "idx", 114,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  678|      1|		_("Input offset"),
  679|      1|		_("Horizontal input displacement"),
  680|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  681|      1|		G_STRUCT_OFFSET(VipsAffine, idx),
  682|      1|		-10000000, 10000000, 0);
  683|       |
  684|      1|	VIPS_ARG_DOUBLE(class, "idy", 115,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  685|      1|		_("Input offset"),
  686|      1|		_("Vertical input displacement"),
  687|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  688|      1|		G_STRUCT_OFFSET(VipsAffine, idy),
  689|      1|		-10000000, 10000000, 0);
  690|       |
  691|      1|	VIPS_ARG_ENUM(class, "extend", 117,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  692|      1|		_("Extend"),
  693|      1|		_("How to generate the extra pixels"),
  694|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  695|      1|		G_STRUCT_OFFSET(VipsAffine, extend),
  696|      1|		VIPS_TYPE_EXTEND, VIPS_EXTEND_BACKGROUND);
  697|       |
  698|      1|	VIPS_ARG_BOXED(class, "background", 116,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  699|      1|		_("Background"),
  700|      1|		_("Background value"),
  701|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  702|      1|		G_STRUCT_OFFSET(VipsAffine, background),
  703|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  704|       |
  705|      1|	VIPS_ARG_BOOL(class, "premultiplied", 117,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  706|      1|		_("Premultiplied"),
  707|      1|		_("Images have premultiplied alpha"),
  708|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  709|      1|		G_STRUCT_OFFSET(VipsAffine, premultiplied),
  710|      1|		FALSE);
  711|      1|}

bicubic.cpp:_ZL35vips_interpolate_bicubic_class_initP21_VipsInterpolateClass:
  623|      1|{
  624|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(iclass);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  625|      1|	VipsInterpolateClass *interpolate_class =
  626|      1|		VIPS_INTERPOLATE_CLASS(iclass);
  ------------------
  |  |   50|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      1|		VIPS_TYPE_INTERPOLATE, VipsInterpolateClass))
  ------------------
  627|       |
  628|      1|	object_class->nickname = "bicubic";
  629|      1|	object_class->description = _("bicubic interpolation (Catmull-Rom)");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  630|       |
  631|      1|	interpolate_class->interpolate = vips_interpolate_bicubic_interpolate;
  632|      1|	interpolate_class->window_size = 4;
  633|       |
  634|       |	/* Build the tables of pre-computed coefficients.
  635|       |	 */
  636|     66|	for (int x = 0; x < VIPS_TRANSFORM_SCALE + 1; x++) {
  ------------------
  |  |  112|     66|#define VIPS_TRANSFORM_SCALE (1 << VIPS_TRANSFORM_SHIFT)
  |  |  ------------------
  |  |  |  |  111|     66|#define VIPS_TRANSFORM_SHIFT (6)
  |  |  ------------------
  ------------------
  |  Branch (636:18): [True: 65, False: 1]
  ------------------
  637|     65|		calculate_coefficients_catmull(vips_bicubic_matrixf[x],
  638|     65|			(float) x / VIPS_TRANSFORM_SCALE);
  ------------------
  |  |  112|     65|#define VIPS_TRANSFORM_SCALE (1 << VIPS_TRANSFORM_SHIFT)
  |  |  ------------------
  |  |  |  |  111|     65|#define VIPS_TRANSFORM_SHIFT (6)
  |  |  ------------------
  ------------------
  639|       |
  640|    325|		for (int i = 0; i < 4; i++)
  ------------------
  |  Branch (640:19): [True: 260, False: 65]
  ------------------
  641|    260|			vips_bicubic_matrixi[x][i] =
  642|    260|				vips_bicubic_matrixf[x][i] *
  643|    260|				VIPS_INTERPOLATE_SCALE;
  ------------------
  |  |  120|    260|#define VIPS_INTERPOLATE_SCALE (1 << VIPS_INTERPOLATE_SHIFT)
  |  |  ------------------
  |  |  |  |  119|    260|#define VIPS_INTERPOLATE_SHIFT (12)
  |  |  ------------------
  ------------------
  644|     65|	}
  645|      1|}

vips__interpolate_init:
  626|      2|{
  627|      2|	extern GType vips_interpolate_bicubic_get_type(void);
  628|      2|	extern GType vips_interpolate_lbb_get_type(void);
  629|      2|	extern GType vips_interpolate_nohalo_get_type(void);
  630|      2|	extern GType vips_interpolate_vsqbs_get_type(void);
  631|       |
  632|      2|	vips_interpolate_nearest_get_type();
  633|      2|	vips_interpolate_bilinear_get_type();
  634|       |
  635|      2|	vips_interpolate_bicubic_get_type();
  636|      2|	vips_interpolate_lbb_get_type();
  637|      2|	vips_interpolate_nohalo_get_type();
  638|      2|	vips_interpolate_vsqbs_get_type();
  639|      2|}
interpolate.c:vips_interpolate_class_init:
  173|      1|{
  174|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  175|       |
  176|       |#ifdef DEBUG
  177|       |	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  178|       |#endif /*DEBUG*/
  179|       |
  180|       |#ifdef DEBUG
  181|       |	gobject_class->finalize = vips_interpolate_finalize;
  182|       |#endif /*DEBUG*/
  183|       |
  184|      1|	vobject_class->nickname = "interpolate";
  185|      1|	vobject_class->description = _("VIPS interpolators");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  186|       |
  187|      1|	class->interpolate = NULL;
  188|      1|	class->get_window_size = vips_interpolate_real_get_window_size;
  189|      1|	class->get_window_offset = vips_interpolate_real_get_window_offset;
  190|      1|	class->window_size = -1;
  191|      1|	class->window_offset = -1;
  192|      1|}
interpolate.c:vips_interpolate_nearest_class_init:
  355|      1|{
  356|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  357|      1|	VipsInterpolateClass *interpolate_class =
  358|      1|		VIPS_INTERPOLATE_CLASS(class);
  ------------------
  |  |   50|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      1|		VIPS_TYPE_INTERPOLATE, VipsInterpolateClass))
  ------------------
  359|       |
  360|      1|	object_class->nickname = "nearest";
  361|      1|	object_class->description = _("nearest-neighbour interpolation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  362|       |
  363|      1|	interpolate_class->interpolate = vips_interpolate_nearest_interpolate;
  364|      1|	interpolate_class->window_size = 1;
  365|      1|}
interpolate.c:vips_interpolate_bilinear_class_init:
  573|      1|{
  574|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  575|      1|	VipsInterpolateClass *interpolate_class =
  576|      1|		(VipsInterpolateClass *) class;
  577|       |
  578|      1|	object_class->nickname = "bilinear";
  579|      1|	object_class->description = _("bilinear interpolation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  580|       |
  581|      1|	interpolate_class->interpolate = vips_interpolate_bilinear_interpolate;
  582|      1|	interpolate_class->window_size = 2;
  583|      1|}

lbb.cpp:_ZL31vips_interpolate_lbb_class_initP24_VipsInterpolateLbbClass:
  866|      1|{
  867|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(klass);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  868|      1|	VipsInterpolateClass *interpolate_class =
  869|      1|		VIPS_INTERPOLATE_CLASS(klass);
  ------------------
  |  |   50|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      1|		VIPS_TYPE_INTERPOLATE, VipsInterpolateClass))
  ------------------
  870|       |
  871|      1|	object_class->nickname = "lbb";
  872|      1|	object_class->description = _("reduced halo bicubic");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  873|       |
  874|      1|	interpolate_class->interpolate = vips_interpolate_lbb_interpolate;
  875|      1|	interpolate_class->window_size = 4;
  876|      1|}

mapim.c:vips_mapim_class_init:
  541|      1|{
  542|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  544|       |
  545|      1|	VIPS_DEBUG_MSG("vips_mapim_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  546|       |
  547|      1|	gobject_class->set_property = vips_object_set_property;
  548|      1|	gobject_class->get_property = vips_object_get_property;
  549|       |
  550|      1|	vobject_class->nickname = "mapim";
  551|      1|	vobject_class->description = _("resample with a map image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  552|      1|	vobject_class->build = vips_mapim_build;
  553|       |
  554|      1|	VIPS_ARG_IMAGE(class, "index", 3,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  555|      1|		_("Index"),
  556|      1|		_("Index pixels with this"),
  557|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  558|      1|		G_STRUCT_OFFSET(VipsMapim, index));
  559|       |
  560|      1|	VIPS_ARG_INTERPOLATE(class, "interpolate", 4,
  ------------------
  |  |  138|      1|	VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
  |  |  ------------------
  |  |  |  |  125|      1|	{ \
  |  |  |  |  126|      1|		GParamSpec *pspec; \
  |  |  |  |  127|      1|\
  |  |  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  |  |  129|      1|			TYPE, \
  |  |  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  |  |  135|      1|	}
  |  |  ------------------
  ------------------
  561|      1|		_("Interpolate"),
  562|      1|		_("Interpolate pixels with this"),
  563|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  564|      1|		G_STRUCT_OFFSET(VipsMapim, interpolate));
  565|       |
  566|      1|	VIPS_ARG_ENUM(class, "extend", 117,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  567|      1|		_("Extend"),
  568|      1|		_("How to generate the extra pixels"),
  569|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  570|      1|		G_STRUCT_OFFSET(VipsMapim, extend),
  571|      1|		VIPS_TYPE_EXTEND, VIPS_EXTEND_BACKGROUND);
  572|       |
  573|      1|	VIPS_ARG_BOXED(class, "background", 116,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  574|      1|		_("Background"),
  575|      1|		_("Background value"),
  576|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  577|      1|		G_STRUCT_OFFSET(VipsMapim, background),
  578|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  579|       |
  580|      1|	VIPS_ARG_BOOL(class, "premultiplied", 117,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  581|      1|		_("Premultiplied"),
  582|      1|		_("Images have premultiplied alpha"),
  583|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  584|      1|		G_STRUCT_OFFSET(VipsMapim, premultiplied),
  585|      1|		FALSE);
  586|      1|}

nohalo.cpp:_ZL34vips_interpolate_nohalo_class_initP27_VipsInterpolateNohaloClass:
 1545|      1|{
 1546|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(klass);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1547|      1|	VipsInterpolateClass *interpolate_class = VIPS_INTERPOLATE_CLASS(klass);
  ------------------
  |  |   50|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      1|		VIPS_TYPE_INTERPOLATE, VipsInterpolateClass))
  ------------------
 1548|       |
 1549|      1|	object_class->nickname = "nohalo";
 1550|      1|	object_class->description =
 1551|      1|		_("edge sharpening resampler with halo reduction");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1552|       |
 1553|      1|	interpolate_class->interpolate = vips_interpolate_nohalo_interpolate;
 1554|      1|	interpolate_class->window_size = 6;
 1555|      1|	interpolate_class->window_offset = 2;
 1556|      1|}

quadratic.c:vips_quadratic_class_init:
  329|      1|{
  330|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  331|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|       |
  333|      1|	VIPS_DEBUG_MSG("vips_quadratic_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  334|       |
  335|      1|	gobject_class->dispose = vips_quadratic_dispose;
  336|      1|	gobject_class->set_property = vips_object_set_property;
  337|      1|	gobject_class->get_property = vips_object_get_property;
  338|       |
  339|      1|	vobject_class->nickname = "quadratic";
  340|      1|	vobject_class->description =
  341|      1|		_("resample an image with a quadratic transform");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  342|      1|	vobject_class->build = vips_quadratic_build;
  343|       |
  344|      1|	VIPS_ARG_IMAGE(class, "coeff", 8,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  345|      1|		_("Coeff"),
  346|      1|		_("Coefficient matrix"),
  347|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  348|      1|		G_STRUCT_OFFSET(VipsQuadratic, coeff));
  349|       |
  350|      1|	VIPS_ARG_INTERPOLATE(class, "interpolate", 9,
  ------------------
  |  |  138|      1|	VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
  |  |  ------------------
  |  |  |  |  125|      1|	{ \
  |  |  |  |  126|      1|		GParamSpec *pspec; \
  |  |  |  |  127|      1|\
  |  |  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  |  |  129|      1|			TYPE, \
  |  |  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  |  |  135|      1|	}
  |  |  ------------------
  ------------------
  351|      1|		_("Interpolate"),
  352|      1|		_("Interpolate values with this"),
  353|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  354|      1|		G_STRUCT_OFFSET(VipsQuadratic, interpolate));
  355|      1|}

reduce.c:vips_reduce_class_init:
  188|      1|{
  189|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  192|       |
  193|      1|	VIPS_DEBUG_MSG("vips_reduce_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|       |
  195|      1|	gobject_class->set_property = vips_object_set_property;
  196|      1|	gobject_class->get_property = vips_object_get_property;
  197|       |
  198|      1|	vobject_class->nickname = "reduce";
  199|      1|	vobject_class->description = _("reduce an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  200|      1|	vobject_class->build = vips_reduce_build;
  201|       |
  202|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  203|       |
  204|      1|	VIPS_ARG_DOUBLE(class, "hshrink", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  205|      1|		_("Hshrink"),
  206|      1|		_("Horizontal shrink factor"),
  207|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  208|      1|		G_STRUCT_OFFSET(VipsReduce, hshrink),
  209|      1|		1.0, 1000000.0, 1.0);
  210|       |
  211|      1|	VIPS_ARG_DOUBLE(class, "vshrink", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  212|      1|		_("Vshrink"),
  213|      1|		_("Vertical shrink factor"),
  214|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  215|      1|		G_STRUCT_OFFSET(VipsReduce, vshrink),
  216|      1|		1.0, 1000000.0, 1.0);
  217|       |
  218|      1|	VIPS_ARG_ENUM(class, "kernel", 3,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  219|      1|		_("Kernel"),
  220|      1|		_("Resampling kernel"),
  221|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  222|      1|		G_STRUCT_OFFSET(VipsReduce, kernel),
  223|      1|		VIPS_TYPE_KERNEL, VIPS_KERNEL_LANCZOS3);
  224|       |
  225|      1|	VIPS_ARG_DOUBLE(class, "gap", 4,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  226|      1|		_("Gap"),
  227|      1|		_("Reducing gap"),
  228|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  229|      1|		G_STRUCT_OFFSET(VipsReduce, gap),
  230|      1|		0.0, 1000000.0, 0.0);
  231|       |
  232|       |	/* The old names .. now use h and v everywhere.
  233|       |	 */
  234|      1|	VIPS_ARG_DOUBLE(class, "xshrink", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  235|      1|		_("Xshrink"),
  236|      1|		_("Horizontal shrink factor"),
  237|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
  238|      1|		G_STRUCT_OFFSET(VipsReduce, hshrink),
  239|      1|		1.0, 1000000.0, 1.0);
  240|       |
  241|      1|	VIPS_ARG_DOUBLE(class, "yshrink", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  242|      1|		_("Yshrink"),
  243|      1|		_("Vertical shrink factor"),
  244|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
  245|      1|		G_STRUCT_OFFSET(VipsReduce, vshrink),
  246|      1|		1.0, 1000000.0, 1.0);
  247|       |
  248|       |	/* We used to let people pick centre or corner, but it's automatic now.
  249|       |	 */
  250|      1|	VIPS_ARG_BOOL(class, "centre", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  251|      1|		_("Centre"),
  252|      1|		_("Use centre sampling convention"),
  253|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  254|      1|		G_STRUCT_OFFSET(VipsReduce, centre),
  255|      1|		FALSE);
  256|      1|}

reduceh.cpp:_ZL23vips_reduceh_class_initP18_VipsResampleClass:
  568|      1|{
  569|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(reduceh_class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  570|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(reduceh_class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  571|      1|	VipsOperationClass *operation_class =
  572|      1|		VIPS_OPERATION_CLASS(reduceh_class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  573|       |
  574|      1|	VIPS_DEBUG_MSG("vips_reduceh_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  575|       |
  576|      1|	gobject_class->set_property = vips_object_set_property;
  577|      1|	gobject_class->get_property = vips_object_get_property;
  578|       |
  579|      1|	vobject_class->nickname = "reduceh";
  580|      1|	vobject_class->description = _("shrink an image horizontally");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  581|      1|	vobject_class->build = vips_reduceh_build;
  582|       |
  583|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  584|       |
  585|      1|	VIPS_ARG_DOUBLE(reduceh_class, "hshrink", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  586|      1|		_("Hshrink"),
  587|      1|		_("Horizontal shrink factor"),
  588|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  589|      1|		G_STRUCT_OFFSET(VipsReduceh, hshrink),
  590|      1|		1.0, 1000000.0, 1.0);
  591|       |
  592|      1|	VIPS_ARG_ENUM(reduceh_class, "kernel", 4,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  593|      1|		_("Kernel"),
  594|      1|		_("Resampling kernel"),
  595|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  596|      1|		G_STRUCT_OFFSET(VipsReduceh, kernel),
  597|      1|		VIPS_TYPE_KERNEL, VIPS_KERNEL_LANCZOS3);
  598|       |
  599|      1|	VIPS_ARG_DOUBLE(reduceh_class, "gap", 5,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  600|      1|		_("Gap"),
  601|      1|		_("Reducing gap"),
  602|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  603|      1|		G_STRUCT_OFFSET(VipsReduceh, gap),
  604|      1|		0.0, 1000000.0, 0.0);
  605|       |
  606|       |	/* Old name.
  607|       |	 */
  608|      1|	VIPS_ARG_DOUBLE(reduceh_class, "xshrink", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  609|      1|		_("Xshrink"),
  610|      1|		_("Horizontal shrink factor"),
  611|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
  612|      1|		G_STRUCT_OFFSET(VipsReduceh, hshrink),
  613|      1|		1.0, 1000000.0, 1.0);
  614|       |
  615|       |	/* We used to let people pick centre or corner, but it's automatic now.
  616|       |	 */
  617|      1|	VIPS_ARG_BOOL(reduceh_class, "centre", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  618|      1|		_("Centre"),
  619|      1|		_("Use centre sampling convention"),
  620|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  621|      1|		G_STRUCT_OFFSET(VipsReduceh, centre),
  622|      1|		FALSE);
  623|      1|}

reducev.cpp:_ZL23vips_reducev_class_initP18_VipsResampleClass:
 1049|      1|{
 1050|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(reducev_class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1051|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(reducev_class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1052|      1|	VipsOperationClass *operation_class =
 1053|      1|		VIPS_OPERATION_CLASS(reducev_class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
 1054|       |
 1055|      1|	VIPS_DEBUG_MSG("vips_reducev_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1056|       |
 1057|       |#ifdef HAVE_ORC
 1058|       |	gobject_class->finalize = vips_reducev_finalize;
 1059|       |#endif /*HAVE_ORC*/
 1060|      1|	gobject_class->set_property = vips_object_set_property;
 1061|      1|	gobject_class->get_property = vips_object_get_property;
 1062|       |
 1063|      1|	vobject_class->nickname = "reducev";
 1064|      1|	vobject_class->description = _("shrink an image vertically");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1065|      1|	vobject_class->build = vips_reducev_build;
 1066|       |
 1067|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
 1068|       |
 1069|      1|	VIPS_ARG_DOUBLE(reducev_class, "vshrink", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
 1070|      1|		_("Vshrink"),
 1071|      1|		_("Vertical shrink factor"),
 1072|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1073|      1|		G_STRUCT_OFFSET(VipsReducev, vshrink),
 1074|      1|		1.0, 1000000.0, 1.0);
 1075|       |
 1076|      1|	VIPS_ARG_ENUM(reducev_class, "kernel", 4,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1077|      1|		_("Kernel"),
 1078|      1|		_("Resampling kernel"),
 1079|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1080|      1|		G_STRUCT_OFFSET(VipsReducev, kernel),
 1081|      1|		VIPS_TYPE_KERNEL, VIPS_KERNEL_LANCZOS3);
 1082|       |
 1083|      1|	VIPS_ARG_DOUBLE(reducev_class, "gap", 5,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
 1084|      1|		_("Gap"),
 1085|      1|		_("Reducing gap"),
 1086|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1087|      1|		G_STRUCT_OFFSET(VipsReducev, gap),
 1088|      1|		0.0, 1000000.0, 0.0);
 1089|       |
 1090|       |	/* Old name.
 1091|       |	 */
 1092|      1|	VIPS_ARG_DOUBLE(reducev_class, "yshrink", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
 1093|      1|		_("Yshrink"),
 1094|      1|		_("Vertical shrink factor"),
 1095|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1096|      1|		G_STRUCT_OFFSET(VipsReducev, vshrink),
 1097|      1|		1.0, 1000000.0, 1.0);
 1098|       |
 1099|       |	/* We used to let people pick centre or corner, but it's automatic now.
 1100|       |	 */
 1101|      1|	VIPS_ARG_BOOL(reducev_class, "centre", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1102|      1|		_("Centre"),
 1103|      1|		_("Use centre sampling convention"),
 1104|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1105|      1|		G_STRUCT_OFFSET(VipsReducev, centre),
 1106|      1|		FALSE);
 1107|      1|}

vips_resample_operation_init:
  162|      2|{
  163|      2|	extern GType vips_thumbnail_file_get_type(void);
  164|      2|	extern GType vips_thumbnail_buffer_get_type(void);
  165|      2|	extern GType vips_thumbnail_image_get_type(void);
  166|      2|	extern GType vips_thumbnail_source_get_type(void);
  167|      2|	extern GType vips_mapim_get_type(void);
  168|      2|	extern GType vips_shrink_get_type(void);
  169|      2|	extern GType vips_shrinkh_get_type(void);
  170|      2|	extern GType vips_shrinkv_get_type(void);
  171|      2|	extern GType vips_reduce_get_type(void);
  172|      2|	extern GType vips_reduceh_get_type(void);
  173|      2|	extern GType vips_reducev_get_type(void);
  174|      2|	extern GType vips_quadratic_get_type(void);
  175|      2|	extern GType vips_affine_get_type(void);
  176|      2|	extern GType vips_similarity_get_type(void);
  177|      2|	extern GType vips_rotate_get_type(void);
  178|      2|	extern GType vips_resize_get_type(void);
  179|       |
  180|      2|	vips_thumbnail_file_get_type();
  181|      2|	vips_thumbnail_buffer_get_type();
  182|      2|	vips_thumbnail_image_get_type();
  183|      2|	vips_thumbnail_source_get_type();
  184|      2|	vips_mapim_get_type();
  185|      2|	vips_shrink_get_type();
  186|      2|	vips_shrinkh_get_type();
  187|      2|	vips_shrinkv_get_type();
  188|      2|	vips_reduceh_get_type();
  189|      2|	vips_reducev_get_type();
  190|      2|	vips_reduce_get_type();
  191|      2|	vips_quadratic_get_type();
  192|      2|	vips_affine_get_type();
  193|      2|	vips_similarity_get_type();
  194|      2|	vips_rotate_get_type();
  195|      2|	vips_resize_get_type();
  196|      2|}
resample.c:vips_resample_class_init:
  128|      1|{
  129|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  130|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  131|       |
  132|      1|	gobject_class->set_property = vips_object_set_property;
  133|      1|	gobject_class->get_property = vips_object_get_property;
  134|       |
  135|      1|	vobject_class->nickname = "resample";
  136|      1|	vobject_class->description = _("resample operations");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  137|      1|	vobject_class->build = vips_resample_build;
  138|       |
  139|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  140|      1|		_("Input"),
  141|      1|		_("Input image argument"),
  142|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  143|      1|		G_STRUCT_OFFSET(VipsResample, in));
  144|       |
  145|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  146|      1|		_("Output"),
  147|      1|		_("Output image"),
  148|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  149|      1|		G_STRUCT_OFFSET(VipsResample, out));
  150|      1|}

resize.c:vips_resize_class_init:
  312|      1|{
  313|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  314|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  315|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  316|       |
  317|      1|	VIPS_DEBUG_MSG("vips_resize_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  318|       |
  319|      1|	gobject_class->set_property = vips_object_set_property;
  320|      1|	gobject_class->get_property = vips_object_get_property;
  321|       |
  322|      1|	vobject_class->nickname = "resize";
  323|      1|	vobject_class->description = _("resize an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  324|      1|	vobject_class->build = vips_resize_build;
  325|       |
  326|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  327|       |
  328|      1|	VIPS_ARG_DOUBLE(class, "scale", 113,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  329|      1|		_("Scale factor"),
  330|      1|		_("Scale image by this factor"),
  331|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  332|      1|		G_STRUCT_OFFSET(VipsResize, scale),
  333|      1|		0.0, 10000000.0, 0.0);
  334|       |
  335|      1|	VIPS_ARG_DOUBLE(class, "vscale", 113,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  336|      1|		_("Vertical scale factor"),
  337|      1|		_("Vertical scale image by this factor"),
  338|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  339|      1|		G_STRUCT_OFFSET(VipsResize, vscale),
  340|      1|		0.0, 10000000.0, 0.0);
  341|       |
  342|      1|	VIPS_ARG_ENUM(class, "kernel", 3,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  343|      1|		_("Kernel"),
  344|      1|		_("Resampling kernel"),
  345|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  346|      1|		G_STRUCT_OFFSET(VipsResize, kernel),
  347|      1|		VIPS_TYPE_KERNEL, VIPS_KERNEL_LANCZOS3);
  348|       |
  349|      1|	VIPS_ARG_DOUBLE(class, "gap", 4,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  350|      1|		_("Gap"),
  351|      1|		_("Reducing gap"),
  352|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  353|      1|		G_STRUCT_OFFSET(VipsResize, gap),
  354|      1|		0.0, 1000000.0, 2.0);
  355|       |
  356|       |	/* We used to let people set the input offset so you could pick centre
  357|       |	 * or corner interpolation, but it's not clear this was useful.
  358|       |	 */
  359|      1|	VIPS_ARG_DOUBLE(class, "idx", 115,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  360|      1|		_("Input offset"),
  361|      1|		_("Horizontal input displacement"),
  362|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  363|      1|		G_STRUCT_OFFSET(VipsResize, idx),
  364|      1|		-10000000.0, 10000000.0, 0.0);
  365|       |
  366|      1|	VIPS_ARG_DOUBLE(class, "idy", 116,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  367|      1|		_("Input offset"),
  368|      1|		_("Vertical input displacement"),
  369|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  370|      1|		G_STRUCT_OFFSET(VipsResize, idy),
  371|      1|		-10000000.0, 10000000.0, 0.0);
  372|       |
  373|       |	/* It's a kernel now we use vips_reduce() not vips_affine().
  374|       |	 */
  375|      1|	VIPS_ARG_INTERPOLATE(class, "interpolate", 2,
  ------------------
  |  |  138|      1|	VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
  |  |  ------------------
  |  |  |  |  125|      1|	{ \
  |  |  |  |  126|      1|		GParamSpec *pspec; \
  |  |  |  |  127|      1|\
  |  |  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  |  |  129|      1|			TYPE, \
  |  |  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  |  |  135|      1|	}
  |  |  ------------------
  ------------------
  376|      1|		_("Interpolate"),
  377|      1|		_("Interpolate pixels with this"),
  378|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  379|      1|		G_STRUCT_OFFSET(VipsResize, interpolate));
  380|       |
  381|       |	/* We used to let people pick centre or corner, but it's automatic now.
  382|       |	 */
  383|      1|	VIPS_ARG_BOOL(class, "centre", 7,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  384|      1|		_("Centre"),
  385|      1|		_("Use centre sampling convention"),
  386|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
  387|      1|		G_STRUCT_OFFSET(VipsResize, centre),
  388|      1|		FALSE);
  389|      1|}

shrink.c:vips_shrink_class_init:
  122|      1|{
  123|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  124|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  125|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  126|       |
  127|      1|	VIPS_DEBUG_MSG("vips_shrink_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  128|       |
  129|      1|	gobject_class->set_property = vips_object_set_property;
  130|      1|	gobject_class->get_property = vips_object_get_property;
  131|       |
  132|      1|	vobject_class->nickname = "shrink";
  133|      1|	vobject_class->description = _("shrink an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  134|      1|	vobject_class->build = vips_shrink_build;
  135|       |
  136|       |	/* You'd think UNBUFFERED would work, but we will use reduce for non-int
  137|       |	 * shrinks, so it has to be straight SEQ.
  138|       |	 */
  139|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  140|       |
  141|      1|	VIPS_ARG_DOUBLE(class, "vshrink", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  142|      1|		_("Vshrink"),
  143|      1|		_("Vertical shrink factor"),
  144|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  145|      1|		G_STRUCT_OFFSET(VipsShrink, vshrink),
  146|      1|		1.0, 1000000.0, 1.0);
  147|       |
  148|      1|	VIPS_ARG_DOUBLE(class, "hshrink", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  149|      1|		_("Hshrink"),
  150|      1|		_("Horizontal shrink factor"),
  151|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  152|      1|		G_STRUCT_OFFSET(VipsShrink, hshrink),
  153|      1|		1.0, 1000000.0, 1.0);
  154|       |
  155|      1|	VIPS_ARG_BOOL(class, "ceil", 10,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  156|      1|		_("Ceil"),
  157|      1|		_("Round-up output dimensions"),
  158|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  159|      1|		G_STRUCT_OFFSET(VipsShrink, ceil),
  160|      1|		FALSE);
  161|       |
  162|       |	/* The old names .. now use h and v everywhere.
  163|       |	 */
  164|      1|	VIPS_ARG_DOUBLE(class, "xshrink", 8,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  165|      1|		_("Xshrink"),
  166|      1|		_("Horizontal shrink factor"),
  167|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
  168|      1|		G_STRUCT_OFFSET(VipsShrink, hshrink),
  169|      1|		1.0, 1000000.0, 1.0);
  170|       |
  171|      1|	VIPS_ARG_DOUBLE(class, "yshrink", 9,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  172|      1|		_("Yshrink"),
  173|      1|		_("Vertical shrink factor"),
  174|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
  175|      1|		G_STRUCT_OFFSET(VipsShrink, vshrink),
  176|      1|		1.0, 1000000.0, 1.0);
  177|      1|}

shrinkh.c:vips_shrinkh_class_init:
  336|      1|{
  337|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  338|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  339|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  340|       |
  341|      1|	VIPS_DEBUG_MSG("vips_shrinkh_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  342|       |
  343|      1|	gobject_class->set_property = vips_object_set_property;
  344|      1|	gobject_class->get_property = vips_object_get_property;
  345|       |
  346|      1|	vobject_class->nickname = "shrinkh";
  347|      1|	vobject_class->description = _("shrink an image horizontally");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  348|      1|	vobject_class->build = vips_shrinkh_build;
  349|       |
  350|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  351|       |
  352|      1|	VIPS_ARG_INT(class, "hshrink", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  353|      1|		_("Hshrink"),
  354|      1|		_("Horizontal shrink factor"),
  355|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  356|      1|		G_STRUCT_OFFSET(VipsShrinkh, hshrink),
  357|      1|		1, 1000000, 1);
  358|       |
  359|      1|	VIPS_ARG_BOOL(class, "ceil", 10,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  360|      1|		_("Ceil"),
  361|      1|		_("Round-up output dimensions"),
  362|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  363|      1|		G_STRUCT_OFFSET(VipsShrinkh, ceil),
  364|      1|		FALSE);
  365|       |
  366|       |	/* The old name .. now use h and v everywhere.
  367|       |	 */
  368|      1|	VIPS_ARG_INT(class, "xshrink", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  369|      1|		_("Xshrink"),
  370|      1|		_("Horizontal shrink factor"),
  371|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
  372|      1|		G_STRUCT_OFFSET(VipsShrinkh, hshrink),
  373|      1|		1, 1000000, 1);
  374|      1|}

shrinkv.c:vips_shrinkv_class_init:
  410|      1|{
  411|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  413|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  414|       |
  415|      1|	VIPS_DEBUG_MSG("vips_shrinkv_class_init\n");
  ------------------
  |  |   47|      1|	G_STMT_START \
  |  |  ------------------
  |  |  |  |  854|      1|#define G_STMT_START  do
  |  |  ------------------
  |  |   48|      1|	{ \
  |  |   49|      1|		; \
  |  |   50|      1|	} \
  |  |   51|      1|	G_STMT_END
  |  |  ------------------
  |  |  |  |  862|      1|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  416|       |
  417|      1|	gobject_class->set_property = vips_object_set_property;
  418|      1|	gobject_class->get_property = vips_object_get_property;
  419|       |
  420|      1|	vobject_class->nickname = "shrinkv";
  421|      1|	vobject_class->description = _("shrink an image vertically");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  422|      1|	vobject_class->build = vips_shrinkv_build;
  423|       |
  424|      1|	operation_class->flags = VIPS_OPERATION_SEQUENTIAL;
  425|       |
  426|      1|	VIPS_ARG_INT(class, "vshrink", 9,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  427|      1|		_("Vshrink"),
  428|      1|		_("Vertical shrink factor"),
  429|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  430|      1|		G_STRUCT_OFFSET(VipsShrinkv, vshrink),
  431|      1|		1, 1000000, 1);
  432|       |
  433|      1|	VIPS_ARG_BOOL(class, "ceil", 10,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  434|      1|		_("Ceil"),
  435|      1|		_("Round-up output dimensions"),
  436|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  437|      1|		G_STRUCT_OFFSET(VipsShrinkv, ceil),
  438|      1|		FALSE);
  439|       |
  440|       |	/* The old name .. now use h and v everywhere.
  441|       |	 */
  442|      1|	VIPS_ARG_INT(class, "yshrink", 8,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  443|      1|		_("Yshrink"),
  444|      1|		_("Vertical shrink factor"),
  445|      1|		VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED,
  446|      1|		G_STRUCT_OFFSET(VipsShrinkv, vshrink),
  447|      1|		1, 1000000, 1);
  448|      1|}

similarity.c:vips_similarity_base_class_init:
  115|      1|{
  116|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  117|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|       |
  119|      1|	gobject_class->set_property = vips_object_set_property;
  120|      1|	gobject_class->get_property = vips_object_get_property;
  121|       |
  122|      1|	vobject_class->nickname = "similarity_base";
  123|      1|	vobject_class->description = _("base similarity transform");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  124|      1|	vobject_class->build = vips_similarity_base_build;
  125|       |
  126|      1|	VIPS_ARG_INTERPOLATE(class, "interpolate", 5,
  ------------------
  |  |  138|      1|	VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE)
  |  |  ------------------
  |  |  |  |  125|      1|	{ \
  |  |  |  |  126|      1|		GParamSpec *pspec; \
  |  |  |  |  127|      1|\
  |  |  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  |  |  129|      1|			TYPE, \
  |  |  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  |  |  135|      1|	}
  |  |  ------------------
  ------------------
  127|      1|		_("Interpolate"),
  128|      1|		_("Interpolate pixels with this"),
  129|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  130|      1|		G_STRUCT_OFFSET(VipsSimilarityBase, interpolate));
  131|       |
  132|      1|	VIPS_ARG_BOXED(class, "background", 6,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
  133|      1|		_("Background"),
  134|      1|		_("Background value"),
  135|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  136|      1|		G_STRUCT_OFFSET(VipsSimilarityBase, background),
  137|      1|		VIPS_TYPE_ARRAY_DOUBLE);
  138|       |
  139|      1|	VIPS_ARG_DOUBLE(class, "odx", 112,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  140|      1|		_("Output offset"),
  141|      1|		_("Horizontal output displacement"),
  142|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  143|      1|		G_STRUCT_OFFSET(VipsSimilarityBase, odx),
  144|      1|		-10000000, 10000000, 0);
  145|       |
  146|      1|	VIPS_ARG_DOUBLE(class, "ody", 113,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  147|      1|		_("Output offset"),
  148|      1|		_("Vertical output displacement"),
  149|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  150|      1|		G_STRUCT_OFFSET(VipsSimilarityBase, ody),
  151|      1|		-10000000, 10000000, 0);
  152|       |
  153|      1|	VIPS_ARG_DOUBLE(class, "idx", 114,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  154|      1|		_("Input offset"),
  155|      1|		_("Horizontal input displacement"),
  156|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  157|      1|		G_STRUCT_OFFSET(VipsSimilarityBase, idx),
  158|      1|		-10000000, 10000000, 0);
  159|       |
  160|      1|	VIPS_ARG_DOUBLE(class, "idy", 115,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  161|      1|		_("Input offset"),
  162|      1|		_("Vertical input displacement"),
  163|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  164|      1|		G_STRUCT_OFFSET(VipsSimilarityBase, idy),
  165|      1|		-10000000, 10000000, 0);
  166|      1|}
similarity.c:vips_similarity_class_init:
  189|      1|{
  190|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|       |
  193|      1|	gobject_class->set_property = vips_object_set_property;
  194|      1|	gobject_class->get_property = vips_object_get_property;
  195|       |
  196|      1|	vobject_class->nickname = "similarity";
  197|      1|	vobject_class->description = _("similarity transform of an image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  198|       |
  199|      1|	VIPS_ARG_DOUBLE(class, "scale", 3,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  200|      1|		_("Scale"),
  201|      1|		_("Scale by this factor"),
  202|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  203|      1|		G_STRUCT_OFFSET(VipsSimilarity, scale),
  204|      1|		0, 10000000, 1);
  205|       |
  206|      1|	VIPS_ARG_DOUBLE(class, "angle", 4,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  207|      1|		_("Angle"),
  208|      1|		_("Rotate clockwise by this many degrees"),
  209|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  210|      1|		G_STRUCT_OFFSET(VipsSimilarity, angle),
  211|      1|		-10000000, 10000000, 0);
  212|      1|}
similarity.c:vips_rotate_class_init:
  264|      1|{
  265|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  266|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|       |
  268|      1|	gobject_class->set_property = vips_object_set_property;
  269|      1|	gobject_class->get_property = vips_object_get_property;
  270|       |
  271|      1|	vobject_class->nickname = "rotate";
  272|      1|	vobject_class->description =
  273|      1|		_("rotate an image by a number of degrees");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  274|       |
  275|      1|	VIPS_ARG_DOUBLE(class, "angle", 4,
  ------------------
  |  |  156|      1|	{ \
  |  |  157|      1|		GParamSpec *pspec; \
  |  |  158|      1|\
  |  |  159|      1|		pspec = g_param_spec_double((NAME), (LONG), (DESC), \
  |  |  160|      1|			(MIN), (MAX), (VALUE), \
  |  |  161|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  162|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  163|      1|			vips_argument_get_id(), pspec); \
  |  |  164|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  165|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  166|      1|	}
  ------------------
  276|      1|		_("Angle"),
  277|      1|		_("Rotate clockwise by this many degrees"),
  278|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  279|      1|		G_STRUCT_OFFSET(VipsSimilarity, angle),
  280|      1|		-10000000, 10000000, 0);
  281|      1|}

bicubic.cpp:_ZL30calculate_coefficients_catmullPdd:
  292|     65|{
  293|       |	/* Nicolas believes that the following is an hitherto unknown
  294|       |	 * hyper-efficient method of computing Catmull-Rom coefficients. It
  295|       |	 * only uses 4* & 1+ & 5- for a total of only 10 flops to compute
  296|       |	 * four coefficients.
  297|       |	 */
  298|     65|	const double cr1 = 1. - x;
  299|     65|	const double cr2 = -.5 * x;
  300|     65|	const double cr3 = cr1 * cr2;
  301|     65|	const double cone = cr1 * cr3;
  302|     65|	const double cfou = x * cr3;
  303|     65|	const double cr4 = cfou - cone;
  304|     65|	const double ctwo = cr1 - cone + cr4;
  305|     65|	const double cthr = x - cfou - cr4;
  306|       |
  307|     65|	g_assert(x >= 0. && x <= 1.);
  ------------------
  |  |  166|     65|#define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  854|     65|#define G_STMT_START  do
  |  |  ------------------
  |  |               #define g_assert(expr)                  G_STMT_START { (void) 0; } G_STMT_END
  |  |  ------------------
  |  |  |  |  862|     65|#define G_STMT_END    while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (862:30): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  308|       |
  309|     65|	c[0] = cone;
  310|     65|	c[3] = cfou;
  311|     65|	c[1] = ctwo;
  312|     65|	c[2] = cthr;
  313|     65|}

thumbnail.c:vips_thumbnail_class_init:
  948|      1|{
  949|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  950|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  951|      1|	VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class);
  ------------------
  |  |   60|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   61|      1|		VIPS_TYPE_OPERATION, VipsOperationClass))
  ------------------
  952|       |
  953|      1|	gobject_class->dispose = vips_thumbnail_dispose;
  954|      1|	gobject_class->finalize = vips_thumbnail_finalize;
  955|      1|	gobject_class->set_property = vips_object_set_property;
  956|      1|	gobject_class->get_property = vips_object_get_property;
  957|       |
  958|      1|	vobject_class->nickname = "thumbnail_base";
  959|      1|	vobject_class->description = _("thumbnail generation");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  960|      1|	vobject_class->build = vips_thumbnail_build;
  961|       |
  962|       |	/* We mustn't cache these calls, since we open the file or buffer in
  963|       |	 * sequential mode.
  964|       |	 */
  965|      1|	operation_class->flags |= VIPS_OPERATION_NOCACHE;
  966|       |
  967|      1|	VIPS_ARG_IMAGE(class, "out", 2,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
  968|      1|		_("Output"),
  969|      1|		_("Output image"),
  970|      1|		VIPS_ARGUMENT_REQUIRED_OUTPUT,
  971|      1|		G_STRUCT_OFFSET(VipsThumbnail, out));
  972|       |
  973|      1|	VIPS_ARG_INT(class, "width", 3,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  974|      1|		_("Target width"),
  975|      1|		_("Size to this width"),
  976|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
  977|      1|		G_STRUCT_OFFSET(VipsThumbnail, width),
  978|      1|		1, VIPS_MAX_COORD, 1);
  979|       |
  980|      1|	VIPS_ARG_INT(class, "height", 113,
  ------------------
  |  |  184|      1|	{ \
  |  |  185|      1|		GParamSpec *pspec; \
  |  |  186|      1|\
  |  |  187|      1|		pspec = g_param_spec_int((NAME), (LONG), (DESC), \
  |  |  188|      1|			(MIN), (MAX), (VALUE), \
  |  |  189|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  190|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  191|      1|			vips_argument_get_id(), pspec); \
  |  |  192|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  193|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  194|      1|	}
  ------------------
  981|      1|		_("Target height"),
  982|      1|		_("Size to this height"),
  983|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  984|      1|		G_STRUCT_OFFSET(VipsThumbnail, height),
  985|      1|		1, VIPS_MAX_COORD, 1);
  986|       |
  987|      1|	VIPS_ARG_ENUM(class, "size", 114,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
  988|      1|		_("Size"),
  989|      1|		_("Only upsize, only downsize, or both"),
  990|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  991|      1|		G_STRUCT_OFFSET(VipsThumbnail, size),
  992|      1|		VIPS_TYPE_SIZE, VIPS_SIZE_BOTH);
  993|       |
  994|      1|	VIPS_ARG_BOOL(class, "no_rotate", 115,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
  995|      1|		_("No rotate"),
  996|      1|		_("Don't use orientation tags to rotate image upright"),
  997|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
  998|      1|		G_STRUCT_OFFSET(VipsThumbnail, no_rotate),
  999|      1|		FALSE);
 1000|       |
 1001|      1|	VIPS_ARG_ENUM(class, "crop", 116,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1002|      1|		_("Crop"),
 1003|      1|		_("Reduce to fill target rectangle, then crop"),
 1004|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1005|      1|		G_STRUCT_OFFSET(VipsThumbnail, crop),
 1006|      1|		VIPS_TYPE_INTERESTING, VIPS_INTERESTING_NONE);
 1007|       |
 1008|      1|	VIPS_ARG_BOOL(class, "linear", 117,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1009|      1|		_("Linear"),
 1010|      1|		_("Reduce in linear light"),
 1011|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1012|      1|		G_STRUCT_OFFSET(VipsThumbnail, linear),
 1013|      1|		FALSE);
 1014|       |
 1015|      1|	VIPS_ARG_STRING(class, "import_profile", 118,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1016|      1|		_("Import profile"),
 1017|      1|		_("Fallback import profile"),
 1018|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1019|      1|		G_STRUCT_OFFSET(VipsThumbnail, import_profile),
 1020|      1|		NULL);
 1021|       |
 1022|      1|	VIPS_ARG_STRING(class, "export_profile", 119,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1023|      1|		_("Export profile"),
 1024|      1|		_("Fallback export profile"),
 1025|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1026|      1|		G_STRUCT_OFFSET(VipsThumbnail, export_profile),
 1027|      1|		NULL);
 1028|       |
 1029|      1|	VIPS_ARG_ENUM(class, "intent", 120,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1030|      1|		_("Intent"),
 1031|      1|		_("Rendering intent"),
 1032|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1033|      1|		G_STRUCT_OFFSET(VipsThumbnail, intent),
 1034|      1|		VIPS_TYPE_INTENT, VIPS_INTENT_RELATIVE);
 1035|       |
 1036|      1|	VIPS_ARG_ENUM(class, "fail_on", 121,
  ------------------
  |  |  212|      1|	{ \
  |  |  213|      1|		GParamSpec *pspec; \
  |  |  214|      1|\
  |  |  215|      1|		pspec = g_param_spec_enum((NAME), (LONG), (DESC), \
  |  |  216|      1|			(TYPE), (VALUE), \
  |  |  217|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  218|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  219|      1|			vips_argument_get_id(), pspec); \
  |  |  220|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  221|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  222|      1|	}
  ------------------
 1037|      1|		_("Fail on"),
 1038|      1|		_("Error level to fail on"),
 1039|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1040|      1|		G_STRUCT_OFFSET(VipsThumbnail, fail_on),
 1041|      1|		VIPS_TYPE_FAIL_ON, VIPS_FAIL_ON_NONE);
 1042|       |
 1043|       |	/* BOOL args which default TRUE arguments don't work with the
 1044|       |	 * command-line -- GOption does not allow --auto-rotate=false.
 1045|       |	 *
 1046|       |	 * This is now replaced (though still functional) with "no-rotate",
 1047|       |	 * see above.
 1048|       |	 */
 1049|      1|	VIPS_ARG_BOOL(class, "auto_rotate", 121,
  ------------------
  |  |  142|      1|	{ \
  |  |  143|      1|		GParamSpec *pspec; \
  |  |  144|      1|\
  |  |  145|      1|		pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \
  |  |  146|      1|			(VALUE), \
  |  |  147|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  148|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  149|      1|			vips_argument_get_id(), pspec); \
  |  |  150|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  151|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  152|      1|	}
  ------------------
 1050|      1|		_("Auto rotate"),
 1051|      1|		_("Use orientation tags to rotate image upright"),
 1052|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED,
 1053|      1|		G_STRUCT_OFFSET(VipsThumbnail, auto_rotate),
 1054|      1|		TRUE);
 1055|      1|}
thumbnail.c:vips_thumbnail_file_class_init:
 1183|      1|{
 1184|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1185|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1186|      1|	VipsThumbnailClass *thumbnail_class = VIPS_THUMBNAIL_CLASS(class);
  ------------------
  |  |   93|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|      1|		VIPS_TYPE_THUMBNAIL, VipsThumbnailClass))
  ------------------
 1187|       |
 1188|      1|	gobject_class->set_property = vips_object_set_property;
 1189|      1|	gobject_class->get_property = vips_object_get_property;
 1190|       |
 1191|      1|	vobject_class->nickname = "thumbnail";
 1192|      1|	vobject_class->description = _("generate thumbnail from file");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1193|       |
 1194|      1|	thumbnail_class->get_info = vips_thumbnail_file_get_info;
 1195|      1|	thumbnail_class->open = vips_thumbnail_file_open;
 1196|       |
 1197|      1|	VIPS_ARG_STRING(class, "filename", 1,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1198|      1|		_("Filename"),
 1199|      1|		_("Filename to read from"),
 1200|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1201|      1|		G_STRUCT_OFFSET(VipsThumbnailFile, filename),
 1202|      1|		NULL);
 1203|      1|}
thumbnail.c:vips_thumbnail_buffer_class_init:
 1430|      1|{
 1431|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1432|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1433|      1|	VipsThumbnailClass *thumbnail_class = VIPS_THUMBNAIL_CLASS(class);
  ------------------
  |  |   93|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|      1|		VIPS_TYPE_THUMBNAIL, VipsThumbnailClass))
  ------------------
 1434|       |
 1435|      1|	gobject_class->set_property = vips_object_set_property;
 1436|      1|	gobject_class->get_property = vips_object_get_property;
 1437|       |
 1438|      1|	vobject_class->nickname = "thumbnail_buffer";
 1439|      1|	vobject_class->description = _("generate thumbnail from buffer");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1440|       |
 1441|      1|	thumbnail_class->get_info = vips_thumbnail_buffer_get_info;
 1442|      1|	thumbnail_class->open = vips_thumbnail_buffer_open;
 1443|       |
 1444|      1|	VIPS_ARG_BOXED(class, "buffer", 1,
  ------------------
  |  |  170|      1|	{ \
  |  |  171|      1|		GParamSpec *pspec; \
  |  |  172|      1|\
  |  |  173|      1|		pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \
  |  |  174|      1|			(TYPE), \
  |  |  175|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  176|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  177|      1|			vips_argument_get_id(), pspec); \
  |  |  178|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  179|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  180|      1|	}
  ------------------
 1445|      1|		_("Buffer"),
 1446|      1|		_("Buffer to load from"),
 1447|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1448|      1|		G_STRUCT_OFFSET(VipsThumbnailBuffer, buf),
 1449|      1|		VIPS_TYPE_BLOB);
 1450|       |
 1451|      1|	VIPS_ARG_STRING(class, "option_string", 20,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1452|      1|		_("Extra options"),
 1453|      1|		_("Options that are passed on to the underlying loader"),
 1454|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1455|      1|		G_STRUCT_OFFSET(VipsThumbnailBuffer, option_string),
 1456|      1|		"");
 1457|      1|}
thumbnail.c:vips_thumbnail_source_class_init:
 1643|      1|{
 1644|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1645|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1646|      1|	VipsThumbnailClass *thumbnail_class = VIPS_THUMBNAIL_CLASS(class);
  ------------------
  |  |   93|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|      1|		VIPS_TYPE_THUMBNAIL, VipsThumbnailClass))
  ------------------
 1647|       |
 1648|      1|	gobject_class->set_property = vips_object_set_property;
 1649|      1|	gobject_class->get_property = vips_object_get_property;
 1650|       |
 1651|      1|	vobject_class->nickname = "thumbnail_source";
 1652|      1|	vobject_class->description = _("generate thumbnail from source");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1653|       |
 1654|      1|	thumbnail_class->get_info = vips_thumbnail_source_get_info;
 1655|      1|	thumbnail_class->open = vips_thumbnail_source_open;
 1656|       |
 1657|      1|	VIPS_ARG_OBJECT(class, "source", 1,
  ------------------
  |  |  125|      1|	{ \
  |  |  126|      1|		GParamSpec *pspec; \
  |  |  127|      1|\
  |  |  128|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  129|      1|			TYPE, \
  |  |  130|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  131|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  132|      1|			vips_argument_get_id(), pspec); \
  |  |  133|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  134|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  135|      1|	}
  ------------------
 1658|      1|		_("Source"),
 1659|      1|		_("Source to load from"),
 1660|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1661|      1|		G_STRUCT_OFFSET(VipsThumbnailSource, source),
 1662|      1|		VIPS_TYPE_SOURCE);
 1663|       |
 1664|      1|	VIPS_ARG_STRING(class, "option_string", 20,
  ------------------
  |  |  240|      1|	{ \
  |  |  241|      1|		GParamSpec *pspec; \
  |  |  242|      1|\
  |  |  243|      1|		pspec = g_param_spec_string((NAME), (LONG), (DESC), \
  |  |  244|      1|			(VALUE), \
  |  |  245|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  246|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  247|      1|			vips_argument_get_id(), pspec); \
  |  |  248|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  249|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  250|      1|	}
  ------------------
 1665|      1|		_("Extra options"),
 1666|      1|		_("Options that are passed on to the underlying loader"),
 1667|      1|		VIPS_ARGUMENT_OPTIONAL_INPUT,
 1668|      1|		G_STRUCT_OFFSET(VipsThumbnailSource, option_string),
 1669|      1|		"");
 1670|      1|}
thumbnail.c:vips_thumbnail_image_class_init:
 1767|      1|{
 1768|      1|	GObjectClass *gobject_class = G_OBJECT_CLASS(class);
  ------------------
  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1769|      1|	VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1770|      1|	VipsThumbnailClass *thumbnail_class = VIPS_THUMBNAIL_CLASS(class);
  ------------------
  |  |   93|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|      1|		VIPS_TYPE_THUMBNAIL, VipsThumbnailClass))
  ------------------
 1771|       |
 1772|      1|	gobject_class->set_property = vips_object_set_property;
 1773|      1|	gobject_class->get_property = vips_object_get_property;
 1774|       |
 1775|      1|	vobject_class->nickname = "thumbnail_image";
 1776|      1|	vobject_class->description = _("generate thumbnail from image");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
 1777|       |
 1778|      1|	thumbnail_class->get_info = vips_thumbnail_image_get_info;
 1779|      1|	thumbnail_class->open = vips_thumbnail_image_open;
 1780|       |
 1781|      1|	VIPS_ARG_IMAGE(class, "in", 1,
  ------------------
  |  |  112|      1|	{ \
  |  |  113|      1|		GParamSpec *pspec; \
  |  |  114|      1|\
  |  |  115|      1|		pspec = g_param_spec_object((NAME), (LONG), (DESC), \
  |  |  116|      1|			VIPS_TYPE_IMAGE, \
  |  |  ------------------
  |  |  |  |  169|      1|#define VIPS_TYPE_IMAGE (vips_image_get_type())
  |  |  ------------------
  |  |  117|      1|			(GParamFlags) (G_PARAM_READWRITE)); \
  |  |  118|      1|		g_object_class_install_property(G_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |   58|      1|#define G_OBJECT_CLASS(class)       (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_OBJECT, GObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      1|			vips_argument_get_id(), pspec); \
  |  |  120|      1|		vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \
  |  |  ------------------
  |  |  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  |  |  ------------------
  |  |  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      1|			pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \
  |  |  122|      1|	}
  ------------------
 1782|      1|		_("Input"),
 1783|      1|		_("Input image argument"),
 1784|      1|		VIPS_ARGUMENT_REQUIRED_INPUT,
 1785|      1|		G_STRUCT_OFFSET(VipsThumbnailImage, in));
 1786|      1|}

vsqbs.cpp:_ZL33vips_interpolate_vsqbs_class_initP26_VipsInterpolateVsqbsClass:
  373|      1|{
  374|      1|	VipsObjectClass *object_class = VIPS_OBJECT_CLASS(klass);
  ------------------
  |  |  435|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass))
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  375|      1|	VipsInterpolateClass *interpolate_class = VIPS_INTERPOLATE_CLASS(klass);
  ------------------
  |  |   50|      1|	(G_TYPE_CHECK_CLASS_CAST((klass), \
  |  |  ------------------
  |  |  |  |  553|      1|#define G_TYPE_CHECK_CLASS_CAST(g_class, g_type, c_type)        (_G_TYPE_CCC ((g_class), (g_type), c_type))
  |  |  |  |  ------------------
  |  |  |  |  |  | 2306|      1|#  define _G_TYPE_CCC(cp, gt, ct)       ((ct*) cp)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   51|      1|		VIPS_TYPE_INTERPOLATE, VipsInterpolateClass))
  ------------------
  376|       |
  377|      1|	object_class->nickname = "vsqbs";
  378|      1|	object_class->description = _("B-Splines with antialiasing smoothing");
  ------------------
  |  |   30|      1|#define  _(String) ((char *) g_dgettext (GETTEXT_PACKAGE, String))
  |  |  ------------------
  |  |  |  |   10|      1|#define GETTEXT_PACKAGE "vips8.17"
  |  |  ------------------
  ------------------
  379|       |
  380|      1|	interpolate_class->interpolate = vips_interpolate_vsqbs_interpolate;
  381|      1|	interpolate_class->window_size = 4;
  382|      1|	interpolate_class->window_offset = 1;
  383|      1|}

