Example #1
0
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;
}
Example #2
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       
}