From d87dba631480c070d028b4332ba3a1853e18a38b Mon Sep 17 00:00:00 2001 From: Michael Roitzsch Date: Mon, 9 Dec 2002 21:56:28 +0000 Subject: - 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 --- src/libmpeg2/decode.c | 16 +++++++++++++++- src/libspucc/xine_decoder.c | 43 ++++++++++++++++--------------------------- 2 files changed, 31 insertions(+), 28 deletions(-) (limited to 'src') 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; } -- cgit v1.2.3