OSDN Git Service

Workerメソッド名変更
[coroid/inqubus.git] / vhook / main.c
index e5b60ea..4e459d3 100644 (file)
-\r
-#include <SDL/SDL.h>\r
-#include <SDL/SDL_ttf.h>\r
-#include <stdio.h>\r
-#include "main.h"\r
-#include "mydef.h"\r
-#include "nicodef.h"\r
-#include "process.h"\r
-/**\r
- * \83\89\83C\83u\83\89\83\8a\8f\89\8aú\89»\r
- */\r
-int init(FILE* log){\r
-       fputs("[main/init]initializing libs...\n",log);\r
-       //SDL\r
-       if(SDL_Init(SDL_INIT_VIDEO)>=0){\r
-               fputs("[main/init]initialized SDL.\n",log);\r
-       }else{\r
-               fputs("[main/init]failed to initialize SDL.\n",log);\r
-           return FALSE;\r
-       }\r
-       //SDL_ttf\r
-       if(TTF_Init() >= 0){\r
-               fputs("[main/init]initialized SDL_ttf.\n",log);\r
-       }else{\r
-               fputs("[main/init]failed to initialize SDL_ttf.\n",log);\r
-           return FALSE;\r
-       }\r
-       fputs("[main/init]initialized libs.\n",log);\r
-       return TRUE;\r
-}\r
-/*\r
- * \83f\81[\83^\82Ì\8f\89\8aú\89»\r
- */\r
-int initData(DATA* data,FILE* log,const SETTING* setting){\r
-       int i;\r
-       data->enable_user_comment = setting->enable_user_comment;\r
-       data->enable_owner_comment = setting->enable_owner_comment;\r
-       data->log = log;\r
-       data->fontsize_fix = setting->fontsize_fix;\r
-       data->show_video = setting->show_video;\r
-       data->opaque_comment = setting->opaque_comment;\r
-       data->shadow_kind = setting->shadow_kind;\r
-       data->process_first_called=FALSE;\r
-       data->video_length = setting->video_length;\r
-       fputs("[main/init]initializing context...\n",log);\r
-       //\83t\83H\83\93\83g\r
-       TTF_Font** font = data->font;\r
-       const char* font_path = setting->font_path;\r
-       const int font_index = setting->font_index;\r
-       for(i=0;i<CMD_FONT_MAX;i++){\r
-               int fontsize = COMMENT_FONT_SIZE[i];\r
-               if(setting->fontsize_fix){\r
-                       fontsize <<= 1;\r
-               }\r
-               font[i] = TTF_OpenFontIndex(font_path,fontsize,font_index);\r
-               if(font[i] == NULL){\r
-                   fprintf(log,"[main/init]failed to load font:%s index:[%d].\n",font_path,font_index);\r
-                   //0\82Å\82à\8e\8e\82µ\82Ä\82Ý\82é\81B\r
-                   fputs("[main/init]retrying to open font at index:0...",log);\r
-                   font[i] = TTF_OpenFontIndex(font_path,fontsize,0);\r
-                   if(font[i] == NULL){\r
-                           fputs("failed.\n",log);\r
-                           return FALSE;\r
-                   }else{\r
-                           fputs("success.\n",log);\r
-                   }\r
-               }\r
-               TTF_SetFontStyle(font[i],TTF_STYLE_BOLD);\r
-       }\r
-       fputs("[main/init]initialized font.\n",log);\r
-       /*\r
-        * \83\86\81[\83U\83R\83\81\83\93\83g\r
-        */\r
-       if(data->enable_user_comment){\r
-               fputs("[main/init]User Comment is enabled.\n",log);\r
-               //\83R\83\81\83\93\83g\83f\81[\83^\r
-               if(initChat(log,&data->chat,setting->data_user_path,&data->slot,data->video_length)){\r
-                       fputs("[main/init]initialized comment.\n",log);\r
-               }else{\r
-                       fputs("[main/init]failed to initialize comment.",log);\r
-                       return FALSE;\r
-               }\r
-               //\83R\83\81\83\93\83g\83X\83\8d\83b\83g\r
-               if(initChatSlot(log,&data->slot,setting->user_slot_max,&data->chat)){\r
-                       fputs("[main/init]initialized comment slot.\n",log);\r
-               }else{\r
-                       fputs("[main/init]failed to initialize comment slot.",log);\r
-                       return FALSE;\r
-               }\r
-       }\r
-       /*\r
-        * \83I\81[\83i\83R\83\81\83\93\83g\r
-        */\r
-       if(data->enable_owner_comment){\r
-               fputs("[main/init]Owner Comment is enabled.\n",log);\r
-       }\r
-       \r
-       //\8fI\82í\82è\81B\r
-       fputs("[main/init]initialized context.\n",log);\r
-       return TRUE;\r
-}\r
-/*\r
- * \89f\91\9c\82Ì\95Ï\8a·\r
- */\r
-int main_process(DATA* data,SDL_Surface* surf,const int now_vpos){\r
-       FILE* log = data->log;\r
-       if(!data->process_first_called){\r
-               fprintf(log,"[main/process]screen size is %dx%d.\n",surf->w,surf->h);\r
-               fflush(log);\r
-       }\r
-       /*\83t\83B\83\8b\83^\82ð\82©\82¯\82é*/\r
-       if(process(data,surf,now_vpos)){\r
-       }\r
-       fflush(log);\r
-       /*\95Ï\8a·\82µ\82½\89æ\91\9c\82ð\8c©\82¹\82é\81B*/\r
-       if(data->show_video){\r
-               if(!data->process_first_called){\r
-                       data->screen = SDL_SetVideoMode(surf->w, surf->h, 24, SDL_HWSURFACE | SDL_DOUBLEBUF);\r
-                       if(data->screen == NULL){\r
-                               fputs("[main/process]failed to initialize screen.\n",log);\r
-                               fflush(log);\r
-                               return FALSE;\r
-                       }\r
-               }\r
-               SDL_BlitSurface(surf,NULL,data->screen,NULL);\r
-               SDL_Flip(data->screen);\r
-               SDL_Event event;\r
-               while(SDL_PollEvent(&event)){}\r
-       }\r
-       //\88ê\89ñ\96Ú\88È\8d~\82ÍTRUE\82É\82È\82é\81B\r
-       data->process_first_called=TRUE;\r
-       fflush(log);\r
-       return TRUE;\r
-}\r
-/*\r
- * \83f\81[\83^\82Ì\83N\83\8d\81[\83Y\r
- */\r
-int closeData(DATA* data){\r
-       int i;\r
-       //\83\86\81[\83U\83R\83\81\83\93\83g\82ª\97L\8cø\82È\82ç\8aJ\95ú\r
-       if(data->enable_user_comment){\r
-               closeChat(&data->chat);\r
-               closeChatSlot(&data->slot);\r
-       }\r
-       //\83I\81[\83i\83R\83\81\83\93\83g\82ª\97L\8cø\82È\82ç\8aJ\95ú\r
-       if(data->enable_owner_comment){\r
-       }\r
-    //\83t\83H\83\93\83g\8aJ\95ú\r
-       for(i=0;i<CMD_FONT_MAX;i++){\r
-               TTF_CloseFont(data->font[i]);\r
-       }\r
-       return TRUE;\r
-}\r
-\r
-/*\r
- * \83\89\83C\83u\83\89\83\8a\83V\83\83\83b\83g\83_\83E\83\93\r
- */\r
-int close(){\r
-    //SDL\82ð\83V\83\83\83b\83g\83_\83E\83\93\r
-    SDL_Quit();\r
-       //\93¯\82\82­TTF\82ð\83V\83\83\83b\83g\83_\83E\83\93\r
-    TTF_Quit();\r
-       return TRUE;\r
-}\r
+
+#include <SDL/SDL.h>
+#include <SDL/SDL_ttf.h>
+#include <stdio.h>
+#include "main.h"
+#include "mydef.h"
+#include "nicodef.h"
+#include "process.h"
+/**
+ * ライブラリ初期化
+ */
+int init(FILE* log){
+       fputs("[main/init]initializing libs...\n",log);
+       //SDL
+       if(SDL_Init(SDL_INIT_VIDEO)>=0){
+               fputs("[main/init]initialized SDL.\n",log);
+       }else{
+               fputs("[main/init]failed to initialize SDL.\n",log);
+           return FALSE;
+       }
+       //SDL_ttf
+       if(TTF_Init() >= 0){
+               fputs("[main/init]initialized SDL_ttf.\n",log);
+       }else{
+               fputs("[main/init]failed to initialize SDL_ttf.\n",log);
+           return FALSE;
+       }
+       fputs("[main/init]initialized libs.\n",log);
+       return TRUE;
+}
+/*
+ * データの初期化
+ */
+int initData(DATA* data,FILE* log,const SETTING* setting){
+       int i;
+    data->user_comment.common = data;
+    data->owner_comment.common = data;
+       data->user_comment.enable = setting->enable_user_comment;
+       data->owner_comment.enable = setting->enable_owner_comment;
+       data->user_comment.opaque_comment = setting->opaque_comment;
+    data->owner_comment.opaque_comment = 1; // オーナコメントは常に不透明
+       data->log = log;
+       data->fontsize_fix = setting->fontsize_fix;
+       data->show_video = setting->show_video;
+       data->shadow_kind = setting->shadow_kind;
+       data->process_first_called=FALSE;
+       data->video_length = setting->video_length;
+    data->aspect_mode = setting->aspect_mode;
+       fputs("[main/init]initializing context...\n",log);
+       //フォント
+       TTF_Font** font = data->font;
+       const char* font_path = setting->font_path;
+       const int font_index = setting->font_index;
+       for(i=0;i<CMD_FONT_MAX;i++){
+               int fontsize = COMMENT_FONT_SIZE[i];
+               if(setting->fontsize_fix){
+                       fontsize <<= 1;
+               }
+               font[i] = TTF_OpenFontIndex(font_path,fontsize,font_index);
+               if(font[i] == NULL){
+                   fprintf(log,"[main/init]failed to load font:%s index:[%d].\n",font_path,font_index);
+                   //0でも試してみる。
+                   fputs("[main/init]retrying to open font at index:0...",log);
+                   font[i] = TTF_OpenFontIndex(font_path,fontsize,0);
+                   if(font[i] == NULL){
+                           fputs("failed.\n",log);
+                           return FALSE;
+                   }else{
+                           fputs("success.\n",log);
+                   }
+               }
+               TTF_SetFontStyle(font[i],TTF_STYLE_BOLD);
+       }
+       fputs("[main/init]initialized font.\n",log);
+       /*
+        * ユーザコメント
+        */
+       if(data->user_comment.enable){
+               fputs("[main/init]User Comment is enabled.\n",log);
+               //コメントデータ
+               if(initChat(log,&data->user_comment.chat,setting->data_user_path,&data->user_comment.slot,data->video_length)){
+                       fputs("[main/init]initialized comment.\n",log);
+               }else{
+                       fputs("[main/init]failed to initialize comment.",log);
+                       return FALSE;
+               }
+               //コメントスロット
+               if(initChatSlot(log,&data->user_comment.slot,setting->user_slot_max,&data->user_comment.chat)){
+                       fputs("[main/init]initialized comment slot.\n",log);
+               }else{
+                       fputs("[main/init]failed to initialize comment slot.",log);
+                       return FALSE;
+               }
+       }
+       /*
+        * オーナコメント
+        */
+       if(data->owner_comment.enable){
+               fputs("[main/init]Owner Comment is enabled.\n",log);
+               //コメントデータ
+               if(initChat(log,&data->owner_comment.chat,setting->data_owner_path,&data->owner_comment.slot,data->video_length)){
+                       fputs("[main/init]initialized comment.\n",log);
+               }else{
+                       fputs("[main/init]failed to initialize comment.",log);
+                       return FALSE;
+               }
+               //コメントスロット
+        // TODO とりあえず最大数は1024にしておくが...
+               if(initChatSlot(log,&data->owner_comment.slot,1024,&data->owner_comment.chat)){
+                       fputs("[main/init]initialized comment slot.\n",log);
+               }else{
+                       fputs("[main/init]failed to initialize comment slot.",log);
+                       return FALSE;
+               }
+       }
+       
+       //終わり。
+       fputs("[main/init]initialized context.\n",log);
+       return TRUE;
+}
+/*
+ * 映像の変換
+ */
+int main_process(DATA* data,SDL_Surface* surf,const int now_vpos){
+       FILE* log = data->log;
+       if(!data->process_first_called){
+               fprintf(log,"[main/process]screen size is %dx%d.\n",surf->w,surf->h);
+               fflush(log);
+       }
+       /*フィルタをかける*/
+       if(process(data,surf,now_vpos)){
+       }
+       fflush(log);
+       /*変換した画像を見せる。*/
+       if(data->show_video){
+               if(!data->process_first_called){
+                       data->screen = SDL_SetVideoMode(surf->w, surf->h, 24, SDL_HWSURFACE | SDL_DOUBLEBUF);
+                       if(data->screen == NULL){
+                               fputs("[main/process]failed to initialize screen.\n",log);
+                               fflush(log);
+                               return FALSE;
+                       }
+               }
+               SDL_BlitSurface(surf,NULL,data->screen,NULL);
+               SDL_Flip(data->screen);
+               SDL_Event event;
+               while(SDL_PollEvent(&event)){}
+       }
+       //一回目以降はTRUEになる。
+       data->process_first_called=TRUE;
+       fflush(log);
+       return TRUE;
+}
+/*
+ * データのクローズ
+ */
+int closeData(DATA* data){
+       int i;
+       //ユーザコメントが有効なら開放
+       if(data->user_comment.enable){
+               closeChat(&data->user_comment.chat);
+               closeChatSlot(&data->user_comment.slot);
+       }
+       //オーナコメントが有効なら開放
+       if(data->owner_comment.enable){
+               closeChat(&data->owner_comment.chat);
+               closeChatSlot(&data->owner_comment.slot);
+       }
+    //フォント開放
+       for(i=0;i<CMD_FONT_MAX;i++){
+               TTF_CloseFont(data->font[i]);
+       }
+       return TRUE;
+}
+
+/*
+ * ライブラリシャットダウン
+ */
+int close(){
+    //SDLをシャットダウン
+    SDL_Quit();
+       //同じくTTFをシャットダウン
+    TTF_Quit();
+       return TRUE;
+}