aboutsummaryrefslogtreecommitdiff
path: root/noao/imred/quadred/src/quad/qguser.x
blob: 5d4bf349b2320100693d077685fa16d9bf7aadde (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
include "quadgeom.h"

# QGUSER -- modify open quadgeom structure for user specified trim and
# overscan.

procedure qguser (qg, xtrim1, xtrim2, ytrim1, ytrim2, xskip1, xskip2)

pointer	qg		# Pointer to open quadgeom structure.
int	xtrim1		# Number of pixels to trim at right.
int	xtrim2		# Number of pixels to trim at left.
int	ytrim1		# Number of pixels to trim at bottom.
int	ytrim2		# Number of pixels to trim at top.
int	xskip1		# Number of pixels to skip at start of overscan in X.
int	xskip2		# Number of pixels to skip at end   of overscan in X.

int	amp, x, y
int	bx1, bx2, by1, by2

begin

	# Modify overscan margins
	Do amp = 1, QG_NAMPS (qg) {

	    switch (QG_AMPTYPE(qg, amp)) {
	    case AMP11, AMP21:  # Left hand side
		if (IS_INDEFI (xskip1)) {
		    bx1 = QG_BX1(qg, amp)
		} else {
		    bx1 = QG_DX2(qg, amp) + xskip1 + 1
		}

		if (IS_INDEFI (xskip2)) {
		    bx2 = QG_BX2(qg, amp)
		} else {
		    bx2 = QG_AX2(qg, amp) - QG_AX1(qg, amp) - xskip2 + 1
		}

	    case AMP12, AMP22:  # Right hand side
		if (IS_INDEFI (xskip2)) {
		    bx1 = QG_BX1(qg, amp)
		} else {
		    bx1 = 1 + xskip2 
		}
		if (IS_INDEFI (xskip1)) {
		    bx2 = QG_BX2(qg, amp)
		} else {
		    bx2 = QG_DX1(qg, amp) - xskip1 - 1
		}

	    }
	    by1 = QG_BY1(qg, amp)
	    by2 = QG_BY2(qg, amp)

	    if (bx1 > bx2) {
		bx1 = 0
		bx2 = 0
		by1 = 0
		by2 = 0
	    }

	    QG_BX1(qg, amp) = bx1
	    QG_BX2(qg, amp) = bx2
	    QG_BY1(qg, amp) = by1
	    QG_BY2(qg, amp) = by2

	}

	# Modify trim margins

	# Set left hand edge
	if (! IS_INDEFI(xtrim1)) {
	    do y = 1, QG_NAMPSY(qg) {
		do x = 1, QG_NAMPSX(qg) {

		    amp = QG_AMP(qg, x, y)
		    if (QG_PHANTOM(qg, amp) == NO) {
			QG_TX1(qg, amp) = QG_DX1(qg, amp) + xtrim1
			break
		    }
		}
	    }
	}

	# Set right hand edge
	if (! IS_INDEFI(xtrim2)) {
	    do y = 1, QG_NAMPSY(qg) {
		do x = QG_NAMPSX(qg), 1, -1 {

		    amp = QG_AMP(qg, x, y)
		    if (QG_PHANTOM(qg, amp) == NO) {
			QG_TX2(qg, amp) = QG_DX2(qg, amp) - xtrim2
			break
		    }
		}
	    }
	}


	# Set lower edge
	if (! IS_INDEFI(ytrim1)) {
	    do x = 1, QG_NAMPSX(qg) {
		do y = 1, QG_NAMPSY(qg) {

		    amp = QG_AMP(qg, x, y)
		    if (QG_PHANTOM(qg, amp) == NO) {
			QG_TY1(qg, amp) = QG_DY1(qg, amp) + ytrim1
			break
		    }
		}
	    }
	}

	# Set upper edge
	if (! IS_INDEFI(ytrim2)) {
	    do x = 1, QG_NAMPSX(qg) {
		do y = QG_NAMPSY(qg), 1, -1 {

		    amp = QG_AMP(qg, x, y)
		    if (QG_PHANTOM(qg, amp) == NO) {
			QG_TY2(qg, amp) = QG_DY2(qg, amp) - ytrim2
			break
		    }
		}
	    }
	}
end