| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #include "init_deinit.h"
- PlayerView* player_view_alloc(VideoPlayerApp* player) {
- PlayerView* player_view = malloc(sizeof(PlayerView));
- player_view->view = view_alloc();
- player_view->context = player;
- view_set_context(player_view->view, player_view);
- view_allocate_model(player_view->view, ViewModelTypeLocking, sizeof(PlayerViewModel));
- view_set_draw_callback(player_view->view, draw_callback);
- view_set_input_callback(player_view->view, input_callback);
- return player_view;
- }
- VideoPlayerApp* init_player() {
- VideoPlayerApp* player = malloc(sizeof(VideoPlayerApp));
- memset(player, 0, sizeof(VideoPlayerApp));
- // Очередь событий на 8 элементов размера VideoPlayerEvent
- player->event_queue = furi_message_queue_alloc(8, sizeof(VideoPlayerEvent));
- player->gui = furi_record_open(RECORD_GUI);
- player->view_dispatcher = view_dispatcher_alloc();
- player->player_view = player_view_alloc(player);
- view_dispatcher_add_view(player->view_dispatcher, VIEW_PLAYER, player->player_view->view);
- view_dispatcher_attach_to_gui(
- player->view_dispatcher, player->gui, ViewDispatcherTypeFullscreen);
- with_view_model(
- player->player_view->view, PlayerViewModel * model, { model->player = player; }, true);
- player->storage = furi_record_open(RECORD_STORAGE);
- player->stream = file_stream_alloc(player->storage);
- player->notification = furi_record_open(RECORD_NOTIFICATION);
- notification_message(player->notification, &sequence_display_backlight_enforce_on);
- return player;
- }
- void deinit_player(VideoPlayerApp* player) {
- notification_message(player->notification, &sequence_display_backlight_enforce_auto);
- furi_record_close(RECORD_NOTIFICATION);
- // Специальная очистка памяти, занимаемой очередью
- furi_message_queue_free(player->event_queue);
- /*view_dispatcher_remove_view(player->view_dispatcher, VIEW_PLAYER);
- view_dispatcher_free(player->view_dispatcher);
- player_view_free(player->player_view);
- furi_record_close(RECORD_GUI);*/
- stream_free(player->stream);
- furi_record_close(RECORD_STORAGE);
- if(player->buffer) {
- free(player->buffer);
- }
- furi_pubsub_unsubscribe(player->input, player->input_subscription);
- player->canvas = NULL;
- gui_direct_draw_release(player->gui);
- furi_record_close(RECORD_GUI);
- furi_record_close(RECORD_INPUT_EVENTS);
- free(player);
- }
|