Skip to content

Commit 8d442e0

Browse files
authored
Merge pull request #6 from Kronos2308/main
open Browser after end or exit a video
2 parents 8d46468 + 54d9540 commit 8d442e0

File tree

1 file changed

+106
-105
lines changed

1 file changed

+106
-105
lines changed

flipper_project/video_player.c

+106-105
Original file line numberDiff line numberDiff line change
@@ -84,148 +84,149 @@ int32_t video_player_app(void* p) {
8484
UNUSED(st);
8585
furi_record_close(RECORD_STORAGE);
8686

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 {
10393
player->quit = true;
94+
exit = true;
10495
//goto end;
10596
}
10697

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)) {
12898
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;
130126
}
131127

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;
134135

135-
//view_dispatcher_switch_to_view(player->view_dispatcher, VIEW_PLAYER);
136+
//view_dispatcher_switch_to_view(player->view_dispatcher, VIEW_PLAYER);
136137

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);
139140

140-
view_dispatcher_free(player->view_dispatcher);
141+
view_dispatcher_free(player->view_dispatcher);
141142

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);
144145

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);
148149

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);
151152

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+
}
157158

158-
player->playing = true;
159+
player->playing = true;
159160

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);
162163

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);
167168

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+
}
172173

173-
if(event.input.key == InputKeyOk) {
174-
player->playing = !player->playing;
175-
}
174+
if(event.input.key == InputKeyOk) {
175+
player->playing = !player->playing;
176+
}
176177

177-
if(player->playing) {
178-
player_start();
179-
}
178+
if(player->playing) {
179+
player_start();
180+
}
180181

181-
else {
182-
player_stop();
182+
else {
183+
player_stop();
184+
}
183185
}
184-
}
185186

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);
192193

193-
player->frames_played++;
194+
player->frames_played++;
194195

195-
canvas_reset(player->canvas);
196+
canvas_reset(player->canvas);
196197

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);
199200

200-
canvas_commit(player->canvas);
201-
}
201+
canvas_commit(player->canvas);
202+
}
202203

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];
205206

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);
208209

209-
player->frames_played++;
210+
player->frames_played++;
210211

211-
canvas_reset(player->canvas);
212+
canvas_reset(player->canvas);
212213

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);
215216

216-
canvas_commit(player->canvas);
217-
}
217+
canvas_commit(player->canvas);
218+
}
218219

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+
}
222223

223-
furi_thread_yield();
224+
furi_thread_yield();
225+
}
224226
}
227+
deinit_player(player);
228+
player_deinit_hardware();
225229
}
226230

227-
deinit_player(player);
228-
player_deinit_hardware();
229-
230231
return 0;
231232
}

0 commit comments

Comments
 (0)