summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLori Anderson <lori@rkymtnhi.com>2013-11-04 17:49:23 -0700
committerLori Anderson <lori@rkymtnhi.com>2013-11-04 17:49:23 -0700
commit6d4f7c860b47390c09e51e18c38070322510748e (patch)
tree66402c4ba264a528a675f7d6c109f3f03a2b9b6c
parent24f78f40aeeb65518ae10d0cf8cc67b8dca7ce81 (diff)
Got rid of unused attributes in header file, left over from socket code. Move the code that is needed to issue HEAD and setup bin element into new method dlna_src_uri_init(). When setting up the bin, check if dtcp element should be used as ghost src pad or soup http src. Got rid of duplicate code that used to be in dlna_src_setup_dtcp().
-rw-r--r--src/gstdlnasrc.c152
-rw-r--r--src/gstdlnasrc.h5
2 files changed, 76 insertions, 81 deletions
diff --git a/src/gstdlnasrc.c b/src/gstdlnasrc.c
index 7e8fa28..a3fa0e0 100644
--- a/src/gstdlnasrc.c
+++ b/src/gstdlnasrc.c
@@ -230,8 +230,10 @@ static void gst_dlna_src_uri_handler_init (gpointer g_iface,
// **********************
// Local method declarations
//
-static gboolean
-dlna_src_uri_assign (GstDlnaSrc * dlna_src, const gchar * uri, GError ** error);
+static gboolean dlna_src_uri_assign (GstDlnaSrc * dlna_src, const gchar * uri,
+ GError ** error);
+
+static gboolean dlna_src_uri_init (GstDlnaSrc * dlna_src);
static gboolean dlna_src_uri_gather_info (GstDlnaSrc * dlna_src);
@@ -495,8 +497,6 @@ gst_dlna_src_init (GstDlnaSrc * dlna_src)
dlna_src->time_seek_event_start = 0;
dlna_src->time_seek_seqnum = 0;
- dlna_src_setup_bin (dlna_src);
-
GST_LOG_OBJECT (dlna_src, "Initialization complete");
}
@@ -593,13 +593,11 @@ gst_dlna_src_get_property (GObject * object, guint prop_id, GValue * value,
break;
case PROP_SUPPORTED_RATES:
- if (!dlna_src->is_uri_initialized) {
- GST_INFO_OBJECT (dlna_src,
- "Supported rates info not available, gathering info");
- if (!dlna_src_uri_gather_info (dlna_src))
- GST_ERROR_OBJECT (dlna_src,
- "Problems gathering information about URI");
- }
+ GST_INFO_OBJECT (dlna_src,
+ "Supported rates info not available, make sure URI is initialized");
+ if (!dlna_src_uri_init (dlna_src))
+ GST_ERROR_OBJECT (dlna_src, "Problems initializing URI");
+
GST_LOG_OBJECT (dlna_src, "Getting property: supported rates");
if ((dlna_src->server_info != NULL) &&
(dlna_src->server_info->content_features != NULL) &&
@@ -643,16 +641,11 @@ gst_dlna_src_change_state (GstElement * element, GstStateChange transition)
switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY:
break;
-
case GST_STATE_CHANGE_READY_TO_PAUSED:
- if (!dlna_src->is_uri_initialized) {
- GST_INFO_OBJECT (dlna_src,
- "Gathering info FOR READY to PAUSED state change");
- if (!dlna_src_uri_gather_info (dlna_src)) {
- GST_ERROR_OBJECT (dlna_src,
- "Problems gathering information about URI");
- return ret;
- }
+ GST_INFO_OBJECT (dlna_src, "Make sure URI is initialized");
+ if (!dlna_src_uri_init (dlna_src)) {
+ GST_ERROR_OBJECT (dlna_src, "Problems initializing URI");
+ return ret;
}
break;
default:
@@ -1576,7 +1569,9 @@ gst_dlna_src_uri_handler_init (gpointer g_iface, gpointer iface_data)
* Sets the URI property to the supplied value. It is called either via the URI
* handler interface set method or via setting the element's property. The
* additional setup (issuing HEAD and setting up souphttpsrc for GET) for the URI
- * is performed when state changes from READY->PAUSED.
+ * is suppose to be performed when state changes from READY->PAUSED but it seems
+ * that it must be performed here otherwise we get an error and playback fails due
+ * to unlinked.
*/
static gboolean
dlna_src_uri_assign (GstDlnaSrc * dlna_src, const gchar * uri, GError ** error)
@@ -1591,6 +1586,35 @@ dlna_src_uri_assign (GstDlnaSrc * dlna_src, const gchar * uri, GError ** error)
dlna_src->uri = g_strdup (uri);
+ return dlna_src_uri_init (dlna_src);
+}
+
+/**
+ * Gathers the info about the URI and then sets up the bin, either including the
+ * dtcp decrypter element or not based on HEAD response.
+ */
+static gboolean
+dlna_src_uri_init (GstDlnaSrc * dlna_src)
+{
+ GST_INFO_OBJECT (dlna_src, "Called");
+
+ if (dlna_src->is_uri_initialized) {
+ GST_ERROR_OBJECT (dlna_src, "Returning since URI is already initialized");
+ return TRUE;
+ }
+
+ if (!dlna_src_uri_gather_info (dlna_src)) {
+ GST_ERROR_OBJECT (dlna_src, "Problems gathering URI info");
+ return FALSE;
+ }
+
+ if (!dlna_src_setup_bin (dlna_src)) {
+ GST_ERROR_OBJECT (dlna_src, "Problems setting up dtcp elements");
+ return FALSE;
+ }
+
+ dlna_src->is_uri_initialized = TRUE;
+
return TRUE;
}
@@ -1607,6 +1631,7 @@ static gboolean
dlna_src_setup_bin (GstDlnaSrc * dlna_src)
{
guint64 content_size;
+ GstPad *pad = NULL;
GST_INFO_OBJECT (dlna_src, "called");
@@ -1621,21 +1646,39 @@ dlna_src_setup_bin (GstDlnaSrc * dlna_src)
gst_bin_add (GST_BIN (&dlna_src->bin), dlna_src->http_src);
- if (dlna_src->uri)
+ if (dlna_src->uri) {
+ GST_INFO_OBJECT (dlna_src, "Setting URI of souphttpsrc");
g_object_set (G_OBJECT (dlna_src->http_src), "location", dlna_src->uri,
NULL);
+ } else
+ GST_INFO_OBJECT (dlna_src, "Not setting URI of souphttpsrc");
+
+ /* Setup dtcp element if necessary */
+ if (dlna_src->is_encrypted) {
+ GST_INFO_OBJECT (dlna_src, "Setting up dtcp");
+ if (!dlna_src_setup_dtcp (dlna_src)) {
+ GST_ERROR_OBJECT (dlna_src, "Problems setting up dtcp elements");
+ return FALSE;
+ }
+ GST_INFO_OBJECT (dlna_src, "DTCP setup successful");
+ } else
+ GST_INFO_OBJECT (dlna_src, "No DTCP setup required");
- // Create src ghost pad of dlna src using http src so playbin will recognize element as a src
- GST_DEBUG_OBJECT (dlna_src, "Getting http src pad");
- GstPad *pad = gst_element_get_static_pad (dlna_src->http_src, "src");
+ // Create src ghost pad of dlna src so playbin will recognize element as a src
+ if (dlna_src->is_encrypted) {
+ GST_DEBUG_OBJECT (dlna_src, "Getting decrypter src pad");
+ pad = gst_element_get_static_pad (dlna_src->dtcp_decrypter, "src");
+ } else {
+ GST_DEBUG_OBJECT (dlna_src, "Getting http src pad");
+ pad = gst_element_get_static_pad (dlna_src->http_src, "src");
+ }
if (!pad) {
GST_ERROR_OBJECT (dlna_src,
- "Could not get pad for dtcp decrypter. Exiting.");
+ "Could not get pad to ghost pad for dlnasrc. Exiting.");
return FALSE;
}
- GST_DEBUG_OBJECT (dlna_src,
- "Creating src pad for dlnasrc bin using http src pad");
+ GST_DEBUG_OBJECT (dlna_src, "Got src pad to use for ghostpad of dlnasrc bin");
dlna_src->src_pad = gst_ghost_pad_new ("src", pad);
gst_pad_set_active (dlna_src->src_pad, TRUE);
@@ -1675,7 +1718,7 @@ dlna_src_setup_dtcp (GstDlnaSrc * dlna_src)
{
GST_INFO_OBJECT (dlna_src, "Setup for dtcp content");
- if (!dlna_src->dtcp_decrypter) {
+ if (dlna_src->dtcp_decrypter) {
GST_INFO_OBJECT (dlna_src, "Already setup for dtcp content");
return TRUE;
}
@@ -1704,30 +1747,8 @@ dlna_src_setup_dtcp (GstDlnaSrc * dlna_src)
(dlna_src->http_src, dlna_src->dtcp_decrypter, NULL)) {
GST_ERROR_OBJECT (dlna_src, "Problems linking elements in src. Exiting.");
return FALSE;
- }
-
- GST_INFO_OBJECT (dlna_src, "Getting dtcpip decrypter src pad");
- GstPad *pad = gst_element_get_static_pad (dlna_src->dtcp_decrypter, "src");
- if (!pad) {
- GST_ERROR_OBJECT (dlna_src,
- "Could not get pad for dtcp decrypter. Exiting.");
- return FALSE;
- }
-
- GST_INFO_OBJECT (dlna_src,
- "Creating src pad for dlnasrc bin using decyrpter src pad");
- dlna_src->src_pad = gst_ghost_pad_new ("src", pad);
- gst_pad_set_active (dlna_src->src_pad, TRUE);
- gst_element_add_pad (GST_ELEMENT (&dlna_src->bin), dlna_src->src_pad);
- gst_object_unref (pad);
-
- // Configure event function on sink pad before adding pad to element
- gst_pad_set_event_function (dlna_src->src_pad,
- (GstPadEventFunction) gst_dlna_src_event);
-
- // Configure event function on sink pad before adding pad to element
- gst_pad_set_query_function (dlna_src->src_pad,
- (GstPadQueryFunction) gst_dlna_src_query);
+ } else
+ GST_INFO_OBJECT (dlna_src, "Linked http src and dtcp decrypter");
// Setup the block size for dtcp
g_object_set (dlna_src->http_src, "blocksize", dlna_src->dtcp_blocksize,
@@ -1856,8 +1877,6 @@ dlna_src_uri_gather_info (GstDlnaSrc * dlna_src)
GST_INFO_OBJECT (dlna_src, "Parsed HEAD Response into struct: %s",
struct_str->str);
- dlna_src->is_uri_initialized = TRUE;
-
return TRUE;
}
@@ -1905,12 +1924,12 @@ dlna_src_soup_issue_head (GstDlnaSrc * dlna_src, gsize header_array_size,
}
if (do_update_overall_info) {
- GST_INFO_OBJECT (dlna_src, "Updating overall info");
+ GST_INFO_OBJECT (dlna_src, "Updating overall info");
// Update info based on response to HEAD info
if (!dlna_src_update_overall_info (dlna_src, head_response))
GST_WARNING_OBJECT (dlna_src, "Problems initializing content info");
} else
- GST_INFO_OBJECT (dlna_src, "Not updating overall info");
+ GST_INFO_OBJECT (dlna_src, "Not updating overall info");
// Clear out existing message - *todo* - do I need to free it?
dlna_src->soup_msg = NULL;
@@ -1933,7 +1952,6 @@ dlna_src_update_overall_info (GstDlnaSrc * dlna_src,
GST_INFO_OBJECT (dlna_src, "Called");
guint64 content_size;
- gchar *souphttpsrc_location = NULL;
GString *npt_str = g_string_sized_new (32);
if (!head_response) {
@@ -2056,24 +2074,6 @@ dlna_src_update_overall_info (GstDlnaSrc * dlna_src,
GST_INFO_OBJECT (dlna_src,
"Unable set content size due to either null souphttpsrc or total == 0");
- // Make sure location has been set for souphttpsrc
- g_object_get (G_OBJECT (dlna_src->http_src), "location",
- &souphttpsrc_location, NULL);
- if (!souphttpsrc_location)
- g_object_set (G_OBJECT (dlna_src->http_src), "location", dlna_src->uri,
- NULL);
-
- /* Setup dtcp element if necessary */
- if (dlna_src->is_encrypted) {
- GST_INFO_OBJECT (dlna_src, "Setting up dtcp");
- if (!dlna_src_setup_dtcp (dlna_src)) {
- GST_ERROR_OBJECT (dlna_src, "Problems setting up dtcp elements");
- return FALSE;
- }
- GST_INFO_OBJECT (dlna_src, "DTCP setup successful");
- } else
- GST_INFO_OBJECT (dlna_src, "No DTCP setup required");
-
return TRUE;
}
diff --git a/src/gstdlnasrc.h b/src/gstdlnasrc.h
index cf96629..f7001aa 100644
--- a/src/gstdlnasrc.h
+++ b/src/gstdlnasrc.h
@@ -76,11 +76,6 @@ struct _GstDlnaSrc
SoupSession *soup_session;
SoupMessage *soup_msg;
- // Socket params used to issue HEAD request
- //gchar *uri_addr;
- //guint uri_port;
- //gint sock;
-
GstDlnaSrcHeadResponse* server_info;
// Current playback rate