Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit aba260f

Browse files
authored
Fix crash if zooming out near frame edge (alievk#319)
Added clamping of offsets so that lrud always lies within image boundaries. The adjusted offsets are returned to main so that it is no longer necessary to test if an offset increase/decrease should be allowed.
1 parent 98945b2 commit aba260f

File tree

2 files changed

+19
-19
lines changed

2 files changed

+19
-19
lines changed

afy/cam_fomm.py

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -275,8 +275,8 @@ def select_camera(config):
275275
frame = frame[..., ::-1]
276276
frame_orig = frame.copy()
277277

278-
frame, lrudwh = crop(frame, p=frame_proportion, offset_x=frame_offset_x, offset_y=frame_offset_y)
279-
frame_lrudwh = lrudwh
278+
frame, (frame_offset_x, frame_offset_y) = crop(frame, p=frame_proportion, offset_x=frame_offset_x, offset_y=frame_offset_y)
279+
280280
frame = resize(frame, (IMG_SIZE, IMG_SIZE))[..., :3]
281281

282282
if find_keyframe:
@@ -323,29 +323,21 @@ def select_camera(config):
323323
frame_proportion += 0.05
324324
frame_proportion = min(frame_proportion, 1.0)
325325
elif key == ord('H'):
326-
if frame_lrudwh[0] - 1 > 0:
327-
frame_offset_x -= 1
326+
frame_offset_x -= 1
328327
elif key == ord('h'):
329-
if frame_lrudwh[0] - 5 > 0:
330-
frame_offset_x -= 5
328+
frame_offset_x -= 5
331329
elif key == ord('K'):
332-
if frame_lrudwh[1] + 1 < frame_lrudwh[4]:
333-
frame_offset_x += 1
330+
frame_offset_x += 1
334331
elif key == ord('k'):
335-
if frame_lrudwh[1] + 5 < frame_lrudwh[4]:
336-
frame_offset_x += 5
332+
frame_offset_x += 5
337333
elif key == ord('J'):
338-
if frame_lrudwh[2] - 1 > 0:
339-
frame_offset_y -= 1
334+
frame_offset_y -= 1
340335
elif key == ord('j'):
341-
if frame_lrudwh[2] - 5 > 0:
342-
frame_offset_y -= 5
336+
frame_offset_y -= 5
343337
elif key == ord('U'):
344-
if frame_lrudwh[3] + 1 < frame_lrudwh[5]:
345-
frame_offset_y += 1
338+
frame_offset_y += 1
346339
elif key == ord('u'):
347-
if frame_lrudwh[3] + 5 < frame_lrudwh[5]:
348-
frame_offset_y += 5
340+
frame_offset_y += 5
349341
elif key == ord('Z'):
350342
frame_offset_x = 0
351343
frame_offset_y = 0

afy/utils.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,19 +114,27 @@ def __repr__(self):
114114
return self.__str__()
115115

116116

117+
def clamp(value, min_value, max_value):
118+
return max(min(value, max_value), min_value)
119+
120+
117121
def crop(img, p=0.7, offset_x=0, offset_y=0):
118122
h, w = img.shape[:2]
119123
x = int(min(w, h) * p)
120124
l = (w - x) // 2
121125
r = w - l
122126
u = (h - x) // 2
123127
d = h - u
128+
129+
offset_x = clamp(offset_x, -l, w - r)
130+
offset_y = clamp(offset_y, -u, h - d)
131+
124132
l += offset_x
125133
r += offset_x
126134
u += offset_y
127135
d += offset_y
128136

129-
return img[u:d, l:r], (l,r,u,d,w,h)
137+
return img[u:d, l:r], (offset_x, offset_y)
130138

131139

132140
def pad_img(img, target_size, default_pad=0):

0 commit comments

Comments
 (0)