-\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¶\82TTF\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;
+}