# HG changeset patch # User renatofilho # Date 1182539015 -3600 # Node ID b57cdd5fb898161ba0ea8e697ed7de0cf79ccf47 # Parent d03fc6221891ec90763c52d18d647a67a8562552 [svn r764] fixed bug on EOS diff -r d03fc6221891 -r b57cdd5fb898 gst-gmyth/mythsrc/gstmythtvsrc.c --- a/gst-gmyth/mythsrc/gstmythtvsrc.c Fri Jun 22 19:24:16 2007 +0100 +++ b/gst-gmyth/mythsrc/gstmythtvsrc.c Fri Jun 22 20:03:35 2007 +0100 @@ -383,7 +383,7 @@ G_OBJECT_CLASS(parent_class)->finalize(gobject); } -static GMythFileReadResult +static GMythFileReadResult do_read_request_response(GstMythtvSrc * src, guint size, GByteArray * data_ptr) { @@ -457,7 +457,7 @@ return result; } -static GstFlowReturn +static GstFlowReturn gst_mythtv_src_create(GstPushSrc * psrc, GstBuffer ** outbuf) { GstMythtvSrc *src; @@ -498,8 +498,8 @@ /* * got the next program info? */ - if (G_UNLIKELY(src->update_prog_chain) - || (result == GMYTH_FILE_READ_NEXT_PROG_CHAIN)) { + if (G_UNLIKELY(src->update_prog_chain) || + (result == GMYTH_FILE_READ_NEXT_PROG_CHAIN)) { GST_DEBUG_OBJECT(src, "Update PROGRAM CHAIN!!! buffer_size = %d.", src->bytes_queue->len); @@ -543,14 +543,13 @@ /* */ if (G_UNLIKELY(buffer->len < 0)) { - if (buffer != NULL) { g_byte_array_free(buffer, TRUE); buffer = NULL; } - if (src->live_tv - || (result == GMYTH_FILE_READ_NEXT_PROG_CHAIN)) + if (src->live_tv || + (result == GMYTH_FILE_READ_NEXT_PROG_CHAIN)) goto change_progchain; else goto read_error; @@ -561,8 +560,12 @@ buffer = NULL; } - if (!src->live_tv) - goto done; + if (!src->live_tv) { + if (src->eos) + goto eos; + else + goto done; + } else goto program_chain_changed; } @@ -589,9 +592,10 @@ */ } - guint buffer_size = - (src->buffer_remain < - MAX_READ_SIZE) ? src->buffer_remain : MAX_READ_SIZE; + guint buffer_size; + buffer_size = (src->buffer_remain < MAX_READ_SIZE) ? + src->buffer_remain : + MAX_READ_SIZE; *outbuf = gst_buffer_new(); @@ -623,21 +627,17 @@ src->bytes_queue = g_byte_array_remove_range(src->bytes_queue, 0, buffer_size); - if (G_UNLIKELY(src->eos) || (!src->live_tv - && (src->bytes_read >= - src->content_size))) + if (src->eos || + (!src->live_tv && (src->bytes_read >= src->content_size)) + ) goto eos; done: { - const gchar *reason = gst_flow_get_name(ret); return ret; } eos: { - const gchar *reason = gst_flow_get_name(ret); - - GST_DEBUG_OBJECT(src, "pausing task, reason %s", reason); return GST_FLOW_UNEXPECTED; } /* @@ -700,7 +700,7 @@ } -static gboolean +static gboolean gst_mythtv_src_do_seek(GstBaseSrc * base, GstSegment * segment) { GstMythtvSrc *src = GST_MYTHTV_SRC(base); @@ -764,7 +764,7 @@ /* * create a socket for connecting to remote server */ -static gboolean +static gboolean gst_mythtv_src_start(GstBaseSrc * bsrc) { GstMythtvSrc *src = GST_MYTHTV_SRC(bsrc); @@ -972,7 +972,7 @@ } -static gboolean +static gboolean gst_mythtv_src_get_size(GstBaseSrc * bsrc, guint64 * size) { GstMythtvSrc *src = GST_MYTHTV_SRC(bsrc); @@ -1010,7 +1010,7 @@ * close the socket and associated resources used both to recover from * errors and go to NULL state */ -static gboolean +static gboolean gst_mythtv_src_stop(GstBaseSrc * bsrc) { GstMythtvSrc *src = GST_MYTHTV_SRC(bsrc); @@ -1024,17 +1024,15 @@ return TRUE; } -static gboolean +static gboolean gst_mythtv_src_handle_event(GstPad * pad, GstEvent * event) { GstMythtvSrc *src = GST_MYTHTV_SRC(GST_PAD_PARENT(pad)); gint64 cont_size = 0; - gboolean ret = FALSE; + gboolean ret = TRUE; switch (GST_EVENT_TYPE(event)) { case GST_EVENT_EOS: - GST_WARNING_OBJECT(src, "Got EOS event"); - if (src->live_tv) { cont_size = gst_mythtv_src_get_position(src); if (cont_size > src->content_size) { @@ -1051,16 +1049,17 @@ ret = gst_pad_event_default(pad, event); } + GST_DEBUG_OBJECT (src, "HANDLE EVENT %d", ret); return ret; } -static gboolean +static gboolean gst_mythtv_src_is_seekable(GstBaseSrc * push_src) { return TRUE; } -static gboolean +static gboolean gst_mythtv_src_handle_query(GstPad * pad, GstQuery * query) { gboolean res = FALSE; @@ -1107,12 +1106,12 @@ return res; } -static GstStateChangeReturn +static GstStateChangeReturn gst_mythtv_src_change_state(GstElement * element, GstStateChange transition) { GstStateChangeReturn ret = GST_STATE_CHANGE_FAILURE; - GstMythtvSrc *src = GST_MYTHTV_SRC(element); + GstMythtvSrc *src = GST_MYTHTV_SRC(element); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: @@ -1133,11 +1132,10 @@ break; } - - ret = - GST_ELEMENT_CLASS(parent_class)->change_state(element, transition); - if (ret == GST_STATE_CHANGE_FAILURE) + ret = GST_ELEMENT_CLASS(parent_class)->change_state(element, transition); + if (ret == GST_STATE_CHANGE_FAILURE) { return ret; + } switch (transition) { @@ -1293,7 +1291,7 @@ GST_OBJECT_UNLOCK(mythtvsrc); } -static gboolean +static gboolean plugin_init(GstPlugin * plugin) { return gst_element_register(plugin, "mythtvsrc", GST_RANK_NONE, @@ -1309,7 +1307,7 @@ /*** GSTURIHANDLER INTERFACE *************************************************/ -static guint +static guint gst_mythtv_src_uri_get_type(void) { return GST_URI_SRC; @@ -1331,7 +1329,7 @@ return src->uri_name; } -static gboolean +static gboolean gst_mythtv_src_uri_set_uri(GstURIHandler * handler, const gchar * uri) { GstMythtvSrc *src = GST_MYTHTV_SRC(handler);