diff options
author | Michael Roitzsch <mroi@users.sourceforge.net> | 2002-12-09 21:56:28 +0000 |
---|---|---|
committer | Michael Roitzsch <mroi@users.sourceforge.net> | 2002-12-09 21:56:28 +0000 |
commit | d87dba631480c070d028b4332ba3a1853e18a38b (patch) | |
tree | d8ed299b10c33fa1bddf171cbac7e2ae0d287bba /src | |
parent | e6512d27b6f14fb1bc09c66ca04904786fe3b306 (diff) | |
download | xine-lib-d87dba631480c070d028b4332ba3a1853e18a38b.tar.gz xine-lib-d87dba631480c070d028b4332ba3a1853e18a38b.tar.bz2 |
- remove unneeded event listener thread, the real deadlock has already been fixed
- send an additional frame format event, so that the CC decoder knows initial size
CVS patchset: 3473
CVS date: 2002/12/09 21:56:28
Diffstat (limited to 'src')
-rw-r--r-- | src/libmpeg2/decode.c | 16 | ||||
-rw-r--r-- | src/libspucc/xine_decoder.c | 43 |
2 files changed, 31 insertions, 28 deletions
diff --git a/src/libmpeg2/decode.c b/src/libmpeg2/decode.c index b514bd784..e4f8982b6 100644 --- a/src/libmpeg2/decode.c +++ b/src/libmpeg2/decode.c @@ -774,9 +774,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 (!mpeg2dec->cc_dec) + if (!mpeg2dec->cc_dec) { + xine_event_t event; + xine_format_change_data_t data; + /* open the closed caption decoder first */ mpeg2dec->cc_dec = get_spu_decoder(mpeg2dec->stream, (BUF_SPU_CC >> 16) & 0xff); + + /* send a frame format event so that the CC decoder knows the initial image size */ + event.type = XINE_EVENT_FRAME_FORMAT_CHANGE; + event.stream = mpeg2dec->stream; + event.data = &data; + event.data_length = sizeof(data); + data.width = mpeg2dec->picture->coded_picture_width; + data.height = mpeg2dec->picture->coded_picture_height; + data.aspect = mpeg2dec->picture->aspect_ratio_information; + xine_event_send(mpeg2dec->stream, &event); + } if (mpeg2dec->cc_dec) { buf_element_t buf; diff --git a/src/libspucc/xine_decoder.c b/src/libspucc/xine_decoder.c index c01e498a6..84c9d458a 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.21 2002/12/09 21:24:36 cvogler Exp $ + * $Id: xine_decoder.c,v 1.22 2002/12/09 21:56:29 mroi Exp $ * * closed caption spu decoder. receive data by events. * @@ -281,29 +281,25 @@ 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 { @@ -362,13 +358,6 @@ static spu_decoder_t *spudec_open_plugin (spu_decoder_class_t *class, xine_strea spucc_register_cfg_vars(this, stream->xine->config); cc_decoder_init(); - 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; } |