tsubtitlessettings.cpp
来自「ffshow源码」· C++ 代码 · 共 827 行 · 第 1/3 页
CPP
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 + -
显示快捷键?