00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <stdio.h>
00023 #include <string.h>
00024 #include <errno.h>
00025
00026 #include <layer.h>
00027 #include <jutils.h>
00028 #include <config.h>
00029
00030 #ifdef WITH_GTK2
00031 #include <gtk/gtk.h>
00032 #endif
00033
00034 #include <impl_layers.h>
00035 #include <context.h>
00036
00037
00038
00039 Layer *create_layer(Context *env, char *file) {
00040 char *end_file_ptr,*file_ptr;
00041 FILE *tmp;
00042 Layer *nlayer = NULL;
00043
00044 warning("create_layer is deprecated! use Context::open instead");
00045
00046
00047 if(strncasecmp(file,"/dev/",5)!=0
00048 && strncasecmp(file,"http://",7)!=0
00049 && strncasecmp(file,"ftp://",6)!=0
00050 && strncasecmp(file,"layer_",6)!=0) {
00051 tmp = fopen(file,"r");
00052 if(!tmp) {
00053 error("can't open %s to create a Layer: %s",
00054 file,strerror(errno));
00055 return NULL;
00056 } else fclose(tmp);
00057 }
00058
00059 end_file_ptr = file_ptr = file;
00060 end_file_ptr += strlen(file);
00061
00062
00063
00064 if( strncasecmp ( file_ptr,"/dev/video",10)==0) {
00065 #ifdef WITH_UNICAP
00066 unsigned int w=env->screen->w, h=env->screen->h;
00067 while(end_file_ptr!=file_ptr) {
00068 if(*end_file_ptr!='%') end_file_ptr--;
00069 else {
00070 *end_file_ptr='\0'; end_file_ptr++;
00071 sscanf(end_file_ptr,"%ux%u",&w,&h);
00072 end_file_ptr = file_ptr;
00073 }
00074 }
00075 nlayer = new UnicapLayer();
00076 if(! ((UnicapLayer*)nlayer)->init( env, (int)w, (int)h) ) {
00077 error("failed initialization of layer %s for %s", nlayer->name, file_ptr);
00078 delete nlayer; return NULL;
00079 }
00080 if(nlayer->open(file_ptr)) {
00081 notice("video camera source opened");
00082
00083
00084 } else {
00085 error("create_layer : V4L open failed");
00086 delete nlayer; nlayer = NULL;
00087 }
00088 #else
00089 error("Video4Linux layer support not compiled");
00090 act("can't load %s",file_ptr);
00091 #endif
00092
00093 } else
00094
00095 if( ((IS_VIDEO_EXTENSION(end_file_ptr)) | (IS_FIREWIRE_DEVICE(file_ptr))) ) {
00096 func("is a movie layer");
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112 #ifdef WITH_FFMPEG
00113 nlayer = new VideoLayer();
00114 if(!nlayer->init( )) {
00115 error("failed initialization of layer %s for %s", nlayer->name, file_ptr);
00116 delete nlayer; return NULL;
00117 }
00118 if(!nlayer->open(file_ptr)) {
00119 error("create_layer : VIDEO open failed");
00120 delete nlayer; nlayer = NULL;
00121 }
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134 #else
00135 error("VIDEO and AVI layer support not compiled");
00136 act("can't load %s",file_ptr);
00137 #endif
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149 } else
00150 if( (IS_IMAGE_EXTENSION(end_file_ptr))) {
00151
00152 nlayer = new ImageLayer();
00153 if(!nlayer->init( )) {
00154 error("failed initialization of layer %s for %s", nlayer->name, file_ptr);
00155 delete nlayer; return NULL;
00156 }
00157 if(!nlayer->open(file_ptr)) {
00158 error("create_layer : IMG open failed");
00159 delete nlayer; nlayer = NULL;
00160 }
00161 } else
00162 if(strncasecmp((end_file_ptr-4),".txt",4)==0) {
00163 #if defined WITH_TEXTLAYER
00164 nlayer = new TextLayer();
00165
00166 if(!nlayer->init( env )) {
00167 error("failed initialization of layer %s for %s", nlayer->name, file_ptr);
00168 delete nlayer; return NULL;
00169 }
00170
00171 if(!nlayer->open(file_ptr)) {
00172 error("create_layer : TXT open failed");
00173 delete nlayer; nlayer = NULL;
00174 }
00175 #else
00176 error("TXT layer support not compiled");
00177 act("can't load %s",file_ptr);
00178 return(NULL);
00179 #endif
00180
00181 } else
00182 if(strstr(file_ptr,"xscreensaver")) {
00183 #ifdef WITH_XSCREENSAVER
00184 nlayer = new XScreenSaverLayer();
00185
00186 if(!nlayer->init( env )) {
00187 error("failed initialization of layer %s for %s", nlayer->name, file_ptr);
00188 delete nlayer; return NULL;
00189 }
00190
00191 if (!nlayer->open(file_ptr)) {
00192 error("create_layer : XScreenSaver open failed");
00193 delete nlayer; nlayer = NULL;
00194 }
00195 #else
00196 error("no xscreensaver layer support");
00197 act("can't load %s",file_ptr);
00198 return(NULL);
00199 #endif
00200 } else if(strncasecmp(file_ptr,"layer_goom",10)==0) {
00201
00202 #ifdef WITH_GOOM
00203 nlayer = new GoomLayer();
00204
00205 if(!nlayer->init( env )) {
00206 error("failed initialization of layer %s for %s", nlayer->name, file_ptr);
00207 delete nlayer; return NULL;
00208 }
00209 #else
00210 error("goom layer not supported");
00211 return(NULL);
00212 #endif
00213
00214
00215 }
00216 #ifdef WITH_FLASH
00217 else if(strncasecmp(end_file_ptr-4,".swf",4)==0) {
00218
00219 nlayer = new FlashLayer();
00220 if(!nlayer->init( env )) {
00221 error("failed initialization of layer %s for %s", nlayer->name, file_ptr);
00222 delete nlayer; return NULL;
00223 }
00224
00225 if(!nlayer->open(file_ptr)) {
00226 error("create_layer : SWF open failed");
00227 delete nlayer; nlayer = NULL;
00228 }
00229
00230 }
00231 #endif
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249 if(!nlayer)
00250 error("can't create a layer with %s",file);
00251 else
00252 func("create_layer succesful, returns %p",nlayer);
00253 return nlayer;
00254 }
00255