@@ -50,6 +50,7 @@ def __init__(self, **kwargs):
50
50
self .enable_zoom_gesture = False
51
51
self .enable_focus_gesture = False
52
52
self .block_pipeline = True
53
+ self ._fbo = None
53
54
54
55
##############################
55
56
# Lifecycle events
@@ -415,7 +416,7 @@ def _create_pipeline(self, texture_size, rotation):
415
416
416
417
def block_and_clear_pipeline (self ):
417
418
self .block_pipeline = True
418
- if self ._camera and self ._fbo .texture :
419
+ if self ._camera and self ._fbo and self . _fbo .texture :
419
420
tex_size = self ._fbo .texture .size
420
421
buf = bytes ([255 ] * tex_size [0 ] * tex_size [1 ] * 4 )
421
422
self ._fbo .texture .blit_buffer (buf , colorfmt = 'rgba' ,
@@ -425,7 +426,8 @@ def block_and_clear_pipeline(self):
425
426
426
427
def _schedule_pipeline (self ):
427
428
self ._deschedule_pipeline ()
428
- if self ._camera and self ._camera_texture and self ._fbo .texture :
429
+ if self ._camera and self ._camera_texture and self ._fbo and \
430
+ self ._fbo .texture :
429
431
self ._set_surface_provider (True )
430
432
self .block_pipeline = False
431
433
self ._update_ev = Clock .schedule_interval (self ._update_pipeline ,
@@ -438,7 +440,7 @@ def _deschedule_pipeline(self):
438
440
self ._update_ev = None
439
441
440
442
def _update_pipeline (self , dt ):
441
- if self ._camera .imageReady () and not self .block_pipeline :
443
+ if self ._camera .imageReady () and self . _fbo and not self .block_pipeline :
442
444
self ._camera_texture_cb .ask_update ()
443
445
self ._fbo .draw ()
444
446
self ._analyze_texture ()
@@ -452,23 +454,24 @@ def _set_surface_provider(self, enable):
452
454
# Run on mainthread because required by Kivy canvas
453
455
@mainthread
454
456
def _update_canvas (self ):
455
- tex = self ._fbo .texture .get_region (* self .crop )
457
+ if self ._fbo :
458
+ tex = self ._fbo .texture .get_region (* self .crop )
456
459
457
- # moved from create_fbo
458
- if self .facing == 'front' :
459
- view_size = (- self .view_size [0 ], self .view_size [1 ])
460
- view_pos = (self .view_pos [0 ] + self .view_size [0 ],
461
- self .view_pos [1 ])
462
- else :
463
- view_size = self .view_size
464
- view_pos = self .view_pos
460
+ # moved from create_fbo
461
+ if self .facing == 'front' :
462
+ view_size = (- self .view_size [0 ], self .view_size [1 ])
463
+ view_pos = (self .view_pos [0 ] + self .view_size [0 ],
464
+ self .view_pos [1 ])
465
+ else :
466
+ view_size = self .view_size
467
+ view_pos = self .view_pos
465
468
466
- self .canvas .clear ()
467
- with self .canvas :
468
- Color (1 ,1 ,1 ,1 )
469
- Rectangle (texture = tex , size = view_size , pos = view_pos )
470
- if self .canvas_callback :
471
- self .canvas_callback (tex , view_size , view_pos )
469
+ self .canvas .clear ()
470
+ with self .canvas :
471
+ Color (1 ,1 ,1 ,1 )
472
+ Rectangle (texture = tex , size = view_size , pos = view_pos )
473
+ if self .canvas_callback :
474
+ self .canvas_callback (tex , view_size , view_pos )
472
475
473
476
#######################################
474
477
# Storage Location
@@ -554,7 +557,7 @@ def _filename_callback(self, file_id):
554
557
self .callback (str (file_id ))
555
558
556
559
def _analyze_texture (self ):
557
- if not self .enable_data and self ._analyze_callback :
560
+ if not self .enable_data and self ._fbo and self . _analyze_callback :
558
561
tex = self ._fbo .texture .get_region (* self .crop )
559
562
self ._analyze_callback (tex , self .view_pos ,
560
563
self .tscale , self .facing == 'front' )
0 commit comments