comparison vidix/vidixlib.c @ 4191:62a6135d090e

+ new features and possibility deinterlacing oem effects ITU color space forcing driver - audio support (develop and introduce AUDIX for that)
author nick
date Wed, 16 Jan 2002 08:33:17 +0000
parents b61ba6c256dd
children 90386125ec1f
comparison
equal deleted inserted replaced
4190:2ed90891750e 4191:62a6135d090e
40 int (*init)(void); 40 int (*init)(void);
41 void (*destroy)(void); 41 void (*destroy)(void);
42 int (*frame_sel)( unsigned frame_idx ); 42 int (*frame_sel)( unsigned frame_idx );
43 int (*get_eq)( vidix_video_eq_t * ); 43 int (*get_eq)( vidix_video_eq_t * );
44 int (*set_eq)( const vidix_video_eq_t * ); 44 int (*set_eq)( const vidix_video_eq_t * );
45 int (*get_deint)( vidix_deinterlace_t * );
46 int (*set_deint)( const vidix_deinterlace_t * );
45 int (*copy_frame)( const vidix_dma_t * ); 47 int (*copy_frame)( const vidix_dma_t * );
46 int (*get_gkey)( vidix_grkey_t * ); 48 int (*get_gkey)( vidix_grkey_t * );
47 int (*set_gkey)( const vidix_grkey_t * ); 49 int (*set_gkey)( const vidix_grkey_t * );
50 int (*get_num_fx)( unsigned * );
51 int (*get_fx)( vidix_oem_fx_t * );
52 int (*set_fx)( const vidix_oem_fx_t * );
48 }vdl_stream_t; 53 }vdl_stream_t;
49 54
50 #define t_vdl(p) (((vdl_stream_t *)p)) 55 #define t_vdl(p) (((vdl_stream_t *)p))
51 56
52 extern unsigned vdlGetVersion( void ) 57 extern unsigned vdlGetVersion( void )
66 t_vdl(stream)->frame_sel = dlsym(t_vdl(stream)->handle,"vixPlaybackFrameSelect"); 71 t_vdl(stream)->frame_sel = dlsym(t_vdl(stream)->handle,"vixPlaybackFrameSelect");
67 t_vdl(stream)->get_eq = dlsym(t_vdl(stream)->handle,"vixPlaybackGetEq"); 72 t_vdl(stream)->get_eq = dlsym(t_vdl(stream)->handle,"vixPlaybackGetEq");
68 t_vdl(stream)->set_eq = dlsym(t_vdl(stream)->handle,"vixPlaybackSetEq"); 73 t_vdl(stream)->set_eq = dlsym(t_vdl(stream)->handle,"vixPlaybackSetEq");
69 t_vdl(stream)->get_gkey = dlsym(t_vdl(stream)->handle,"vixGetGrKeys"); 74 t_vdl(stream)->get_gkey = dlsym(t_vdl(stream)->handle,"vixGetGrKeys");
70 t_vdl(stream)->set_gkey = dlsym(t_vdl(stream)->handle,"vixSetGrKeys"); 75 t_vdl(stream)->set_gkey = dlsym(t_vdl(stream)->handle,"vixSetGrKeys");
76 t_vdl(stream)->get_deint = dlsym(t_vdl(stream)->handle,"vixPlaybackGetDeint");
77 t_vdl(stream)->set_deint = dlsym(t_vdl(stream)->handle,"vixPlaybackSetDeint");
71 t_vdl(stream)->copy_frame = dlsym(t_vdl(stream)->handle,"vixPlaybackCopyFrame"); 78 t_vdl(stream)->copy_frame = dlsym(t_vdl(stream)->handle,"vixPlaybackCopyFrame");
79 t_vdl(stream)->get_num_fx = dlsym(t_vdl(stream)->handle,"vixQueryNumOemEffects");
80 t_vdl(stream)->get_fx = dlsym(t_vdl(stream)->handle,"vixGetOemEffect");
81 t_vdl(stream)->set_fx = dlsym(t_vdl(stream)->handle,"vixSetOemEffect");
72 /* check driver viability */ 82 /* check driver viability */
73 if(!( t_vdl(stream)->get_caps && t_vdl(stream)->query_fourcc && 83 if(!( t_vdl(stream)->get_caps && t_vdl(stream)->query_fourcc &&
74 t_vdl(stream)->config_playback && t_vdl(stream)->playback_on && 84 t_vdl(stream)->config_playback && t_vdl(stream)->playback_on &&
75 t_vdl(stream)->playback_off)) 85 t_vdl(stream)->playback_off))
76 { 86 {
77 printf("vidixlib: some features are missed in driver\n"); 87 printf("vidixlib: Incomplete driver: some features are missed in it.\n");
78 return 0; 88 return 0;
79 } 89 }
80 return 1; 90 return 1;
81 } 91 }
82 92
83 static int vdl_probe_driver(VDL_HANDLE stream,const char *path,const char *name,unsigned cap,int verbose) 93 static int vdl_probe_driver(VDL_HANDLE stream,const char *path,const char *name,unsigned cap,int verbose)
84 { 94 {
85 vidix_capability_t vid_cap; 95 vidix_capability_t vid_cap;
86 unsigned (*_ver)(void); 96 unsigned (*_ver)(void);
87 int (*_probe)(int); 97 int (*_probe)(int,int);
88 int (*_cap)(vidix_capability_t*); 98 int (*_cap)(vidix_capability_t*);
89 strcpy(drv_name,path); 99 strcpy(drv_name,path);
90 strcat(drv_name,name); 100 strcat(drv_name,name);
91 if(verbose) printf("vidixlib: PROBING: %s\n",drv_name); 101 if(verbose) printf("vidixlib: PROBING: %s\n",drv_name);
92 if(!(t_vdl(stream)->handle = dlopen(drv_name,RTLD_LAZY|RTLD_GLOBAL))) 102 if(!(t_vdl(stream)->handle = dlopen(drv_name,RTLD_LAZY|RTLD_GLOBAL)))
112 { 122 {
113 fatal_err: 123 fatal_err:
114 if(verbose) printf("vidixlib: %s has no function definition\n",drv_name); 124 if(verbose) printf("vidixlib: %s has no function definition\n",drv_name);
115 goto err; 125 goto err;
116 } 126 }
117 if(_probe) { if((*_probe)(verbose) != 0) goto err; } 127 if(_probe) { if((*_probe)(verbose,PROBE_NORMAL) != 0) goto err; }
118 else goto fatal_err; 128 else goto fatal_err;
119 if(_cap) { if((*_cap)(&vid_cap) != 0) goto err; } 129 if(_cap) { if((*_cap)(&vid_cap) != 0) goto err; }
120 else goto fatal_err; 130 else goto fatal_err;
121 if((vid_cap.type & cap) != cap) 131 if((vid_cap.type & cap) != cap)
122 { 132 {
154 if(!(stream = malloc(sizeof(vdl_stream_t)))) return NULL; 164 if(!(stream = malloc(sizeof(vdl_stream_t)))) return NULL;
155 memset(stream,0,sizeof(vdl_stream_t)); 165 memset(stream,0,sizeof(vdl_stream_t));
156 if(name) 166 if(name)
157 { 167 {
158 unsigned (*ver)(void); 168 unsigned (*ver)(void);
159 int (*probe)(int); 169 int (*probe)(int,int);
160 unsigned version = 0; 170 unsigned version = 0;
161 strcpy(drv_name,path); 171 strcpy(drv_name,path);
162 strcat(drv_name,name); 172 strcat(drv_name,name);
163 if(!(t_vdl(stream)->handle = dlopen(drv_name,RTLD_NOW|RTLD_GLOBAL))) 173 if(!(t_vdl(stream)->handle = dlopen(drv_name,RTLD_NOW|RTLD_GLOBAL)))
164 { 174 {
173 drv_err: 183 drv_err:
174 if(t_vdl(stream)->handle) dlclose(t_vdl(stream)->handle); 184 if(t_vdl(stream)->handle) dlclose(t_vdl(stream)->handle);
175 goto err; 185 goto err;
176 } 186 }
177 probe = dlsym(t_vdl(stream)->handle,"vixProbe"); 187 probe = dlsym(t_vdl(stream)->handle,"vixProbe");
178 if(probe) { if((*probe)(verbose)!=0) goto drv_err; } 188 if(probe) { if((*probe)(verbose,PROBE_FORCE)!=0) goto drv_err; }
179 else goto drv_err; 189 else goto drv_err;
180 fill: 190 fill:
181 if(!vdl_fill_driver(stream)) goto drv_err; 191 if(!vdl_fill_driver(stream)) goto drv_err;
182 goto ok; 192 goto ok;
183 } 193 }
262 272
263 int vdlSetGrKeys(VDL_HANDLE handle, const vidix_grkey_t * k) 273 int vdlSetGrKeys(VDL_HANDLE handle, const vidix_grkey_t * k)
264 { 274 {
265 return t_vdl(handle)->set_gkey ? t_vdl(handle)->set_gkey(k) : ENOSYS; 275 return t_vdl(handle)->set_gkey ? t_vdl(handle)->set_gkey(k) : ENOSYS;
266 } 276 }
277
278 int vdlPlaybackGetDeint(VDL_HANDLE handle, vidix_deinterlace_t * d)
279 {
280 return t_vdl(handle)->get_deint ? t_vdl(handle)->get_deint(d) : ENOSYS;
281 }
282
283 int vdlPlaybackSetDeint(VDL_HANDLE handle, const vidix_deinterlace_t * d)
284 {
285 return t_vdl(handle)->set_deint ? t_vdl(handle)->set_deint(d) : ENOSYS;
286 }
287
288 int vdlQueryNumOemEffects(VDL_HANDLE handle, unsigned * number )
289 {
290 return t_vdl(handle)->get_num_fx ? t_vdl(handle)->get_num_fx(number) : ENOSYS;
291 }
292
293 int vdlGetOemEffect(VDL_HANDLE handle, vidix_oem_fx_t * f)
294 {
295 return t_vdl(handle)->get_fx ? t_vdl(handle)->get_fx(f) : ENOSYS;
296 }
297
298 int vdlSetOemEffect(VDL_HANDLE handle, const vidix_oem_fx_t * f)
299 {
300 return t_vdl(handle)->set_fx ? t_vdl(handle)->set_fx(f) : ENOSYS;
301 }