int32_t st_changeOutputMode(videoOutput_t *p_videoOutput, const char *newOutputFormat) { uint32_t old_height; uint32_t new_height; uint32_t len; if(!p_videoOutput || !newOutputFormat) return -1; old_height = stHelper_getFormatHeight(p_videoOutput->currentFormat); new_height = stHelper_getFormatHeight(newOutputFormat); if (old_height != new_height) { gfx_stopEventThread(); gfx_terminate(); stHelper_sendToElcd("deinitfb"); st_setVideoFormat(p_videoOutput->name, newOutputFormat); stHelper_sendToElcd("initfb"); stHelper_waitForFBdevice("/dev/fb0"); if(p_videoOutput->isMajor) { if (new_height < 720 && interfaceInfo.screenHeight >= 720) { // Reset graphics mode for small resolutions appControlInfo.outputInfo.graphicsMode[0] = 0; saveAppSettings(); } if (appControlInfo.outputInfo.graphicsMode[0] == 0) { stHelper_setDirectFBMode(stHelper_getFormatWidth(new_height), new_height); } } gfx_init(0, NULL); interface_resize(); gfx_startEventThread(); needRestart = 1; } else { st_setVideoFormat(p_videoOutput->name, newOutputFormat); } len = sizeof(p_videoOutput->currentFormat); strncpy(p_videoOutput->currentFormat, newOutputFormat, len); p_videoOutput->currentFormat[len - 1] = 0; #ifdef ENABLE_FUSION fusion_fakeRestart(); #endif return 0; }
void interface_loop(struct twinterface *twinterface) { /* Main loop, process events until we quit */ while(1) { SDL_Event e; if (SDL_PollEvent(&e)) { /* Handle system events */ if (e.type == SDL_QUIT) { printf("SDL_Quit event have been received\n"); break; } /* Pressing volume up+down close the application */ if(e.type == SDL_KEYDOWN) { if(e.key.keysym.sym == SDLK_VOLUMEUP) { twinterface->volumeup_pressed = 1; printf("Volume up key have been pressed\n"); #ifdef __ANDROID__ __android_log_print(ANDROID_LOG_DEBUG, "interface.c", "Volume up key have been pressed\n"); #endif }else if(e.key.keysym.sym == SDLK_VOLUMEDOWN) { if(twinterface->volumeup_pressed) { printf("Volume up & down keys have been pressed\n"); #ifdef __ANDROID__ __android_log_print(ANDROID_LOG_DEBUG, "interface.c", "Volume up & down keys have been pressed\n"); #endif break; } } } else if(e.type == SDL_KEYUP) { if(e.key.keysym.sym == SDLK_VOLUMEUP) { twinterface->volumeup_pressed = 0; printf("Volume up key have been released\n"); #ifdef __ANDROID__ __android_log_print(ANDROID_LOG_DEBUG, "interface.c", "Volume up key have been released\n"); #endif } } if(e.type == SDL_WINDOWEVENT) { if(e.window.event == SDL_WINDOWEVENT_RESIZED) { interface_resize(twinterface, e.window.data1, e.window.data2); } } /* Handle timer events */ if(e.type == EVENT_TICKER) twinterface->redraw = 1; } /* Handle widgets events */ if(twinterface->closeup) if(!fader_handle_events(twinterface->fader, e, twinterface->viewport.h) && !button_handle_events(twinterface->btn_play, e, twinterface) && !button_handle_events(twinterface->btn_reset, e, twinterface) && !button_handle_events(twinterface->btn_reverse, e, twinterface) && !button_handle_events(twinterface->btn_deck, e, twinterface) && !button_handle_events(twinterface->btn_touch_mode, e, twinterface) && !overview_handle_events(twinterface->overview, e)) closeup_handle_events(twinterface->closeup, e); /* draw each widgets to surface if timer said so */ if(twinterface->redraw) { SDL_RenderClear(twinterface->renderer); /* Clear surface with background color*/ SDL_FillRect(twinterface->surface, NULL, interface_palette(twinterface->surface, &background_col)); SDL_UpdateTexture(twinterface->texture, NULL, twinterface->surface->pixels, twinterface->surface->pitch); SDL_RenderCopy(twinterface->renderer, twinterface->texture, NULL, NULL); /* Listen for track change, if change update closeup */ if(twinterface->last_track_length != tracks[twinterface->current_deck].length) { interface_closeup_init(twinterface); interface_overview_init(twinterface); twinterface->last_track_length = tracks[twinterface->current_deck].length; } /* Update text labels */ char buf[128], *s; s = buf; sprintf(s, "%2.2f", tracks[twinterface->current_deck].pitch); //label_set_text(twinterface->label_pitch, s); /* Render widgets on surface */ if(twinterface->closeup) closeup_show(twinterface->closeup); overview_show(twinterface->overview); button_show(twinterface->btn_play); button_show(twinterface->btn_reset); button_show(twinterface->btn_reverse); button_show(twinterface->btn_deck); button_show(twinterface->btn_touch_mode); //label_show(twinterface->label_pitch); fader_show(twinterface->fader); /* Got everything on rendering surface, now Update the drawing image on window screen */ SDL_RenderPresent(twinterface->renderer); twinterface->renderedFrames++; //printf("FPS:%f\n", (twinterface->renderedFrames / (float) SDL_GetTicks())*1000); twinterface->redraw = 0; } } #ifdef __ANDROID__ __android_log_print(ANDROID_LOG_DEBUG, "interface.c", "interface_loop exit\n"); #endif }