summaryrefslogtreecommitdiff
path: root/src/xine-engine/xine_internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/xine-engine/xine_internal.h')
-rw-r--r--src/xine-engine/xine_internal.h97
1 files changed, 51 insertions, 46 deletions
diff --git a/src/xine-engine/xine_internal.h b/src/xine-engine/xine_internal.h
index 9b69f16f1..7566c83e0 100644
--- a/src/xine-engine/xine_internal.h
+++ b/src/xine-engine/xine_internal.h
@@ -1,18 +1,18 @@
/*
* Copyright (C) 2000-2005 the xine project
- *
+ *
* This file is part of xine, a free 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
@@ -96,11 +96,11 @@ typedef struct xine_ticket_s xine_ticket_t;
*/
struct xine_s {
-
+
config_values_t *config;
plugin_catalog_t *plugin_catalog;
-
+
int demux_strategy;
char *save_path;
@@ -111,12 +111,15 @@ struct xine_s {
xine_list_t *streams;
pthread_mutex_t streams_lock;
-
+
metronom_clock_t *clock;
#ifdef XINE_ENGINE_INTERNAL
xine_ticket_t *port_ticket;
pthread_mutex_t log_lock;
+
+ xine_log_cb_t log_cb;
+ void *log_cb_user_data;
#endif
};
@@ -131,34 +134,34 @@ struct xine_ticket_s {
* the ticket before any operation that might block
*
* you must never write to this member directly
- */
+ */
int ticket_revoked;
-
+
/* apply for a ticket; between acquire and relese of an irrevocable
* ticket (be sure to pair them properly!), it is guaranteed that you
* will never be blocked by ticket revocation */
void (*acquire)(xine_ticket_t *self, int irrevocable);
-
+
/* give a ticket back */
void (*release)(xine_ticket_t *self, int irrevocable);
-
+
/* renew a ticket, when it has been revoked, see ticket_revoked above;
* irrevocable must be set to one, if your thread might have acquired
* irrevocable tickets you don't know of; set it to zero only when
* you know that this is impossible */
void (*renew)(xine_ticket_t *self, int irrevocable);
-
+
#ifdef XINE_ENGINE_INTERNAL
/* allow handing out new tickets */
void (*issue)(xine_ticket_t *self, int atomic);
-
+
/* revoke all tickets and deny new ones;
* a pair of atomic revoke and issue cannot be interrupted by another
* revocation or by other threads acquiring tickets */
void (*revoke)(xine_ticket_t *self, int atomic);
-
+
/* behaves like acquire() but doesn't block the calling thread; when
- * the thread would have been blocked, 0 is returned otherwise 1
+ * the thread would have been blocked, 0 is returned otherwise 1
* this function acquires a ticket even if ticket revocation is active */
int (*acquire_nonblocking)(xine_ticket_t *self, int irrevocable);
@@ -167,7 +170,7 @@ struct xine_ticket_s {
void (*release_nonblocking)(xine_ticket_t *self, int irrevocable);
void (*dispose)(xine_ticket_t *self);
-
+
pthread_mutex_t lock;
pthread_mutex_t revoke_lock;
pthread_cond_t issued;
@@ -206,28 +209,28 @@ struct xine_event_queue_s {
*/
struct xine_stream_s {
-
+
/* reference to xine context */
xine_t *xine;
- /* metronom instance used by current stream */
+ /* metronom instance used by current stream */
metronom_t *metronom;
-
+
/* demuxers use input_plugin to read data */
input_plugin_t *input_plugin;
-
+
/* current content detection method, see METHOD_BY_xxx */
int content_detection_method;
/* used by video decoders */
xine_video_port_t *video_out;
-
+
/* demuxers send data to video decoders using this fifo */
fifo_buffer_t *video_fifo;
-
+
/* used by audio decoders */
xine_audio_port_t *audio_out;
-
+
/* demuxers send data to audio decoders using this fifo */
fifo_buffer_t *audio_fifo;
@@ -240,10 +243,10 @@ struct xine_stream_s {
/* input_dvd uses this one. is it possible to add helper functions instead? */
spu_decoder_t *spu_decoder_plugin;
-
+
/* dxr3 use this one, should be possible to fix to use the port instead */
vo_driver_t *video_driver;
-
+
/* these definitely should be made private! */
int audio_channel_auto;
int spu_decoder_streamtype;
@@ -251,10 +254,10 @@ struct xine_stream_s {
int spu_channel_auto;
int spu_channel_letterbox;
int spu_channel;
-
+
#ifdef XINE_ENGINE_INTERNAL
/* these are private variables, plugins must not access them */
-
+
int status;
/* lock controlling speed change access */
@@ -271,7 +274,7 @@ struct xine_stream_s {
int video_decoder_streamtype;
extra_info_t *video_decoder_extra_info;
int video_channel;
-
+
pthread_t audio_thread;
int audio_thread_created;
audio_decoder_t *audio_decoder_plugin;
@@ -318,21 +321,22 @@ struct xine_stream_s {
/* wait for headers sent / stream decoding finished */
pthread_mutex_t counter_lock;
pthread_cond_t counter_changed;
- int header_count_audio;
- int header_count_video;
- int finished_count_audio;
- int finished_count_video;
+ int header_count_audio;
+ int header_count_video;
+ int finished_count_audio;
+ int finished_count_video;
/* event mechanism */
xine_list_t *event_queues;
pthread_mutex_t event_queues_lock;
-
+
/* demux thread stuff */
pthread_t demux_thread;
int demux_thread_created;
int demux_thread_running;
pthread_mutex_t demux_lock;
int demux_action_pending;
+ pthread_cond_t demux_resume;
pthread_mutex_t demux_mutex; /* used in _x_demux_... functions to synchronize order of pairwise A/V buffer operations */
extra_info_t *current_extra_info;
@@ -341,14 +345,14 @@ struct xine_stream_s {
xine_post_out_t video_source;
xine_post_out_t audio_source;
-
+
int slave_is_subtitle; /* ... and will be automaticaly disposed */
int slave_affection; /* what operations need to be propagated down to the slave? */
-
+
int err;
-
+
broadcaster_t *broadcaster;
-
+
refcounter_t *refcounter;
int emergency_brake; /* something went really wrong and this stream must be
@@ -357,6 +361,7 @@ struct xine_stream_s {
int early_finish_event; /* do not wait fifos get empty before sending event */
int gapless_switch; /* next stream switch will be gapless */
int delay_finish_event; /* delay event in 1/10 sec units. 0=>no delay, -1=>forever */
+ int keep_ao_driver_open;
#endif
};
@@ -388,8 +393,8 @@ input_plugin_t *_x_find_input_plugin (xine_stream_t *stream, const char *mrl) XI
demux_plugin_t *_x_find_demux_plugin (xine_stream_t *stream, input_plugin_t *input) XINE_PROTECTED;
demux_plugin_t *_x_find_demux_plugin_by_name (xine_stream_t *stream, const char *name, input_plugin_t *input) XINE_PROTECTED;
demux_plugin_t *_x_find_demux_plugin_last_probe(xine_stream_t *stream, const char *last_demux_name, input_plugin_t *input) XINE_PROTECTED;
-input_plugin_t *_x_rip_plugin_get_instance (xine_stream_t *stream, const char *filename) XINE_PROTECTED;
-input_plugin_t *_x_cache_plugin_get_instance (xine_stream_t *stream, int readahead_size) XINE_PROTECTED;
+input_plugin_t *_x_rip_plugin_get_instance (xine_stream_t *stream, const char *filename) XINE_MALLOC XINE_PROTECTED;
+input_plugin_t *_x_cache_plugin_get_instance (xine_stream_t *stream, int readahead_size) XINE_MALLOC XINE_PROTECTED;
void _x_free_input_plugin (xine_stream_t *stream, input_plugin_t *input) XINE_PROTECTED;
void _x_free_demux_plugin (xine_stream_t *stream, demux_plugin_t *demux) XINE_PROTECTED;
@@ -407,11 +412,11 @@ void _x_extra_info_reset( extra_info_t *extra_info ) XINE_PROTECTED;
void _x_extra_info_merge( extra_info_t *dst, extra_info_t *src ) XINE_PROTECTED;
void _x_get_current_info (xine_stream_t *stream, extra_info_t *extra_info, int size) XINE_PROTECTED;
-
-
+
+
/* demuxer helper functions from demux.c */
-/*
+/*
* Flush audio and video buffers. It is called from demuxers on
* seek/stop, and may be useful when user input changes a stream and
* xine-lib has cached buffers that have yet to be played.
@@ -441,9 +446,9 @@ void _x_demux_send_data(fifo_buffer_t *fifo, uint8_t *data, int size,
int input_normpos, int input_time, int total_time,
uint32_t frame_number) XINE_PROTECTED;
-int _x_demux_read_send_data(fifo_buffer_t *fifo, input_plugin_t *input,
- int size, int64_t pts, uint32_t type,
- uint32_t decoder_flags, off_t input_normpos,
+int _x_demux_read_send_data(fifo_buffer_t *fifo, input_plugin_t *input,
+ int size, int64_t pts, uint32_t type,
+ uint32_t decoder_flags, off_t input_normpos,
int input_time, int total_time,
uint32_t frame_number) XINE_PROTECTED;
@@ -456,7 +461,7 @@ void _x_demux_send_mrl_reference (xine_stream_t *stream, int alternative,
*/
void _x_mrl_unescape(char *mrl) XINE_PROTECTED;
-/*
+/*
* plugin_loader functions
*
*/