From: <bar...@t-...> - 2002-09-24 00:38:23
|
hi michael, oki, a first draft of what the split-up of xine_stream_t and xine_t might look like: struct xine_s { config_values_t *config; plugin_catalog_t *plugin_catalog; int demux_strategy; /* array of event handlers */ xine_event_listener_cb_t event_listeners[XINE_MAX_EVENT_LISTENERS]; void *event_listener_user_data[XINE_MAX_EVENT_LISTENERS]; uint16_t num_event_listeners; uint8_t event_pending[XINE_MAX_EVENT_TYPES]; pthread_cond_t event_handled; pthread_mutex_t event_lock; /* log output that may be presented to the user */ scratch_buffer_t *log_buffers[XINE_LOG_NUM]; int err; xine_report_codec_cb_t report_codec_cb; void *report_codec_user_data; }; /* * xine_stream - per-stream parts of the xine engine */ struct xine_stream_s { char *mrl; metronom_t *metronom; input_plugin_t *input_plugin; demux_plugin_t *demuxer_plugin; int status; int speed; off_t input_pos; off_t input_length; int input_time; spu_functions_t *spu_out; pthread_t spu_thread; spu_decoder_t *spu_decoder_plugin; int spu_finished; /* *_user: -2 => off -1 => auto (use *_auto value) >=0 => respect the user's choice */ int audio_channel_user; int audio_channel_auto; int spu_channel_user; int spu_channel_auto; int spu_channel_letterbox; int spu_channel_pan_scan; int spu_channel; xine_vo_driver_t *video_driver; vo_instance_t *video_out; fifo_buffer_t *video_fifo; pthread_t video_thread; video_decoder_t *video_decoder_plugin; int video_finished; int video_in_discontinuity; int video_channel; osd_renderer_t *osd_renderer; osd_object_t *osd; int osd_display; ao_instance_t *audio_out; fifo_buffer_t *audio_fifo; lrb_t *audio_temp; pthread_t audio_thread; audio_decoder_t *cur_audio_decoder_plugin; uint32_t audio_track_map[50]; int audio_track_map_entries; int audio_finished; uint32_t audio_type; /* lock for xine player functions */ pthread_mutex_t xine_lock; /* lock for xxx_finished variables */ pthread_mutex_t finished_lock; pthread_t finished_thread; int finished_thread_running; int curtime_needed_for_osd; pthread_mutex_t osd_lock; /* stream meta information */ int stream_info[XINE_STREAM_INFO_MAX]; char *meta_info [XINE_STREAM_INFO_MAX]; int header_sent_counter; /* wait for headers sent */ }; unfortunately this also means that the xine-engine will no longer have a logo (not sure if anybody except me will miss it) - it is then up to the ui to play a logo stream if no other stream is being displayed - or not. of course this will hopefully simplify a few things within the engine :-) cheers, guenter |