7 #include "common/framehook_ext.h"
15 #define DLLEXPORT __declspec(dllexport)
20 typedef struct ContextInfo{
29 int init_setting(FILE*log,const toolbox *tbox,SETTING* setting,int argc, char *argv[]);
31 DLLEXPORT int ExtConfigure(void **ctxp,const toolbox *tbox, int argc, char *argv[]){
34 FILE* log = fopen("[log]vhext.txt", "w");
36 puts("[framehook/init]failed to open logfile.\n");
40 fputs("[framehook/init]initializing..\n",log);
44 fprintf(log,"[framehook/init]called with argc = %d\n",argc);
47 fprintf(log,"[framehook/init]arg[%2d] = %s\n",i,argv[i]);
52 if(init_setting(log,tbox,&setting,argc,argv)){
53 fputs("[framehook/init]initialized settings.\n",log);
56 fputs("[framehook/init]failed to initialize settings.\n",log);
62 fputs("[framehook/init]initialized libs.\n",log);
65 fputs("[framehook/init]failed to initialize libs.\n",log);
70 *ctxp = malloc(sizeof(ContextInfo));
72 fputs("[framehook/init]initialized to malloc for context.\n",log);
75 ContextInfo* ci = (ContextInfo*)*ctxp;
78 if(initData(&ci->data,log,&setting)){
79 fputs("[framehook/init]initialized context.\n",log);
80 fputs("[framehook/init]initialized.\n",log);
84 fputs("[framehook/init]failed to initialize context.\n",log);
101 --enable-show-video:描画中に動画を見せる。
102 --enable-fontsize-fix:フォントサイズを自動で調整する。
105 int init_setting(FILE*log,const toolbox *tbox,SETTING* setting,int argc, char *argv[]){
107 setting->video_length = (tbox->video_length * VPOS_FACTOR);
111 setting->enable_user_comment = FALSE;
112 setting->enable_owner_comment = FALSE;
113 setting->data_user_path = NULL;
114 setting->data_owner_path = NULL;
116 setting->font_path = NULL;
117 setting->font_index = 0;
118 setting->user_slot_max = 30;
119 setting->owner_slot_max = 30;
120 setting->shadow_kind = 1;//デフォルトはニコニコ動画風
121 setting->show_video = FALSE;
122 setting->fontsize_fix=FALSE;
123 setting->opaque_comment=FALSE;
124 setting->aspect_mode = 0;
129 if(!setting->data_user_path && strncmp(FRAMEHOOK_OPT_DATA_USER,arg,FRAMEHOOK_OPT_DATA_USER_LEN) == 0){
130 char* data_user = arg+FRAMEHOOK_OPT_DATA_USER_LEN;
131 setting->data_user_path = data_user;
132 setting->enable_user_comment = TRUE;
133 fprintf(log,"[framehook/init]User Comment data path:%s\n",setting->data_user_path);
135 }else if(!setting->data_owner_path && strncmp(FRAMEHOOK_OPT_DATA_OWNER,arg,FRAMEHOOK_OPT_DATA_OWNER_LEN) == 0){
136 char* data_owner = arg+FRAMEHOOK_OPT_DATA_OWNER_LEN;
137 setting->data_owner_path = data_owner;
138 setting->enable_owner_comment = TRUE;
139 fprintf(log,"[framehook/init]Owner Comment data path:%s\n",setting->data_owner_path);
141 }else if(!setting->font_path && strncmp(FRAMEHOOK_OPT_FONT,arg,FRAMEHOOK_OPT_FONT_LEN) == 0){
142 char* font = arg+FRAMEHOOK_OPT_FONT_LEN;
143 setting->font_path = font;
144 fprintf(log,"[framehook/init]Font path:%s\n",setting->font_path);
146 }else if(strncmp(FRAMEHOOK_OPT_FONTINDEX,arg,FRAMEHOOK_OPT_FONTINDEX_LEN) == 0){
147 setting->font_index = MAX(0,atoi(arg+FRAMEHOOK_OPT_FONTINDEX_LEN));
148 fprintf(log,"[framehook/init]font index:%d\n",setting->font_index);
150 }else if(strncmp(FRAMEHOOK_OPT_SHADOW,arg,FRAMEHOOK_OPT_SHADOW_LEN) == 0){
151 setting->shadow_kind = MAX(0,atoi(arg+FRAMEHOOK_OPT_SHADOW_LEN));
152 fprintf(log,"[framehook/init]shadow kind:%d\n",setting->shadow_kind);
154 }else if(strncmp(FRAMEHOOK_OPT_SHOW_USER,arg,FRAMEHOOK_OPT_SHOW_USER_LEN) == 0){
155 setting->user_slot_max = MAX(0,atoi(arg+FRAMEHOOK_OPT_SHOW_USER_LEN));
156 fprintf(log,"[framehook/init]User Comments on screen:%d\n",setting->user_slot_max);
158 }else if(strncmp(FRAMEHOOK_OPT_SHOW_OWNER,arg,FRAMEHOOK_OPT_SHOW_OWNER_LEN) == 0){
159 setting->owner_slot_max = MAX(0,atoi(arg+FRAMEHOOK_OPT_SHOW_OWNER_LEN));
160 fprintf(log,"[framehook/init]Owner Comments on screen:%d\n",setting->owner_slot_max);
162 }else if(!setting->show_video && strcmp(arg,"--enable-show-video") == 0){
163 fputs("[framehook/init]show video while converting.\n",log);
165 setting->show_video=TRUE;
166 }else if(!setting->fontsize_fix && strcmp(arg,"--enable-fix-font-size") == 0){
167 fputs("[framehook/init]fix font size automatically.\n",log);
169 setting->fontsize_fix=TRUE;
170 }else if(!setting->opaque_comment && strcmp(arg,"--enable-opaque-comment") == 0){
171 fputs("[framehook/init]enable opaque comment.\n",log);
173 setting->opaque_comment=TRUE;
174 } else if (strncmp(FRAMEHOOK_OPT_ASPECT_MODE, arg, FRAMEHOOK_OPT_ASPECT_MODE_LEN) == 0) {
175 setting->aspect_mode = MAX(0, atoi(arg + FRAMEHOOK_OPT_ASPECT_MODE_LEN));
176 fprintf(log, "[framehook/init]aspect mode:%d\n", setting->aspect_mode);
181 //ここでチェックしているの以外は、デフォルト設定で逃げる。
182 if(!setting->font_path){
183 fputs("[framehook/init]please set FONT PATH.\n",log);
191 * 必要な関数二つめ。フレームごとに呼ばれるよ!
194 DLLEXPORT void ExtProcess(void *ctx,const toolbox *tbox,vhext_frame *pict){
195 ContextInfo *ci = (ContextInfo *) ctx;
199 * Saccubus 1.22以降の拡張vhookフィルタでは、RGB24フォーマットでのみ
204 SDL_Surface* surf = SDL_CreateRGBSurfaceFrom(pict->data,
205 pict->w,pict->h,24,pict->linesize,
206 #if SDL_BYTEORDER == SDL_BIG_ENDIAN
218 int now_vpos = (pict->pts * VPOS_FACTOR);
219 if(!main_process(&ci->data,surf,now_vpos)){
220 fputs("[framehook/process]failed to process.\n",log);
225 SDL_FreeSurface(surf);
230 * 必要な関数最後。終わったら呼ばれるよ!
234 DLLEXPORT void ExtRelease(void *ctx,const toolbox *tbox){
236 ci = (ContextInfo *) ctx;
238 fputs("[framehook/close]closing...\n",log);
240 closeData(&ci->data);
241 fputs("[framehook/close]closed.\n",log);