1717#define OUTPUT_WIDTH 240
1818#define OUTPUT_HEIGHT 240
1919
20+ // Forward declaration of the webcam type
21+ static const mp_obj_type_t webcam_type ;
22+
2023typedef struct _webcam_obj_t {
2124 mp_obj_base_t base ;
2225 int fd ;
@@ -164,15 +167,15 @@ static mp_obj_t capture_frame(webcam_obj_t *self) {
164167 return result ;
165168}
166169
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);
170+ static mp_obj_t webcam_init ( size_t n_args , const mp_obj_t * args ) {
171+ mp_arg_check_num (n_args , 0 , 0 , 1 , false);
169172 const char * device = "/dev/video0" ; // Default device
170173 if (n_args == 1 ) {
171174 device = mp_obj_str_get_str (args [0 ]);
172175 }
173176
174177 webcam_obj_t * self = m_new_obj (webcam_obj_t );
175- self -> base .type = type ;
178+ self -> base .type = & webcam_type ;
176179 self -> fd = -1 ;
177180
178181 if (init_webcam (self , device ) < 0 ) {
@@ -181,6 +184,7 @@ static mp_obj_t webcam_make_new(const mp_obj_type_t *type, size_t n_args, size_t
181184
182185 return MP_OBJ_FROM_PTR (self );
183186}
187+ MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (webcam_init_obj , 0 , 1 , webcam_init );
184188
185189static mp_obj_t webcam_deinit (mp_obj_t self_in ) {
186190 webcam_obj_t * self = MP_OBJ_TO_PTR (self_in );
@@ -198,22 +202,17 @@ static mp_obj_t webcam_capture_frame(mp_obj_t self_in) {
198202}
199203MP_DEFINE_CONST_FUN_OBJ_1 (webcam_capture_frame_obj , webcam_capture_frame );
200204
201- static const mp_rom_map_elem_t webcam_locals_dict_table [] = {
202- { MP_ROM_QSTR (MP_QSTR_deinit ), MP_ROM_PTR (& webcam_deinit_obj ) },
203- { MP_ROM_QSTR (MP_QSTR_capture_frame ), MP_ROM_PTR (& webcam_capture_frame_obj ) },
204- };
205- static MP_DEFINE_CONST_DICT (webcam_locals_dict , webcam_locals_dict_table ) ;
206-
207205static const mp_obj_type_t webcam_type = {
208206 { & mp_type_type },
209207 .name = MP_QSTR_Webcam ,
210- .make_new = webcam_make_new ,
211- .locals_dict = (mp_obj_dict_t * )& webcam_locals_dict ,
212208};
213209
214210static const mp_rom_map_elem_t mp_module_webcam_globals_table [] = {
215211 { MP_ROM_QSTR (MP_QSTR___name__ ), MP_ROM_QSTR (MP_QSTR_webcam ) },
216212 { MP_ROM_QSTR (MP_QSTR_Webcam ), MP_ROM_PTR (& webcam_type ) },
213+ { MP_ROM_QSTR (MP_QSTR_init ), MP_ROM_PTR (& webcam_init_obj ) },
214+ { MP_ROM_QSTR (MP_QSTR_capture_frame ), MP_ROM_PTR (& webcam_capture_frame_obj ) },
215+ { MP_ROM_QSTR (MP_QSTR_deinit ), MP_ROM_PTR (& webcam_deinit_obj ) },
217216};
218217static MP_DEFINE_CONST_DICT (mp_module_webcam_globals , mp_module_webcam_globals_table ) ;
219218
0 commit comments