From 5410de5525ceaa88b17e0b72a39bf0132003d096 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Tue, 5 Oct 2004 10:41:08 +0000 Subject: [PATCH] ext/libmng/gstmngdec.c: Set the framerate correctly. Original commit message from CVS: * ext/libmng/gstmngdec.c: (gst_mngdec_loop), (mngdec_error), (mngdec_openstream), (mngdec_closestream), (mngdec_handle_sink_event), (mngdec_readdata), (mngdec_gettickcount), (mngdec_settimer), (mngdec_processheader), (mngdec_getcanvasline), (mngdec_refresh), (gst_mngdec_change_state): Set the framerate correctly. --- ChangeLog | 10 ++++++++++ ext/libmng/gstmngdec.c | 31 ++++++++++++++++++++++++++----- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 62fcd15..f34fc8b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2004-10-05 Wim Taymans + + * ext/libmng/gstmngdec.c: (gst_mngdec_loop), (mngdec_error), + (mngdec_openstream), (mngdec_closestream), + (mngdec_handle_sink_event), (mngdec_readdata), + (mngdec_gettickcount), (mngdec_settimer), (mngdec_processheader), + (mngdec_getcanvasline), (mngdec_refresh), + (gst_mngdec_change_state): + Set the framerate correctly. + 2004-10-04 Ronald S. Bultje * gst/avi/gstavidemux.c: (gst_avi_demux_massage_index): diff --git a/ext/libmng/gstmngdec.c b/ext/libmng/gstmngdec.c index 0266fd5..2df2526 100644 --- a/ext/libmng/gstmngdec.c +++ b/ext/libmng/gstmngdec.c @@ -234,16 +234,24 @@ static void gst_mngdec_loop (GstElement * element) { GstMngDec *mngdec; + mng_retcode ret; mngdec = GST_MNGDEC (element); if (mngdec->first) { GST_DEBUG ("display"); - mng_readdisplay (mngdec->mng); + ret = mng_readdisplay (mngdec->mng); mngdec->first = FALSE; } else { GST_DEBUG ("resume"); - mng_display_resume (mngdec->mng); + ret = mng_display_resume (mngdec->mng); + } + if (ret == MNG_NEEDTIMERWAIT) { + /* libmng needs more data later on */ + } else { + /* assume EOS here */ + gst_pad_push (mngdec->srcpad, GST_DATA (gst_event_new (GST_EVENT_EOS))); + gst_element_set_eos (element); } } @@ -386,7 +394,6 @@ mngdec_gettickcount (mng_handle mng) GTimeVal time; guint32 val; - g_get_current_time (&time); val = time.tv_sec * 1000 + time.tv_usec; @@ -411,12 +418,24 @@ static mng_bool mngdec_processheader (mng_handle mng, mng_uint32 width, mng_uint32 height) { GstMngDec *mngdec; + guint32 playtime; + guint32 framecount; + guint32 ticks; mngdec = GST_MNGDEC (mng_get_userdata (mng)); - g_print ("process header %d %d\n", width, height); GST_DEBUG ("process header %d %d", width, height); + playtime = mng_get_playtime (mng); + framecount = mng_get_framecount (mng); + ticks = mng_get_ticks (mng); + + if (playtime == 0) { + mngdec->fps = ticks; + } else { + mngdec->fps = ((gfloat) ticks) / playtime; + } + if (mngdec->width != width || mngdec->height != height) { mngdec->width = width; mngdec->stride = ((width + 3) & ~3) * 4; @@ -451,9 +470,12 @@ mngdec_refresh (mng_handle mng, mng_uint32 x, mng_uint32 y, mng_uint32 w, mng_uint32 h) { GstMngDec *mngdec; + guint32 current; mngdec = GST_MNGDEC (mng_get_userdata (mng)); + current = mng_get_currentplaytime (mng); + GST_DEBUG ("refresh %d %d %d %d", x, y, w, h); if (h == mngdec->height) { GstBuffer *out = gst_buffer_copy (mngdec->buffer_out); @@ -494,7 +516,6 @@ gst_mngdec_change_state (GstElement * element) break; case GST_STATE_READY_TO_PAUSED: mngdec->first = TRUE; - mngdec->fps = 10.0; break; case GST_STATE_PAUSED_TO_PLAYING: break; -- 2.7.4