tsubtitlessettings.cpp.svn-base
来自「ffshow源码」· SVN-BASE 代码 · 共 827 行 · 第 1/3 页
SVN-BASE
827 行
{"Ugaritic", _l("uga", NULL}, {"Umbundu", _l("umb", NULL}, {"Undetermined", _l("und", NULL}, {"Vai", _l("vai", NULL}, {"Venda", _l("ven", _l("ve")}, {"Votic", _l("vot", NULL}, {"Wakashan languages", _l("wak", NULL}, {"Walamo", _l("wal", NULL}, {"Walloon", _l("wln", _l("wa")}, {"Waray", _l("war", NULL}, {"Washo", _l("was", NULL}, {"Yakut", _l("sah", NULL}, {"Yao", _l("yao", NULL}, {"Yapese", _l("yap", NULL}, {"Yupik languages", _l("ypk", NULL}, {"Zande", _l("znd", NULL}, {"Zapotec", _l("zap", NULL}, {"Zenaga", _l("zen", NULL}, {"Zulu", _l("zul", _l("zu")}, {"Zuni", _l("zun", NULL}, {NULL, NULL, NULL}};*/const char_t* TsubtitlesSettings::durations[]={ _l("subtitle"), _l("line"), _l("character"), NULL};const char_t* TsubtitlesSettings::fixIls[]={ _l("English (may work with other languages)"), _l("French"), _l("Deutsch"), _l("Czech"), _l("Italian"), _l("Polish"), NULL};const TfilterIDFF TsubtitlesSettings::idffs={ /*name*/ _l("Subtitles"), /*id*/ IDFF_filterSubtitles, /*is*/ IDFF_isSubtitles, /*order*/ IDFF_orderSubtitles, /*show*/ IDFF_showSubtitles, /*full*/ IDFF_fullSubtitles, /*half*/ 0, /*dlgId*/ IDD_SUBTITLES,};TsubtitlesSettings::TsubtitlesSettings(TintStrColl *Icoll,TfilterIDFFs *filters):TfilterSettingsVideo(sizeof(*this),Icoll,filters,&idffs),font(Icoll){ deepcopy=true; memset(flnm,0,sizeof(flnm)); half=0; static const TintOptionT<TsubtitlesSettings> iopts[]= { IDFF_isSubtitles ,&TsubtitlesSettings::is ,0,0,_l(""),1, _l("isSubtitles"), 0, IDFF_showSubtitles ,&TsubtitlesSettings::show ,0,0,_l(""),1, _l("showSubtitles"), 1, IDFF_orderSubtitles ,&TsubtitlesSettings::order ,1,1,_l(""),1, _l("orderSubtitles"), 0, IDFF_fullSubtitles ,&TsubtitlesSettings::full ,0,0,_l(""),1, _l("fullSubtitles"), 1, IDFF_subAutoFlnm ,&TsubtitlesSettings::autoFlnm ,0,0,_l(""),1, _l("subAutoFlnm"), 1, IDFF_subPosX ,&TsubtitlesSettings::posX ,0,100,_l(""),1, _l("subPosX"), 50, IDFF_subPosY ,&TsubtitlesSettings::posY ,0,100,_l(""),1, _l("subPosY"), 90, IDFF_subAlign ,&TsubtitlesSettings::align ,0,3,_l(""),1, _l("subAlign"), ALIGN_FFDSHOW, IDFF_subIsExpand ,&TsubtitlesSettings::isExpand ,0,0,_l(""),1, _l("subIsExpand"), -1, IDFF_subExpand ,&TsubtitlesSettings::expandCode ,1,1,_l(""),1, _l("subExpand"), 1, IDFF_subDelay ,&TsubtitlesSettings::delay ,1,1,_l("Subtitles delay"), 1, _l("subDelay"), delayDef, IDFF_subSpeed ,&TsubtitlesSettings::speed ,1,INT_MAX/2,_l(""),1, _l("subSpeed"), speedDef, IDFF_subSpeed2 ,&TsubtitlesSettings::speed2 ,1,INT_MAX/2,_l(""),1, _l("subSpeed2"), speedDef, IDFF_subStereoscopic ,&TsubtitlesSettings::stereoscopic ,0,0,_l(""),1, _l("subStereoscopic"), 0, IDFF_subStereoscopicPar ,&TsubtitlesSettings::stereoscopicPar ,-100,100,_l(""),1, _l("subStereoscopicPar"), 0, IDFF_subDefLang ,&TsubtitlesSettings::deflang ,1,1,_l(""),1, _l("subDefLang"), 0, IDFF_subDefLang2 ,&TsubtitlesSettings::deflang2 ,1,1,_l(""),1, _l("subDefLang2"), 0, IDFF_subVobsub ,&TsubtitlesSettings::vobsub ,0,0,_l(""),1, _l("subVobsub"), 1, IDFF_subVobsubAA ,&TsubtitlesSettings::vobsubAA ,0,4,_l(""),1, _l("subVobsubAA"), 4, IDFF_subVobsubAAswgauss ,&TsubtitlesSettings::vobsubAAswgauss ,1,2000,_l(""),1, _l("subVobsubAAswgauss"), 700, IDFF_subVobsubChangePosition,&TsubtitlesSettings::vobsubChangePosition ,0,0,_l(""),1, _l("subVobsubChangePosition"), 0, IDFF_subVobsubScale ,&TsubtitlesSettings::vobsubScale ,0x10,0x300,_l(""),1, _l("subVobsubScale"), 0x100, IDFF_subLinespacing ,&TsubtitlesSettings::linespacing ,0,200,_l(""),1, _l("subLinespacing"), 100, IDFF_subTimeOverlap ,&TsubtitlesSettings::timeoverlap ,0,0,_l(""),1, _l("subTimeOverlap"), 0, IDFF_subIsMinDuration ,&TsubtitlesSettings::isMinDuration ,0,0,_l(""),1, _l("subIsMinDuration"), 0, IDFF_subMinDurationType ,&TsubtitlesSettings::minDurationType ,0,2,_l(""),1, _l("subMinDurationType"), 1, IDFF_subMinDurationSub ,&TsubtitlesSettings::minDurationSubtitle ,0,3600000,_l(""),1, _l("subMinDurationSubtitle"), 3000, IDFF_subMinDurationLine ,&TsubtitlesSettings::minDurationLine ,0,3600000,_l(""),1, _l("subMinDurationLine"), 1500, IDFF_subMinDurationChar ,&TsubtitlesSettings::minDurationChar ,0,3600000,_l(""),1, _l("subMinDurationChar"), 30, IDFF_subFix ,&TsubtitlesSettings::fix ,1,1,_l(""),1, _l("subFix"),0, IDFF_subFixLang ,&TsubtitlesSettings::fixLang ,0,5,_l(""),1, _l("subFixLang"),0, IDFF_subOpacity ,&TsubtitlesSettings::opacity ,0,256,_l(""),1, _l("subOpacity"),256, IDFF_subSplitBorder ,&TsubtitlesSettings::splitBorder ,0,4096,_l(""),1, _l("subSplitBorder"),0, IDFF_subCC ,&TsubtitlesSettings::cc ,0,0,_l(""),1, _l("subCC"),1, 0 }; addOptions(iopts); static const TstrOption sopts[]= { IDFF_subFilename ,(TstrVal)&TsubtitlesSettings::flnm ,MAX_PATH ,_l(""),1, _l("subFlnm"),_l(""), IDFF_subFixDict ,(TstrVal)&TsubtitlesSettings::fixDict ,60 ,_l(""),1, _l("subFixDict"),_l(""), 0 }; addOptions(sopts); static const TcreateParamList2<Tlang> listLang(langs,&Tlang::desc);setParamList(IDFF_subDefLang,&listLang);setParamList(IDFF_subDefLang2,&listLang); static const TcreateParamList1 listVobsubAA(vobsubAAs);setParamList(IDFF_subVobsubAA,&listVobsubAA); static const TcreateParamList1 listAlign(alignments);setParamList(IDFF_subAlign,&listAlign); static const TcreateParamList1 listDurations(durations);setParamList(IDFF_subMinDurationType,&listDurations); static const TcreateParamList1 listIls(fixIls);setParamList(IDFF_subFixLang,&listIls);}void TsubtitlesSettings::copy(const TfilterSettings *src){ memcpy(((uint8_t*)this)+sizeof(Toptions),((uint8_t*)src)+sizeof(Toptions),sizeof(*this)-sizeof(font)-sizeof(Toptions)); font=((TsubtitlesSettings*)src)->font;}const char_t* TsubtitlesSettings::getLangDescr(const char_t *lang){ //short lang=(short)Ttranslate::lang2int(langS); for (int i=1;langs[i].desc;i++) if (langs[i].lang && stricmp(langs[i].lang,lang)==0) return langs[i].desc; return lang;}const char_t* TsubtitlesSettings::getLangDescrIso(const char_t *isolang){ for (int i=0;langs[i].desc;i++) if (langs[i].isolang && stricmp(langs[i].isolang,isolang)==0) return langs[i].desc; return isolang;}void TsubtitlesSettings::createFilters(size_t filtersorder,Tfilters *filters,TfilterQueue &queue) const{ idffOnChange(idffs,filters,queue.temporary); if ((is && show) || filters->isdvdproc) { TimgFilterSubtitles *sub=queueFilter<TimgFilterSubtitles>(filtersorder,filters,queue); if (!queue.temporary) { setOnChange(IDFF_subAutoFlnm,sub,&TimgFilterSubtitles::onSubFlnmChange); setOnChange(IDFF_subTimeOverlap,sub,&TimgFilterSubtitles::onSubFlnmChange); setOnChange(IDFF_subIsMinDuration,sub,&TimgFilterSubtitles::onSubFlnmChange); setOnChange(IDFF_subMinDurationType,sub,&TimgFilterSubtitles::onSubFlnmChange); setOnChange(IDFF_subMinDurationSub,sub,&TimgFilterSubtitles::onSubFlnmChange); setOnChange(IDFF_subMinDurationLine,sub,&TimgFilterSubtitles::onSubFlnmChange); setOnChange(IDFF_subMinDurationChar,sub,&TimgFilterSubtitles::onSubFlnmChange); setOnChange(IDFF_subFix,sub,&TimgFilterSubtitles::onSubFlnmChange); setOnChange(IDFF_subFixLang,sub,&TimgFilterSubtitles::onSubFlnmChange); setOnChange(IDFF_subFilename,sub,&TimgFilterSubtitles::onSubFlnmChangeStr); setOnChange(IDFF_subFixDict,sub,&TimgFilterSubtitles::onSubFlnmChangeStr); } } }void TsubtitlesSettings::createPages(TffdshowPageDec *parent) const{ parent->addFilterPage<TsubtitlesPage>(&idffs); parent->addFilterPage<TsubtitlesTextPage>(&idffs); parent->addFilterPage<TfontPageSubtitles>(&idffs); parent->addFilterPage<TvobsubPage>(&idffs);}void TsubtitlesSettings::getPosHoriz(int x,char_t *s,Twindow *w,int id){ const char_t *posS; if (x<40) posS=_l("left"); else if (x>60) posS=_l("right"); else posS=_l("center"); tsprintf(s,_l("%s %3i%% (%s)"),w?w->_(id):_l("Horizontal position"),x,w?w->_(id,posS):posS);}void TsubtitlesSettings::getPosVert(int x,char_t *s,Twindow *w,int id){ const char_t *posS; if (x<40) posS=_l("top"); else if (x>60) posS=_l("bottom"); else posS=_l("center"); tsprintf(s,_l("%s %3i%% (%s)"),w?w->_(id):_l("Vertical position:"),x,w?w->_(id,posS):posS);}void TsubtitlesSettings::getExpand(int is,int code,int *x,int *y){ switch (code*(is?1:0)) { case 0:*x=0;*y=0;return; case 1:*x=4;*y=3;return; case 2:*x=16;*y=9;return; default:*x=std::max(1,(int)HIWORD(code));*y=std::max(1,(int)LOWORD(code));return; }}void TsubtitlesSettings::getExpand(int *x,int *y) const{ getExpand(isExpand,expandCode,x,y);}bool TsubtitlesSettings::getTip(unsigned int pageId,char_t *buf,size_t len){ if (pageId==1) { char_t tipS[256]; char_t horiz[256],vert[256];getPosHoriz(posX,horiz,NULL,0);getPosVert(posY,vert,NULL,0); tsprintf(tipS,_l("%s, %s"),horiz,vert); if (delay!=delayDef) strcatf(tipS,_l("\nDelay: %i ms"),delay); if (speed!=speedDef || speed2!=speedDef) strcatf(tipS,_l("\nSpeed: %i/%i"),speed,speed2); strncpy(buf,tipS,len); buf[len-1]='\0'; } else if (pageId==2) font.getTip(buf,len); return true; }void TsubtitlesSettings::reg_op(TregOp &t){ TfilterSettingsVideo::reg_op(t); font.reg_op(t); if (isExpand==-1) isExpand=expandCode?1:0;}const int* TsubtitlesSettings::getResets(unsigned int pageId){ if (pageId==0 || pageId==3) { static const int idResets[]={ IDFF_subVobsubAA,IDFF_subVobsubAAswgauss,IDFF_subVobsubChangePosition,IDFF_subVobsubScale, 0}; return idResets; } else return NULL; }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?