summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Roitzsch <mroi@users.sourceforge.net>2002-12-09 21:56:28 +0000
committerMichael Roitzsch <mroi@users.sourceforge.net>2002-12-09 21:56:28 +0000
commitd87dba631480c070d028b4332ba3a1853e18a38b (patch)
treed8ed299b10c33fa1bddf171cbac7e2ae0d287bba /src
parente6512d27b6f14fb1bc09c66ca04904786fe3b306 (diff)
downloadxine-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.c16
-rw-r--r--src/libspucc/xine_decoder.c43
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;
}