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
15 #define DLLEXPORT __declspec(dllexport)
\r
20 typedef struct ContextInfo{
\r
26 *
\95K
\97v
\82È
\8aÖ
\90\94\82Ð
\82Æ
\82Â
\82ß
\81B
\8dÅ
\8f\89\82É
\8cÄ
\82Î
\82ê
\82é
\82æ
\81I
\r
29 int init_setting(FILE*log,const toolbox *tbox,SETTING* setting,int argc, char *argv[]);
\r
31 DLLEXPORT int ExtConfigure(void **ctxp,const toolbox *tbox, int argc, char *argv[]){
\r
34 FILE* log = fopen("[log]vhext.txt", "w");
\r
36 puts("[framehook/init]failed to open logfile.\n");
\r
40 fputs("[framehook/init]initializing..\n",log);
\r
43 //
\95K
\97v
\82È
\90Ý
\92è
\82ª
\82 \82é
\82©
\82Ì
\8am
\94F
\r
44 fprintf(log,"[framehook/init]called with argc = %d\n",argc);
\r
46 for(i=0;i<argc;i++){
\r
47 fprintf(log,"[framehook/init]arg[%2d] = %s\n",i,argv[i]);
\r
50 //
\83Z
\83b
\83e
\83B
\83\93\83O
\8eæ
\93¾
\81B
\r
52 if(init_setting(log,tbox,&setting,argc,argv)){
\r
53 fputs("[framehook/init]initialized settings.\n",log);
\r
56 fputs("[framehook/init]failed to initialize settings.\n",log);
\r
60 //
\83\89\83C
\83u
\83\89\83\8a\82È
\82Ç
\82Ì
\8f\89\8aú
\89»
\r
62 fputs("[framehook/init]initialized libs.\n",log);
\r
65 fputs("[framehook/init]failed to initialize libs.\n",log);
\r
69 /*
\83R
\83\93\83e
\83L
\83X
\83g
\82Ì
\90Ý
\92è*/
\r
70 *ctxp = malloc(sizeof(ContextInfo));
\r
72 fputs("[framehook/init]initialized to malloc for context.\n",log);
\r
75 ContextInfo* ci = (ContextInfo*)*ctxp;
\r
78 if(initData(&ci->data,log,&setting)){
\r
79 fputs("[framehook/init]initialized context.\n",log);
\r
80 fputs("[framehook/init]initialized.\n",log);
\r
84 fputs("[framehook/init]failed to initialize context.\n",log);
\r
90 *
\93à
\95\94\82Å
\82Ì
\82Ý
\8cÄ
\82Î
\82ê
\82é
\81B
\r
94 argv[0]:
\83v
\83\8d\83O
\83\89\83\80\r
96 argv[2]:
\83t
\83H
\83\93\83g
\r
97 argv[3]:
\83t
\83H
\83\93\83g
\83C
\83\93\83f
\83b
\83N
\83X
\r
98 argv[4]:
\88ê
\89æ
\96Ê
\r
99 argv[5]:
\89e
\82Ì
\8eí
\97Þ
\r
100 \88È
\8d~
\83I
\83v
\83V
\83\87\83\93\r
101 --enable-show-video
\81F
\95`
\89æ
\92\86\82É
\93®
\89æ
\82ð
\8c©
\82¹
\82é
\81B
\r
102 --enable-fontsize-fix
\81F
\83t
\83H
\83\93\83g
\83T
\83C
\83Y
\82ð
\8e©
\93®
\82Å
\92²
\90®
\82·
\82é
\81B
\r
105 int init_setting(FILE*log,const toolbox *tbox,SETTING* setting,int argc, char *argv[]){
\r
106 /*video
\82Ì
\92·
\82³*/
\r
107 setting->video_length = (tbox->video_length * VPOS_FACTOR);
\r
108 /*
\88È
\8d~
\83I
\83v
\83V
\83\87\83\93*/
\r
110 //
\83R
\83\81\83\93\83g
\82ð
\8c©
\82¹
\82é
\82©
\94Û
\82©
\81H
\r
111 setting->enable_user_comment = FALSE;
\r
112 setting->enable_owner_comment = FALSE;
\r
113 setting->data_user_path = NULL;
\r
114 setting->data_owner_path = NULL;
\r
115 //
\88ê
\94Ê
\93I
\82È
\90Ý
\92è
\r
116 setting->font_path = NULL;
\r
117 setting->font_index = 0;
\r
118 setting->user_slot_max = 30;
\r
119 setting->owner_slot_max = 30;
\r
120 setting->shadow_kind = 1;//
\83f
\83t
\83H
\83\8b\83g
\82Í
\83j
\83R
\83j
\83R
\93®
\89æ
\95\97\r
121 setting->show_video = FALSE;
\r
122 setting->fontsize_fix=FALSE;
\r
123 setting->opaque_comment=FALSE;
\r
126 for(i=0;i<argc;i++){
\r
128 if(!setting->data_user_path && strncmp(FRAMEHOOK_OPT_DATA_USER,arg,FRAMEHOOK_OPT_DATA_USER_LEN) == 0){
\r
129 char* data_user = arg+FRAMEHOOK_OPT_DATA_USER_LEN;
\r
130 setting->data_user_path = data_user;
\r
131 setting->enable_user_comment = TRUE;
\r
132 fprintf(log,"[framehook/init]User Comment data path:%s\n",setting->data_user_path);
\r
134 }else if(!setting->data_owner_path && strncmp(FRAMEHOOK_OPT_DATA_OWNER,arg,FRAMEHOOK_OPT_DATA_OWNER_LEN) == 0){
\r
135 char* data_owner = arg+FRAMEHOOK_OPT_DATA_OWNER_LEN;
\r
136 setting->data_owner_path = data_owner;
\r
137 setting->enable_owner_comment = TRUE;
\r
138 fprintf(log,"[framehook/init]Owner Comment data path:%s\n",setting->data_owner_path);
\r
140 }else if(!setting->font_path && strncmp(FRAMEHOOK_OPT_FONT,arg,FRAMEHOOK_OPT_FONT_LEN) == 0){
\r
141 char* font = arg+FRAMEHOOK_OPT_FONT_LEN;
\r
142 setting->font_path = font;
\r
143 fprintf(log,"[framehook/init]Font path:%s\n",setting->font_path);
\r
145 }else if(strncmp(FRAMEHOOK_OPT_FONTINDEX,arg,FRAMEHOOK_OPT_FONTINDEX_LEN) == 0){
\r
146 setting->font_index = MAX(0,atoi(arg+FRAMEHOOK_OPT_FONTINDEX_LEN));
\r
147 fprintf(log,"[framehook/init]font index:%d\n",setting->font_index);
\r
149 }else if(strncmp(FRAMEHOOK_OPT_SHADOW,arg,FRAMEHOOK_OPT_SHADOW_LEN) == 0){
\r
150 setting->shadow_kind = MAX(0,atoi(arg+FRAMEHOOK_OPT_SHADOW_LEN));
\r
151 fprintf(log,"[framehook/init]shadow kind:%d\n",setting->shadow_kind);
\r
153 }else if(strncmp(FRAMEHOOK_OPT_SHOW_USER,arg,FRAMEHOOK_OPT_SHOW_USER_LEN) == 0){
\r
154 setting->user_slot_max = MAX(0,atoi(arg+FRAMEHOOK_OPT_SHOW_USER_LEN));
\r
155 fprintf(log,"[framehook/init]User Comments on screen:%d\n",setting->user_slot_max);
\r
157 }else if(strncmp(FRAMEHOOK_OPT_SHOW_OWNER,arg,FRAMEHOOK_OPT_SHOW_OWNER_LEN) == 0){
\r
158 setting->owner_slot_max = MAX(0,atoi(arg+FRAMEHOOK_OPT_SHOW_OWNER_LEN));
\r
159 fprintf(log,"[framehook/init]Owner Comments on screen:%d\n",setting->owner_slot_max);
\r
161 }else if(!setting->show_video && strcmp(arg,"--enable-show-video") == 0){
\r
162 fputs("[framehook/init]show video while converting.\n",log);
\r
164 setting->show_video=TRUE;
\r
165 }else if(!setting->fontsize_fix && strcmp(arg,"--enable-fix-font-size") == 0){
\r
166 fputs("[framehook/init]fix font size automatically.\n",log);
\r
168 setting->fontsize_fix=TRUE;
\r
169 }else if(!setting->opaque_comment && strcmp(arg,"--enable-opaque-comment") == 0){
\r
170 fputs("[framehook/init]enable opaque comment.\n",log);
\r
172 setting->opaque_comment=TRUE;
\r
175 //
\88ø
\90\94\82ð
\90³
\82µ
\82
\93ü
\97Í
\82µ
\82½
\82©
\94Û
\82©
\82Ì
\83`
\83F
\83b
\83N
\r
176 //
\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
177 if(!setting->font_path){
\r
178 fputs("[framehook/init]please set FONT PATH.\n",log);
\r
186 *
\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
189 DLLEXPORT void ExtProcess(void *ctx,const toolbox *tbox,vhext_frame *pict){
\r
190 ContextInfo *ci = (ContextInfo *) ctx;
\r
191 FILE* log = ci->log;
\r
194 * 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
195 *
\89æ
\91\9c\82ª
\92ñ
\8b\9f\82³
\82ê
\82Ü
\82·
\81B
\r
198 //SDL
\82Ì
\83T
\81[
\83t
\83F
\83C
\83X
\82É
\95Ï
\8a·
\r
199 SDL_Surface* surf = SDL_CreateRGBSurfaceFrom(pict->data,
\r
200 pict->w,pict->h,24,pict->linesize,
\r
201 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
\r
212 //
\83t
\83B
\83\8b\83^
\r
213 int now_vpos = (pict->pts * VPOS_FACTOR);
\r
214 if(!main_process(&ci->data,surf,now_vpos)){
\r
215 fputs("[framehook/process]failed to process.\n",log);
\r
219 //
\83T
\81[
\83t
\83F
\83C
\83X
\8aJ
\95ú
\r
220 SDL_FreeSurface(surf);
\r
225 *
\95K
\97v
\82È
\8aÖ
\90\94\8dÅ
\8cã
\81B
\8fI
\82í
\82Á
\82½
\82ç
\8cÄ
\82Î
\82ê
\82é
\82æ
\81I
\r
229 DLLEXPORT void ExtRelease(void *ctx,const toolbox *tbox){
\r
231 ci = (ContextInfo *) ctx;
\r
232 FILE* log = ci->log;
\r
233 fputs("[framehook/close]closing...\n",log);
\r
235 closeData(&ci->data);
\r
236 fputs("[framehook/close]closed.\n",log);
\r
238 //
\83R
\83\93\83e
\83L
\83X
\83g
\91S
\91Ì
\r
241 //
\83\89\83C
\83u
\83\89\83\8a\82Ì
\8fI
\97¹
\r