1.1 --- a/gst-plugins-mythtv/src/gstmythtvsrc.c Tue Apr 17 15:37:20 2007 +0100
1.2 +++ b/gst-plugins-mythtv/src/gstmythtvsrc.c Fri Apr 20 20:29:46 2007 +0100
1.3 @@ -131,7 +131,8 @@
1.4 PROP_GMYTHTV_LIVEID,
1.5 PROP_GMYTHTV_LIVE_CHAINID,
1.6 PROP_GMYTHTV_ENABLE_TIMING_POSITION,
1.7 - PROP_GMYTHTV_CHANNEL_NUM
1.8 + PROP_GMYTHTV_CHANNEL_NUM,
1.9 + PROP_GMYTHTV_MAX_TRY
1.10 };
1.11
1.12 static void gst_mythtv_src_clear (GstMythtvSrc *mythtv_src);
1.13 @@ -255,6 +256,13 @@
1.14 "Change MythTV channel number",
1.15 "", G_PARAM_READWRITE));
1.16
1.17 + g_object_class_install_property
1.18 + (gobject_class, PROP_GMYTHTV_MAX_TRY,
1.19 + g_param_spec_int ("max-try", "max-try",
1.20 + "Set the max try for get MythTV free recorder",
1.21 + 0, G_MAXINT, 10, G_PARAM_READWRITE));
1.22 +
1.23 +
1.24 #ifndef GST_DISABLE_GST_DEBUG
1.25 g_object_class_install_property
1.26 (gobject_class, PROP_GMYTHTV_DBG,
1.27 @@ -309,6 +317,8 @@
1.28 this->bytes_queue = NULL;
1.29
1.30 this->wait_to_transfer = 0;
1.31 + this->try_number = 0;
1.32 + this->max_try = 10;
1.33
1.34 gst_base_src_set_format (GST_BASE_SRC (this), GST_FORMAT_BYTES);
1.35
1.36 @@ -322,7 +332,9 @@
1.37 static void
1.38 gst_mythtv_src_clear (GstMythtvSrc *mythtv_src)
1.39 {
1.40 -
1.41 + mythtv_src->unique_setup = FALSE;
1.42 + mythtv_src->try_number = 0;
1.43 +
1.44 if (mythtv_src->spawn_livetv) {
1.45 g_object_unref (mythtv_src->spawn_livetv);
1.46 mythtv_src->spawn_livetv = NULL;
1.47 @@ -338,14 +350,6 @@
1.48 mythtv_src->backend_info = NULL;
1.49 }
1.50
1.51 - if (mythtv_src->uri_name) {
1.52 - g_free (mythtv_src->uri_name);
1.53 - }
1.54 -
1.55 - if (mythtv_src->user_agent) {
1.56 - g_free (mythtv_src->user_agent);
1.57 - }
1.58 -
1.59 if (mythtv_src->bytes_queue) {
1.60 g_byte_array_free (mythtv_src->bytes_queue, TRUE);
1.61 mythtv_src->bytes_queue = NULL;
1.62 @@ -360,6 +364,16 @@
1.63
1.64 gst_mythtv_src_clear (this);
1.65
1.66 + if (this->uri_name) {
1.67 + g_free (this->uri_name);
1.68 + this->uri_name = NULL;
1.69 + }
1.70 +
1.71 + if (this->user_agent) {
1.72 + g_free (this->user_agent);
1.73 + this->user_agent = NULL;
1.74 + }
1.75 +
1.76 G_OBJECT_CLASS (parent_class)->finalize (gobject);
1.77 }
1.78
1.79 @@ -695,10 +709,9 @@
1.80 goto done;
1.81 }
1.82
1.83 - gmyth_uri = gmyth_uri_new_with_value( src->uri_name );
1.84 -
1.85 + gmyth_uri = gmyth_uri_new_with_value (src->uri_name);
1.86 src->backend_info = gmyth_backend_info_new_with_uri (src->uri_name);
1.87 - src->live_tv |= gmyth_uri_is_livetv( gmyth_uri );
1.88 + src->live_tv = gmyth_uri_is_livetv( gmyth_uri );
1.89 /* testing UPnP... */
1.90 /* gmyth_backend_info_set_hostname( src->backend_info, NULL ); */
1.91 if ( src->live_tv ) {
1.92 @@ -799,37 +812,57 @@
1.93 src->content_size, 0));
1.94
1.95 done:
1.96 - /*if ( gmyth_uri != NULL )
1.97 + if (gmyth_uri != NULL)
1.98 {
1.99 - g_object_unref( gmyth_uri );
1.100 - gmyth_uri = NULL;
1.101 - }*/
1.102 + g_object_unref (gmyth_uri);
1.103 + gmyth_uri = NULL;
1.104 + }
1.105
1.106 - if (chain_id_local != NULL) {
1.107 - g_string_free (chain_id_local, TRUE);
1.108 - chain_id_local = NULL;
1.109 - }
1.110 + if (chain_id_local != NULL) {
1.111 + g_string_free (chain_id_local, TRUE);
1.112 + chain_id_local = NULL;
1.113 + }
1.114
1.115 - return TRUE;
1.116 + return TRUE;
1.117
1.118 - /* ERRORS */
1.119 + /* ERRORS */
1.120 init_failed:
1.121 - {
1.122 - if (src->spawn_livetv != NULL)
1.123 - g_object_unref (src->spawn_livetv);
1.124 + if (gmyth_uri != NULL)
1.125 + {
1.126 + g_object_unref (gmyth_uri);
1.127 + gmyth_uri = NULL;
1.128 + }
1.129
1.130 + if (src->spawn_livetv != NULL) {
1.131 + g_object_unref (src->spawn_livetv);
1.132 + src->spawn_livetv = NULL;
1.133 + }
1.134 +
1.135 + /*
1.136 GST_ELEMENT_ERROR (src, LIBRARY, INIT,
1.137 - (NULL), ("Could not initialize MythTV library (%i, %s)", ret,
1.138 + (NULL), ("Could not initialize MythTV library (%i, %s)", ret,
1.139 src->uri_name));
1.140 + */
1.141 +
1.142 + if (++src->try_number <= src->max_try) {
1.143 + gst_mythtv_src_clear (src);
1.144 + GST_DEBUG_OBJECT (src, "Starting new try for get free recorder on MythTV");
1.145 + g_usleep (0.5 * G_USEC_PER_SEC);
1.146 + return gst_mythtv_src_start (bsrc);
1.147 + }
1.148 +
1.149 return FALSE;
1.150 - }
1.151 begin_req_failed:
1.152 - {
1.153 + if (gmyth_uri != NULL)
1.154 + {
1.155 + g_object_unref (gmyth_uri);
1.156 + gmyth_uri = NULL;
1.157 + }
1.158 +
1.159 GST_ELEMENT_ERROR (src, LIBRARY, INIT,
1.160 (NULL), ("Could not begin request sent to MythTV server (%i, %s)", ret,
1.161 src->uri_name));
1.162 return FALSE;
1.163 - }
1.164
1.165 }
1.166
1.167 @@ -1081,6 +1114,11 @@
1.168 mythtvsrc->channel_name = g_value_dup_string (value);
1.169 break;
1.170 }
1.171 + case PROP_GMYTHTV_MAX_TRY:
1.172 + {
1.173 + mythtvsrc->max_try = g_value_get_int (value);
1.174 + break;
1.175 + }
1.176 default:
1.177 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
1.178 break;
1.179 @@ -1133,6 +1171,12 @@
1.180 g_value_set_string (value, mythtvsrc->channel_name);
1.181 break;
1.182 }
1.183 + case PROP_GMYTHTV_MAX_TRY:
1.184 + {
1.185 + g_value_set_int (value, mythtvsrc->max_try);
1.186 + break;
1.187 + }
1.188 +
1.189 default:
1.190 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
1.191 break;