diff options
author | 2008-04-23 06:35:36 +0300 | |
---|---|---|
committer | 2008-04-23 13:48:38 +0300 | |
commit | f518cf7ea99e9282508f551ecb43892f6aabcbc4 (patch) | |
tree | 76c85c7cdbb4d1e10679faf86c4bf8336598d6bc | |
parent | 9e7dfe3fa34ca05fb63cd34369f7c847b777516d (diff) |
Add option pointer to stream struct (at least temporarily)
The stream code does not access many option variables directly, but it
does access some such as audio_id and network_bandwidth (and does that
without including proper headers for them). Add option pointer to the
stream struct to allow access to those variables. Remove the unused
(always NULL) and clumsy-looking char** options parameter in the
open_stream call and replace it with the option pointer. The parameter
is currently only set in the main open_stream() call in MPlayer.c and
not in any other locations that can open a stream.
In the long term it might be better to pass a more limited set of
values somehow, but this should do for now.
-rw-r--r-- | mplayer.c | 2 | ||||
-rw-r--r-- | stream/open.c | 3 | ||||
-rw-r--r-- | stream/stream.c | 26 | ||||
-rw-r--r-- | stream/stream.h | 8 |
4 files changed, 19 insertions, 20 deletions
@@ -3150,7 +3150,7 @@ if (edl_output_filename) { mpctx->sh_video=NULL; current_module="open_stream"; - mpctx->stream=open_stream(filename,0,&mpctx->file_format); + mpctx->stream = open_stream(filename, opts, &mpctx->file_format); if(!mpctx->stream) { // error... mpctx->eof = libmpdemux_was_interrupted(mpctx, PT_NEXT_ENTRY); goto goto_next_file; diff --git a/stream/open.c b/stream/open.c index 0ec0222c32..dad7c49db7 100644 --- a/stream/open.c +++ b/stream/open.c @@ -30,7 +30,8 @@ int dvd_title=0; // Open a new stream (stdin/file/vcd/url) -stream_t* open_stream(char* filename,char** options, int* file_format){ +stream_t* open_stream(char* filename, struct MPOpts *options, int* file_format) +{ // Check if playlist or unknown if (*file_format != DEMUXER_TYPE_PLAYLIST){ *file_format=DEMUXER_TYPE_UNKNOWN; diff --git a/stream/stream.c b/stream/stream.c index f9ce23cfb8..ded692eca0 100644 --- a/stream/stream.c +++ b/stream/stream.c @@ -121,9 +121,11 @@ static const stream_info_t* const auto_open_streams[] = { NULL }; -static stream_t* open_stream_plugin(const stream_info_t* sinfo,char* filename,int mode, - char** options, int* file_format, int* ret, - char** redirected_url) { +static stream_t *open_stream_plugin(const stream_info_t *sinfo, char *filename, + int mode, struct MPOpts *options, + int *file_format, int *ret, + char **redirected_url) +{ void* arg = NULL; stream_t* s; m_struct_t* desc = (m_struct_t*)sinfo->opts; @@ -140,18 +142,9 @@ static stream_t* open_stream_plugin(const stream_info_t* sinfo,char* filename,in 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->opts = options; s->url=strdup(filename); s->flags |= mode; *ret = sinfo->open(s,mode,arg,file_format); @@ -188,7 +181,9 @@ static stream_t* open_stream_plugin(const stream_info_t* sinfo,char* filename,in } -stream_t* open_stream_full(char* filename,int mode, char** options, int* file_format) { +stream_t *open_stream_full(char *filename,int mode, struct MPOpts *options, + int* file_format) +{ int i,j,l,r; const stream_info_t* sinfo; stream_t* s; @@ -230,7 +225,8 @@ stream_t* open_stream_full(char* filename,int mode, char** options, int* file_fo return NULL; } -stream_t* open_output_stream(char* filename,char** options) { +stream_t *open_output_stream(char *filename, struct MPOpts *options) +{ int file_format; //unused if(!filename) { mp_msg(MSGT_OPEN,MSGL_ERR,"open_output_stream(), NULL filename, report this bug\n"); diff --git a/stream/stream.h b/stream/stream.h index e53d0f971b..f7c8c018e7 100644 --- a/stream/stream.h +++ b/stream/stream.h @@ -112,6 +112,7 @@ typedef struct stream_st { void* cache_data; void* priv; // used for DVD, TV, RTSP etc char* url; // strdup() of filename/url + struct MPOpts *opts; #ifdef MPLAYER_NETWORK streaming_ctrl_t *streaming_ctrl; #endif @@ -288,14 +289,15 @@ inline static int stream_skip(stream_t *s,off_t len){ return 1; } +struct MPOpts; void stream_reset(stream_t *s); int stream_control(stream_t *s, int cmd, void *arg); stream_t* new_stream(int fd,int type); void free_stream(stream_t *s); stream_t* new_memory_stream(unsigned char* data,int len); -stream_t* open_stream(char* filename,char** options,int* file_format); -stream_t* open_stream_full(char* filename,int mode, char** options, int* file_format); -stream_t* open_output_stream(char* filename,char** options); +stream_t* open_stream(char* filename, struct MPOpts *options,int* file_format); +stream_t* open_stream_full(char* filename,int mode, struct MPOpts *options, int* file_format); +stream_t* open_output_stream(char* filename,struct MPOpts *options); /// Set the callback to be used by libstream to check for user /// interruption during long blocking operations (cache filling, etc). void stream_set_interrupt_callback(int (*cb)(int)); |