stream_t* open_stream_plugin(stream_info_t* sinfo,char* filename,int mode, char** options, int* file_format, int* ret) { void* arg = NULL; stream_t* s; m_struct_t* desc = (m_struct_t*)sinfo->opts; // Parse options if(desc) { arg = m_struct_alloc(desc); if(sinfo->opts_url) { m_option_t url_opt = { "stream url", arg , CONF_TYPE_CUSTOM_URL, 0, 0 ,0, sinfo->opts }; if(m_option_parse(&url_opt,"stream url",filename,arg,M_CONFIG_FILE) < 0) { mp_msg(MSGT_OPEN,MSGL_ERR, "URL parsing failed on url %s\n",filename); m_struct_free(desc,arg); return NULL; } } if(options) { int i; for(i = 0 ; options[i] != NULL ; i += 2) { mp_msg(MSGT_OPEN,MSGL_DBG2, "Set stream arg %s=%s\n", options[i],options[i+1]); if(!m_struct_set(desc,arg,options[i],options[i+1])) mp_msg(MSGT_OPEN,MSGL_WARN, "Failed to set stream option %s=%s\n", options[i],options[i+1]); } } } s = new_stream(-2,-2); s->url=strdup(filename); s->flags |= mode; *ret = sinfo->open(s,mode,arg,file_format); if((*ret) != STREAM_OK) { free(s->url); free(s); return NULL; } if(s->type <= -2) mp_msg(MSGT_OPEN,MSGL_WARN, "Warning streams need a type !!!!\n"); if(s->flags & STREAM_SEEK && !s->seek) s->flags &= ~STREAM_SEEK; if(s->seek && !(s->flags & STREAM_SEEK)) s->flags |= STREAM_SEEK; s->mode = mode; mp_msg(MSGT_OPEN,MSGL_V, "STREAM: [%s] %s\n",sinfo->name,filename); mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Description: %s\n",sinfo->info); mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Author: %s\n", sinfo->author); mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Comment: %s\n", sinfo->comment); return s; }
struct vf_instance *vf_open_plugin_noerr(struct MPOpts *opts, const vf_info_t *const *filter_list, vf_instance_t *next, const char *name, char **args, int *retcode) { vf_instance_t *vf; int i; for (i = 0;; i++) { if (!filter_list[i]) { mp_tmsg(MSGT_VFILTER, MSGL_ERR, "Couldn't find video filter '%s'.\n", name); return NULL; // no such filter! } if (!strcmp(filter_list[i]->name, name)) break; } vf = talloc_zero(NULL, struct vf_instance); vf->opts = opts; vf->info = filter_list[i]; vf->next = next; vf->config = vf_next_config; vf->control = vf_next_control; vf->query_format = vf_default_query_format; vf->filter = vf_default_filter; vf->out_pool = talloc_steal(vf, mp_image_pool_new(16)); if (vf->info->opts) { // vf_vo get some special argument const m_struct_t *st = vf->info->opts; void *vf_priv = m_struct_alloc(st); int n; for (n = 0; args && args[2 * n]; n++) m_struct_set(st, vf_priv, args[2 * n], bstr0(args[2 * n + 1])); vf->priv = vf_priv; args = NULL; } else // Otherwise we should have the '_oldargs_' if (args && !strcmp(args[0], "_oldargs_")) args = (char **)args[1]; else args = NULL; *retcode = vf->info->vf_open(vf, (char *)args); if (*retcode > 0) return vf; talloc_free(vf); return NULL; }
static stream_t* open_stream_plugin(const stream_info_t* sinfo, const char* filename, int mode, char** options, int* file_format, int* ret, char** redirected_url) { void* arg = NULL; stream_t* s; m_struct_t* desc = (m_struct_t*)sinfo->opts; // Parse options if(desc) { arg = m_struct_alloc(desc); if(sinfo->opts_url) { m_option_t url_opt = { "stream url", arg , CONF_TYPE_CUSTOM_URL, 0, 0 ,0, sinfo->opts }; if(m_option_parse(&url_opt,"stream url",filename,arg,M_CONFIG_FILE) < 0) { mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_URLParsingFailed,filename); m_struct_free(desc,arg); return NULL; } } if(options) { int i; for(i = 0 ; options[i] != NULL ; i += 2) { mp_msg(MSGT_OPEN,MSGL_DBG2, "Set stream arg %s=%s\n", options[i],options[i+1]); if(!m_struct_set(desc,arg,options[i],options[i+1])) mp_msg(MSGT_OPEN,MSGL_WARN, MSGTR_FailedSetStreamOption, options[i],options[i+1]); } } } s = new_stream(-2,-2); s->capture_file = NULL; s->url=strdup(filename); s->flags |= mode; *ret = sinfo->open(s,mode,arg,file_format); if((*ret) != STREAM_OK) { #ifdef CONFIG_NETWORKING if (*ret == STREAM_REDIRECTED && redirected_url) { if (s->streaming_ctrl && s->streaming_ctrl->url && s->streaming_ctrl->url->url) *redirected_url = strdup(s->streaming_ctrl->url->url); else *redirected_url = NULL; } streaming_ctrl_free(s->streaming_ctrl); #endif free(s->url); free(s); return NULL; } if(s->type <= -2) mp_msg(MSGT_OPEN,MSGL_WARN, MSGTR_StreamNeedType); if(s->flags & MP_STREAM_SEEK && !s->seek) s->flags &= ~MP_STREAM_SEEK; if(s->seek && !(s->flags & MP_STREAM_SEEK)) s->flags |= MP_STREAM_SEEK; s->mode = mode; mp_msg(MSGT_OPEN,MSGL_V, "STREAM: [%s] %s\n",sinfo->name,filename); mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Description: %s\n",sinfo->info); mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Author: %s\n", sinfo->author); mp_msg(MSGT_OPEN,MSGL_V, "STREAM: Comment: %s\n", sinfo->comment); return s; }