⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interface.c

📁 君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图片解码,浏览,电子书,录音,想学ucos,识货的人就下吧 russblock fmradio explore set
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <inttypes.h>#include <mplaylib.h>#include <mplaylib.h>#include <mplaylib.h>#include <sys/types.h>#include "wm/ws.h"#include "wm/wsxdnd.h"#include "interface.h"#include "skin/skin.h"#include "mplayer/gtk/eq.h"#include "mplayer/widgets.h"#include "mplayer/gmplayer.h"#include "mplayer/play.h"#include "access_mpcontext.h"#include "app.h"#include "cfg.h"#include "help_mp.h"#include "get_path.h"#include "libvo/x11_common.h"#include "libvo/video_out.h"#include "libvo/font_load.h"#include "libvo/sub.h"#include "input/input.h"#include "libao2/audio_out.h"#include "mixer.h"#include "libaf/af.h"#include "libaf/equalizer.h"#include "libass/ass.h"#include "libass/ass_mp.h"extern af_cfg_t af_cfg;#ifdef USE_ICONV#include <iconv.h>#endif#include "stream/stream.h"#include "libmpdemux/demuxer.h"#include "libmpdemux/stheader.h"#include "libmpcodecs/dec_video.h"#ifdef USE_DVDREAD#include "stream/stream_dvd.h"#endifint vcd_seek_to_track(void *vcd, int track);#include "m_config.h"#include "m_option.h"guiInterface_t guiIntfStruct;int guiWinID=-1;char * gstrcat( char ** dest,const char * src ){ char * tmp = NULL; if ( !src ) return NULL; if ( *dest )  {   tmp=malloc( strlen( *dest ) + strlen( src ) + 1 );      if ( tmp ) /* TODO: advanced error handling */    {     strcpy( tmp,*dest ); strcat( tmp,src ); free( *dest );     }   }  else   { tmp=malloc( strlen( src ) + 1 ); strcpy( tmp,src ); } *dest=tmp; return tmp;}int gstrcmp( const char * a,const char * b ){ if ( !a && !b ) return 0; if ( !a || !b ) return -1; return strcmp( a,b );}int gstrncmp( const char * a,const char * b,int size ){ if ( !a && !b ) return 0; if ( !a || !b ) return -1; return strncmp( a,b,size );}char * gstrdup( const char * str ){ if ( !str ) return NULL; return strdup( str );}char * gstrchr( char * str,int c ){ if ( !str ) return NULL; return strchr( str,c );}void gfree( void ** p ){ if ( *p == NULL ) return; free( *p ); *p=NULL;}void gset( char ** str, const char * what ){ if ( *str ) { if ( !strstr( *str,what ) ) { gstrcat( str,"," ); gstrcat( str,what ); }}   else gstrcat( str,what );}/** * \brief this actually creates a new list containing only one element... */void gaddlist( char *** list,const char * entry ){ int i; if ( (*list) )  {   for ( i=0;(*list)[i];i++ ) free( (*list)[i] );   free( (*list) );  } (*list)=malloc( 2 * sizeof(char **) ); (*list)[0]=gstrdup( entry ); (*list)[1]=NULL;}/** * \brief this replaces a string starting with search by replace. * If not found, replace is appended. */void greplace(char ***list, const char *search, const char *replace){ int i = 0; int len = (search) ? strlen(search) : 0; if (*list) {   for (i = 0; (*list)[i]; i++) {     if (search && (strncmp((*list)[i], search, len) == 0)) {       free((*list)[i]);       (*list)[i] = gstrdup(replace);       return;     }   }   *list = realloc(*list, (i + 2) * sizeof(char *)); } else   *list = malloc(2 * sizeof(char *)); (*list)[i] = gstrdup(replace); (*list)[i + 1] = NULL;}							    void guiInit( void ){ int i; memset( &guiIntfStruct,0,sizeof( guiIntfStruct ) ); guiIntfStruct.Balance=50.0f; guiIntfStruct.StreamType=-1; memset( &gtkEquChannels,0,sizeof( gtkEquChannels ) );#ifdef HAVE_DXR3 if ( !gtkDXR3Device ) gtkDXR3Device=strdup( "/dev/em8300-0" );#endif if ( stream_cache_size > 0 ) { gtkCacheOn=1; gtkCacheSize=stream_cache_size; } else if ( stream_cache_size == 0 ) gtkCacheOn = 0; if ( autosync && autosync != gtkAutoSync ) { gtkAutoSyncOn=1; gtkAutoSync=autosync; }   #ifdef USE_ASS gtkASS.enabled = ass_enabled; gtkASS.use_margins = ass_use_margins; gtkASS.top_margin = ass_top_margin; gtkASS.bottom_margin = ass_bottom_margin;#endif gtkInit();// --- initialize X  wsXInit( (void *)mDisplay );// --- load skin skinDirInHome=get_path("skins"); skinDirInHome_obsolete=get_path("Skin"); skinMPlayerDir=MPLAYER_DATADIR "/skins"; skinMPlayerDir_obsolete=MPLAYER_DATADIR "/Skin"; mp_msg( MSGT_GPLAYER,MSGL_V,"SKIN dir 1: '%s'\n",skinDirInHome); mp_msg( MSGT_GPLAYER,MSGL_V,"SKIN dir 1 (obsolete): '%s'\n",skinDirInHome_obsolete); mp_msg( MSGT_GPLAYER,MSGL_V,"SKIN dir 2: '%s'\n",skinMPlayerDir); mp_msg( MSGT_GPLAYER,MSGL_V,"SKIN dir 2 (obsolete): '%s'\n",skinMPlayerDir_obsolete); if ( !skinName ) skinName=strdup( "default" ); i = skinRead( skinName ); if ((i == -1) && strcmp(skinName,"default")) {    mp_msg( MSGT_GPLAYER,MSGL_WARN,MSGTR_SKIN_SKINCFG_SelectedSkinNotFound, skinName);    skinName=strdup( "default" );    i = skinRead( skinName ); } switch (i) {   case -1: mp_msg( MSGT_GPLAYER,MSGL_ERR,MSGTR_SKIN_SKINCFG_SkinNotFound,skinName ); exit( 0 );   case -2: mp_msg( MSGT_GPLAYER,MSGL_ERR,MSGTR_SKIN_SKINCFG_SkinCfgReadError,skinName ); exit( 0 );  }// --- initialize windows if ( ( mplDrawBuffer = malloc( appMPlayer.main.Bitmap.ImageSize ) ) == NULL )  {   fprintf( stderr,MSGTR_NEMDB );   exit( 0 );  } if ( gui_save_pos ) {  appMPlayer.main.x = gui_main_pos_x;  appMPlayer.main.y = gui_main_pos_y;  appMPlayer.sub.x = gui_sub_pos_x;  appMPlayer.sub.y = gui_sub_pos_y; }  if (WinID>0)   {    appMPlayer.subWindow.Parent=WinID;    appMPlayer.sub.x=0;    appMPlayer.sub.y=0;   }  if (guiWinID>=0) appMPlayer.mainWindow.Parent=guiWinID;  wsCreateWindow( &appMPlayer.subWindow,  appMPlayer.sub.x,appMPlayer.sub.y,appMPlayer.sub.width,appMPlayer.sub.height,  wsNoBorder,wsShowMouseCursor|wsHandleMouseButton|wsHandleMouseMove,wsShowFrame|wsHideWindow,"MPlayer - Video" ); wsDestroyImage( &appMPlayer.subWindow ); wsCreateImage( &appMPlayer.subWindow,appMPlayer.sub.Bitmap.Width,appMPlayer.sub.Bitmap.Height ); wsXDNDMakeAwareness(&appMPlayer.subWindow); mplMenuInit(); mplPBInit(); vo_setwindow( appMPlayer.subWindow.WindowID, appMPlayer.subWindow.wGC );// i=wsHideFrame|wsMaxSize|wsHideWindow;// if ( appMPlayer.mainDecoration ) i=wsShowFrame|wsMaxSize|wsHideWindow; i=wsShowFrame|wsMaxSize|wsHideWindow; wsCreateWindow( &appMPlayer.mainWindow,  appMPlayer.main.x,appMPlayer.main.y,appMPlayer.main.width,appMPlayer.main.height,  wsNoBorder,wsShowMouseCursor|wsHandleMouseButton|wsHandleMouseMove,i,"MPlayer" ); wsSetShape( &appMPlayer.mainWindow,appMPlayer.main.Mask.Image ); wsXDNDMakeAwareness(&appMPlayer.mainWindow);#ifdef DEBUG  mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] depth on screen: %d\n",wsDepthOnScreen );  mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] parent: 0x%x\n",(int)appMPlayer.mainWindow.WindowID );  mp_msg( MSGT_GPLAYER,MSGL_DBG2,"[main] sub: 0x%x\n",(int)appMPlayer.subWindow.WindowID );#endif appMPlayer.mainWindow.ReDraw=(void *)mplMainDraw; appMPlayer.mainWindow.MouseHandler=mplMainMouseHandle; appMPlayer.mainWindow.KeyHandler=mplMainKeyHandle; appMPlayer.mainWindow.DandDHandler=mplDandDHandler; appMPlayer.subWindow.ReDraw=(void *)mplSubDraw; appMPlayer.subWindow.MouseHandler=mplSubMouseHandle; appMPlayer.subWindow.KeyHandler=mplMainKeyHandle; appMPlayer.subWindow.DandDHandler=mplDandDHandler; wsSetBackgroundRGB( &appMPlayer.subWindow,appMPlayer.sub.R,appMPlayer.sub.G,appMPlayer.sub.B ); wsClearWindow( appMPlayer.subWindow ); if ( appMPlayer.sub.Bitmap.Image ) wsConvert( &appMPlayer.subWindow,appMPlayer.sub.Bitmap.Image,appMPlayer.sub.Bitmap.ImageSize ); btnModify( evSetVolume,guiIntfStruct.Volume ); btnModify( evSetBalance,guiIntfStruct.Balance ); btnModify( evSetMoviePosition,guiIntfStruct.Position ); wsSetIcon( wsDisplay,appMPlayer.mainWindow.WindowID,guiIcon,guiIconMask ); wsSetIcon( wsDisplay,appMPlayer.subWindow.WindowID,guiIcon,guiIconMask );  guiIntfStruct.Playing=0; if ( !appMPlayer.mainDecoration ) wsWindowDecoration( &appMPlayer.mainWindow,0 );  wsVisibleWindow( &appMPlayer.mainWindow,wsShowWindow );#if 0 wsVisibleWindow( &appMPlayer.subWindow,wsShowWindow ); {  XEvent xev;  do { XNextEvent( wsDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != appMPlayer.subWindow.WindowID );  appMPlayer.subWindow.Mapped=wsMapped; } if ( !fullscreen ) fullscreen=gtkLoadFullscreen; if ( fullscreen )  {   mplFullScreen();   btnModify( evFullScreen,btnPressed );  }#else if ( !fullscreen ) fullscreen=gtkLoadFullscreen; if ( gtkShowVideoWindow ) {       wsVisibleWindow( &appMPlayer.subWindow,wsShowWindow );       {        XEvent xev;        do { XNextEvent( wsDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != appMPlayer.subWindow.WindowID );        appMPlayer.subWindow.Mapped=wsMapped;   }       if ( fullscreen )       {        mplFullScreen();        btnModify( evFullScreen,btnPressed );       } } else {       if ( fullscreen )       {         wsVisibleWindow( &appMPlayer.subWindow,wsShowWindow );         {          XEvent xev;          do { XNextEvent( wsDisplay,&xev ); } while ( xev.type != MapNotify || xev.xmap.event != appMPlayer.subWindow.WindowID );          appMPlayer.subWindow.Mapped=wsMapped;         }         wsVisibleWindow( &appMPlayer.subWindow, wsShowWindow );          mplFullScreen();          btnModify( evFullScreen,btnPressed );         } }#endif mplSubRender=1;// --- if ( filename ) mplSetFileName( NULL,filename,STREAMTYPE_FILE ); if ( plCurrent && !filename ) mplSetFileName( plCurrent->path,plCurrent->name,STREAMTYPE_FILE ); if ( subdata ) guiSetFilename( guiIntfStruct.Subtitlename, subdata->filename ); guiLoadFont();}void guiDone( void ){ mplMainRender=0; mp_msg( MSGT_GPLAYER,MSGL_V,"[GUI] done.\n" ); if ( gui_save_pos )  {   gui_main_pos_x=appMPlayer.mainWindow.X; gui_main_pos_y=appMPlayer.mainWindow.Y;   gui_sub_pos_x=appMPlayer.subWindow.X; gui_sub_pos_y=appMPlayer.subWindow.Y;  } #ifdef USE_ASS ass_enabled = gtkASS.enabled; ass_use_margins = gtkASS.use_margins; ass_top_margin = gtkASS.top_margin; ass_bottom_margin = gtkASS.bottom_margin;#endif cfg_write(); wsXDone();}int guiCMDArray[] = {  evLoadPlay,  evLoadSubtitle,  evAbout,  evPlay,  evStop,  evPlayList,  evPreferences,  evFullScreen,  evSkinBrowser };extern int              stream_dump_type;extern int  		vcd_track;extern m_obj_settings_t * vf_settings;void guiLoadFont( void ){#ifdef HAVE_FREETYPE  load_font_ft(vo_image_width, vo_image_height, &vo_font, font_name);#else if ( vo_font )  {   int i;   if ( vo_font->name ) free( vo_font->name );   if ( vo_font->fpath ) free( vo_font->fpath );   for ( i=0;i<16;i++ )    if ( vo_font->pic_a[i] )     {      if ( vo_font->pic_a[i]->bmp ) free( vo_font->pic_a[i]->bmp );      if ( vo_font->pic_a[i]->pal ) free( vo_font->pic_a[i]->pal );     }   for ( i=0;i<16;i++ )    if ( vo_font->pic_b[i] )     {      if ( vo_font->pic_b[i]->bmp ) free( vo_font->pic_b[i]->bmp );      if ( vo_font->pic_b[i]->pal ) free( vo_font->pic_b[i]->pal );     }   free( vo_font ); vo_font=NULL;  } if ( font_name )  {   vo_font=read_font_desc( font_name,font_factor,0 );   if ( !vo_font ) mp_msg( MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadFont,font_name );  }   else   {    font_name=gstrdup( get_path( "font/font.desc" ) );    vo_font=read_font_desc( font_name,font_factor,0 );    if ( !vo_font )     {      gfree( (void **)&font_name ); font_name=gstrdup(MPLAYER_DATADIR "/font/font.desc" );      vo_font=read_font_desc( font_name,font_factor,0 );     }   }#endif}extern mp_osd_obj_t* vo_osd_list;extern char **sub_name;void guiLoadSubtitle( char * name ){ if ( guiIntfStruct.Playing == 0 )  {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -