1 /*
\83t
\83\8c\81[
\83\80\83t
\83b
\83N
\82Ì
\91\8a\8eè
\82ð
\82·
\82é
\82½
\82ß
\90ê
\97p*/
\r
7 #include "common/framehook_ext.h"
\r
8 #include "framehook.h"
\r
11 #include "nicodef.h"
\r
14 typedef struct ContextInfo{
\r
20 *
\95K
\97v
\82È
\8aÖ
\90\94\82Ð
\82Æ
\82Â
\82ß
\81B
\8dÅ
\8f\89\82É
\8cÄ
\82Î
\82ê
\82é
\82æ
\81I
\r
23 int init_setting(FILE*log,const toolbox *tbox,SETTING* setting,int argc, char *argv[]);
\r
25 __declspec(dllexport) int ExtConfigure(void **ctxp,const toolbox *tbox, int argc, char *argv[]){
\r
28 FILE* log = fopen("[log]vhext.txt", "w");
\r
30 puts("[framehook/init]failed to open logfile.\n");
\r
34 fputs("[framehook/init]initializing..\n",log);
\r
37 //
\95K
\97v
\82È
\90Ý
\92è
\82ª
\82 \82é
\82©
\82Ì
\8am
\94F
\r
38 fprintf(log,"[framehook/init]called with argc = %d\n",argc);
\r
40 for(i=0;i<argc;i++){
\r
41 fprintf(log,"[framehook/init]arg[%2d] = %s\n",i,argv[i]);
\r
44 //
\83Z
\83b
\83e
\83B
\83\93\83O
\8eæ
\93¾
\81B
\r
46 if(init_setting(log,tbox,&setting,argc,argv)){
\r
47 fputs("[framehook/init]initialized settings.\n",log);
\r
50 fputs("[framehook/init]failed to initialize settings.\n",log);
\r
54 //
\83\89\83C
\83u
\83\89\83\8a\82È
\82Ç
\82Ì
\8f\89\8aú
\89»
\r
56 fputs("[framehook/init]initialized libs.\n",log);
\r
59 fputs("[framehook/init]failed to initialize libs.\n",log);
\r
63 /*
\83R
\83\93\83e
\83L
\83X
\83g
\82Ì
\90Ý
\92è*/
\r
64 *ctxp = malloc(sizeof(ContextInfo));
\r
66 fputs("[framehook/init]initialized to malloc for context.\n",log);
\r
69 ContextInfo* ci = (ContextInfo*)*ctxp;
\r
72 if(initData(&ci->data,log,&setting)){
\r
73 fputs("[framehook/init]initialized context.\n",log);
\r
74 fputs("[framehook/init]initialized.\n",log);
\r
78 fputs("[framehook/init]failed to initialize context.\n",log);
\r
84 *
\93à
\95\94\82Å
\82Ì
\82Ý
\8cÄ
\82Î
\82ê
\82é
\81B
\r
88 argv[0]:
\83v
\83\8d\83O
\83\89\83\80\r
90 argv[2]:
\83t
\83H
\83\93\83g
\r
91 argv[3]:
\83t
\83H
\83\93\83g
\83C
\83\93\83f
\83b
\83N
\83X
\r
92 argv[4]:
\88ê
\89æ
\96Ê
\r
93 argv[5]:
\89e
\82Ì
\8eí
\97Þ
\r
94 \88È
\8d~
\83I
\83v
\83V
\83\87\83\93\r
95 --enable-show-video
\81F
\95`
\89æ
\92\86\82É
\93®
\89æ
\82ð
\8c©
\82¹
\82é
\81B
\r
96 --enable-fontsize-fix
\81F
\83t
\83H
\83\93\83g
\83T
\83C
\83Y
\82ð
\8e©
\93®
\82Å
\92²
\90®
\82·
\82é
\81B
\r
99 int init_setting(FILE*log,const toolbox *tbox,SETTING* setting,int argc, char *argv[]){
\r
100 /*video
\82Ì
\92·
\82³*/
\r
101 setting->video_length = (tbox->video_length * VPOS_FACTOR);
\r
102 /*
\88È
\8d~
\83I
\83v
\83V
\83\87\83\93*/
\r
104 //
\83R
\83\81\83\93\83g
\82ð
\8c©
\82¹
\82é
\82©
\94Û
\82©
\81H
\r
105 setting->enable_user_comment = FALSE;
\r
106 setting->enable_owner_comment = FALSE;
\r
107 setting->data_user_path = NULL;
\r
108 setting->data_owner_path = NULL;
\r
109 //
\88ê
\94Ê
\93I
\82È
\90Ý
\92è
\r
110 setting->font_path = NULL;
\r
111 setting->font_index = 0;
\r
112 setting->user_slot_max = 30;
\r
113 setting->owner_slot_max = 30;
\r
114 setting->shadow_kind = 1;//
\83f
\83t
\83H
\83\8b\83g
\82Í
\83j
\83R
\83j
\83R
\93®
\89æ
\95\97\r
115 setting->show_video = FALSE;
\r
116 setting->fontsize_fix=FALSE;
\r
117 setting->opaque_comment=FALSE;
\r
120 for(i=0;i<argc;i++){
\r
122 if(!setting->data_user_path && strncmp(FRAMEHOOK_OPT_DATA_USER,arg,FRAMEHOOK_OPT_DATA_USER_LEN) == 0){
\r
123 char* data_user = arg+FRAMEHOOK_OPT_DATA_USER_LEN;
\r
124 setting->data_user_path = data_user;
\r
125 setting->enable_user_comment = TRUE;
\r
126 fprintf(log,"[framehook/init]User Comment data path:%s\n",setting->data_user_path);
\r
128 }else if(!setting->data_owner_path && strncmp(FRAMEHOOK_OPT_DATA_OWNER,arg,FRAMEHOOK_OPT_DATA_OWNER_LEN) == 0){
\r
129 char* data_owner = arg+FRAMEHOOK_OPT_DATA_OWNER_LEN;
\r
130 setting->data_owner_path = data_owner;
\r
131 setting->enable_owner_comment = TRUE;
\r
132 fprintf(log,"[framehook/init]Owner Comment data path:%s\n",setting->data_owner_path);
\r
134 }else if(!setting->font_path && strncmp(FRAMEHOOK_OPT_FONT,arg,FRAMEHOOK_OPT_FONT_LEN) == 0){
\r
135 char* font = arg+FRAMEHOOK_OPT_FONT_LEN;
\r
136 setting->font_path = font;
\r
137 fprintf(log,"[framehook/init]Font path:%s\n",setting->font_path);
\r
139 }else if(strncmp(FRAMEHOOK_OPT_FONTINDEX,arg,FRAMEHOOK_OPT_FONTINDEX_LEN) == 0){
\r
140 setting->font_index = MAX(0,atoi(arg+FRAMEHOOK_OPT_FONTINDEX_LEN));
\r
141 fprintf(log,"[framehook/init]font index:%d\n",setting->font_index);
\r
143 }else if(strncmp(FRAMEHOOK_OPT_SHADOW,arg,FRAMEHOOK_OPT_SHADOW_LEN) == 0){
\r
144 setting->shadow_kind = MAX(0,atoi(arg+FRAMEHOOK_OPT_SHADOW_LEN));
\r
145 fprintf(log,"[framehook/init]shadow kind:%d\n",setting->shadow_kind);
\r
147 }else if(strncmp(FRAMEHOOK_OPT_SHOW_USER,arg,FRAMEHOOK_OPT_SHOW_USER_LEN) == 0){
\r
148 setting->user_slot_max = MAX(0,atoi(arg+FRAMEHOOK_OPT_SHOW_USER_LEN));
\r
149 fprintf(log,"[framehook/init]User Comments on screen:%d\n",setting->user_slot_max);
\r
151 }else if(strncmp(FRAMEHOOK_OPT_SHOW_OWNER,arg,FRAMEHOOK_OPT_SHOW_OWNER_LEN) == 0){
\r
152 setting->owner_slot_max = MAX(0,atoi(arg+FRAMEHOOK_OPT_SHOW_OWNER_LEN));
\r
153 fprintf(log,"[framehook/init]Owner Comments on screen:%d\n",setting->owner_slot_max);
\r
155 }else if(!setting->show_video && strcmp(arg,"--enable-show-video") == 0){
\r
156 fputs("[framehook/init]show video while converting.\n",log);
\r
158 setting->show_video=TRUE;
\r
159 }else if(!setting->fontsize_fix && strcmp(arg,"--enable-fix-font-size") == 0){
\r
160 fputs("[framehook/init]fix font size automatically.\n",log);
\r
162 setting->fontsize_fix=TRUE;
\r
163 }else if(!setting->opaque_comment && strcmp(arg,"--enable-opaque-comment") == 0){
\r
164 fputs("[framehook/init]enable opaque comment.\n",log);
\r
166 setting->opaque_comment=TRUE;
\r
169 //
\88ø
\90\94\82ð
\90³
\82µ
\82
\93ü
\97Í
\82µ
\82½
\82©
\94Û
\82©
\82Ì
\83`
\83F
\83b
\83N
\r
170 //
\82±
\82±
\82Å
\83`
\83F
\83b
\83N
\82µ
\82Ä
\82¢
\82é
\82Ì
\88È
\8aO
\82Í
\81A
\83f
\83t
\83H
\83\8b\83g
\90Ý
\92è
\82Å
\93¦
\82°
\82é
\81B
\r
171 if(!setting->font_path){
\r
172 fputs("[framehook/init]please set FONT PATH.\n",log);
\r
180 *
\95K
\97v
\82È
\8aÖ
\90\94\93ñ
\82Â
\82ß
\81B
\83t
\83\8c\81[
\83\80\82²
\82Æ
\82É
\8cÄ
\82Î
\82ê
\82é
\82æ
\81I
\r
183 __declspec(dllexport) void ExtProcess(void *ctx,const toolbox *tbox,vhext_frame *pict){
\r
184 ContextInfo *ci = (ContextInfo *) ctx;
\r
185 FILE* log = ci->log;
\r
188 * Saccubus 1.22
\88È
\8d~
\82Ì
\8ag
\92£vhook
\83t
\83B
\83\8b\83^
\82Å
\82Í
\81ARGB24
\83t
\83H
\81[
\83}
\83b
\83g
\82Å
\82Ì
\82Ý
\r
189 *
\89æ
\91\9c\82ª
\92ñ
\8b\9f\82³
\82ê
\82Ü
\82·
\81B
\r
192 //SDL
\82Ì
\83T
\81[
\83t
\83F
\83C
\83X
\82É
\95Ï
\8a·
\r
193 SDL_Surface* surf = SDL_CreateRGBSurfaceFrom(pict->data,
\r
194 pict->w,pict->h,24,pict->linesize,
\r
195 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
\r
206 //
\83t
\83B
\83\8b\83^
\r
207 int now_vpos = (pict->pts * VPOS_FACTOR);
\r
208 if(!main_process(&ci->data,surf,now_vpos)){
\r
209 fputs("[framehook/process]failed to process.\n",log);
\r
213 //
\83T
\81[
\83t
\83F
\83C
\83X
\8aJ
\95ú
\r
214 SDL_FreeSurface(surf);
\r
219 *
\95K
\97v
\82È
\8aÖ
\90\94\8dÅ
\8cã
\81B
\8fI
\82í
\82Á
\82½
\82ç
\8cÄ
\82Î
\82ê
\82é
\82æ
\81I
\r
223 __declspec(dllexport) void ExtRelease(void *ctx,const toolbox *tbox){
\r
225 ci = (ContextInfo *) ctx;
\r
226 FILE* log = ci->log;
\r
227 fputs("[framehook/close]closing...\n",log);
\r
229 closeData(&ci->data);
\r
230 fputs("[framehook/close]closed.\n",log);
\r
232 //
\83R
\83\93\83e
\83L
\83X
\83g
\91S
\91Ì
\r
235 //
\83\89\83C
\83u
\83\89\83\8a\82Ì
\8fI
\97¹
\r