summaryrefslogtreecommitdiff
path: root/src/xine-engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/xine-engine')
-rw-r--r--src/xine-engine/buffer_types.c8
-rw-r--r--src/xine-engine/events.c4
-rw-r--r--src/xine-engine/xine.c16
3 files changed, 21 insertions, 7 deletions
diff --git a/src/xine-engine/buffer_types.c b/src/xine-engine/buffer_types.c
index 6f45672ee..55661c381 100644
--- a/src/xine-engine/buffer_types.c
+++ b/src/xine-engine/buffer_types.c
@@ -1194,6 +1194,14 @@ static const audio_db_t audio_db[] = {
BUF_AUDIO_EAC3,
"E-AC-3"
},
+{
+ {
+ ME_FOURCC('M', 'P', '4', 'L'),
+ 0
+ },
+ BUF_AUDIO_AAC_LATM,
+ "AAC LATM"
+},
{ { 0 }, 0, "last entry" }
};
diff --git a/src/xine-engine/events.c b/src/xine-engine/events.c
index 11d6e8bd7..5bd827c45 100644
--- a/src/xine-engine/events.c
+++ b/src/xine-engine/events.c
@@ -111,6 +111,8 @@ xine_event_queue_t *xine_event_new_queue (xine_stream_t *stream) {
xine_event_queue_t *queue;
+ _x_refcounter_inc(stream->refcounter);
+
queue = malloc (sizeof (xine_event_queue_t));
pthread_mutex_init (&queue->lock, NULL);
@@ -186,6 +188,8 @@ void xine_event_dispose_queue (xine_event_queue_t *queue) {
free (queue->listener_thread);
}
+ _x_refcounter_dec(stream->refcounter);
+
/*
* clean up pending events
*/
diff --git a/src/xine-engine/xine.c b/src/xine-engine/xine.c
index 6e5001f35..d3a75623b 100644
--- a/src/xine-engine/xine.c
+++ b/src/xine-engine/xine.c
@@ -1519,6 +1519,14 @@ static void xine_dispose_internal (xine_stream_t *stream) {
xine_list_iterator_t *ite;
lprintf("stream: %p\n", stream);
+
+ pthread_mutex_lock(&stream->xine->streams_lock);
+ ite = xine_list_find(stream->xine->streams, stream);
+ if (ite) {
+ xine_list_remove(stream->xine->streams, ite);
+ }
+ pthread_mutex_unlock(&stream->xine->streams_lock);
+
pthread_mutex_destroy (&stream->info_mutex);
pthread_mutex_destroy (&stream->meta_mutex);
pthread_mutex_destroy (&stream->frontend_lock);
@@ -1537,13 +1545,6 @@ static void xine_dispose_internal (xine_stream_t *stream) {
xine_list_delete(stream->event_queues);
- pthread_mutex_lock(&stream->xine->streams_lock);
- ite = xine_list_find(stream->xine->streams, stream);
- if (ite) {
- xine_list_remove(stream->xine->streams, ite);
- }
- pthread_mutex_unlock(&stream->xine->streams_lock);
-
_x_refcounter_dispose(stream->refcounter);
free (stream->current_extra_info);
@@ -1581,6 +1582,7 @@ void xine_dispose (xine_stream_t *stream) {
if (stream->osd_renderer)
stream->osd_renderer->close( stream->osd_renderer );
+ /* Remove the reference that the stream was created with. */
_x_refcounter_dec(stream->refcounter);
}