diff options
-rw-r--r-- | xine/post.c | 682 |
1 files changed, 341 insertions, 341 deletions
diff --git a/xine/post.c b/xine/post.c index 86e5aa20..6c637634 100644 --- a/xine/post.c +++ b/xine/post.c @@ -1,27 +1,27 @@ -/* +/* * Copyright (C) 2003 by Dirk Meyer - * + * * This file is part of xine, a unix video player. - * + * * xine is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * xine is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * * The code is taken from xine-ui/src/xitk/post.c at changed to work with fbxine - * + * * Modified for VDR xineliboutput plugin by Petri Hintukainen, 2006 * - runtime re-configuration (load/unload, enable/disable) - * - support for multiple streams + * - support for multiple streams * - support for mosaico post plugin (picture-in-picture) * */ @@ -59,51 +59,51 @@ typedef struct { } post_object_t; -static int __pplugin_retrieve_parameters(post_object_t *pobj) +static int __pplugin_retrieve_parameters(post_object_t *pobj) { xine_post_in_t *input_api; - - if((input_api = (xine_post_in_t *) xine_post_input(pobj->post, - "parameters"))) { + + if((input_api = (xine_post_in_t *) xine_post_input(pobj->post, + "parameters"))) { xine_post_api_t *post_api; xine_post_api_descr_t *api_descr; xine_post_api_parameter_t *parm; int pnum = 0; - + post_api = (xine_post_api_t *) input_api->data; - + api_descr = post_api->get_param_descr(); - + parm = api_descr->parameter; pobj->param_data = malloc(api_descr->struct_size); - + while(parm->type != POST_PARAM_TYPE_LAST) { - + post_api->get_parameters(pobj->post, pobj->param_data); - + if(!pnum) - pobj->properties_names = (char **) calloc(2, sizeof(char *)); + pobj->properties_names = (char **) calloc(2, sizeof(char *)); else - pobj->properties_names = (char **) - realloc(pobj->properties_names, sizeof(char *) * (pnum + 2)); - + pobj->properties_names = (char **) + realloc(pobj->properties_names, sizeof(char *) * (pnum + 2)); + pobj->properties_names[pnum] = strdup(parm->name); pobj->properties_names[pnum + 1] = NULL; pnum++; parm++; } - + pobj->api = post_api; pobj->descr = api_descr; pobj->param = api_descr->parameter; - + return 1; } return 0; } -static void _pplugin_update_parameter(post_object_t *pobj) +static void _pplugin_update_parameter(post_object_t *pobj) { pobj->api->set_parameters(pobj->post, pobj->param_data); pobj->api->get_parameters(pobj->post, pobj->param_data); @@ -115,117 +115,117 @@ static void __pplugin_update_parameters(xine_post_t *post, char *args) post_object_t pobj = { .post = post, }; - + if(__pplugin_retrieve_parameters(&pobj)) { int i; - + if(pobj.properties_names && args && *args) { char *param; - + while((param = xine_strsep(&args, ",")) != NULL) { - - p = param; - - while((*p != '\0') && (*p != '=')) - p++; - - if(p && strlen(p)) { - int param_num = 0; - - *p++ = '\0'; - - while(pobj.properties_names[param_num] - && strcasecmp(pobj.properties_names[param_num], param)) - param_num++; - - if(pobj.properties_names[param_num]) { - - pobj.param = pobj.descr->parameter; - pobj.param += param_num; - pobj.readonly = pobj.param->readonly; - - switch(pobj.param->type) { - case POST_PARAM_TYPE_INT: - if(!pobj.readonly) { - if(pobj.param->enum_values) { - char **values = pobj.param->enum_values; - int i = 0; - - while(values[i]) { - if(!strcasecmp(values[i], p)) { - *(int *)(pobj.param_data + pobj.param->offset) = i; - break; - } - i++; - } - - if( !values[i] ) - *(int *)(pobj.param_data + pobj.param->offset) = (int) strtol(p, &p, 10); - } else { - *(int *)(pobj.param_data + pobj.param->offset) = (int) strtol(p, &p, 10); - } - _pplugin_update_parameter(&pobj); - } - break; - - case POST_PARAM_TYPE_DOUBLE: - if(!pobj.readonly) { - *(double *)(pobj.param_data + pobj.param->offset) = strtod(p, &p); - _pplugin_update_parameter(&pobj); - } - break; - - case POST_PARAM_TYPE_CHAR: - case POST_PARAM_TYPE_STRING: - if(!pobj.readonly) { - if(pobj.param->type == POST_PARAM_TYPE_CHAR) { - int maxlen = pobj.param->size / sizeof(char); - - snprintf((char *)(pobj.param_data + pobj.param->offset), maxlen, "%s", p); - _pplugin_update_parameter(&pobj); - } - else - fprintf(stderr, "parameter type POST_PARAM_TYPE_STRING not supported yet.\n"); - } - break; - - case POST_PARAM_TYPE_STRINGLIST: /* unsupported */ - if(!pobj.readonly) - fprintf(stderr, "parameter type POST_PARAM_TYPE_STRINGLIST not supported yet.\n"); - break; - - case POST_PARAM_TYPE_BOOL: - if(!pobj.readonly) { - *(int *)(pobj.param_data + pobj.param->offset) = ((int) strtol(p, &p, 10)) ? 1 : 0; - _pplugin_update_parameter(&pobj); - } - break; - } - } else { - LOGMSG("Unknown post plugin parameter %s !", param); - } - } - } - + + p = param; + + while((*p != '\0') && (*p != '=')) + p++; + + if(p && strlen(p)) { + int param_num = 0; + + *p++ = '\0'; + + while(pobj.properties_names[param_num] + && strcasecmp(pobj.properties_names[param_num], param)) + param_num++; + + if(pobj.properties_names[param_num]) { + + pobj.param = pobj.descr->parameter; + pobj.param += param_num; + pobj.readonly = pobj.param->readonly; + + switch(pobj.param->type) { + case POST_PARAM_TYPE_INT: + if(!pobj.readonly) { + if(pobj.param->enum_values) { + char **values = pobj.param->enum_values; + int i = 0; + + while(values[i]) { + if(!strcasecmp(values[i], p)) { + *(int *)(pobj.param_data + pobj.param->offset) = i; + break; + } + i++; + } + + if( !values[i] ) + *(int *)(pobj.param_data + pobj.param->offset) = (int) strtol(p, &p, 10); + } else { + *(int *)(pobj.param_data + pobj.param->offset) = (int) strtol(p, &p, 10); + } + _pplugin_update_parameter(&pobj); + } + break; + + case POST_PARAM_TYPE_DOUBLE: + if(!pobj.readonly) { + *(double *)(pobj.param_data + pobj.param->offset) = strtod(p, &p); + _pplugin_update_parameter(&pobj); + } + break; + + case POST_PARAM_TYPE_CHAR: + case POST_PARAM_TYPE_STRING: + if(!pobj.readonly) { + if(pobj.param->type == POST_PARAM_TYPE_CHAR) { + int maxlen = pobj.param->size / sizeof(char); + + snprintf((char *)(pobj.param_data + pobj.param->offset), maxlen, "%s", p); + _pplugin_update_parameter(&pobj); + } + else + fprintf(stderr, "parameter type POST_PARAM_TYPE_STRING not supported yet.\n"); + } + break; + + case POST_PARAM_TYPE_STRINGLIST: /* unsupported */ + if(!pobj.readonly) + fprintf(stderr, "parameter type POST_PARAM_TYPE_STRINGLIST not supported yet.\n"); + break; + + case POST_PARAM_TYPE_BOOL: + if(!pobj.readonly) { + *(int *)(pobj.param_data + pobj.param->offset) = ((int) strtol(p, &p, 10)) ? 1 : 0; + _pplugin_update_parameter(&pobj); + } + break; + } + } else { + LOGMSG("Unknown post plugin parameter %s !", param); + } + } + } + i = 0; - + while(pobj.properties_names[i]) { - free(pobj.properties_names[i]); - i++; + free(pobj.properties_names[i]); + i++; } - + free(pobj.properties_names); } - + free(pobj.param_data); } } /* -post <name>:option1=value1,option2=value2... */ -static post_element_t **pplugin_parse_and_load(fe_t *fe, - int plugin_type, - const char *pchain, - int *post_elements_num) +static post_element_t **pplugin_parse_and_load(fe_t *fe, + int plugin_type, + const char *pchain, + int *post_elements_num) { post_element_t **post_elements = NULL; @@ -233,35 +233,35 @@ static post_element_t **pplugin_parse_and_load(fe_t *fe, if(pchain && strlen(pchain)) { char *post_chain, *freeme, *p; - + freeme = post_chain = strdup(pchain); - + while((p = xine_strsep(&post_chain, ";"))) { - + if(p && strlen(p)) { - char *plugin, *args = NULL; - xine_post_t *post; - - while(*p == ' ') - p++; - - plugin = strdup(p); - - if((p = strchr(plugin, ':'))) - *p++ = '\0'; - - if(p && (strlen(p) > 1)) - args = p; + char *plugin, *args = NULL; + xine_post_t *post; + + while(*p == ' ') + p++; + + plugin = strdup(p); + + if((p = strchr(plugin, ':'))) + *p++ = '\0'; + + if(p && (strlen(p) > 1)) + args = p; #if 0 - post = xine_post_init(fe->xine, plugin, 0, - &fe->audio_port, &fe->video_port); + post = xine_post_init(fe->xine, plugin, 0, + &fe->audio_port, &fe->video_port); #else - if(plugin_type == XINE_POST_TYPE_VIDEO_COMPOSE) { - post = xine_post_init(fe->xine, plugin, 2, - &fe->audio_port, &fe->video_port); - } else - post = xine_post_init(fe->xine, plugin, 0, - &fe->audio_port, &fe->video_port); + if(plugin_type == XINE_POST_TYPE_VIDEO_COMPOSE) { + post = xine_post_init(fe->xine, plugin, 2, + &fe->audio_port, &fe->video_port); + } else + post = xine_post_init(fe->xine, plugin, 0, + &fe->audio_port, &fe->video_port); #endif if (post && plugin_type) { @@ -270,29 +270,29 @@ static post_element_t **pplugin_parse_and_load(fe_t *fe, post = NULL; } } - - if(post) { - - if(!(*post_elements_num)) - post_elements = (post_element_t **) calloc(2, sizeof(post_element_t *)); - else - post_elements = (post_element_t **) - realloc(post_elements, sizeof(post_element_t *) * ((*post_elements_num) + 2)); - - post_elements[(*post_elements_num)] = calloc(1, sizeof(post_element_t)); - post_elements[(*post_elements_num)]->post = post; - post_elements[(*post_elements_num)]->name = strdup(plugin); + + if(post) { + + if(!(*post_elements_num)) + post_elements = (post_element_t **) calloc(2, sizeof(post_element_t *)); + else + post_elements = (post_element_t **) + realloc(post_elements, sizeof(post_element_t *) * ((*post_elements_num) + 2)); + + post_elements[(*post_elements_num)] = calloc(1, sizeof(post_element_t)); + post_elements[(*post_elements_num)]->post = post; + post_elements[(*post_elements_num)]->name = strdup(plugin); #if 1 - post_elements[(*post_elements_num)]->args = args ? strdup(args) : NULL; - post_elements[(*post_elements_num)]->enable = 0; + post_elements[(*post_elements_num)]->args = args ? strdup(args) : NULL; + post_elements[(*post_elements_num)]->enable = 0; #endif - (*post_elements_num)++; - post_elements[(*post_elements_num)] = NULL; + (*post_elements_num)++; + post_elements[(*post_elements_num)] = NULL; - __pplugin_update_parameters(post, args); - } - - free(plugin); + __pplugin_update_parameters(post, args); + } + + free(plugin); } } free(freeme); @@ -301,8 +301,8 @@ static post_element_t **pplugin_parse_and_load(fe_t *fe, return post_elements; } -void pplugin_parse_and_store_post(fe_t *fe, int plugin_type, - const char *post_chain) +void pplugin_parse_and_store_post(fe_t *fe, int plugin_type, + const char *post_chain) { post_element_t ***_post_elements; int *_post_elements_num; @@ -332,11 +332,11 @@ void pplugin_parse_and_store_post(fe_t *fe, int plugin_type, if(*_post_elements_num) { int i; int ptot = *_post_elements_num + num; - - *_post_elements = (post_element_t **) realloc(*_post_elements, - sizeof(post_element_t *) * (ptot + 1)); + + *_post_elements = (post_element_t **) realloc(*_post_elements, + sizeof(post_element_t *) * (ptot + 1)); for(i = *_post_elements_num; i < ptot; i++) - (*_post_elements)[i] = posts[i - *_post_elements_num]; + (*_post_elements)[i] = posts[i - *_post_elements_num]; (*_post_elements)[i] = NULL; (*_post_elements_num) += num; @@ -352,39 +352,39 @@ void pplugin_parse_and_store_post(fe_t *fe, int plugin_type, int i; char s[4096]=""; for(i=0; i<ptot; i++) - if((*_post_elements)[i]) - if(((*_post_elements)[i])->post) { - if(((*_post_elements)[i])->enable) - strcat(s, "*"); - if(((*_post_elements)[i])->name) - strcat(s, ((*_post_elements)[i])->name); - else - strcat(s, "<no name!>"); - strcat(s, " "); - } - LOGDBG(" loaded plugins (type %d.%d): %s", - (plugin_type>>16), (plugin_type&0xffff), s); + if((*_post_elements)[i]) + if(((*_post_elements)[i])->post) { + if(((*_post_elements)[i])->enable) + strcat(s, "*"); + if(((*_post_elements)[i])->name) + strcat(s, ((*_post_elements)[i])->name); + else + strcat(s, "<no name!>"); + strcat(s, " "); + } + LOGDBG(" loaded plugins (type %d.%d): %s", + (plugin_type>>16), (plugin_type&0xffff), s); } #endif } } -void vpplugin_parse_and_store_post(fe_t *fe, const char *post_chain) +void vpplugin_parse_and_store_post(fe_t *fe, const char *post_chain) { pplugin_parse_and_store_post(fe, XINE_POST_TYPE_VIDEO_FILTER, post_chain); pplugin_parse_and_store_post(fe, XINE_POST_TYPE_VIDEO_COMPOSE, post_chain); } -void applugin_parse_and_store_post(fe_t *fe, const char *post_chain) +void applugin_parse_and_store_post(fe_t *fe, const char *post_chain) { pplugin_parse_and_store_post(fe, XINE_POST_TYPE_AUDIO_FILTER, post_chain); pplugin_parse_and_store_post(fe, XINE_POST_TYPE_AUDIO_VISUALIZATION, post_chain); } -static void _vpplugin_unwire(fe_t *fe) +static void _vpplugin_unwire(fe_t *fe) { xine_post_out_t *vo_source; vo_source = xine_get_video_source(fe->video_source); @@ -392,7 +392,7 @@ static void _vpplugin_unwire(fe_t *fe) } -static void _applugin_unwire(fe_t *fe) +static void _applugin_unwire(fe_t *fe) { xine_post_out_t *ao_source; ao_source = xine_get_audio_source(fe->audio_source); @@ -400,8 +400,8 @@ static void _applugin_unwire(fe_t *fe) } -static void _vpplugin_rewire_from_post_elements(fe_t *fe, post_element_t **post_elements, int post_elements_num) -{ +static void _vpplugin_rewire_from_post_elements(fe_t *fe, post_element_t **post_elements, int post_elements_num) +{ if(post_elements_num) { xine_post_out_t *vo_source; int i = 0; @@ -410,68 +410,68 @@ static void _vpplugin_rewire_from_post_elements(fe_t *fe, post_element_t **post_ const char *const *outs = xine_post_list_outputs(post_elements[i]->post); const xine_post_out_t *vo_out = xine_post_output(post_elements[i]->post, (char *) *outs); if(i == (post_elements_num - 1)) { - LOGDBG(" wiring %10s[out] -> [in]video_out", post_elements[i]->name); - xine_post_wire_video_port((xine_post_out_t *) vo_out, fe->video_port); + LOGDBG(" wiring %10s[out] -> [in]video_out", post_elements[i]->name); + xine_post_wire_video_port((xine_post_out_t *) vo_out, fe->video_port); } else { - const xine_post_in_t *vo_in; - int err; - - /* look for standard input names */ - vo_in = xine_post_input(post_elements[i + 1]->post, "video"); - if( !vo_in ) - vo_in = xine_post_input(post_elements[i + 1]->post, "video in"); - - LOGDBG(" wiring %10s[out] -> [in]%-10s ", - post_elements[i]->name, post_elements[i+1]->name); - err = xine_post_wire((xine_post_out_t *) vo_out, - (xine_post_in_t *) vo_in); + const xine_post_in_t *vo_in; + int err; + + /* look for standard input names */ + vo_in = xine_post_input(post_elements[i + 1]->post, "video"); + if( !vo_in ) + vo_in = xine_post_input(post_elements[i + 1]->post, "video in"); + + LOGDBG(" wiring %10s[out] -> [in]%-10s ", + post_elements[i]->name, post_elements[i+1]->name); + err = xine_post_wire((xine_post_out_t *) vo_out, + (xine_post_in_t *) vo_in); } } - if(fe->post_pip_enable && + if(fe->post_pip_enable && !strcmp(post_elements[0]->name, "mosaico") && fe->pip_stream) { vo_source = xine_get_video_source(fe->pip_stream); - LOGDBG(" wiring %10s[out] -> [in1]%-10s ", "pip stream", post_elements[0]->name); + LOGDBG(" wiring %10s[out] -> [in1]%-10s ", "pip stream", post_elements[0]->name); xine_post_wire_video_port(vo_source, - post_elements[0]->post->video_input[1]); + post_elements[0]->post->video_input[1]); } vo_source = xine_get_video_source(fe->video_source); LOGDBG(" wiring %10s[out] -> [in]%-10s", "stream", post_elements[0]->name); - xine_post_wire_video_port(vo_source, - post_elements[0]->post->video_input[0]); + xine_post_wire_video_port(vo_source, + post_elements[0]->post->video_input[0]); } } -static void _applugin_rewire_from_post_elements(fe_t *fe, post_element_t **post_elements, int post_elements_num) +static void _applugin_rewire_from_post_elements(fe_t *fe, post_element_t **post_elements, int post_elements_num) { if(post_elements_num) { xine_post_out_t *ao_source; int i = 0; - + for(i = (post_elements_num - 1); i >= 0; i--) { const char *const *outs = xine_post_list_outputs(post_elements[i]->post); const xine_post_out_t *ao_out = xine_post_output(post_elements[i]->post, (char *) *outs); if(i == (post_elements_num - 1)) { - LOGDBG(" wiring %10s[out] -> [in]audio_out", post_elements[i]->name); - xine_post_wire_audio_port((xine_post_out_t *) ao_out, fe->audio_port); + LOGDBG(" wiring %10s[out] -> [in]audio_out", post_elements[i]->name); + xine_post_wire_audio_port((xine_post_out_t *) ao_out, fe->audio_port); } else { - const xine_post_in_t *ao_in; - int err; - - /* look for standard input names */ - ao_in = xine_post_input(post_elements[i + 1]->post, "audio"); - if( !ao_in ) - ao_in = xine_post_input(post_elements[i + 1]->post, "audio in"); - - LOGDBG(" wiring %10s[out] -> [in]%-10s ", - post_elements[i]->name, post_elements[i+1]->name); - err = xine_post_wire((xine_post_out_t *) ao_out, (xine_post_in_t *) ao_in); + const xine_post_in_t *ao_in; + int err; + + /* look for standard input names */ + ao_in = xine_post_input(post_elements[i + 1]->post, "audio"); + if( !ao_in ) + ao_in = xine_post_input(post_elements[i + 1]->post, "audio in"); + + LOGDBG(" wiring %10s[out] -> [in]%-10s ", + post_elements[i]->name, post_elements[i+1]->name); + err = xine_post_wire((xine_post_out_t *) ao_out, (xine_post_in_t *) ao_in); } } @@ -481,7 +481,7 @@ static void _applugin_rewire_from_post_elements(fe_t *fe, post_element_t **post_ } } -static post_element_t **_pplugin_join_deinterlace_and_post_elements(fe_t *fe, int *post_elements_num) +static post_element_t **_pplugin_join_deinterlace_and_post_elements(fe_t *fe, int *post_elements_num) { post_element_t **post_elements; int i = 0, j = 0, n = 0, p = 0; @@ -502,17 +502,17 @@ static post_element_t **_pplugin_join_deinterlace_and_post_elements(fe_t *fe, in if(fe->post_pip_enable) for( i = 0; i < fe->post_pip_elements_num; i++ ) { if(fe->post_pip_elements[i]->enable) - post_elements[i+j-n] = fe->post_pip_elements[i]; + post_elements[i+j-n] = fe->post_pip_elements[i]; else - n++; + n++; } if(fe->post_video_enable) for( j = 0; j < fe->post_video_elements_num; j++ ) { if(fe->post_video_elements[j]->enable) { - post_elements[i+j-n] = fe->post_video_elements[j]; + post_elements[i+j-n] = fe->post_video_elements[j]; } else - n++; + n++; } *post_elements_num -= n; @@ -521,7 +521,7 @@ static post_element_t **_pplugin_join_deinterlace_and_post_elements(fe_t *fe, in return NULL; } - /* in some special cases order is important. By default plugin order + /* in some special cases order is important. By default plugin order * in post plugin chain is post plugin loading order. * But, we want: * @@ -537,23 +537,23 @@ static post_element_t **_pplugin_join_deinterlace_and_post_elements(fe_t *fe, in while(order[p]) { for(i = 0; i<*post_elements_num; i++) if(!strcmp(post_elements[i]->name, order[p])) { - if(i != n) { - post_element_t *tmp = post_elements[i]; - for(j=i; j>n; j--) - post_elements[j] = post_elements[j-1]; - post_elements[n] = tmp; - LOGDBG(" moved %s to post slot %d", order[p], n); - } - n++; - break; + if(i != n) { + post_element_t *tmp = post_elements[i]; + for(j=i; j>n; j--) + post_elements[j] = post_elements[j-1]; + post_elements[n] = tmp; + LOGDBG(" moved %s to post slot %d", order[p], n); + } + n++; + break; } p++; } - + return post_elements; } -static post_element_t **_pplugin_join_visualization_and_post_elements(fe_t *fe, int *post_elements_num) +static post_element_t **_pplugin_join_visualization_and_post_elements(fe_t *fe, int *post_elements_num) { post_element_t **post_elements; int i = 0, j = 0, n = 0; @@ -573,17 +573,17 @@ static post_element_t **_pplugin_join_visualization_and_post_elements(fe_t *fe, if(fe->post_audio_enable) for( j = 0; j < fe->post_audio_elements_num; j++ ) { if(fe->post_audio_elements[j]->enable) - post_elements[i+j-n] = fe->post_audio_elements[j]; + post_elements[i+j-n] = fe->post_audio_elements[j]; else - n++; + n++; } if(fe->post_vis_enable) - for( i = 0; i < fe->post_vis_elements_num; i++ ) { + for( i = 0; i < fe->post_vis_elements_num; i++ ) { if(fe->post_vis_elements[i]->enable) - post_elements[i+j-n] = fe->post_vis_elements[i]; + post_elements[i+j-n] = fe->post_vis_elements[i]; else - n++; + n++; } *post_elements_num -= n; @@ -595,7 +595,7 @@ static post_element_t **_pplugin_join_visualization_and_post_elements(fe_t *fe, return post_elements; } -static void _vpplugin_rewire(fe_t *fe) +static void _vpplugin_rewire(fe_t *fe) { static post_element_t **post_elements; int post_elements_num; @@ -609,7 +609,7 @@ static void _vpplugin_rewire(fe_t *fe) } } -static void _applugin_rewire(fe_t *fe) +static void _applugin_rewire(fe_t *fe) { static post_element_t **post_elements; int post_elements_num; @@ -623,14 +623,14 @@ static void _applugin_rewire(fe_t *fe) } } -void vpplugin_rewire_posts(fe_t *fe) +void vpplugin_rewire_posts(fe_t *fe) { /*TRACELINE;*/ _vpplugin_unwire(fe); _vpplugin_rewire(fe); } -void applugin_rewire_posts(fe_t *fe) +void applugin_rewire_posts(fe_t *fe) { /*TRACELINE;*/ _applugin_unwire(fe); @@ -638,65 +638,65 @@ void applugin_rewire_posts(fe_t *fe) } static int _pplugin_enable_post(post_plugins_t *fe, const char *name, - const char *args, - post_element_t **post_elements, - int post_elements_num, - int *found) + const char *args, + post_element_t **post_elements, + int post_elements_num, + int *found) { int i, result = 0; for(i=0; i<post_elements_num; i++) if(post_elements[i]) if(!strcmp(post_elements[i]->name, name)) { - if(post_elements[i]->enable == 0) { - post_elements[i]->enable = 1; - result = 1; - } - - *found = 1; - - if(args && *args) { - if(post_elements[i]->enable != 2) { - char *tmp = strdup(args); - __pplugin_update_parameters(post_elements[i]->post, tmp); - free(tmp); - if(post_elements[i]->args) - free(post_elements[i]->args); - post_elements[i]->args = strdup(args); - } else { - LOGDBG(" * enable post %s, parameters fixed in command line.", name); - LOGDBG(" requested: %s", args ? : "none"); - LOGDBG(" using : %s", post_elements[i]->args ? : "none"); - } - } + if(post_elements[i]->enable == 0) { + post_elements[i]->enable = 1; + result = 1; + } + + *found = 1; + + if(args && *args) { + if(post_elements[i]->enable != 2) { + char *tmp = strdup(args); + __pplugin_update_parameters(post_elements[i]->post, tmp); + free(tmp); + if(post_elements[i]->args) + free(post_elements[i]->args); + post_elements[i]->args = strdup(args); + } else { + LOGDBG(" * enable post %s, parameters fixed in command line.", name); + LOGDBG(" requested: %s", args ? : "none"); + LOGDBG(" using : %s", post_elements[i]->args ? : "none"); + } + } } return result; } -static int _vpplugin_enable_post(post_plugins_t *fe, const char *name, - const char *args, int *found) +static int _vpplugin_enable_post(post_plugins_t *fe, const char *name, + const char *args, int *found) { int result = 0; if(!*found) - result = _pplugin_enable_post(fe, name, args, fe->post_video_elements, - fe->post_video_elements_num, found); + result = _pplugin_enable_post(fe, name, args, fe->post_video_elements, + fe->post_video_elements_num, found); if(!*found) - result = _pplugin_enable_post(fe, name, args, fe->post_pip_elements, - fe->post_pip_elements_num, found); + result = _pplugin_enable_post(fe, name, args, fe->post_pip_elements, + fe->post_pip_elements_num, found); return result; } static int _applugin_enable_post(post_plugins_t *fe, const char *name, - const char *args, int *found) + const char *args, int *found) { int result = 0; if(!*found) - result = _pplugin_enable_post(fe, name, args, fe->post_audio_elements, - fe->post_audio_elements_num, found); + result = _pplugin_enable_post(fe, name, args, fe->post_audio_elements, + fe->post_audio_elements_num, found); if(!*found) - result = _pplugin_enable_post(fe, name, args, fe->post_vis_elements, - fe->post_vis_elements_num, found); + result = _pplugin_enable_post(fe, name, args, fe->post_vis_elements, + fe->post_vis_elements_num, found); return result; } @@ -719,7 +719,7 @@ static const char * _pp_args(const char *initstr) } int vpplugin_enable_post(post_plugins_t *fe, const char *initstr, - int *found) + int *found) { char *name = _pp_name_strdup(initstr); const char *args = _pp_args(initstr); @@ -727,47 +727,47 @@ int vpplugin_enable_post(post_plugins_t *fe, const char *initstr, int result = _vpplugin_enable_post(fe, name, args, found); LOGDBG(" * enable post %s --> %s, %s", name, - *found ? "found" : "not found", - result ? "enabled" : "no action"); + *found ? "found" : "not found", + result ? "enabled" : "no action"); if(!*found) { LOGDBG(" * loading post %s", initstr); vpplugin_parse_and_store_post(fe, initstr); result = _vpplugin_enable_post(fe, name, NULL, found); LOGDBG(" * enable post %s --> %s, %s", name, - *found ? "found" : "not found", - result ? "enabled" : "no action"); - } - + *found ? "found" : "not found", + result ? "enabled" : "no action"); + } + if(result) _vpplugin_unwire(fe); - + free(name); return result; } int applugin_enable_post(post_plugins_t *fe, const char *initstr, - int *found) + int *found) { const char * args = _pp_args(initstr); char *name = _pp_name_strdup(initstr); - int result = _applugin_enable_post(fe, name, args, found); + int result = _applugin_enable_post(fe, name, args, found); LOGDBG(" * enable post %s --> %s, %s", name, - *found ? "found" : "not found", - result ? "enabled" : "no action"); + *found ? "found" : "not found", + result ? "enabled" : "no action"); if(!*found) { LOGDBG(" * loading post %s", initstr); applugin_parse_and_store_post(fe, initstr); result = _applugin_enable_post(fe, name, NULL, found); LOGDBG(" * enable post %s --> %s, %s", name, - *found ? "found" : "not found", - result ? "enabled" : "no action"); + *found ? "found" : "not found", + result ? "enabled" : "no action"); } - if(result) + if(result) _applugin_unwire(fe); free(name); @@ -775,19 +775,19 @@ int applugin_enable_post(post_plugins_t *fe, const char *initstr, } static int _pplugin_disable_post(post_plugins_t *fe, const char *name, - post_element_t **post_elements, - int post_elements_num) + post_element_t **post_elements, + int post_elements_num) { int i, result = 0; /*TRACELINE;*/ if(post_elements) for(i = 0; i < post_elements_num; i++) if(post_elements[i]) - if(!name || !strcmp(post_elements[i]->name, name)) - if(post_elements[i]->enable == 1) { - post_elements[i]->enable = 0; - result = 1; - } + if(!name || !strcmp(post_elements[i]->name, name)) + if(post_elements[i]->enable == 1) { + post_elements[i]->enable = 0; + result = 1; + } return result; } @@ -795,9 +795,9 @@ int vpplugin_disable_post(post_plugins_t *fe, const char *name) { /*TRACELINE;*/ if(_pplugin_disable_post(fe, name, fe->post_video_elements, - fe->post_video_elements_num) || + fe->post_video_elements_num) || _pplugin_disable_post(fe, name, fe->post_pip_elements, - fe->post_pip_elements_num)) { + fe->post_pip_elements_num)) { _vpplugin_unwire(fe); return 1; } @@ -808,9 +808,9 @@ int applugin_disable_post(post_plugins_t *fe, const char *name) { /*TRACELINE;*/ if(_pplugin_disable_post(fe, name, fe->post_audio_elements, - fe->post_audio_elements_num) || + fe->post_audio_elements_num) || _pplugin_disable_post(fe, name, fe->post_vis_elements, - fe->post_vis_elements_num)) { + fe->post_vis_elements_num)) { _applugin_unwire(fe); return 1; } @@ -818,8 +818,8 @@ int applugin_disable_post(post_plugins_t *fe, const char *name) } static int _pplugin_unload_post(post_plugins_t *fe, const char *name, - post_element_t ***post_elements, - int *post_elements_num) + post_element_t ***post_elements, + int *post_elements_num) { /* does not unwrire plugins ! */ int i, j, result = 0; @@ -832,29 +832,29 @@ static int _pplugin_unload_post(post_plugins_t *fe, const char *name, if((*post_elements)[i]) { if(!name || !strcmp((*post_elements)[i]->name, name)) { - if((*post_elements)[i]->enable == 0 || !name) { - xine_post_dispose(fe->xine, (*post_elements)[i]->post); + if((*post_elements)[i]->enable == 0 || !name) { + xine_post_dispose(fe->xine, (*post_elements)[i]->post); + + free((*post_elements)[i]->name); - free((*post_elements)[i]->name); + if((*post_elements)[i]->args) + free((*post_elements)[i]->args); - if((*post_elements)[i]->args) - free((*post_elements)[i]->args); - - free((*post_elements)[i]); - - for(j=i; j < *post_elements_num - 1; j++) - (*post_elements)[j] = (*post_elements)[j+1]; + free((*post_elements)[i]); - (*post_elements_num) --; - (*post_elements)[(*post_elements_num)] = 0; + for(j=i; j < *post_elements_num - 1; j++) + (*post_elements)[j] = (*post_elements)[j+1]; - result = 1; - i--; + (*post_elements_num) --; + (*post_elements)[(*post_elements_num)] = 0; - } else { - LOGDBG("Unload %s failed: plugin enabled and in use", - (*post_elements)[i]->name); - } + result = 1; + i--; + + } else { + LOGDBG("Unload %s failed: plugin enabled and in use", + (*post_elements)[i]->name); + } } } } @@ -873,12 +873,12 @@ int vpplugin_unload_post(post_plugins_t *fe, const char *name) int result = vpplugin_disable_post(fe, name); /* unload already disabled plugins too (result=0) */ - _pplugin_unload_post(fe, name, &fe->post_video_elements, - &fe->post_video_elements_num); - _pplugin_unload_post(fe, name, &fe->post_pip_elements, - &fe->post_pip_elements_num); + _pplugin_unload_post(fe, name, &fe->post_video_elements, + &fe->post_video_elements_num); + _pplugin_unload_post(fe, name, &fe->post_pip_elements, + &fe->post_pip_elements_num); - /* result indicates only unwiring condition, not unload result */ + /* result indicates only unwiring condition, not unload result */ return result; } @@ -887,15 +887,15 @@ int applugin_unload_post(post_plugins_t *fe, const char *name) int result = applugin_disable_post(fe, name); /* unload already disabled plugins too (result=0) */ - _pplugin_unload_post(fe, name, &fe->post_audio_elements, - &fe->post_audio_elements_num); - _pplugin_unload_post(fe, name, &fe->post_vis_elements, - &fe->post_vis_elements_num); + _pplugin_unload_post(fe, name, &fe->post_audio_elements, + &fe->post_audio_elements_num); + _pplugin_unload_post(fe, name, &fe->post_vis_elements, + &fe->post_vis_elements_num); - /* result indicates only unwiring condition, not unload result */ + /* result indicates only unwiring condition, not unload result */ return result; } /* end of post.c */ - + |