/** \fn DIA_Preferences \brief Handle preference dialog */ uint8_t DIA_Preferences(void) { uint32_t olddevice,newdevice; uint32_t use_odml=0; uint32_t render; uint32_t useTray=0; uint32_t useMaster=0; uint32_t useAutoIndex=0; uint32_t useSwap=0; uint32_t useNuv=0; uint32_t lavcThreads=0; uint32_t encodePriority=2; uint32_t indexPriority=2; uint32_t playbackPriority=0; uint32_t downmix; uint32_t mpeg_no_limit=0; uint32_t msglevel=2; uint32_t mixer=0; char *alsaDevice=NULL; uint32_t autovbr=0; uint32_t autoindex=0; uint32_t autounpack=0; uint32_t alternate_mp3_tag=1; uint32_t pp_type=3; uint32_t pp_value=5; uint32_t hzd,vzd,dring; uint32_t capsMMX,capsMMXEXT,caps3DNOW,caps3DNOWEXT,capsSSE,capsSSE2,capsSSE3,capsSSSE3,capsAll; uint32_t useGlobalGlyph=0; char *globalGlyphName=NULL; olddevice=newdevice=AVDM_getCurrentDevice(); // Default pp if(!prefs->get(DEFAULT_POSTPROC_TYPE,&pp_type)) pp_type=3; if(!prefs->get(DEFAULT_POSTPROC_VALUE,&pp_value)) pp_value=3; #define DOME(x,y) y=!!(pp_type & x) DOME(1,hzd); DOME(2,vzd); DOME(4,dring); // Cpu caps #define CPU_CAPS(x) if(CpuCaps::myCpuMask & ADM_CPUCAP_##x) caps##x=1; else caps##x=0; if(CpuCaps::myCpuMask==ADM_CPUCAP_ALL) capsAll=1; else capsAll=0; CPU_CAPS(MMX); CPU_CAPS(MMXEXT); CPU_CAPS(3DNOW); CPU_CAPS(3DNOWEXT); CPU_CAPS(SSE); CPU_CAPS(SSE2); CPU_CAPS(SSE3); CPU_CAPS(SSSE3); // Alsa #ifdef ALSA_SUPPORT if( prefs->get(DEVICE_AUDIO_ALSA_DEVICE, &alsaDevice) != RC_OK ) alsaDevice = ADM_strdup("plughw:0,0"); #endif // autovbr prefs->get(FEATURE_AUTO_BUILDMAP,&autovbr); // autoindex prefs->get(FEATURE_AUTO_REBUILDINDEX,&autoindex); // Global glyph prefs->get(FEATURE_GLOBAL_GLYPH_ACTIVE,&useGlobalGlyph); prefs->get(FEATURE_GLOBAL_GLYPH_NAME,&globalGlyphName); // autoindex prefs->get(FEATURE_AUTO_UNPACK,&autounpack); // Alternate mp3 tag (haali) prefs->get(FEATURE_ALTERNATE_MP3_TAG,&alternate_mp3_tag); // Video renderer if(prefs->get(DEVICE_VIDEODEVICE,&render)!=RC_OK) { render=(uint32_t)RENDER_GTK; } // SysTray if(!prefs->get(FEATURE_USE_SYSTRAY,&useTray)) useTray=0; // Accept mpeg for DVD when fq!=48 kHz if(!prefs->get(FEATURE_MPEG_NO_LIMIT,&mpeg_no_limit)) mpeg_no_limit=0; // Multithreads prefs->get(FEATURE_THREADING_LAVC, &lavcThreads); // Encoding priority if(!prefs->get(PRIORITY_ENCODING, &encodePriority)) encodePriority=2; // Indexing / unpacking priority if(!prefs->get(PRIORITY_INDEXING, &indexPriority)) indexPriority=2; // Playback priority if(!prefs->get(PRIORITY_PLAYBACK, &playbackPriority)) playbackPriority=0; // Open DML (Gmv) if(!prefs->get(FEATURE_USE_ODML, &use_odml)) use_odml=0; #if defined(ALSA_SUPPORT) || defined (OSS_SUPPORT) // Master or PCM for audio if(!prefs->get(FEATURE_AUDIOBAR_USES_MASTER, &useMaster)) useMaster=0; #endif // Autoindex files if(!prefs->get(FEATURE_TRYAUTOIDX, &useAutoIndex)) useAutoIndex=0; // SWAP A&B if A>B if(!prefs->get(FEATURE_SWAP_IF_A_GREATER_THAN_B, &useSwap)) useSwap=0; // No nuv sync if(!prefs->get(FEATURE_DISABLE_NUV_RESYNC, &useNuv)) useNuv=0; // Get level of message verbosity prefs->get(MESSAGE_LEVEL,&msglevel); // Downmix default if(prefs->get(DOWNMIXING_PROLOGIC,&downmix)!=RC_OK) { downmix=0; } olddevice=newdevice=AVDM_getCurrentDevice(); // Audio device /************************ Build diaelems ****************************************/ diaElemToggle useSysTray(&useTray,QT_TR_NOOP("_Use systray while encoding")); diaElemToggle allowAnyMpeg(&mpeg_no_limit,QT_TR_NOOP("_Accept non-standard audio frequency for DVD")); diaElemToggle openDml(&use_odml,QT_TR_NOOP("Create _OpenDML files")); diaElemToggle autoIndex(&useAutoIndex,QT_TR_NOOP("Automatically _index MPEG files")); diaElemToggle autoSwap(&useSwap,QT_TR_NOOP("Automatically _swap A and B if A>B")); diaElemToggle nuvAudio(&useNuv,QT_TR_NOOP("_Disable NUV audio sync")); diaElemToggle togAutoVbr(&autovbr,QT_TR_NOOP("Automatically _build VBR map")); diaElemToggle togAutoIndex(&autoindex,QT_TR_NOOP("Automatically _rebuild index")); diaElemToggle togAutoUnpack(&autounpack,QT_TR_NOOP("Automatically remove _packed bitstream")); diaElemFrame frameSimd(QT_TR_NOOP("SIMD")); diaElemToggle capsToggleAll(&capsAll,QT_TR_NOOP("Enable all SIMD")); diaElemToggle capsToggleMMX(&capsMMX, QT_TR_NOOP("Enable MMX")); diaElemToggle capsToggleMMXEXT(&capsMMXEXT, QT_TR_NOOP("Enable MMXEXT")); diaElemToggle capsToggle3DNOW(&caps3DNOW, QT_TR_NOOP("Enable 3DNOW")); diaElemToggle capsToggle3DNOWEXT(&caps3DNOWEXT, QT_TR_NOOP("Enable 3DNOWEXT")); diaElemToggle capsToggleSSE(&capsSSE, QT_TR_NOOP("Enable SSE")); diaElemToggle capsToggleSSE2(&capsSSE2, QT_TR_NOOP("Enable SSE2")); diaElemToggle capsToggleSSE3(&capsSSE3, QT_TR_NOOP("Enable SSE3")); diaElemToggle capsToggleSSSE3(&capsSSSE3, QT_TR_NOOP("Enable SSSE3")); capsToggleAll.link(0, &capsToggleMMX); capsToggleAll.link(0, &capsToggleMMXEXT); capsToggleAll.link(0, &capsToggle3DNOW); capsToggleAll.link(0, &capsToggle3DNOWEXT); capsToggleAll.link(0, &capsToggleSSE); capsToggleAll.link(0, &capsToggleSSE2); capsToggleAll.link(0, &capsToggleSSE3); capsToggleAll.link(0, &capsToggleSSSE3); frameSimd.swallow(&capsToggleAll); frameSimd.swallow(&capsToggleMMX); frameSimd.swallow(&capsToggleMMXEXT); frameSimd.swallow(&capsToggle3DNOW); frameSimd.swallow(&capsToggle3DNOWEXT); frameSimd.swallow(&capsToggleSSE); frameSimd.swallow(&capsToggleSSE2); frameSimd.swallow(&capsToggleSSE3); frameSimd.swallow(&capsToggleSSSE3); diaElemThreadCount lavcThreadCount(&lavcThreads, QT_TR_NOOP("_lavc threads:")); diaElemFrame frameThread(QT_TR_NOOP("Multi-threading")); frameThread.swallow(&lavcThreadCount); diaMenuEntry priorityEntries[] = { {0, QT_TR_NOOP("High"),NULL} ,{1, QT_TR_NOOP("Above normal"),NULL} ,{2, QT_TR_NOOP("Normal"),NULL} ,{3, QT_TR_NOOP("Below normal"),NULL} ,{4, QT_TR_NOOP("Low"),NULL} }; diaElemMenu menuEncodePriority(&encodePriority,QT_TR_NOOP("_Encoding priority:"), sizeof(priorityEntries)/sizeof(diaMenuEntry), priorityEntries,""); diaElemMenu menuIndexPriority(&indexPriority,QT_TR_NOOP("_Indexing/unpacking priority:"), sizeof(priorityEntries)/sizeof(diaMenuEntry), priorityEntries,""); diaElemMenu menuPlaybackPriority(&playbackPriority,QT_TR_NOOP("_Playback priority:"), sizeof(priorityEntries)/sizeof(diaMenuEntry), priorityEntries,""); diaElemFrame framePriority(QT_TR_NOOP("Prioritisation")); framePriority.swallow(&menuEncodePriority); framePriority.swallow(&menuIndexPriority); framePriority.swallow(&menuPlaybackPriority); diaElemToggle togTagMp3(&alternate_mp3_tag,QT_TR_NOOP("_Use alternative tag for MP3 in .mp4")); diaMenuEntry videoMode[]={ {RENDER_GTK, getNativeRendererDesc(), NULL} #if ADM_UI_TYPE_BUILD == ADM_UI_QT4 && defined(USE_OPENGL) ,{RENDER_QT_OPENGL, QT_TR_NOOP("Qt (OpenGL)"), NULL} #endif #ifdef USE_XV ,{RENDER_XV, QT_TR_NOOP("XVideo (best)"),NULL} #endif #ifdef USE_SDL #ifdef __WIN32 ,{RENDER_SDL, QT_TR_NOOP("SDL (MS Windows GDI)"),NULL} ,{RENDER_DIRECTX, QT_TR_NOOP("SDL (MS Windows DirectX)"),NULL} #else ,{RENDER_SDL, QT_TR_NOOP("SDL (good)"),NULL} #endif #endif }; diaElemMenu menuVideoMode(&render,QT_TR_NOOP("Video _display:"), sizeof(videoMode)/sizeof(diaMenuEntry),videoMode,""); diaMenuEntry msgEntries[]={ {0, QT_TR_NOOP("No alerts"),NULL} ,{1, QT_TR_NOOP("Display only error alerts"),NULL} ,{2, QT_TR_NOOP("Display all alerts"),NULL} }; diaElemMenu menuMessage(&msglevel,QT_TR_NOOP("_Message level:"), sizeof(msgEntries)/sizeof(diaMenuEntry),msgEntries,""); #if defined(ALSA_SUPPORT) || defined (OSS_SUPPORT) diaMenuEntry volumeEntries[]={ {0, QT_TR_NOOP("PCM"),NULL} ,{1, QT_TR_NOOP("Master"),NULL}}; diaElemMenu menuVolume(&useMaster,QT_TR_NOOP("_Volume control:"), sizeof(volumeEntries)/sizeof(diaMenuEntry),volumeEntries,""); #endif diaMenuEntry mixerEntries[]={ {0, QT_TR_NOOP("No downmixing"),NULL} ,{1, QT_TR_NOOP("Stereo"),NULL} ,{2, QT_TR_NOOP("Pro Logic"),NULL} ,{3, QT_TR_NOOP("Pro Logic II"),NULL} }; diaElemMenu menuMixer(&downmix,QT_TR_NOOP("_Local playback downmixing:"), sizeof(mixerEntries)/sizeof(diaMenuEntry),mixerEntries,""); //*********** AV_ //***AV uint32_t nbAudioDevice=ADM_av_getNbDevices(); diaMenuEntryDynamic *audioDeviceItems[nbAudioDevice+1]; audioDeviceItems[0]=new diaMenuEntryDynamic(0,"Dummy","Dummy"); for(int i=0;i<nbAudioDevice;i++) { const char *name; uint32_t major,minor,patch; ADM_av_getDeviceInfo(i, &name, &major,&minor,&patch); audioDeviceItems[i+1]=new diaMenuEntryDynamic(i+1,name,name); } diaElemMenuDynamic menuAudio(&newdevice,QT_TR_NOOP("_AudioDevice"), nbAudioDevice+1, audioDeviceItems,NULL); // default Post proc diaElemToggle fhzd(&hzd,QT_TR_NOOP("_Horizontal deblocking")); diaElemToggle fvzd(&vzd,QT_TR_NOOP("_Vertical deblocking")); diaElemToggle fdring(&dring,QT_TR_NOOP("De_ringing")); diaElemUInteger postProcStrength(&pp_value,QT_TR_NOOP("_Strength:"),0,5); diaElemFrame framePP(QT_TR_NOOP("Default Postprocessing")); framePP.swallow(&fhzd); framePP.swallow(&fvzd); framePP.swallow(&fdring); framePP.swallow(&postProcStrength); diaElemToggle togGlobalGlyph(&useGlobalGlyph, QT_TR_NOOP("Use _Global GlyphSet")); diaElemFile entryGLyphPath(0,&globalGlyphName,QT_TR_NOOP("Gl_yphSet:"), NULL, QT_TR_NOOP("Select GlyphSet file")); togGlobalGlyph.link(1, &entryGLyphPath); /* User Interface */ diaElem *diaUser[]={&useSysTray,&menuMessage}; diaElemTabs tabUser(QT_TR_NOOP("User Interface"),2,diaUser); /* Automation */ diaElem *diaAuto[]={&autoSwap,&togAutoVbr,&togAutoIndex,&togAutoUnpack,&autoIndex,}; diaElemTabs tabAuto(QT_TR_NOOP("Automation"),5,diaAuto); /* Input */ diaElem *diaInput[]={&nuvAudio}; diaElemTabs tabInput(QT_TR_NOOP("Input"),1,(diaElem **)diaInput); /* Output */ diaElem *diaOutput[]={&openDml,&allowAnyMpeg,&togTagMp3}; diaElemTabs tabOutput(QT_TR_NOOP("Output"),3,(diaElem **)diaOutput); /* Audio */ diaElem *diaAudio[]={&menuMixer,&menuAudio}; diaElemTabs tabAudio(QT_TR_NOOP("Audio"),2,(diaElem **)diaAudio); /* Video */ diaElem *diaVideo[]={&menuVideoMode,&framePP}; diaElemTabs tabVideo(QT_TR_NOOP("Video"),2,(diaElem **)diaVideo); /* CPU tab */ diaElem *diaCpu[]={&frameSimd}; diaElemTabs tabCpu(QT_TR_NOOP("CPU"),1,(diaElem **)diaCpu); /* Threading tab */ diaElem *diaThreading[]={&frameThread, &framePriority}; diaElemTabs tabThreading(QT_TR_NOOP("Threading"),2,(diaElem **)diaThreading); /* Global Glyph tab */ diaElem *diaGlyph[]={&togGlobalGlyph,&entryGLyphPath}; diaElemTabs tabGlyph(QT_TR_NOOP("Global GlyphSet"),2,(diaElem **)diaGlyph); // SET diaElemTabs *tabs[]={&tabUser,&tabAuto,&tabInput,&tabOutput,&tabAudio,&tabVideo,&tabCpu,&tabThreading,&tabGlyph}; if( diaFactoryRunTabs(QT_TR_NOOP("Preferences"),9,tabs)) { // cpu caps if(capsAll) { CpuCaps::myCpuMask=ADM_CPUCAP_ALL; }else { CpuCaps::myCpuMask=0; #undef CPU_CAPS #define CPU_CAPS(x) if(caps##x) CpuCaps::myCpuMask|= ADM_CPUCAP_##x; CPU_CAPS(MMX); CPU_CAPS(MMXEXT); CPU_CAPS(3DNOW); CPU_CAPS(3DNOWEXT); CPU_CAPS(SSE); CPU_CAPS(SSE2); CPU_CAPS(SSE3); CPU_CAPS(SSSE3); } prefs->set(FEATURE_CPU_CAPS,CpuCaps::myCpuMask); // Glyphs prefs->set(FEATURE_GLOBAL_GLYPH_ACTIVE,useGlobalGlyph); prefs->set(FEATURE_GLOBAL_GLYPH_NAME,globalGlyphName); // Postproc #undef DOME #define DOME(x,y) if(y) pp_type |=x; pp_type=0; DOME(1,hzd); DOME(2,vzd); DOME(4,dring); prefs->set(DEFAULT_POSTPROC_TYPE,pp_type); prefs->set(DEFAULT_POSTPROC_VALUE,pp_value); // prefs->set(FEATURE_AUTO_UNPACK,autounpack); // autovbr prefs->set(FEATURE_AUTO_BUILDMAP,autovbr); // autoindex prefs->set(FEATURE_AUTO_REBUILDINDEX,autoindex); // Alsa #ifdef ALSA_SUPPORT if(alsaDevice) { prefs->set(DEVICE_AUDIO_ALSA_DEVICE, alsaDevice); ADM_dealloc(alsaDevice); alsaDevice=NULL; } #endif // Device if(olddevice!=newdevice) { AVDM_switch((AUDIO_DEVICE)newdevice); } // Downmixing (default) prefs->set(DOWNMIXING_PROLOGIC,downmix); #if defined(ALSA_SUPPORT) || defined (OSS_SUPPORT) // Master or PCM prefs->set(FEATURE_AUDIOBAR_USES_MASTER, useMaster); #endif // allow non std audio fq for dvd prefs->set(FEATURE_MPEG_NO_LIMIT, mpeg_no_limit); // Video render prefs->set(DEVICE_VIDEODEVICE,render); // Odml prefs->set(FEATURE_USE_ODML, use_odml); // number of threads prefs->set(FEATURE_THREADING_LAVC, lavcThreads); // Encoding priority prefs->set(PRIORITY_ENCODING, encodePriority); // Indexing / unpacking priority prefs->set(PRIORITY_INDEXING, indexPriority); // Playback priority prefs->set(PRIORITY_PLAYBACK, playbackPriority); // Auto index mpeg prefs->set(FEATURE_TRYAUTOIDX, useAutoIndex); // Auto swap A/B prefs->set(FEATURE_SWAP_IF_A_GREATER_THAN_B, useSwap); // prefs->set(MESSAGE_LEVEL,msglevel); // Disable nuv sync prefs->set(FEATURE_DISABLE_NUV_RESYNC, useNuv); // Use tray while encoding prefs->set(FEATURE_USE_SYSTRAY,useTray); // Alternate mp3 tag (haali) prefs->set(FEATURE_ALTERNATE_MP3_TAG,alternate_mp3_tag); #if defined(__WIN32) && defined(USE_SDL) // Initialise SDL again as driver may have changed initSdl(render); #endif } for(int i=0;i<nbAudioDevice+1;i++) { delete audioDeviceItems[i]; } ADM_dealloc(globalGlyphName); return 1; }
/** \fn DIA_pluginsInfo \brief Display loaded plugin infos */ uint8_t DIA_pluginsInfo(void) { uint32_t aNbPlugin=ADM_ad_getNbFilters(); uint32_t veNbPlugin=ADM_ve_getNbEncoders(); uint32_t avNbPlugin=ADM_av_getNbDevices(); uint32_t aeNbPlugin=ADM_ae_getPluginNbEncoders(); // Audio Plugins printf("[Audio Plugins] Found %u plugins\n",aNbPlugin); diaElemReadOnlyText *aText[aNbPlugin]; diaElemFrame frameAudio(QT_TR_NOOP("Audio Plugins")); for(int i=0;i<aNbPlugin;i++) { const char *name; uint32_t major,minor,patch; char versionString[256]; char infoString[256]; char *end; ADM_ad_getFilterInfo(i, &name,&major,&minor,&patch); snprintf(versionString,255,"%02d.%02d.%02d",major,minor,patch); strncpy(infoString,name,255); if(strlen(infoString)) { end=strlen(infoString)+infoString-1; // Remove trailing line feed while(*end==0x0a || *end==0x0d) *end--=0; } aText[i]=new diaElemReadOnlyText(infoString,versionString); frameAudio.swallow(aText[i]); } diaElem *diaAudio[]={&frameAudio}; diaElemTabs tabAudio(QT_TR_NOOP("Audio"),1,diaAudio); // /Audio // Encoder printf("[VideoEncoder Plugins] Found %u plugins\n",veNbPlugin); diaElemReadOnlyText *veText[veNbPlugin]; diaElemFrame frameVE(QT_TR_NOOP("Video Encoder Plugins")); for(int i=0;i<veNbPlugin;i++) { const char *name; uint32_t major,minor,patch; char versionString[256]; char infoString[256]; char *end; ADM_ve_getEncoderInfo(i, NULL, NULL, NULL, &name, &major, &minor, &patch); snprintf(versionString,255,"%02d.%02d.%02d",major,minor,patch); strncpy(infoString,name,255); if(strlen(infoString)) { end=strlen(infoString)+infoString-1; // Remove trailing line feed while(*end==0x0a || *end==0x0d) *end--=0; } veText[i]=new diaElemReadOnlyText(infoString,versionString); frameVE.swallow(veText[i]); } diaElem *diaVE[]={&frameVE}; diaElemTabs tabVE(QT_TR_NOOP("Video Encoder"),1,diaVE); // Audio Device printf("[AudioDevice Plugins] Found %u plugins\n",avNbPlugin); diaElemReadOnlyText *avText[avNbPlugin]; diaElemFrame frameAV(QT_TR_NOOP("Audio Device Plugins")); for(int i=0;i<avNbPlugin;i++) { const char *name; uint32_t major,minor,patch; char versionString[256]; char infoString[256]; char *end; ADM_av_getDeviceInfo(i, &name,&major,&minor,&patch); snprintf(versionString,255,"%02d.%02d.%02d",major,minor,patch); strncpy(infoString,name,255); if(strlen(infoString)) { end=strlen(infoString)+infoString-1; // Remove trailing line feed while(*end==0x0a || *end==0x0d) *end--=0; } avText[i]=new diaElemReadOnlyText(infoString,versionString); frameAV.swallow(avText[i]); } diaElem *diaAV[]={&frameAV}; diaElemTabs tabAV(QT_TR_NOOP("Audio Device"),1,diaAV); // /Encoder // Audio Encoder printf("[AudioEncoder Plugins] Found %u plugins\n",aeNbPlugin); diaElemReadOnlyText *aeText[aeNbPlugin]; diaElemFrame frameAE(QT_TR_NOOP("Audio Encoder Plugins")); for(int i=0;i<aeNbPlugin;i++) { const char *name; uint32_t major,minor,patch; char versionString[256]; char infoString[256]; char *end; ADM_ae_getAPluginEncoderInfo(i, &name,&major,&minor,&patch); snprintf(versionString,255,"%02d.%02d.%02d",major,minor,patch); strncpy(infoString,name,255); if(strlen(infoString)) { end=strlen(infoString)+infoString-1; // Remove trailing line feed while(*end==0x0a || *end==0x0d) *end--=0; } aeText[i]=new diaElemReadOnlyText(infoString,versionString); frameAE.swallow(aeText[i]); } diaElem *diaAE[]={&frameAE}; diaElemTabs tabAE(QT_TR_NOOP("Audio Encoders"),1,diaAE); // /Audio Encoder diaElemTabs *tabs[]={&tabAudio,&tabVE,&tabAV,&tabAE}; diaFactoryRunTabs(QT_TR_NOOP("Plugins Info"),4,tabs); for(int i=0;i<aNbPlugin;i++) delete aText[i]; for(int i=0;i<veNbPlugin;i++) delete veText[i]; for(int i=0;i<avNbPlugin;i++) delete avText[i]; for(int i=0;i<aeNbPlugin;i++) delete aeText[i]; return 1; }
/** \fn DIA_pluginsInfo \brief Display loaded plugin infos */ uint8_t DIA_pluginsInfo(void) { uint32_t aNbPlugin=ADM_ad_getNbFilters(); uint32_t avNbPlugin=ADM_av_getNbDevices(); uint32_t aeNbPlugin=ADM_ae_getPluginNbEncoders(); uint32_t dmNbPlugin=ADM_dm_getNbDemuxers(); uint32_t mxNbPlugin=ADM_mx_getNbMuxers(); uint32_t ve6NbPlugin=ADM_ve6_getNbEncoders(); uint32_t vd6NbPlugin=ADM_vd6_getNbEncoders(); // Audio Plugins printf("[Audio Plugins] Found %u plugins\n",aNbPlugin); diaElemReadOnlyText **aText=new diaElemReadOnlyText *[aNbPlugin]; diaElemFrame frameAudio(QT_TRANSLATE_NOOP("adm","Audio Plugins")); for(int i=0;i<aNbPlugin;i++) { std::string name; uint32_t major,minor,patch; char versionString[256]; char infoString[256]; char *end; ADM_ad_getFilterInfo(i, name,&major,&minor,&patch); snprintf(versionString,255,"%02d.%02d.%02d",major,minor,patch); strncpy(infoString,name.c_str(),255); if((*infoString)) { end=strlen(infoString)+infoString-1; // Remove trailing line feed while(*end==0x0a || *end==0x0d) *end--=0; } aText[i]=new diaElemReadOnlyText(infoString,versionString); frameAudio.swallow(aText[i]); } diaElem *diaAudio[]={&frameAudio}; diaElemTabs tabAudio(QT_TRANSLATE_NOOP("adm","Audio"),1,diaAudio); // /Audio // Encoder printf("[VideoEncoder6 Plugins] Found %u plugins\n",ve6NbPlugin); diaElemReadOnlyText **veText=new diaElemReadOnlyText *[ve6NbPlugin]; diaElemFrame frameVE(QT_TRANSLATE_NOOP("adm","Video Encoder Plugins")); for(int i=0;i<ve6NbPlugin;i++) { const char *name; uint32_t major,minor,patch; char versionString[256]; char infoString[256]; char *end; ADM_ve6_getEncoderInfo(i, &name,&major,&minor,&patch); snprintf(versionString,255,"%02d.%02d.%02d",major,minor,patch); strncpy(infoString,name,255); if((*infoString)) { end=strlen(infoString)+infoString-1; // Remove trailing line feed while(*end==0x0a || *end==0x0d) *end--=0; } veText[i]=new diaElemReadOnlyText(infoString,versionString); frameVE.swallow(veText[i]); } diaElem *diaVE[]={&frameVE}; diaElemTabs tabVE(QT_TRANSLATE_NOOP("adm","Video Encoder"),1,diaVE); // /Encoder // VideoDecoder printf("[VideoDecoder6 Plugins] Found %u plugins\n",vd6NbPlugin); diaElemReadOnlyText **vdText=new diaElemReadOnlyText *[vd6NbPlugin]; diaElemFrame frameVD(QT_TRANSLATE_NOOP("adm","Video Decoder Plugins")); for(int i=0;i<vd6NbPlugin;i++) { const char *name; uint32_t major,minor,patch; char versionString[256]; char infoString[256]; char *end; ADM_vd6_getEncoderInfo(i, &name,&major,&minor,&patch); snprintf(versionString,255,"%02d.%02d.%02d",major,minor,patch); strncpy(infoString,name,255); if((*infoString)) { end=strlen(infoString)+infoString-1; // Remove trailing line feed while(*end==0x0a || *end==0x0d) *end--=0; } vdText[i]=new diaElemReadOnlyText(infoString,versionString); frameVD.swallow(vdText[i]); } diaElem *diaVD[]={&frameVD}; diaElemTabs tabVD(QT_TRANSLATE_NOOP("adm","Video Decoder"),1,diaVD); // /VideoDecoder // Audio Device printf("[AudioDevice Plugins] Found %u plugins\n",avNbPlugin); diaElemReadOnlyText **avText=new diaElemReadOnlyText *[avNbPlugin]; diaElemFrame frameAV(QT_TRANSLATE_NOOP("adm","Audio Device Plugins")); for(int i=0;i<avNbPlugin;i++) { std::string name; uint32_t major,minor,patch; char versionString[256]; char infoString[256]; char *end; ADM_av_getDeviceInfo(i, name,&major,&minor,&patch); snprintf(versionString,255,"%02d.%02d.%02d",major,minor,patch); strncpy(infoString,name.c_str(),255); if((*infoString)) { end=strlen(infoString)+infoString-1; // Remove trailing line feed while(*end==0x0a || *end==0x0d) *end--=0; } avText[i]=new diaElemReadOnlyText(infoString,versionString); frameAV.swallow(avText[i]); } diaElem *diaAV[]={&frameAV}; diaElemTabs tabAV(QT_TRANSLATE_NOOP("adm","Audio Device"),1,diaAV); // /Encoder // Audio Encoder printf("[AudioEncoder Plugins] Found %u plugins\n",aeNbPlugin); diaElemReadOnlyText **aeText=new diaElemReadOnlyText*[aeNbPlugin]; diaElemFrame frameAE(QT_TRANSLATE_NOOP("adm","Audio Encoder Plugins")); for(int i=0;i<aeNbPlugin;i++) { const char *name; uint32_t major,minor,patch; char versionString[256]; char infoString[256]; char *end; ADM_ae_getAPluginEncoderInfo(i, &name,&major,&minor,&patch); snprintf(versionString,255,"%02d.%02d.%02d",major,minor,patch); strncpy(infoString,name,255); if(*(infoString)) { end=strlen(infoString)+infoString-1; // Remove trailing line feed while(*end==0x0a || *end==0x0d) *end--=0; } aeText[i]=new diaElemReadOnlyText(infoString,versionString); frameAE.swallow(aeText[i]); } diaElem *diaAE[]={&frameAE}; diaElemTabs tabAE(QT_TRANSLATE_NOOP("adm","Audio Encoders"),1,diaAE); // /Audio Encoder // Demuxer Encoder printf("[Demuxers Plugins] Found %u plugins\n",dmNbPlugin); diaElemReadOnlyText **dmText=new diaElemReadOnlyText*[dmNbPlugin]; diaElemFrame frameDM(QT_TRANSLATE_NOOP("adm","Demuxer Plugins")); for(int i=0;i<dmNbPlugin;i++) { const char *name; uint32_t major,minor,patch; char versionString[256]; char infoString[256]; char *end; ADM_dm_getDemuxerInfo(i, &name,&major,&minor,&patch); snprintf(versionString,255,"%02d.%02d.%02d",major,minor,patch); strncpy(infoString,name,255); if(*(infoString)) { end=strlen(infoString)+infoString-1; // Remove trailing line feed while(*end==0x0a || *end==0x0d) *end--=0; } dmText[i]=new diaElemReadOnlyText(infoString,versionString); frameDM.swallow(dmText[i]); } diaElem *diaDM[]={&frameDM}; diaElemTabs tabDM(QT_TRANSLATE_NOOP("adm","Demuxers"),1,diaDM); // /Demuxer Encoder // muxer Encoder printf("[Muxers Plugins] Found %u plugins\n",mxNbPlugin); diaElemReadOnlyText **mxText=new diaElemReadOnlyText*[mxNbPlugin]; diaElemFrame frameMX(QT_TRANSLATE_NOOP("adm","Muxer Plugins")); for(int i=0;i<mxNbPlugin;i++) { const char *name; uint32_t major,minor,patch; char versionString[256]; char infoString[256]; char *end; ADM_mx_getMuxerInfo(i, &name,&major,&minor,&patch); snprintf(versionString,255,"%02d.%02d.%02d",major,minor,patch); strncpy(infoString,name,255); if(*(infoString)) { end=strlen(infoString)+infoString-1; // Remove trailing line feed while(*end==0x0a || *end==0x0d) *end--=0; } mxText[i]=new diaElemReadOnlyText(infoString,versionString); frameMX.swallow(mxText[i]); } diaElem *diaMX[]={&frameMX}; diaElemTabs tabMX(QT_TRANSLATE_NOOP("adm","Muxers"),1,diaMX); // /muxer Encoder diaElemTabs *tabs[]={&tabAudio,&tabVE,&tabVD,&tabAV,&tabAE,&tabDM,&tabMX}; diaFactoryRunTabs(QT_TRANSLATE_NOOP("adm","Plugins Info"),7,tabs); for(int i=0;i<aNbPlugin;i++) delete aText[i]; for(int i=0;i<ve6NbPlugin;i++) delete veText[i]; for(int i=0;i<vd6NbPlugin;i++) delete vdText[i]; for(int i=0;i<avNbPlugin;i++) delete avText[i]; for(int i=0;i<aeNbPlugin;i++) delete aeText[i]; for(int i=0;i<dmNbPlugin;i++) delete dmText[i]; for(int i=0;i<mxNbPlugin;i++) delete mxText[i]; delete [] aText; delete [] veText; delete [] avText; delete [] aeText; delete [] dmText; delete [] mxText; return 1; }
/** \fn DIA_Preferences \brief Handle preference dialog */ uint8_t DIA_Preferences(void) { uint32_t olddevice,newdevice; bool use_odml=0; uint32_t autosplit=0; uint32_t render; bool useTray=0; bool useSwap=0; uint32_t lavcThreads=0; uint32_t encodePriority=2; uint32_t indexPriority=2; uint32_t playbackPriority=0; uint32_t downmix; bool mpeg_no_limit=0; uint32_t msglevel=2; uint32_t mixer=0; char *alsaDevice=NULL; bool balternate_mp3_tag=true; uint32_t pp_type=3; uint32_t pp_value=5; bool bvdpau=false; bool hzd,vzd,dring; bool capsMMX,capsMMXEXT,caps3DNOW,caps3DNOWEXT,capsSSE,capsSSE2,capsSSE3,capsSSSE3,capsAll; bool hasOpenGl=false; bool askPortAvisynth=false; uint32_t defaultPortAvisynth = 9999; #ifdef USE_OPENGL prefs->get(FEATURES_ENABLE_OPENGL,&hasOpenGl); #endif olddevice=newdevice=AVDM_getCurrentDevice(); // Default pp if(!prefs->get(DEFAULT_POSTPROC_TYPE,&pp_type)) pp_type=3; if(!prefs->get(DEFAULT_POSTPROC_VALUE,&pp_value)) pp_value=3; #define DOME(x,y) y=!!(pp_type & x) DOME(1,hzd); DOME(2,vzd); DOME(4,dring); // Cpu caps #define CPU_CAPS(x) if(CpuCaps::myCpuMask & ADM_CPUCAP_##x) caps##x=1; else caps##x=0; if(CpuCaps::myCpuMask==ADM_CPUCAP_ALL) capsAll=1; else capsAll=0; CPU_CAPS(MMX); CPU_CAPS(MMXEXT); CPU_CAPS(3DNOW); CPU_CAPS(3DNOWEXT); CPU_CAPS(SSE); CPU_CAPS(SSE2); CPU_CAPS(SSE3); CPU_CAPS(SSSE3); //Avisynth if(!prefs->get(AVISYNTH_AVISYNTH_ALWAYS_ASK, &askPortAvisynth)) { ADM_info("Always ask not set\n"); askPortAvisynth=0; } if(!prefs->get(AVISYNTH_AVISYNTH_DEFAULTPORT, &defaultPortAvisynth)) { printf("Port not set\n"); defaultPortAvisynth=9999; } ADM_info("Avisynth port: %d\n",defaultPortAvisynth); // Alsa #ifdef ALSA_SUPPORT if( prefs->get(DEVICE_AUDIO_ALSA_DEVICE, &alsaDevice) != RC_OK ) alsaDevice = ADM_strdup("plughw:0,0"); #endif // vdpau prefs->get(FEATURES_VDPAU,&bvdpau); // Alternate mp3 tag (haali) prefs->get(FEATURES_ALTERNATE_MP3_TAG,&balternate_mp3_tag); // Video renderer if(prefs->get(VIDEODEVICE,&render)!=RC_OK) { render=(uint32_t)RENDER_GTK; } // SysTray if(!prefs->get(FEATURES_USE_SYSTRAY,&useTray)) useTray=0; // Accept mpeg for DVD when fq!=48 kHz if(!prefs->get(FEATURES_MPEG_NO_LIMIT,&mpeg_no_limit)) mpeg_no_limit=0; // Multithreads prefs->get(FEATURES_THREADING_LAVC, &lavcThreads); // Encoding priority if(!prefs->get(PRIORITY_ENCODING, &encodePriority)) encodePriority=2; // Indexing / unpacking priority if(!prefs->get(PRIORITY_INDEXING, &indexPriority)) indexPriority=2; // Playback priority if(!prefs->get(PRIORITY_PLAYBACK, &playbackPriority)) playbackPriority=0; // VCD/SVCD split point if(!prefs->get(MPEGSPLIT_AUTOSPLIT, &autosplit)) autosplit=690; // Open DML (Gmv) if(!prefs->get(FEATURES_USE_ODML, &use_odml)) use_odml=0; #if defined(ALSA_SUPPORT) || defined (OSS_SUPPORT) // Master or PCM for audio if(!prefs->get(FEATURES_AUDIOBAR_USES_MASTER, &useMaster)) useMaster=0; #endif // SWAP A&B if A>B if(!prefs->get(FEATURES_SWAP_IF_A_GREATER_THAN_B, &useSwap)) useSwap=0; // Get level of message verbosity prefs->get(MESSAGE_LEVEL,&msglevel); // Downmix default if(prefs->get(DEFAULT_DOWNMIXING,&downmix)!=RC_OK) { downmix=0; } olddevice=newdevice=AVDM_getCurrentDevice(); // Audio device /************************ Build diaelems ****************************************/ diaElemToggle useVdpau(&bvdpau,QT_TR_NOOP("Decode video using VDPAU")); diaElemToggle useOpenGl(&hasOpenGl,QT_TR_NOOP("Enable openGl support")); #ifndef USE_OPENGL //useOpenGl.enable(0); #endif diaElemToggle useSysTray(&useTray,QT_TR_NOOP("_Use systray while encoding")); diaElemToggle allowAnyMpeg(&mpeg_no_limit,QT_TR_NOOP("_Accept non-standard audio frequency for DVD")); diaElemToggle openDml(&use_odml,QT_TR_NOOP("Create _OpenDML files")); diaElemFrame frameSimd(QT_TR_NOOP("SIMD")); diaElemToggle capsToggleAll(&capsAll,QT_TR_NOOP("Enable all SIMD")); diaElemToggle capsToggleMMX(&capsMMX, QT_TR_NOOP("Enable MMX")); diaElemToggle capsToggleMMXEXT(&capsMMXEXT, QT_TR_NOOP("Enable MMXEXT")); diaElemToggle capsToggle3DNOW(&caps3DNOW, QT_TR_NOOP("Enable 3DNOW")); diaElemToggle capsToggle3DNOWEXT(&caps3DNOWEXT, QT_TR_NOOP("Enable 3DNOWEXT")); diaElemToggle capsToggleSSE(&capsSSE, QT_TR_NOOP("Enable SSE")); diaElemToggle capsToggleSSE2(&capsSSE2, QT_TR_NOOP("Enable SSE2")); diaElemToggle capsToggleSSE3(&capsSSE3, QT_TR_NOOP("Enable SSE3")); diaElemToggle capsToggleSSSE3(&capsSSSE3, QT_TR_NOOP("Enable SSSE3")); capsToggleAll.link(0, &capsToggleMMX); capsToggleAll.link(0, &capsToggleMMXEXT); capsToggleAll.link(0, &capsToggle3DNOW); capsToggleAll.link(0, &capsToggle3DNOWEXT); capsToggleAll.link(0, &capsToggleSSE); capsToggleAll.link(0, &capsToggleSSE2); capsToggleAll.link(0, &capsToggleSSE3); capsToggleAll.link(0, &capsToggleSSSE3); frameSimd.swallow(&capsToggleAll); frameSimd.swallow(&capsToggleMMX); frameSimd.swallow(&capsToggleMMXEXT); frameSimd.swallow(&capsToggle3DNOW); frameSimd.swallow(&capsToggle3DNOWEXT); frameSimd.swallow(&capsToggleSSE); frameSimd.swallow(&capsToggleSSE2); frameSimd.swallow(&capsToggleSSE3); frameSimd.swallow(&capsToggleSSSE3); diaElemThreadCount lavcThreadCount(&lavcThreads, QT_TR_NOOP("_lavc threads:")); diaElemFrame frameThread(QT_TR_NOOP("Multi-threading")); frameThread.swallow(&lavcThreadCount); diaMenuEntry priorityEntries[] = { {0, QT_TR_NOOP("High"),NULL} ,{1, QT_TR_NOOP("Above normal"),NULL} ,{2, QT_TR_NOOP("Normal"),NULL} ,{3, QT_TR_NOOP("Below normal"),NULL} ,{4, QT_TR_NOOP("Low"),NULL} }; diaElemMenu menuEncodePriority(&encodePriority,QT_TR_NOOP("_Encoding priority:"), sizeof(priorityEntries)/sizeof(diaMenuEntry), priorityEntries,""); diaElemMenu menuIndexPriority(&indexPriority,QT_TR_NOOP("_Indexing/unpacking priority:"), sizeof(priorityEntries)/sizeof(diaMenuEntry), priorityEntries,""); diaElemMenu menuPlaybackPriority(&playbackPriority,QT_TR_NOOP("_Playback priority:"), sizeof(priorityEntries)/sizeof(diaMenuEntry), priorityEntries,""); diaElemFrame framePriority(QT_TR_NOOP("Prioritisation")); framePriority.swallow(&menuEncodePriority); framePriority.swallow(&menuIndexPriority); framePriority.swallow(&menuPlaybackPriority); diaElemUInteger autoSplit(&autosplit,QT_TR_NOOP("_Split MPEG files every (MB):"),10,4096); diaElemToggle togTagMp3(&balternate_mp3_tag,QT_TR_NOOP("_Use alternative tag for MP3 in .mp4")); diaMenuEntry videoMode[]={ {RENDER_GTK, getNativeRendererDesc(), NULL} #ifdef USE_XV ,{RENDER_XV, QT_TR_NOOP("XVideo (best)"),NULL} #endif #ifdef USE_VDPAU ,{RENDER_VDPAU, QT_TR_NOOP("VDPAU (best)"),NULL} #endif #ifdef USE_OPENGL ,{RENDER_QTOPENGL, QT_TR_NOOP("OpenGL (best)"),NULL} #endif #ifdef USE_SDL #ifdef _WIN32 ,{RENDER_SDL, QT_TR_NOOP("MS Windows GDI (SDL)"),NULL} ,{RENDER_DIRECTX, QT_TR_NOOP("MS Windows DirectX (SDL)"),NULL} #else ,{RENDER_SDL, QT_TR_NOOP("SDL (good)"),NULL} #endif #endif }; diaElemMenu menuVideoMode(&render,QT_TR_NOOP("Video _display:"), sizeof(videoMode)/sizeof(diaMenuEntry),videoMode,""); diaMenuEntry msgEntries[]={ {0, QT_TR_NOOP("No alerts"),NULL} ,{1, QT_TR_NOOP("Display only error alerts"),NULL} ,{2, QT_TR_NOOP("Display all alerts"),NULL} }; diaElemMenu menuMessage(&msglevel,QT_TR_NOOP("_Message level:"), sizeof(msgEntries)/sizeof(diaMenuEntry),msgEntries,""); #if defined(ALSA_SUPPORT) || defined (OSS_SUPPORT) diaMenuEntry volumeEntries[]={ {0, QT_TR_NOOP("PCM"),NULL} ,{1, QT_TR_NOOP("Master"),NULL}}; diaElemMenu menuVolume(&useMaster,QT_TR_NOOP("_Volume control:"), sizeof(volumeEntries)/sizeof(diaMenuEntry),volumeEntries,""); #endif diaMenuEntry mixerEntries[]={ {0, QT_TR_NOOP("No downmixing"),NULL} ,{1, QT_TR_NOOP("Stereo"),NULL} ,{2, QT_TR_NOOP("Pro Logic"),NULL} ,{3, QT_TR_NOOP("Pro Logic II"),NULL} }; diaElemMenu menuMixer(&downmix,QT_TR_NOOP("_Local playback downmixing:"), sizeof(mixerEntries)/sizeof(diaMenuEntry),mixerEntries,""); //*********** AV_ //***AV uint32_t nbAudioDevice=ADM_av_getNbDevices(); diaMenuEntryDynamic **audioDeviceItems=new diaMenuEntryDynamic *[nbAudioDevice+1]; audioDeviceItems[0]=new diaMenuEntryDynamic(0,"Dummy","Dummy"); for(int i=0;i<nbAudioDevice;i++) { const char *name; uint32_t major,minor,patch; ADM_av_getDeviceInfo(i, &name, &major,&minor,&patch); audioDeviceItems[i+1]=new diaMenuEntryDynamic(i+1,name,name); } diaElemMenuDynamic menuAudio(&newdevice,QT_TR_NOOP("_AudioDevice"), nbAudioDevice+1, audioDeviceItems,NULL); // default Post proc diaElemToggle fhzd(&hzd,QT_TR_NOOP("_Horizontal deblocking")); diaElemToggle fvzd(&vzd,QT_TR_NOOP("_Vertical deblocking")); diaElemToggle fdring(&dring,QT_TR_NOOP("De_ringing")); diaElemUInteger postProcStrength(&pp_value,QT_TR_NOOP("_Strength:"),0,5); diaElemFrame framePP(QT_TR_NOOP("Default Postprocessing")); framePP.swallow(&fhzd); framePP.swallow(&fvzd); framePP.swallow(&fdring); framePP.swallow(&postProcStrength); /* User Interface */ diaElem *diaUser[]={&useSysTray,&menuMessage}; diaElemTabs tabUser(QT_TR_NOOP("User Interface"),2,diaUser); /* Automation */ /* Output */ diaElem *diaOutput[]={&autoSplit,&openDml,&allowAnyMpeg,&togTagMp3}; diaElemTabs tabOutput(QT_TR_NOOP("Output"),4,(diaElem **)diaOutput); /* Audio */ #if 0 //defined(ALSA_SUPPORT) diaElem *diaAudio[]={&menuMixer,&menuVolume,&menuAudio,&entryAlsaDevice}; diaElemTabs tabAudio(QT_TR_NOOP("Audio"),4,(diaElem **)diaAudio); //#elif defined(OSS_SUPPORT) diaElem *diaAudio[]={&menuMixer,&menuVolume,&menuAudio}; diaElemTabs tabAudio(QT_TR_NOOP("Audio"),3,(diaElem **)diaAudio); #endif #if 1 diaElem *diaAudio[]={&menuMixer,&menuAudio}; diaElemTabs tabAudio(QT_TR_NOOP("Audio"),2,(diaElem **)diaAudio); #endif /* Video */ diaElem *diaVideo[]={&menuVideoMode,&framePP,&useVdpau,&useOpenGl}; diaElemTabs tabVideo(QT_TR_NOOP("Video"),4,(diaElem **)diaVideo); /* CPU tab */ diaElem *diaCpu[]={&frameSimd}; diaElemTabs tabCpu(QT_TR_NOOP("CPU"),1,(diaElem **)diaCpu); /* Threading tab */ diaElem *diaThreading[]={&frameThread, &framePriority}; diaElemTabs tabThreading(QT_TR_NOOP("Threading"),2,(diaElem **)diaThreading); /* Avisynth tab */ diaElemToggle togAskAvisynthPort(&askPortAvisynth,"_Always ask which port to use"); diaElemUInteger uintDefaultPortAvisynth(&defaultPortAvisynth,"Default port to use",1024,65535); diaElem *diaAvisynth[]={&togAskAvisynthPort, &uintDefaultPortAvisynth}; diaElemTabs tabAvisynth("Avisynth",2,(diaElem **)diaAvisynth); /* Global Glyph tab */ // SET diaElemTabs *tabs[]={&tabUser,&tabOutput,&tabAudio,&tabVideo,&tabCpu,&tabThreading, &tabAvisynth}; if( diaFactoryRunTabs(QT_TR_NOOP("Preferences"),7,tabs)) { // #ifdef USE_OPENGL prefs->set(FEATURES_ENABLE_OPENGL,hasOpenGl); #endif // cpu caps if(capsAll) { CpuCaps::myCpuMask=ADM_CPUCAP_ALL; }else { CpuCaps::myCpuMask=0; #undef CPU_CAPS #define CPU_CAPS(x) if(caps##x) CpuCaps::myCpuMask|= ADM_CPUCAP_##x; CPU_CAPS(MMX); CPU_CAPS(MMXEXT); CPU_CAPS(3DNOW); CPU_CAPS(3DNOWEXT); CPU_CAPS(SSE); CPU_CAPS(SSE2); CPU_CAPS(SSE3); CPU_CAPS(SSSE3); } prefs->set(FEATURES_CPU_CAPS,CpuCaps::myCpuMask); // Postproc #undef DOME #define DOME(x,y) if(y) pp_type |=x; pp_type=0; DOME(1,hzd); DOME(2,vzd); DOME(4,dring); prefs->set(DEFAULT_POSTPROC_TYPE,pp_type); prefs->set(DEFAULT_POSTPROC_VALUE,pp_value); // Alsa #ifdef ALSA_SUPPORT if(alsaDevice) { prefs->set(DEVICE_AUDIO_ALSA_DEVICE, alsaDevice); ADM_dealloc(alsaDevice); alsaDevice=NULL; } #endif // Device //printf("[AudioDevice] Old : %d, new :%d\n",olddevice,newdevice); if(olddevice!=newdevice) { AVDM_switch((AUDIO_DEVICE)newdevice); // Change current device AVDM_audioSave(); // Save it in prefs AVDM_audioInit(); // Respawn } // Downmixing (default) prefs->set(DEFAULT_DOWNMIXING,downmix); #if defined(ALSA_SUPPORT) || defined (OSS_SUPPORT) // Master or PCM prefs->set(FEATURES_AUDIOBAR_USES_MASTER, useMaster); #endif // allow non std audio fq for dvd prefs->set(FEATURES_MPEG_NO_LIMIT, mpeg_no_limit); // Video render prefs->set(VIDEODEVICE,render); // Odml prefs->set(FEATURES_USE_ODML, use_odml); // Split prefs->set(MPEGSPLIT_AUTOSPLIT, autosplit); // number of threads prefs->set(FEATURES_THREADING_LAVC, lavcThreads); // Encoding priority prefs->set(PRIORITY_ENCODING, encodePriority); // Indexing / unpacking priority prefs->set(PRIORITY_INDEXING, indexPriority); // Playback priority prefs->set(PRIORITY_PLAYBACK, playbackPriority); // Auto swap A/B prefs->set(FEATURES_SWAP_IF_A_GREATER_THAN_B, useSwap); // prefs->set(MESSAGE_LEVEL,msglevel); // Use tray while encoding prefs->set(FEATURES_USE_SYSTRAY,useTray); // VDPAU prefs->set(FEATURES_VDPAU,bvdpau); // Alternate mp3 tag (haali) prefs->set(FEATURES_ALTERNATE_MP3_TAG,balternate_mp3_tag); // Avisynth prefs->set(AVISYNTH_AVISYNTH_DEFAULTPORT,defaultPortAvisynth); prefs->set(AVISYNTH_AVISYNTH_ALWAYS_ASK, askPortAvisynth); #if defined(_WIN32) && defined(USE_SDL) // Initialise SDL again as driver may have changed initSdl(render); #endif } for(int i=0;i<nbAudioDevice+1;i++) { delete audioDeviceItems[i]; } delete [] audioDeviceItems; return 1; }