diff options
author | Bastien Nocera <hadess@hadess.net> | 2008-05-20 09:36:56 +0000 |
---|---|---|
committer | Sebastian Dröge <slomo@circular-chaos.org> | 2008-05-20 09:36:56 +0000 |
commit | fb7879098c4717909b4345ecc9bbd90f777f4cda (patch) | |
tree | bef62e73513ba7774ca73094e7dd9c7227324331 | |
parent | 61dbbd46cc02f240bd7474c8e867ff67cfa8b4d4 (diff) | |
download | gst-plugins-bad-fb7879098c4717909b4345ecc9bbd90f777f4cda.tar.gz gst-plugins-bad-fb7879098c4717909b4345ecc9bbd90f777f4cda.tar.bz2 gst-plugins-bad-fb7879098c4717909b4345ecc9bbd90f777f4cda.zip |
ext/mythtv/gstmythtvsrc.c: Correctly set duration to get a more correct seek bar in totem.
Original commit message from CVS:
Patch by: Bastien Nocera <hadess at hadess dot net>
* ext/mythtv/gstmythtvsrc.c: (gst_mythtv_src_class_init),
(gst_mythtv_src_init), (gst_mythtv_src_clear),
(do_read_request_response), (gst_mythtv_src_create),
(gst_mythtv_src_start):
Correctly set duration to get a more correct seek bar in totem.
Disable query and event functions as they don't work and do some
smaller cleanup.
Fixes bug #533736.
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | ext/mythtv/gstmythtvsrc.c | 42 |
2 files changed, 46 insertions, 11 deletions
@@ -1,5 +1,20 @@ 2008-05-20 Sebastian Dröge <slomo@circular-chaos.org> + Patch by: Bastien Nocera <hadess at hadess dot net> + + * ext/mythtv/gstmythtvsrc.c: (gst_mythtv_src_class_init), + (gst_mythtv_src_init), (gst_mythtv_src_clear), + (do_read_request_response), (gst_mythtv_src_create), + (gst_mythtv_src_start): + Correctly set duration to get a more correct seek bar in totem. + + Disable query and event functions as they don't work and do some + smaller cleanup. + + Fixes bug #533736. + +2008-05-20 Sebastian Dröge <slomo@circular-chaos.org> + Patch by: Brian Koropoff <brianhk at cs dot washington dot edu> * ext/spc/Makefile.am: diff --git a/ext/mythtv/gstmythtvsrc.c b/ext/mythtv/gstmythtvsrc.c index a136c272..61a836d5 100644 --- a/ext/mythtv/gstmythtvsrc.c +++ b/ext/mythtv/gstmythtvsrc.c @@ -132,7 +132,7 @@ static gboolean gst_mythtv_src_stop (GstBaseSrc * bsrc); static gboolean gst_mythtv_src_get_size (GstBaseSrc * bsrc, guint64 * size); static gboolean gst_mythtv_src_is_seekable (GstBaseSrc * push_src); -static gboolean gst_mythtv_src_do_seek (GstBaseSrc * base, +static GstFlowReturn gst_mythtv_src_do_seek (GstBaseSrc * base, GstSegment * segment); static GstStateChangeReturn @@ -146,9 +146,10 @@ static void gst_mythtv_src_get_property (GObject * object, static void gst_mythtv_src_uri_handler_init (gpointer g_iface, gpointer iface_data); +#if 0 static gboolean gst_mythtv_src_handle_query (GstPad * pad, GstQuery * query); - static gboolean gst_mythtv_src_handle_event (GstPad * pad, GstEvent * event); +#endif static GMythFileReadResult do_read_request_response (GstMythtvSrc * src, guint size, GByteArray * data_ptr); @@ -241,12 +242,13 @@ gst_mythtv_src_class_init (GstMythtvSrcClass * klass) g_param_spec_string ("mythtv-channel", "mythtv-channel", "Change MythTV channel number", "", G_PARAM_READWRITE)); - gstbasesrc_class->start = gst_mythtv_src_start; - gstbasesrc_class->stop = gst_mythtv_src_stop; - gstbasesrc_class->get_size = gst_mythtv_src_get_size; - gstbasesrc_class->is_seekable = gst_mythtv_src_is_seekable; - gstbasesrc_class->do_seek = gst_mythtv_src_do_seek; - gstpushsrc_class->create = gst_mythtv_src_create; + gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_mythtv_src_start); + gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_mythtv_src_stop); + gstbasesrc_class->get_size = GST_DEBUG_FUNCPTR (gst_mythtv_src_get_size); + gstbasesrc_class->is_seekable = + GST_DEBUG_FUNCPTR (gst_mythtv_src_is_seekable); + gstbasesrc_class->do_seek = GST_DEBUG_FUNCPTR (gst_mythtv_src_do_seek); + gstpushsrc_class->create = GST_DEBUG_FUNCPTR (gst_mythtv_src_create); GST_DEBUG_CATEGORY_INIT (mythtvsrc_debug, "mythtvsrc", 0, "MythTV Client Source"); @@ -274,10 +276,14 @@ gst_mythtv_src_init (GstMythtvSrc * this, GstMythtvSrcClass * g_class) this->wait_to_transfer = 0; this->spawn_livetv = NULL; gst_base_src_set_format (GST_BASE_SRC (this), GST_FORMAT_BYTES); +#if 0 gst_pad_set_event_function (GST_BASE_SRC_PAD (GST_BASE_SRC (this)), gst_mythtv_src_handle_event); +#endif +#if 0 gst_pad_set_query_function (GST_BASE_SRC_PAD (GST_BASE_SRC (this)), gst_mythtv_src_handle_query); +#endif } @@ -286,6 +292,7 @@ gst_mythtv_src_clear (GstMythtvSrc * mythtv_src) { mythtv_src->unique_setup = FALSE; +#if 0 if (mythtv_src->spawn_livetv) { g_object_unref (mythtv_src->spawn_livetv); mythtv_src->spawn_livetv = NULL; @@ -300,6 +307,7 @@ gst_mythtv_src_clear (GstMythtvSrc * mythtv_src) g_object_unref (mythtv_src->backend_info); mythtv_src->backend_info = NULL; } +#endif } static void @@ -380,6 +388,7 @@ eos: src->eos = TRUE; done: + GST_LOG_OBJECT (src, "Finished read: result %d", result); return result; } @@ -402,7 +411,6 @@ gst_mythtv_src_create (GstPushSrc * psrc, GstBuffer ** outbuf) if (result == GMYTH_FILE_READ_ERROR) goto read_error; - *outbuf = gst_buffer_new (); GST_BUFFER_SIZE (*outbuf) = buffer->len; GST_BUFFER_MALLOCDATA (*outbuf) = buffer->data; @@ -429,6 +437,7 @@ gst_mythtv_src_create (GstPushSrc * psrc, GstBuffer ** outbuf) if (src->eos || (!src->live_tv && (src->bytes_read >= src->content_size))) ret = GST_FLOW_UNEXPECTED; + GST_LOG_OBJECT (src, "Create finished: %d", ret); return ret; read_error: @@ -522,6 +531,7 @@ gst_mythtv_src_start (GstBaseSrc * bsrc) GString *chain_id_local = NULL; GMythURI *gmyth_uri = NULL; gboolean ret = TRUE; + GstBaseSrc *basesrc; GstMessage *msg; if (src->unique_setup == FALSE) { @@ -629,9 +639,17 @@ gst_mythtv_src_start (GstBaseSrc * bsrc) src->do_start = FALSE; + basesrc = GST_BASE_SRC_CAST (src); + gst_segment_set_duration (&basesrc->segment, GST_FORMAT_BYTES, + src->content_size); + gst_element_post_message (GST_ELEMENT (src), + gst_message_new_duration (GST_OBJECT (src), GST_FORMAT_BYTES, + src->content_size)); +#if 0 gst_pad_push_event (GST_BASE_SRC_PAD (GST_BASE_SRC (src)), gst_event_new_new_segment (TRUE, 1.0, GST_FORMAT_BYTES, 0, src->content_size, 0)); +#endif done: if (gmyth_uri != NULL) { g_object_unref (gmyth_uri); @@ -724,6 +742,7 @@ gst_mythtv_src_stop (GstBaseSrc * bsrc) return TRUE; } +#if 0 static gboolean gst_mythtv_src_handle_event (GstPad * pad, GstEvent * event) { @@ -751,13 +770,14 @@ gst_mythtv_src_handle_event (GstPad * pad, GstEvent * event) GST_DEBUG_OBJECT (src, "HANDLE EVENT %d", ret); return ret; } - +#endif static gboolean gst_mythtv_src_is_seekable (GstBaseSrc * push_src) { return TRUE; } +#if 0 static gboolean gst_mythtv_src_handle_query (GstPad * pad, GstQuery * query) { @@ -798,7 +818,7 @@ gst_mythtv_src_handle_query (GstPad * pad, GstQuery * query) return res; } - +#endif static GstStateChangeReturn gst_mythtv_src_change_state (GstElement * element, GstStateChange transition) { |