@@ -84,148 +84,149 @@ int32_t video_player_app(void* p) {
84
84
UNUSED (st );
85
85
furi_record_close (RECORD_STORAGE );
86
86
87
- VideoPlayerApp * player = init_player ();
88
-
89
- if (open_file_stream (player -> stream )) {
90
- }
91
-
92
- else {
93
- player -> quit = true;
94
- //goto end;
95
- }
96
-
97
- if (!(player -> quit )) {
98
- char header [8 ];
99
- header [7 ] = '\0' ;
100
- stream_read (player -> stream , (uint8_t * )header , 7 );
101
-
102
- if (strcmp (header , "BND!VID" ) != 0 ) {
87
+ bool exit = false;
88
+ while (!exit ) {
89
+ VideoPlayerApp * player = init_player ();
90
+ if (open_file_stream (player -> stream )) {
91
+ player -> quit = false;
92
+ } else {
103
93
player -> quit = true;
94
+ exit = true;
104
95
//goto end;
105
96
}
106
97
107
- stream_read (player -> stream , (uint8_t * )& player -> version , sizeof (player -> version ));
108
- stream_read (player -> stream , (uint8_t * )& player -> num_frames , sizeof (player -> num_frames ));
109
- stream_read (
110
- player -> stream , (uint8_t * )& player -> audio_chunk_size , sizeof (player -> audio_chunk_size ));
111
- stream_read (player -> stream , (uint8_t * )& player -> sample_rate , sizeof (player -> sample_rate ));
112
- stream_read (player -> stream , & player -> height , sizeof (player -> height ));
113
- stream_read (player -> stream , & player -> width , sizeof (player -> width ));
114
-
115
- player -> buffer = (uint8_t * )malloc (
116
- player -> audio_chunk_size * 2 + (uint32_t )player -> height * (uint32_t )player -> width / 8 );
117
- memset (
118
- player -> buffer ,
119
- 0 ,
120
- player -> audio_chunk_size * 2 + (uint32_t )player -> height * (uint32_t )player -> width / 8 );
121
-
122
- player -> image_buffer_length = (uint32_t )player -> height * (uint32_t )player -> width / 8 ;
123
- player -> audio_buffer = (uint8_t * )& player -> buffer [player -> image_buffer_length ];
124
- player -> image_buffer = player -> buffer ;
125
- }
126
-
127
- if (furi_hal_speaker_acquire (1000 )) {
128
98
if (!(player -> quit )) {
129
- player_init_hardware_and_play (player );
99
+ char header [8 ];
100
+ header [7 ] = '\0' ;
101
+ stream_read (player -> stream , (uint8_t * )header , 7 );
102
+
103
+ if (strcmp (header , "BND!VID" ) != 0 ) {
104
+ player -> quit = true;
105
+ //goto end;
106
+ }
107
+
108
+ stream_read (player -> stream , (uint8_t * )& player -> version , sizeof (player -> version ));
109
+ stream_read (player -> stream , (uint8_t * )& player -> num_frames , sizeof (player -> num_frames ));
110
+ stream_read (
111
+ player -> stream , (uint8_t * )& player -> audio_chunk_size , sizeof (player -> audio_chunk_size ));
112
+ stream_read (player -> stream , (uint8_t * )& player -> sample_rate , sizeof (player -> sample_rate ));
113
+ stream_read (player -> stream , & player -> height , sizeof (player -> height ));
114
+ stream_read (player -> stream , & player -> width , sizeof (player -> width ));
115
+
116
+ player -> buffer = (uint8_t * )malloc (
117
+ player -> audio_chunk_size * 2 + (uint32_t )player -> height * (uint32_t )player -> width / 8 );
118
+ memset (
119
+ player -> buffer ,
120
+ 0 ,
121
+ player -> audio_chunk_size * 2 + (uint32_t )player -> height * (uint32_t )player -> width / 8 );
122
+
123
+ player -> image_buffer_length = (uint32_t )player -> height * (uint32_t )player -> width / 8 ;
124
+ player -> audio_buffer = (uint8_t * )& player -> buffer [player -> image_buffer_length ];
125
+ player -> image_buffer = player -> buffer ;
130
126
}
131
127
132
- // Текущее событие типа кастомного типа VideoPlayerEvent
133
- VideoPlayerEvent event ;
128
+ if (furi_hal_speaker_acquire (1000 )) {
129
+ if (!(player -> quit )) {
130
+ player_init_hardware_and_play (player );
131
+ }
132
+
133
+ // Текущее событие типа кастомного типа VideoPlayerEvent
134
+ VideoPlayerEvent event ;
134
135
135
- //view_dispatcher_switch_to_view(player->view_dispatcher, VIEW_PLAYER);
136
+ //view_dispatcher_switch_to_view(player->view_dispatcher, VIEW_PLAYER);
136
137
137
- //switch from view dispatcher to direct draw
138
- view_dispatcher_remove_view (player -> view_dispatcher , VIEW_PLAYER );
138
+ //switch from view dispatcher to direct draw
139
+ view_dispatcher_remove_view (player -> view_dispatcher , VIEW_PLAYER );
139
140
140
- view_dispatcher_free (player -> view_dispatcher );
141
+ view_dispatcher_free (player -> view_dispatcher );
141
142
142
- player_view_free (player -> player_view );
143
- furi_record_close (RECORD_GUI );
143
+ player_view_free (player -> player_view );
144
+ furi_record_close (RECORD_GUI );
144
145
145
- player -> input = furi_record_open (RECORD_INPUT_EVENTS );
146
- player -> gui = furi_record_open (RECORD_GUI );
147
- player -> canvas = gui_direct_draw_acquire (player -> gui );
146
+ player -> input = furi_record_open (RECORD_INPUT_EVENTS );
147
+ player -> gui = furi_record_open (RECORD_GUI );
148
+ player -> canvas = gui_direct_draw_acquire (player -> gui );
148
149
149
- player -> input_subscription =
150
- furi_pubsub_subscribe (player -> input , direct_input_callback , player );
150
+ player -> input_subscription =
151
+ furi_pubsub_subscribe (player -> input , direct_input_callback , player );
151
152
152
- if (player -> quit ) {
153
- deinit_player (player );
154
- player_deinit_hardware ();
155
- return 0 ;
156
- }
153
+ if (player -> quit ) {
154
+ deinit_player (player );
155
+ player_deinit_hardware ();
156
+ return 0 ;
157
+ }
157
158
158
- player -> playing = true;
159
+ player -> playing = true;
159
160
160
- //vTaskPrioritySet(furi_thread_get_current_id(), FuriThreadPriorityIdle);
161
- furi_thread_set_current_priority (FuriThreadPriorityIdle );
161
+ //vTaskPrioritySet(furi_thread_get_current_id(), FuriThreadPriorityIdle);
162
+ furi_thread_set_current_priority (FuriThreadPriorityIdle );
162
163
163
- while (!(player -> quit )) {
164
- furi_check (
165
- furi_message_queue_get (player -> event_queue , & event , FuriWaitForever ) ==
166
- FuriStatusOk );
164
+ while (!(player -> quit )) {
165
+ furi_check (
166
+ furi_message_queue_get (player -> event_queue , & event , FuriWaitForever ) ==
167
+ FuriStatusOk );
167
168
168
- if (event .type == EventTypeInput ) {
169
- if (event .input .key == InputKeyBack ) {
170
- player -> quit = true;
171
- }
169
+ if (event .type == EventTypeInput ) {
170
+ if (event .input .key == InputKeyBack ) {
171
+ player -> quit = true;
172
+ }
172
173
173
- if (event .input .key == InputKeyOk ) {
174
- player -> playing = !player -> playing ;
175
- }
174
+ if (event .input .key == InputKeyOk ) {
175
+ player -> playing = !player -> playing ;
176
+ }
176
177
177
- if (player -> playing ) {
178
- player_start ();
179
- }
178
+ if (player -> playing ) {
179
+ player_start ();
180
+ }
180
181
181
- else {
182
- player_stop ();
182
+ else {
183
+ player_stop ();
184
+ }
183
185
}
184
- }
185
186
186
- if (event .type == EventType1stHalf ) {
187
- //reading image+sound data in one pass since in this case image buffer and first part of audio buffer are continuous chunk of memory; should probably improve FPS
188
- stream_read (
189
- player -> stream ,
190
- player -> image_buffer ,
191
- player -> image_buffer_length + player -> audio_chunk_size );
187
+ if (event .type == EventType1stHalf ) {
188
+ //reading image+sound data in one pass since in this case image buffer and first part of audio buffer are continuous chunk of memory; should probably improve FPS
189
+ stream_read (
190
+ player -> stream ,
191
+ player -> image_buffer ,
192
+ player -> image_buffer_length + player -> audio_chunk_size );
192
193
193
- player -> frames_played ++ ;
194
+ player -> frames_played ++ ;
194
195
195
- canvas_reset (player -> canvas );
196
+ canvas_reset (player -> canvas );
196
197
197
- canvas_draw_xbm (
198
- player -> canvas , 0 , 0 , player -> width , player -> height , player -> image_buffer );
198
+ canvas_draw_xbm (
199
+ player -> canvas , 0 , 0 , player -> width , player -> height , player -> image_buffer );
199
200
200
- canvas_commit (player -> canvas );
201
- }
201
+ canvas_commit (player -> canvas );
202
+ }
202
203
203
- if (event .type == EventType2ndHalf ) {
204
- uint8_t * audio_buffer = & player -> audio_buffer [player -> audio_chunk_size ];
204
+ if (event .type == EventType2ndHalf ) {
205
+ uint8_t * audio_buffer = & player -> audio_buffer [player -> audio_chunk_size ];
205
206
206
- stream_read (player -> stream , player -> image_buffer , player -> image_buffer_length );
207
- stream_read (player -> stream , audio_buffer , player -> audio_chunk_size );
207
+ stream_read (player -> stream , player -> image_buffer , player -> image_buffer_length );
208
+ stream_read (player -> stream , audio_buffer , player -> audio_chunk_size );
208
209
209
- player -> frames_played ++ ;
210
+ player -> frames_played ++ ;
210
211
211
- canvas_reset (player -> canvas );
212
+ canvas_reset (player -> canvas );
212
213
213
- canvas_draw_xbm (
214
- player -> canvas , 0 , 0 , player -> width , player -> height , player -> image_buffer );
214
+ canvas_draw_xbm (
215
+ player -> canvas , 0 , 0 , player -> width , player -> height , player -> image_buffer );
215
216
216
- canvas_commit (player -> canvas );
217
- }
217
+ canvas_commit (player -> canvas );
218
+ }
218
219
219
- if (player -> frames_played == player -> num_frames ) {
220
- player -> quit = true;
221
- }
220
+ if (player -> frames_played == player -> num_frames ) {
221
+ player -> quit = true;
222
+ }
222
223
223
- furi_thread_yield ();
224
+ furi_thread_yield ();
225
+ }
224
226
}
227
+ deinit_player (player );
228
+ player_deinit_hardware ();
225
229
}
226
230
227
- deinit_player (player );
228
- player_deinit_hardware ();
229
-
230
231
return 0 ;
231
232
}
0 commit comments