stream_t* open_stream_full(char* filename,int mode, char** options, int* file_format) { int i,j,l,r; stream_info_t* sinfo; stream_t* s; for(i = 0 ; auto_open_streams[i] ; i++) { sinfo = auto_open_streams[i]; if(!sinfo->protocols) { mp_msg(MSGT_OPEN,MSGL_WARN, "Stream type %s has protocols == NULL, it's a bug\n", sinfo->name); continue; } for(j = 0 ; sinfo->protocols[j] ; j++) { l = strlen(sinfo->protocols[j]); // l == 0 => Don't do protocol matching (ie network and filenames) if((l == 0 && !strstr(filename, "://")) || ((strncmp(sinfo->protocols[j],filename,l) == 0) && (strncmp("://",filename+l,3) == 0))) { *file_format = DEMUXER_TYPE_UNKNOWN; s = open_stream_plugin(sinfo,filename,mode,options,file_format,&r); if(s) return s; if(r != STREAM_UNSUPPORTED) { mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_FailedToOpen,filename); return NULL; } break; } } } mp_msg(MSGT_OPEN,MSGL_ERR, "No stream found to handle url %s\n",filename); return NULL; }
stream_t *open_stream_full(const char *filename, int mode, struct MPOpts *options, int *file_format) { int i,j,l,r; const stream_info_t* sinfo; stream_t* s; char *redirected_url = NULL; for(i = 0 ; auto_open_streams[i] ; i++) { sinfo = auto_open_streams[i]; if(!sinfo->protocols) { mp_msg(MSGT_OPEN,MSGL_WARN, "Stream type %s has protocols == NULL, it's a bug\n", sinfo->name); continue; } for(j = 0 ; sinfo->protocols[j] ; j++) { l = strlen(sinfo->protocols[j]); // l == 0 => Don't do protocol matching (ie network and filenames) if((l == 0 && !strstr(filename, "://")) || ((strncasecmp(sinfo->protocols[j],filename,l) == 0) && (strncmp("://",filename+l,3) == 0))) { *file_format = DEMUXER_TYPE_UNKNOWN; s = open_stream_plugin(sinfo,filename,mode,options,file_format,&r, &redirected_url); if(s) return s; if(r == STREAM_REDIRECTED && redirected_url) { mp_msg(MSGT_OPEN,MSGL_V, "[%s] open %s redirected to %s\n", sinfo->info, filename, redirected_url); s = open_stream_full(redirected_url, mode, options, file_format); free(redirected_url); return s; } else if(r != STREAM_UNSUPPORTED) { mp_tmsg(MSGT_OPEN,MSGL_ERR, "Failed to open %s.\n",filename); return NULL; } break; } } } mp_tmsg(MSGT_OPEN,MSGL_ERR, "No stream found to handle url %s\n", filename); return NULL; }
stream_t* open_stream_full(const char* filename,int mode, char** options, int* file_format) { int i,j; for(i = 0 ; auto_open_streams[i] ; i++) { const stream_info_t *sinfo = auto_open_streams[i]; for(j = 0 ; sinfo->protocols[j] ; j++) { int l = strlen(sinfo->protocols[j]); // l == 0 => Don't do protocol matching (ie network and filenames) if((l == 0 && !strstr(filename, "://")) || ((strncasecmp(sinfo->protocols[j],filename,l) == 0) && (strncmp("://",filename+l,3) == 0))) { int r; char *redirected_url = NULL; stream_t* s; *file_format = DEMUXER_TYPE_UNKNOWN; s = open_stream_plugin(sinfo,filename,mode,options,file_format,&r, &redirected_url); if(s) return s; if(r == STREAM_REDIRECTED && redirected_url) { mp_msg(MSGT_OPEN,MSGL_V, "[%s] open %s redirected to %s\n", sinfo->info, filename, redirected_url); s = open_stream_full(redirected_url, mode, options, file_format); free(redirected_url); return s; } else if(r != STREAM_UNSUPPORTED) { mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_FailedToOpen,filename); return NULL; } break; } } } mp_msg(MSGT_OPEN,MSGL_ERR, MSGTR_StreamCantHandleURL,filename); return NULL; }