@@ -164,19 +164,23 @@ static mp_obj_t capture_frame(webcam_obj_t *self) {
164164 return result ;
165165}
166166
167- static mp_obj_t webcam_init (mp_obj_t type_in , mp_obj_t device_obj ) {
167+ static mp_obj_t webcam_make_new (const mp_obj_type_t * type , size_t n_args , size_t n_kw , const mp_obj_t * args ) {
168+ mp_arg_check_num (n_args , n_kw , 0 , 1 , false);
169+ const char * device = "/dev/video0" ; // Default device
170+ if (n_args == 1 ) {
171+ device = mp_obj_str_get_str (args [0 ]);
172+ }
173+
168174 webcam_obj_t * self = m_new_obj (webcam_obj_t );
169- self -> base .type = MP_OBJ_TO_PTR ( type_in ) ;
175+ self -> base .type = type ;
170176 self -> fd = -1 ;
171177
172- const char * device = mp_obj_str_get_str (device_obj );
173178 if (init_webcam (self , device ) < 0 ) {
174179 mp_raise_OSError (MP_EIO );
175180 }
176181
177182 return MP_OBJ_FROM_PTR (self );
178183}
179- MP_DEFINE_CONST_FUN_OBJ_2 (webcam_init_obj , webcam_init );
180184
181185static mp_obj_t webcam_deinit (mp_obj_t self_in ) {
182186 webcam_obj_t * self = MP_OBJ_TO_PTR (self_in );
@@ -198,19 +202,18 @@ static const mp_rom_map_elem_t webcam_locals_dict_table[] = {
198202 { MP_ROM_QSTR (MP_QSTR_deinit ), MP_ROM_PTR (& webcam_deinit_obj ) },
199203 { MP_ROM_QSTR (MP_QSTR_capture_frame ), MP_ROM_PTR (& webcam_capture_frame_obj ) },
200204};
201- MP_DEFINE_CONST_DICT (webcam_locals_dict , webcam_locals_dict_table );
205+ static MP_DEFINE_CONST_DICT (webcam_locals_dict , webcam_locals_dict_table ) ;
202206
203207static const mp_obj_type_t webcam_type = {
204208 { & mp_type_type },
205209 .name = MP_QSTR_Webcam ,
210+ .make_new = webcam_make_new ,
211+ .locals_dict = (mp_obj_dict_t * )& webcam_locals_dict ,
206212};
207213
208214static const mp_rom_map_elem_t mp_module_webcam_globals_table [] = {
209215 { MP_ROM_QSTR (MP_QSTR___name__ ), MP_ROM_QSTR (MP_QSTR_webcam ) },
210216 { MP_ROM_QSTR (MP_QSTR_Webcam ), MP_ROM_PTR (& webcam_type ) },
211- { MP_ROM_QSTR (MP_QSTR_init ), MP_ROM_PTR (& webcam_init_obj ) },
212- { MP_ROM_QSTR (MP_QSTR_capture_frame ), MP_ROM_PTR (& webcam_capture_frame_obj ) },
213- { MP_ROM_QSTR (MP_QSTR_deinit ), MP_ROM_PTR (& webcam_deinit_obj ) },
214217};
215218static MP_DEFINE_CONST_DICT (mp_module_webcam_globals , mp_module_webcam_globals_table ) ;
216219
0 commit comments