diff options
author | Michael Roitzsch <mroi@users.sourceforge.net> | 2002-12-06 17:29:14 +0000 |
---|---|---|
committer | Michael Roitzsch <mroi@users.sourceforge.net> | 2002-12-06 17:29:14 +0000 |
commit | eecfa8d81ad62f165bf4daee0ce9ded211ea7243 (patch) | |
tree | 23de6d1f6456815b9893ab04336e6f21c134fa74 | |
parent | 9c1d67db798ae36fb7dfd8d66df49de68a50def3 (diff) | |
download | xine-lib-eecfa8d81ad62f165bf4daee0ce9ded211ea7243.tar.gz xine-lib-eecfa8d81ad62f165bf4daee0ce9ded211ea7243.tar.bz2 |
embed closed caption decoding again (needs testing)
CVS patchset: 3445
CVS date: 2002/12/06 17:29:14
-rw-r--r-- | src/libmpeg2/decode.c | 36 | ||||
-rw-r--r-- | src/libmpeg2/mpeg2.h | 4 |
2 files changed, 28 insertions, 12 deletions
diff --git a/src/libmpeg2/decode.c b/src/libmpeg2/decode.c index 5e6d73ca1..88a660cb8 100644 --- a/src/libmpeg2/decode.c +++ b/src/libmpeg2/decode.c @@ -696,6 +696,12 @@ void mpeg2_close (mpeg2dec_t * mpeg2dec) free (mpeg2dec->picture_base); mpeg2dec->picture = NULL; } + + if ( mpeg2dec->cc_dec) { + /* dispose the closed caption decoder */ + mpeg2dec->cc_dec->dispose(mpeg2dec->cc_dec); + mpeg2dec->cc_dec = NULL; + } } void mpeg2_find_sequence_header (mpeg2dec_t * mpeg2dec, @@ -767,17 +773,23 @@ static void process_userdata(mpeg2dec_t *mpeg2dec, uint8_t *buffer) { /* check if user data denotes closed captions */ if (buffer[0] == 'C' && buffer[1] == 'C') { -#if 0 - /* FIXME: find an event-less solution */ - xine_closed_caption_event_t event; - uint8_t *end = find_end(buffer); - - event.event.type = XINE_EVENT_CLOSED_CAPTION; - event.buffer = &buffer[2]; - event.buf_len = end - &buffer[2]; - event.pts = mpeg2dec->pts; - xine_send_event(mpeg2dec->xine, &event.event); -#endif - + + if (!mpeg2dec->cc_dec) + /* open the closed caption decoder first */ + mpeg2dec->cc_dec = get_spu_decoder(mpeg2dec->stream, (BUF_SPU_CC >> 16) & 0xff); + + if (mpeg2dec->cc_dec) { + 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]; + + mpeg2dec->cc_dec->decode_data(mpeg2dec->cc_dec, buf); + + buf->free_buffer(buf); + } } } diff --git a/src/libmpeg2/mpeg2.h b/src/libmpeg2/mpeg2.h index 993bdffc4..bd966baeb 100644 --- a/src/libmpeg2/mpeg2.h +++ b/src/libmpeg2/mpeg2.h @@ -47,6 +47,10 @@ typedef struct mpeg2dec_s { uint32_t rff_pattern; int force_aspect; xine_stream_t *stream; + + /* a spu decoder for possible closed captions */ + spu_decoder_t *cc_dec; + } mpeg2dec_t ; |