summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libmpeg2/decode.c16
-rw-r--r--src/libspucc/xine_decoder.c41
2 files changed, 31 insertions, 26 deletions
diff --git a/src/libmpeg2/decode.c b/src/libmpeg2/decode.c
index 88a660cb8..b514bd784 100644
--- a/src/libmpeg2/decode.c
+++ b/src/libmpeg2/decode.c
@@ -779,17 +779,15 @@ static void process_userdata(mpeg2dec_t *mpeg2dec, uint8_t *buffer)
mpeg2dec->cc_dec = get_spu_decoder(mpeg2dec->stream, (BUF_SPU_CC >> 16) & 0xff);
if (mpeg2dec->cc_dec) {
- buf_element_t *buf;
+ buf_element_t buf;
- buf = mpeg2dec->stream->video_fifo->buffer_pool_alloc (mpeg2dec->stream->video_fifo);
- buf->type = BUF_SPU_CC;
- buf->content = &buffer[2];
- buf->pts = mpeg2dec->pts;
- buf->size = find_end(buffer) - &buffer[2];
+ buf.type = BUF_SPU_CC;
+ buf.content = &buffer[2];
+ buf.pts = mpeg2dec->pts;
+ buf.size = find_end(buffer) - &buffer[2];
+ buf.decoder_flags = 0;
- mpeg2dec->cc_dec->decode_data(mpeg2dec->cc_dec, buf);
-
- buf->free_buffer(buf);
+ mpeg2dec->cc_dec->decode_data(mpeg2dec->cc_dec, &buf);
}
}
}
diff --git a/src/libspucc/xine_decoder.c b/src/libspucc/xine_decoder.c
index 3645c9af7..c01e498a6 100644
--- a/src/libspucc/xine_decoder.c
+++ b/src/libspucc/xine_decoder.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: xine_decoder.c,v 1.20 2002/12/08 15:50:35 mroi Exp $
+ * $Id: xine_decoder.c,v 1.21 2002/12/09 21:24:36 cvogler Exp $
*
* closed caption spu decoder. receive data by events.
*
@@ -281,25 +281,29 @@ void spucc_notify_frame_change(spucc_decoder_t *this, int width, int height)
}
+/* event listener for frame changes */
+static void spucc_event_listener(void *this_gen, const xine_event_t *event)
+{
+ spucc_decoder_t *this = (spucc_decoder_t *) this_gen;
+
+ switch (event->type) {
+ case XINE_EVENT_FRAME_FORMAT_CHANGE:
+ {
+ xine_format_change_data_t *frame_change =
+ (xine_format_change_data_t *)event->data;
+
+ spucc_notify_frame_change(this, frame_change->width,
+ frame_change->height);
+ }
+ break;
+ }
+}
+
+
/*------------------- implementation of spudec interface -------------------*/
static void spudec_decode_data (spu_decoder_t *this_gen, buf_element_t *buf) {
spucc_decoder_t *this = (spucc_decoder_t *) this_gen;
- xine_event_t *event;
-
- if ((event = xine_event_get(this->queue))) {
- switch (event->type) {
- case XINE_EVENT_FRAME_FORMAT_CHANGE:
- {
- xine_format_change_data_t *frame_change =
- (xine_format_change_data_t *)event->data;
-
- spucc_notify_frame_change(this, frame_change->width,
- frame_change->height);
- }
- break;
- }
- }
if (buf->decoder_flags & BUF_FLAG_PREVIEW) {
} else {
@@ -361,7 +365,10 @@ static spu_decoder_t *spudec_open_plugin (spu_decoder_class_t *class, xine_strea
pthread_mutex_lock(&this->cc_mutex);
spucc_do_init(this, stream->video_out);
pthread_mutex_unlock(&this->cc_mutex);
-
+
+ xine_event_create_listener_thread (this->queue, spucc_event_listener,
+ (void *) this);
+
return &this->spu_decoder;
}