gst-plugins-mythtv/src/gstmythtvsrc.c
branchtrunk
changeset 107 899326948b25
parent 102 4f7789e3bfd4
child 108 f2b53549deef
     1.1 --- a/gst-plugins-mythtv/src/gstmythtvsrc.c	Wed Nov 22 20:21:46 2006 +0000
     1.2 +++ b/gst-plugins-mythtv/src/gstmythtvsrc.c	Fri Nov 24 14:29:09 2006 +0000
     1.3 @@ -85,9 +85,6 @@
     1.4  
     1.5  static void gst_mythtv_src_finalize (GObject * gobject);
     1.6  
     1.7 -//static GstFlowReturn gst_mythtv_src_create (GstBaseSrc * psrc, guint64 offset, 
     1.8 -//	guint size, GstBuffer ** outbuf);
     1.9 -
    1.10  static GstFlowReturn gst_mythtv_src_create ( GstPushSrc* psrc, GstBuffer** outbuf );
    1.11  
    1.12  static gboolean gst_mythtv_src_start (GstBaseSrc * bsrc);
    1.13 @@ -95,8 +92,10 @@
    1.14  static gboolean gst_mythtv_src_get_size (GstBaseSrc * bsrc, guint64 * size);
    1.15  static gboolean gst_mythtv_src_is_seekable( GstBaseSrc *push_src );
    1.16  
    1.17 -//static void gst_mythtv_src_get_times (GstBaseSrc * src, GstBuffer * buffer,
    1.18 -//   GstClockTime * start, GstClockTime * end);
    1.19 +/*
    1.20 +static void gst_mythtv_src_get_times (GstBaseSrc * src, GstBuffer * buffer,
    1.21 +   GstClockTime * start, GstClockTime * end);
    1.22 +*/
    1.23  
    1.24  static gboolean gst_mythtv_src_do_seek( GstBaseSrc *base, GstSegment *segment );
    1.25  
    1.26 @@ -135,9 +134,6 @@
    1.27        "MythTV src");
    1.28  }
    1.29  
    1.30 -//GST_BOILERPLATE_FULL (GstMythtvSrc, gst_mythtv_src, GstBaseSrc,
    1.31 -//    GST_TYPE_BASE_SRC, _urihandler_init)
    1.32 -    
    1.33  GST_BOILERPLATE_FULL (GstMythtvSrc, gst_mythtv_src, GstPushSrc,
    1.34      GST_TYPE_PUSH_SRC, _urihandler_init)
    1.35      
    1.36 @@ -278,13 +274,11 @@
    1.37    
    1.38    this->bytes_queue = NULL;
    1.39    
    1.40 -  //this->th_read_ahead = NULL;
    1.41 -  
    1.42    this->th_mutex = NULL;
    1.43    
    1.44    gst_base_src_set_format( GST_BASE_SRC( this ), GST_FORMAT_BYTES );  
    1.45  
    1.46 -  //gst_base_src_set_live ( GST_BASE_SRC( this ), TRUE );
    1.47 +  /* gst_base_src_set_live ( GST_BASE_SRC( this ), TRUE ); */
    1.48    
    1.49    gst_pad_set_event_function ( GST_BASE_SRC_PAD(GST_BASE_SRC(this)),
    1.50        gst_mythtv_src_handle_event );
    1.51 @@ -341,9 +335,7 @@
    1.52    guint sizetoread = size;
    1.53    guint max_iters = GMYTHTV_TRANSFER_MAX_RESENDS;
    1.54    
    1.55 -  //*data_ptr = g_malloc0( size );
    1.56 -
    1.57 -  g_print( "Starting: [%s] Reading %d bytes...\n", __FUNCTION__, sizetoread ); 
    1.58 +  GST_LOG_OBJECT( src, "Starting: [%s] Reading %d bytes...\n", __FUNCTION__, sizetoread ); 
    1.59  
    1.60    /* Loop sending the Myth File Transfer request:
    1.61     * Retry whilst authentication fails and we supply it. */
    1.62 @@ -409,10 +401,10 @@
    1.63      goto change_progchain;
    1.64  
    1.65    //g_static_rec_mutex_lock( &th_mutex );
    1.66 -  g_print ( "[%s] offset = %llu, size = %d...\n", __FUNCTION__, 
    1.67 +  GST_DEBUG_OBJECT( src, "[%s] offset = %llu, size = %d...\n", __FUNCTION__, 
    1.68    		src->read_offset, MAX_READ_SIZE );
    1.69  
    1.70 -  g_print ( "[%s]\t\tCreate: buffer_remain: %d\n", __FUNCTION__, 
    1.71 +  GST_DEBUG_OBJECT ( src, "[%s]\t\tCreate: buffer_remain: %d\n", __FUNCTION__, 
    1.72        (gint) src->buffer_remain);
    1.73  
    1.74    /* just get from the byte array, no network effort... */
    1.75 @@ -433,6 +425,9 @@
    1.76        goto change_progchain;
    1.77        
    1.78      src->bytes_queue = g_byte_array_append( src->bytes_queue, g_memdup( buffer->data, read ), read );
    1.79 +    if ( read > buffer_size_inter )
    1.80 +    	GST_WARNING_OBJECT( src, "[%s] INCREASED buffer size! Backend sent more than we ask him... (%d)\n", 
    1.81 +    			__FUNCTION__, abs( read - buffer_size_inter ) );
    1.82  
    1.83      src->buffer_remain = src->buffer_remain + read;
    1.84      
    1.85 @@ -441,7 +436,7 @@
    1.86      	buffer = NULL;    	
    1.87      }
    1.88  
    1.89 -    g_print( "[%s]\tBYTES READ (actual) = %d, BYTES READ (cumulative) = %llu, "\
    1.90 +    GST_DEBUG_OBJECT( src, "[%s]\tBYTES READ (actual) = %d, BYTES READ (cumulative) = %llu, "\
    1.91  	"OFFSET = %llu, CONTENT SIZE = %llu.\n", __FUNCTION__, read, src->bytes_read, 
    1.92  	src->read_offset, src->content_size );
    1.93  	
    1.94 @@ -464,7 +459,7 @@
    1.95    /* gets the first buffer_size bytes from the byte array buffer variable */ 
    1.96    guint8 *buf = g_memdup( src->bytes_queue->data, buffer_size );
    1.97  
    1.98 -  g_print( "[%s] read from network? %s!, buffer_remain = %d\n", __FUNCTION__, 
    1.99 +  GST_DEBUG_OBJECT( src, "[%s] read from network? %s!, buffer_remain = %d\n", __FUNCTION__, 
   1.100    	read == -1 ? "NO, got from buffer" : "YES, go see the backend's log file", src->buffer_remain );
   1.101  
   1.102    GST_BUFFER_SIZE (*outbuf) = buffer_size;
   1.103 @@ -478,12 +473,12 @@
   1.104  
   1.105    src->read_offset += GST_BUFFER_SIZE (*outbuf);
   1.106    src->bytes_read += GST_BUFFER_SIZE (*outbuf);
   1.107 -  g_print ( "[%s]\t\tBuffer output with size: %d\n", __FUNCTION__, GST_BUFFER_SIZE (*outbuf) );
   1.108 +  GST_DEBUG_OBJECT( src, "[%s]\t\tBuffer output with size: %d\n", __FUNCTION__, GST_BUFFER_SIZE (*outbuf) );
   1.109    
   1.110    /* flushs the newly buffer got from byte array */
   1.111    src->bytes_queue = g_byte_array_remove_range( src->bytes_queue, 0, buffer_size );
   1.112  
   1.113 -  g_print( "Got buffer: [%s]\t\tBUFFER --->SIZE = %d, OFFSET = %llu, "\
   1.114 +  GST_DEBUG_OBJECT( src, "Got buffer: [%s]\t\tBUFFER --->SIZE = %d, OFFSET = %llu, "\
   1.115        "OFFSET_END = %llu.\n\n", __FUNCTION__, GST_BUFFER_SIZE (*outbuf), 
   1.116        GST_BUFFER_OFFSET (*outbuf), GST_BUFFER_OFFSET_END (*outbuf) );
   1.117  
   1.118 @@ -530,139 +525,6 @@
   1.119  
   1.120  }
   1.121  
   1.122 -#if 0
   1.123 -static GstFlowReturn
   1.124 -gst_mythtv_src_create ( GstBaseSrc * psrc, guint64 offset, guint size, GstBuffer **outbuf )
   1.125 -{
   1.126 -  GstMythtvSrc *src;
   1.127 -  GstFlowReturn ret = GST_FLOW_OK;
   1.128 -  gint read = -1;
   1.129 -  gint adapter_size = 0;
   1.130 -  guint max_adapter_rep = 1;
   1.131 -
   1.132 -  src = GST_MYTHTV_SRC ( psrc );
   1.133 -
   1.134 -  /* The caller should know the number of bytes and not read beyond EOS. */
   1.135 -  if (G_UNLIKELY (src->eos))
   1.136 -    goto eos;
   1.137 -  if ( G_UNLIKELY (src->update_prog_chain) )
   1.138 -    goto change_progchain;
   1.139 -
   1.140 -  //g_static_rec_mutex_lock( &th_mutex );
   1.141 -  g_print ( "[%s] offset = %llu, size = %d...\n", __FUNCTION__, offset, size );
   1.142 -
   1.143 -  g_print ( "[%s]\t\tCreate: buffer_remain: %d\n", __FUNCTION__, 
   1.144 -      (gint) src->buffer_remain);
   1.145 -
   1.146 -  /* just get from the byte array, no network effort... */
   1.147 -  if ( ( src->buffer_remain = src->bytes_queue->len ) < MAX_READ_SIZE ) {
   1.148 -  	guint8 *buffer = g_malloc0( INTERNAL_BUFFER_SIZE - src->buffer_remain );
   1.149 -
   1.150 -    read = do_read_request_response( src, 0, INTERNAL_BUFFER_SIZE - src->buffer_remain, &(buffer) );
   1.151 -
   1.152 -    if (G_UNLIKELY (read < 0)) {
   1.153 -      if ( src->live_tv )
   1.154 -	goto change_progchain;
   1.155 -      else
   1.156 -	goto read_error;
   1.157 -    }
   1.158 -
   1.159 -    if ( G_UNLIKELY (src->update_prog_chain) )
   1.160 -      goto change_progchain;
   1.161 -      
   1.162 -    src->bytes_queue = g_byte_array_append( src->bytes_queue, buffer, read );
   1.163 -
   1.164 -    src->buffer_remain = src->buffer_remain + read;
   1.165 -
   1.166 -    g_print( "[%s]\tBYTES READ (actual) = %d, BYTES READ (cumulative) = %llu, "\
   1.167 -	"OFFSET = %llu, CONTENT SIZE = %llu.\n", __FUNCTION__, read, src->bytes_read, 
   1.168 -	src->read_offset, src->content_size );
   1.169 -	
   1.170 -  }
   1.171 -  
   1.172 -  guint buffer_size = ( src->buffer_remain < MAX_READ_SIZE) ? src->buffer_remain : MAX_READ_SIZE;
   1.173 -  
   1.174 -  /* Create the buffer. */
   1.175 -  ret = gst_pad_alloc_buffer ( GST_BASE_SRC_PAD (GST_BASE_SRC (psrc)),
   1.176 -      offset, buffer_size,
   1.177 -      GST_PAD_CAPS (GST_BASE_SRC_PAD (GST_BASE_SRC (psrc))), outbuf );    
   1.178 -
   1.179 -  if (G_UNLIKELY (ret != GST_FLOW_OK)) {
   1.180 -    if ( src->live_tv )
   1.181 -      goto change_progchain;
   1.182 -    else
   1.183 -      goto done;
   1.184 -  }
   1.185 -  
   1.186 -  guint8 *buf = g_memdup( src->bytes_queue->data, buffer_size );
   1.187 -
   1.188 -  g_print( "[%s] read = %d, buffer_remain = %d\n", __FUNCTION__, read, src->buffer_remain );
   1.189 -  //src->read_offset = offset;
   1.190 -
   1.191 -  GST_BUFFER_SIZE (*outbuf) = buffer_size;
   1.192 -  GST_BUFFER_MALLOCDATA( *outbuf ) = g_malloc0( GST_BUFFER_SIZE (*outbuf) );
   1.193 -  GST_BUFFER_DATA( *outbuf ) = GST_BUFFER_MALLOCDATA( *outbuf );
   1.194 -  g_memmove( GST_BUFFER_DATA( (*outbuf) ), buf, GST_BUFFER_SIZE(*outbuf) );
   1.195 -  GST_BUFFER_OFFSET (*outbuf) = offset;
   1.196 -  GST_BUFFER_OFFSET_END (*outbuf) = offset + GST_BUFFER_SIZE (*outbuf);
   1.197 -
   1.198 -  src->buffer_remain -= GST_BUFFER_SIZE (*outbuf);
   1.199 -
   1.200 -  src->read_offset += GST_BUFFER_SIZE (*outbuf);
   1.201 -  src->bytes_read += GST_BUFFER_SIZE (*outbuf);
   1.202 -  g_print ( "[%s]\t\tBuffer output with size: %d\n", __FUNCTION__, GST_BUFFER_SIZE (*outbuf) );
   1.203 -  
   1.204 -  /* flushs the newly buffer got from byte array */
   1.205 -  src->bytes_queue = g_byte_array_remove_range( src->bytes_queue, 0, buffer_size );
   1.206 -
   1.207 -  g_print( "Got buffer: [%s]\t\tBUFFER --->SIZE = %d, OFFSET = %llu, "\
   1.208 -      "OFFSET_END = %llu.\n\n", __FUNCTION__, GST_BUFFER_SIZE (*outbuf), 
   1.209 -      GST_BUFFER_OFFSET (*outbuf), GST_BUFFER_OFFSET_END (*outbuf) );
   1.210 -
   1.211 -  return ret;
   1.212 -
   1.213 -done:
   1.214 -  {
   1.215 -    const gchar *reason = gst_flow_get_name (ret);
   1.216 -
   1.217 -    GST_DEBUG_OBJECT (src, "DONE task, reason %s", reason);
   1.218 -    return ret;
   1.219 -  }
   1.220 -eos:
   1.221 -  {
   1.222 -    const gchar *reason = gst_flow_get_name (ret);
   1.223 -
   1.224 -    GST_DEBUG_OBJECT (src, "pausing task, reason %s", reason);
   1.225 -    return GST_FLOW_UNEXPECTED;
   1.226 -  }
   1.227 -  /* ERRORS */
   1.228 -read_error:
   1.229 -  {
   1.230 -    GST_ELEMENT_ERROR (src, RESOURCE, READ,
   1.231 -	(NULL), ("Could not read any bytes (%i, %s)", read,
   1.232 -		 src->uri_name));
   1.233 -    return GST_FLOW_ERROR;
   1.234 -  }
   1.235 -change_progchain:
   1.236 -  {
   1.237 -    GST_ELEMENT_ERROR (src, RESOURCE, READ,
   1.238 -	(NULL), ("Seek failed, go to the next program info... (%i, %s)", read,
   1.239 -		 src->uri_name));
   1.240 -
   1.241 -    gst_pad_push_event ( GST_BASE_SRC_PAD (GST_BASE_SRC (psrc)),
   1.242 -	gst_event_new_new_segment (TRUE, 1.0, GST_FORMAT_TIME, 0, -1, 0 ) );
   1.243 -    // go to the next program chain
   1.244 -    src->unique_setup = FALSE;
   1.245 -    src->update_prog_chain = TRUE;
   1.246 -
   1.247 -    gst_mythtv_src_next_program_chain( src );
   1.248 -
   1.249 -    return GST_FLOW_ERROR_NO_DATA;
   1.250 -  }
   1.251 -
   1.252 -}
   1.253 -#endif
   1.254 -
   1.255  gint64
   1.256  gst_mythtv_src_get_position ( GstMythtvSrc* src ) 
   1.257  {
   1.258 @@ -679,7 +541,7 @@
   1.259        src->content_size = size_tmp;
   1.260      else if ( size_tmp > 0 && --max_tries > 0 )
   1.261        goto get_file_pos;
   1.262 -    g_print( "\t[%s]\tGET_POSITION: file_position = %lld\n",
   1.263 +    GST_LOG_OBJECT( src, "\t[%s]\tGET_POSITION: file_position = %lld\n",
   1.264  	__FUNCTION__, size_tmp );
   1.265      /* sets the last content size amount before it can be updated */
   1.266      src->prev_content_size = src->content_size;
   1.267 @@ -697,22 +559,23 @@
   1.268    gint64 actual_seek = segment->start;
   1.269    gboolean ret = TRUE;
   1.270  
   1.271 -  g_print( "[%s]DO Seek called! (start = %lld, stop = %lld)\n", __FUNCTION__, segment->start, segment->stop );
   1.272 +  GST_LOG_OBJECT( src, "[%s]DO Seek called! (start = %lld, stop = %lld)\n", __FUNCTION__, 
   1.273 +  		segment->start, segment->stop );
   1.274  
   1.275    if ( segment->format == GST_FORMAT_TIME ) 
   1.276    {
   1.277      goto done; 
   1.278      //actual_seek = ( ( segment->start / 1000 ) * 28 ) * 4000;
   1.279    }
   1.280 -  g_print( "[%s]Trying to seek at the value (actual_seek = %lld, read_offset = %lld)\n", __FUNCTION__, actual_seek, src->read_offset );
   1.281 +  GST_LOG_OBJECT( src, "[%s]Trying to seek at the value (actual_seek = %lld, read_offset = %lld)\n", __FUNCTION__, actual_seek, src->read_offset );
   1.282    /* verify if it needs to seek */
   1.283    if ( src->read_offset != actual_seek )
   1.284    {
   1.285  
   1.286      new_offset = gmyth_file_transfer_seek( src->file_transfer, segment->start, SEEK_SET );
   1.287  
   1.288 -    g_print( "[%s] Segment offset start = %lld, SRC Offset = %lld, NEW actual backend SEEK Offset = %lld.\n",
   1.289 -	__FUNCTION__, segment->start, src->read_offset, new_offset );
   1.290 +    GST_LOG_OBJECT( src, "[%s] Segment offset start = %lld, SRC Offset = %lld, NEW actual backend SEEK Offset = %lld.\n",
   1.291 +			__FUNCTION__, segment->start, src->read_offset, new_offset );
   1.292      if ( G_UNLIKELY (new_offset < 0 ) )
   1.293      {
   1.294        ret = FALSE;
   1.295 @@ -725,7 +588,7 @@
   1.296      src->read_offset = new_offset;
   1.297  
   1.298      if ( ret == FALSE ) {
   1.299 -      g_print( "[%s] Failed to set the SEEK on segment!\n", __FUNCTION__ );
   1.300 +      GST_INFO_OBJECT( src, "[%s] Failed to set the SEEK on segment!\n", __FUNCTION__ );
   1.301      }
   1.302  
   1.303    }
   1.304 @@ -737,7 +600,6 @@
   1.305    {
   1.306  
   1.307      GST_DEBUG_OBJECT (src, "EOS found on seeking!!!");
   1.308 -    //gst_object_unref( src );
   1.309      return FALSE;
   1.310    }
   1.311  change_progchain:
   1.312 @@ -759,64 +621,6 @@
   1.313  
   1.314  }
   1.315  
   1.316 -#if 0
   1.317 -static void 
   1.318 -gst_mythtv_src_read_ahead ( void *data ) {
   1.319 -
   1.320 -  GstMythtvSrc *src = NULL;
   1.321 -
   1.322 -  GstBuffer *outbuf = NULL;
   1.323 -
   1.324 -  guint size = 5*2048;
   1.325 -  gint total = 0;
   1.326 -  gint read = -1;
   1.327 -
   1.328 -  src = GST_MYTHTV_SRC( data );
   1.329 -
   1.330 -  //GST_PAD_STREAM_TRYLOCK( GST_BASE_SRC_PAD (GST_BASE_SRC (src)) );
   1.331 -
   1.332 -  do {
   1.333 -    GST_TASK_WAIT( src->th_read_ahead );
   1.334 -
   1.335 -    gint8 *data = NULL;
   1.336 -    
   1.337 -    outbuf = gst_buffer_new_and_alloc( size );
   1.338 -
   1.339 -    read = do_read_request_response ( src, src->adapter_offset, size, &data );
   1.340 -
   1.341 -    if ( read > 0 ) {
   1.342 -      src->read_offset += read;
   1.343 -      src->bytes_read += read;
   1.344 -      total += read;
   1.345 -
   1.346 -      g_print( "[%s]\tBYTES READ (actual) = %d, BYTES READ (cumulative) = %llu, "\
   1.347 -	  "OFFSET = %llu, CONTENT SIZE = %llu.\n", __FUNCTION__, read, src->bytes_read, 
   1.348 -	  src->read_offset, src->content_size );
   1.349 -
   1.350 -      GST_BUFFER_SIZE (outbuf) = read;
   1.351 -      GST_BUFFER_MALLOCDATA( outbuf ) = g_malloc0( GST_BUFFER_SIZE (outbuf) );
   1.352 -      GST_BUFFER_DATA( outbuf ) = GST_BUFFER_MALLOCDATA( outbuf );
   1.353 -      g_memmove( GST_BUFFER_DATA( outbuf ), data, read );
   1.354 -      GST_BUFFER_OFFSET (outbuf) = src->adapter_offset;  
   1.355 -      GST_BUFFER_OFFSET_END (outbuf) = src->adapter_offset + read;
   1.356 -      g_print( "Got buffer: [%s]\t\tBUFFER --->SIZE = %d, OFFSET = %llu, "\
   1.357 -	  "OFFSET_END = %llu.\n\n", __FUNCTION__, GST_BUFFER_SIZE (outbuf), 
   1.358 -	  GST_BUFFER_OFFSET (outbuf), GST_BUFFER_OFFSET_END (outbuf) );
   1.359 -
   1.360 -    } 
   1.361 -
   1.362 -    gst_adapter_push( src->adapter, outbuf );
   1.363 -
   1.364 -    GST_TASK_SIGNAL( src->th_read_ahead );
   1.365 -
   1.366 -  } while ( read < size );
   1.367 -
   1.368 -  //GST_PAD_STREAM_UNLOCK( GST_BASE_SRC_PAD (GST_BASE_SRC (src)) );
   1.369 -
   1.370 -  return;	
   1.371 -}
   1.372 -#endif
   1.373 -
   1.374  /* create a socket for connecting to remote server */
   1.375  static gboolean
   1.376  gst_mythtv_src_start ( GstBaseSrc * bsrc )
   1.377 @@ -849,10 +653,10 @@
   1.378      chain_id_local = gmyth_tvchain_get_id( src->spawn_livetv->tvchain );
   1.379      if ( chain_id_local != NULL ) {
   1.380        src->live_chain_id = g_strdup( chain_id_local->str );
   1.381 -      g_print( "\t[%s]\tLocal chain ID = %s.\n", __FUNCTION__, src->live_chain_id );
   1.382 +      GST_INFO_OBJECT( src, "\t[%s]\tLocal chain ID = %s.\n", __FUNCTION__, src->live_chain_id );
   1.383      }
   1.384      src->live_tv_id = src->spawn_livetv->recorder->recorder_num;
   1.385 -    g_print ( "[%s] LiveTV id = %d, URI path = %s.\n", __FUNCTION__, src->live_tv_id, src->uri_name ); 
   1.386 +    GST_LOG_OBJECT( src, "[%s] LiveTV id = %d, URI path = %s.\n", __FUNCTION__, src->live_tv_id, src->uri_name ); 
   1.387    }
   1.388  
   1.389    src->file_transfer = gmyth_file_transfer_new( src->live_tv_id, 
   1.390 @@ -883,7 +687,7 @@
   1.391    if ( ret == FALSE ) {
   1.392  #ifndef GST_DISABLE_GST_DEBUG  
   1.393      if ( src->mythtv_msgs_dbg )
   1.394 -      g_printerr( "MythTV FileTransfer request failed when setting up socket connection!\n" );  	  
   1.395 +      GST_INFO_OBJECT( src, "MythTV FileTransfer request failed when setting up socket connection!\n" );  	  
   1.396  #endif
   1.397      goto begin_req_failed;
   1.398    }
   1.399 @@ -936,16 +740,6 @@
   1.400    }
   1.401  }
   1.402  
   1.403 -#if 0
   1.404 -static void
   1.405 -gst_mythtv_src_get_times (GstBaseSrc * src, GstBuffer * buffer,
   1.406 -    GstClockTime * start, GstClockTime * end)
   1.407 -{
   1.408 -  *start = -1;
   1.409 -  *end = -1;
   1.410 -}
   1.411 -#endif
   1.412 -
   1.413  /* create a new socket for connecting to the next program chain */
   1.414  static gboolean
   1.415  gst_mythtv_src_next_program_chain ( GstMythtvSrc *src )
   1.416 @@ -976,7 +770,7 @@
   1.417  
   1.418    if ( src->live_tv ) {
   1.419      if ( gmyth_livetv_next_program_chain( src->spawn_livetv ) == FALSE ) {
   1.420 -    	g_print( "\n\n[%s]\t\tFailed to go to the next program chain!!!\n\n", __FUNCTION__ );
   1.421 +    	GST_INFO_OBJECT( src, "\n\n[%s]\t\tFailed to go to the next program chain!!!\n\n", __FUNCTION__ );
   1.422        ret = FALSE;
   1.423        goto init_failed;
   1.424      }
   1.425 @@ -985,10 +779,10 @@
   1.426      chain_id_local = gmyth_tvchain_get_id( src->spawn_livetv->tvchain );
   1.427      if ( chain_id_local != NULL ) {
   1.428        src->live_chain_id = g_strdup( chain_id_local->str );
   1.429 -      g_print( "\t[%s]\tLocal chain ID = %s.\n", __FUNCTION__, src->live_chain_id );
   1.430 +      GST_DEBUG_OBJECT( src, "\t[%s]\tLocal chain ID = %s.\n", __FUNCTION__, src->live_chain_id );
   1.431      }
   1.432      src->live_tv_id = src->spawn_livetv->recorder->recorder_num;
   1.433 -    g_print ( "[%s] LiveTV id = %d, URI path = %s.\n", __FUNCTION__, src->live_tv_id, src->uri_name );
   1.434 +    GST_LOG_OBJECT( src, "[%s] LiveTV id = %d, URI path = %s.\n", __FUNCTION__, src->live_tv_id, src->uri_name );
   1.435    }
   1.436  
   1.437    src->file_transfer = gmyth_file_transfer_new( src->live_tv_id, 
   1.438 @@ -1018,23 +812,12 @@
   1.439    if ( ret == FALSE ) {
   1.440  #ifndef GST_DISABLE_GST_DEBUG  
   1.441      if ( src->mythtv_msgs_dbg )
   1.442 -      g_printerr( "MythTV FileTransfer request failed when setting up socket connection!\n" );  	  
   1.443 +      GST_ERROR_OBJECT( src, "MythTV FileTransfer request failed when setting up socket connection!\n" );  	  
   1.444  #endif
   1.445      goto begin_req_failed;
   1.446    }
   1.447    src->content_size_last = src->content_size;
   1.448  
   1.449 -#if 0
   1.450 -  if ( src->content_size < src->file_transfer->filesize ) {
   1.451 -    src->content_size = src->file_transfer->filesize;
   1.452 -  } else {
   1.453 -    //gint64 pos = gst_mythtv_src_get_position(src);
   1.454 -    //if ( pos > src->file_transfer->filesize )
   1.455 -    //	src->content_size = pos;  	
   1.456 -
   1.457 -  }
   1.458 -#endif
   1.459 -
   1.460    src->content_size = src->file_transfer->filesize;
   1.461    if ( src->live_tv ) {
   1.462    	wait_to_transfer = 0;
   1.463 @@ -1081,14 +864,13 @@
   1.464  {
   1.465    GstMythtvSrc *src = GST_MYTHTV_SRC (bsrc);
   1.466    gboolean ret = TRUE;
   1.467 -  g_print( "[%s] Differs from previous content size: %d (max.: %d)\n", __FUNCTION__, 
   1.468 +  GST_LOG_OBJECT( src, "[%s] Differs from previous content size: %d (max.: %d)\n", __FUNCTION__, 
   1.469    			abs( src->content_size - src->prev_content_size ), GMYTHTV_TRANSFER_MAX_BUFFER );
   1.470    			
   1.471    if ( src->live_tv ) {
   1.472    	ret = FALSE;
   1.473  	} else if ( src->live_tv && src->enable_timing_position && ( abs( src->content_size - src->bytes_read ) < 
   1.474  				GMYTHTV_TRANSFER_MAX_BUFFER ) ) {
   1.475 -    //g_static_mutex_lock( &update_size_mutex );
   1.476      
   1.477      gint64 new_offset = gmyth_file_transfer_get_file_position( src->file_transfer );
   1.478      if ( new_offset > 0 && new_offset > src->content_size ) {
   1.479 @@ -1097,11 +879,10 @@
   1.480  			src->update_prog_chain = TRUE;
   1.481  	  }
   1.482  
   1.483 -    //g_static_mutex_unlock( &update_size_mutex );
   1.484    }
   1.485  
   1.486    *size = src->content_size;
   1.487 -  g_print( "[%s] Content size = %lld\n", __FUNCTION__, src->content_size );
   1.488 +  GST_LOG_OBJECT( src, "[%s] Content size = %lld\n", __FUNCTION__, src->content_size );
   1.489    
   1.490    return ret;
   1.491  
   1.492 @@ -1139,38 +920,8 @@
   1.493    gboolean ret = FALSE;
   1.494  
   1.495    switch (GST_EVENT_TYPE (event)) {
   1.496 -#if 0
   1.497 -    case GST_EVENT_FLUSH_START:
   1.498 -      //src->eos = FALSE;
   1.499 -      g_print( "\n\n\n[%s]\t\tGot FLUSH_START event!!!\n\n\n", __FUNCTION__ );
   1.500 -      cont_size = gst_mythtv_src_get_position (src);
   1.501 -      if ( !src->live_tv ) {
   1.502 -	if ( cont_size > src->content_size ) {
   1.503 -	  src->content_size = cont_size;
   1.504 -	  src->eos = FALSE;
   1.505 -	} else {
   1.506 -	  src->eos = TRUE;
   1.507 -	  gst_element_set_state ( GST_ELEMENT (src), GST_STATE_NULL );
   1.508 -	  gst_element_set_locked_state ( GST_ELEMENT (src), FALSE );
   1.509 -	}
   1.510 -      } else {
   1.511 -	if ( cont_size <= 0 ) {
   1.512 -	  src->update_prog_chain = TRUE;
   1.513 -	  src->eos = TRUE;
   1.514 -	  src->unique_setup = FALSE;
   1.515 -	  src->do_start = TRUE;		  				  		
   1.516 -	}		  	
   1.517 -      }
   1.518 -      break;
   1.519 -    case GST_EVENT_FLUSH_STOP:
   1.520 -      src->do_start = TRUE;
   1.521 -      src->eos = FALSE;
   1.522 -      gst_element_set_state (GST_ELEMENT(src), GST_STATE_NULL);
   1.523 -      //gst_element_set_locked_state (GST_ELEMENT(src), TRUE);
   1.524 -      break;
   1.525 -#endif
   1.526      case GST_EVENT_EOS:
   1.527 -      g_print( "[%s] Got EOS event!!!\n", __FUNCTION__ );
   1.528 +      GST_WARNING_OBJECT( src, "[%s] Got EOS event!!!\n", __FUNCTION__ );
   1.529  
   1.530        if ( src->live_tv ) {
   1.531  	cont_size = gst_mythtv_src_get_position (src);
   1.532 @@ -1187,7 +938,7 @@
   1.533        ret = TRUE;
   1.534        break;
   1.535      case GST_EVENT_NEWSEGMENT:
   1.536 -      g_print( "[%s] Got NEWSEGMENT!!!\n", __FUNCTION__ );
   1.537 +      GST_INFO_OBJECT( src, "[%s] Got NEWSEGMENT!!!\n", __FUNCTION__ );
   1.538        ret = gst_pad_event_default (pad, event);
   1.539        break;
   1.540      case GST_EVENT_SEEK:  	  
   1.541 @@ -1195,7 +946,6 @@
   1.542  	gst_event_ref( event );
   1.543  
   1.544  	gdouble rate;
   1.545 -	//gboolean update = TRUE;
   1.546  	GstFormat format;
   1.547  	GstSeekType cur_type, stop_type;
   1.548  	GstSeekFlags flags;
   1.549 @@ -1204,9 +954,9 @@
   1.550  	    &flags, &cur_type, &cur,
   1.551  	    &stop_type, &stop );
   1.552  
   1.553 -	g_print( "[%s] Got EVENT_SEEK (pos = %lld)!!!\n", __FUNCTION__, cur );
   1.554 +	GST_INFO_OBJECT( src, "[%s] Got EVENT_SEEK (pos = %lld)!!!\n", __FUNCTION__, cur );
   1.555  	if ( !( flags & GST_SEEK_FLAG_FLUSH ) ) {
   1.556 -	  g_print( "[%s] Could get the FLAG_FLUSH message.\n", __FUNCTION__ );
   1.557 +	  GST_WARNING_OBJECT( src, "[%s] Could get the FLAG_FLUSH message.\n", __FUNCTION__ );
   1.558  	}
   1.559  	if ( format == GST_FORMAT_TIME && ( ret = gst_pad_event_default (pad, event) ) == FALSE ) {
   1.560  	  gst_event_unref( event );
   1.561 @@ -1289,13 +1039,16 @@
   1.562  
   1.563    switch (transition) {
   1.564      case GST_STATE_CHANGE_READY_TO_NULL:
   1.565 -      g_print( "[%s] READY to NULL called!\n", __FUNCTION__ );
   1.566 +      GST_INFO_OBJECT( src, "[%s] READY to NULL called!\n", __FUNCTION__ );
   1.567        break;
   1.568      case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
   1.569 -      g_print( "[%s] PLAYING to PAUSED called!\n", __FUNCTION__ );
   1.570 +      GST_INFO_OBJECT( src, "[%s] PLAYING to PAUSED called!\n", __FUNCTION__ );
   1.571      case GST_STATE_CHANGE_PAUSED_TO_READY:
   1.572 -      g_print( "[%s] PAUSED to READY called!\n", __FUNCTION__ );
   1.573 -      
   1.574 +      GST_INFO_OBJECT( src, "[%s] PAUSED to READY called!\n", __FUNCTION__ );
   1.575 +      if ( !gmyth_recorder_send_frontend_ready_command( src->spawn_livetv->recorder ) )
   1.576 +      	GST_WARNING_OBJECT( src, "[%s] Couldn't send the FRONTEND_READY message to the backend!", __FUNCTION__ );
   1.577 +      else
   1.578 +      	GST_DEBUG_OBJECT( src, "[%s] Message FRONTEND_READY was sent to the backend!", __FUNCTION__ );
   1.579        if ( src->live_tv && src->update_prog_chain ) {
   1.580        	
   1.581        /*