diff -r 2ee2974c72c1 -r 4ba74b706853 maemo-ui/src/mmyth_tvplayer.c
--- a/maemo-ui/src/mmyth_tvplayer.c	Thu Sep 28 22:05:21 2006 +0100
+++ b/maemo-ui/src/mmyth_tvplayer.c	Mon Nov 06 23:12:21 2006 +0000
@@ -89,9 +89,9 @@
 	s = gst_caps_to_string (pad->caps);
 
 	if ( s[0] == 'a') {
-		ret = gst_pad_link (pad, gst_element_get_pad (tvplayer->audioqueue, "sink"));
+		ret = gst_pad_link (pad, gst_element_get_pad (tvplayer->audioqueue1, "sink"));
 	} else {
-		ret = gst_pad_link (pad, gst_element_get_pad (tvplayer->videoqueue, "sink")); 
+		ret = gst_pad_link (pad, gst_element_get_pad (tvplayer->videoqueue1, "sink")); 
 	}
 	
 	g_free(s);
@@ -100,38 +100,41 @@
 static gboolean
 expose_cb (GtkWidget * widget, GdkEventExpose * event, gpointer user_data)
 {
-    MMythTVPlayer *tvplayer = MMYTH_TVPLAYER (user_data);
+	MMythTVPlayer *tvplayer = MMYTH_TVPLAYER (user_data);
 
 	if (tvplayer && tvplayer->videow) {
-	    gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (tvplayer->gst_videosink),
-                                  GDK_WINDOW_XWINDOW (widget->window));
+		gst_x_overlay_set_xwindow_id (GST_X_OVERLAY (tvplayer->gst_videosink),
+				GDK_WINDOW_XWINDOW (widget->window));
 		return TRUE;
 	}
-	
+
 	g_warning ("MMythTVPlayer expose called before setting video window\n");
-	
-    return FALSE;
+
+	return FALSE;
 }
 
 static void
 mmyth_tvplayer_init (MMythTVPlayer *tvplayer)
 {
-    tvplayer->gst_pipeline = NULL;
-    tvplayer->gst_source = NULL;
-    tvplayer->gst_videodec = NULL;
-    tvplayer->gst_videosink = NULL;
-    tvplayer->videoqueue = NULL;
-    tvplayer->audioqueue = NULL;
-    
-    /* GTKWidget for rendering the video */
-    tvplayer->videow = NULL;
+	tvplayer->gst_pipeline = NULL;
+	tvplayer->gst_source = NULL;
+	tvplayer->gst_videodec = NULL;
+	tvplayer->gst_videosink = NULL;
+	tvplayer->gst_videocolortrs = NULL;
+	tvplayer->videoqueue1 = NULL;
+	tvplayer->videoqueue2 = NULL;
+	tvplayer->audioqueue1 = NULL;
+	tvplayer->audioqueue2 = NULL;   
+
+	/* GTKWidget for rendering the video */
+	tvplayer->videow = NULL;
 	tvplayer->expose_handler = 0;
-	    
+
 	tvplayer->backend_hostname = NULL;
 	tvplayer->backend_port = 0;
 	tvplayer->local_hostname = NULL;
 
-	tvplayer->remote_encoder = NULL;
+	tvplayer->recorder = NULL;
 	tvplayer->tvchain = NULL;
 	tvplayer->proginfo = NULL;
 }
@@ -161,8 +164,8 @@
 		g_object_unref (tvplayer->videow);
 	}
 	
-	if ( tvplayer->remote_encoder != NULL )
-		g_object_unref (tvplayer->remote_encoder);
+	if ( tvplayer->recorder != NULL )
+		g_object_unref (tvplayer->recorder);
 	if ( tvplayer->tvchain != NULL )
 		g_object_unref (tvplayer->tvchain);
 	if ( tvplayer->proginfo != NULL )
@@ -175,12 +178,18 @@
 		g_object_unref (tvplayer->gst_source);	
 	if ( tvplayer->gst_videodec != NULL )
 		g_object_unref (tvplayer->gst_videodec);	
+	if ( tvplayer->gst_videocolortrs != NULL )
+		g_object_unref (tvplayer->gst_videocolortrs);
 	if ( tvplayer->gst_videosink != NULL )
 		g_object_unref (tvplayer->gst_videosink);	
-	if ( tvplayer->videoqueue != NULL )
-		g_object_unref (tvplayer->videoqueue);	
-	if ( tvplayer->audioqueue != NULL )
-		g_object_unref (tvplayer->audioqueue);	
+	if ( tvplayer->videoqueue1 != NULL )
+		g_object_unref (tvplayer->videoqueue1);
+	if ( tvplayer->videoqueue2 != NULL )
+		g_object_unref (tvplayer->videoqueue2);
+	if ( tvplayer->audioqueue1 != NULL )
+		g_object_unref (tvplayer->audioqueue1);	
+	if ( tvplayer->audioqueue2 != NULL )
+		g_object_unref (tvplayer->audioqueue2);	
 
 	G_OBJECT_CLASS (mmyth_tvplayer_parent_class)->finalize (object);
 }
@@ -230,21 +239,25 @@
     GstElement *pipeline;
     GstElement *source, *parser;
     GstElement *videodec, *videosink;
+    GstElement *videocolortrs;
 #ifndef MAEMO_PLATFORM    
     GstElement *audiodec, *audioconv;
 #endif
     GstElement *audiosink;
-    GstElement *videoqueue, *audioqueue;
+    GstElement *videoqueue1, *videoqueue2, *audioqueue1, *audioqueue2;
 
     g_debug ("MMythTVPlayer: Setting the Gstreamer pipeline\n");
 	
     pipeline = gst_pipeline_new ("video-player");
     source = gst_element_factory_make ("mythtvsrc", "myth-source");
-    parser = gst_element_factory_make ("ffdemux_nuv", "nuv-demux");
+    parser = gst_element_factory_make ("nuvdemux", "nuv-demux");
 
     /* Gstreamer Video elements */
-    videoqueue = gst_element_factory_make ("queue", "video-queue");
-    videodec = gst_element_factory_make ("ffdec_mpeg4", "video-decoder");
+    videoqueue1 = gst_element_factory_make ("queue", "video-queue1");
+    videodec = gst_element_factory_make ("divxdec", "video-decoder");
+    videoqueue2 = gst_element_factory_make ("queue", "video-queue2");
+    videocolortrs = gst_element_factory_make ("ffmpegcolorspace", "image-color-transforms");
+
 #ifdef MAEMO_PLATFORM
     videosink = gst_element_factory_make ("sdlvideosink", "image-output");
 #else
@@ -252,17 +265,18 @@
 #endif
     
     /* Gstreamer Audio elements */
-    audioqueue = gst_element_factory_make ("queue", "audio-queue");    
+    audioqueue1 = gst_element_factory_make ("queue", "audio-queue1");    
+    audioqueue2 = gst_element_factory_make ("queue", "audio-queue2");
 #ifdef MAEMO_PLATFORM    
     audiosink = gst_element_factory_make ("dspmp3sink", "audio-output");
 #else    
-    audiodec = gst_element_factory_make ("ffdec_mp3", "audio-decoder");
+    audiodec = gst_element_factory_make ("mad", "audio-decoder");
     audioconv = gst_element_factory_make ("audioconvert", "audio-converter");
     audiosink = gst_element_factory_make ("alsasink", "audio-output");
 #endif    
     
     if (!(pipeline && source && parser && videodec && videosink) ||
-    	!(videoqueue && audioqueue && audiosink)) {
+    	!(videoqueue1 && videoqueue2 && audioqueue1 && audioqueue2 && audiosink)) {
         /* FIXME: hanlde the error correctly */
         /* video_alignment is not being created (below) 
            and is causing problems to the ui */
@@ -270,6 +284,7 @@
 	    tvplayer->gst_pipeline = NULL;
 	    tvplayer->gst_videodec = NULL;
 	    tvplayer->gst_videosink = NULL;
+	    tvplayer->gst_videocolortrs = NULL;
            
         g_warning ("GstElement creation error!\n");
         return FALSE;
@@ -282,29 +297,35 @@
     }
 #endif    
     
-    
     tvplayer->gst_pipeline = pipeline;
     tvplayer->gst_source = source;
     tvplayer->gst_videodec = videodec;
     tvplayer->gst_videosink = videosink;
+    tvplayer->gst_videocolortrs = videocolortrs;
     g_object_ref (tvplayer->gst_pipeline);
     g_object_ref (tvplayer->gst_source);
     g_object_ref (tvplayer->gst_videodec);
     g_object_ref (tvplayer->gst_videosink);
+    g_object_ref (tvplayer->gst_videocolortrs);
 
-    tvplayer->videoqueue = videoqueue;
-    tvplayer->audioqueue = audioqueue;
-    g_object_ref (tvplayer->videoqueue);
-    g_object_ref (tvplayer->audioqueue);
-   	
+    tvplayer->videoqueue1 = videoqueue1;
+    tvplayer->videoqueue2 = videoqueue2;
+    tvplayer->audioqueue1 = audioqueue1;
+    tvplayer->audioqueue2 = audioqueue2;
+    g_object_ref (tvplayer->videoqueue1);
+    g_object_ref (tvplayer->videoqueue2);
+    g_object_ref (tvplayer->audioqueue1);
+    g_object_ref (tvplayer->audioqueue2);
+  	
     g_object_set (G_OBJECT (videosink), "sync", TRUE, NULL);
     g_object_set (G_OBJECT (audiosink), "sync", FALSE, NULL);
 
     gst_bus_add_watch (gst_pipeline_get_bus (GST_PIPELINE (tvplayer->gst_pipeline)),
                        bus_call, tvplayer);
 
-    gst_bin_add_many (GST_BIN (pipeline), source, parser, videoqueue,
-    			videodec, videosink, audioqueue, audiodec, audioconv, audiosink, NULL);
+    gst_bin_add_many (GST_BIN (pipeline), source, parser, videoqueue1,
+    			videodec, videoqueue2, videocolortrs, videosink, audioqueue1, 
+			audiodec, audioconv, audioqueue2, audiosink, NULL);
 
     {
 //        GstCaps *rtpcaps = gst_caps_new_simple ("application/x-rtp", NULL);
@@ -312,8 +333,8 @@
     }
     
     gst_element_link (source, parser);
-    gst_element_link_many (videoqueue, videodec, videosink, NULL);
-    gst_element_link_many (audioqueue, audiodec, audioconv, audiosink, NULL);
+    gst_element_link_many (videoqueue1, videodec, videoqueue2, videocolortrs, videosink, NULL);
+    gst_element_link_many (audioqueue1, audiodec, audioconv, audioqueue2, audiosink, NULL);
     
     g_signal_connect (parser, "pad-added", G_CALLBACK (new_pad_cb), tvplayer);
     
@@ -382,9 +403,9 @@
 	}
 
 	// Gets the remote encoder num
-	tvplayer->remote_encoder = remote_request_next_free_recorder (-1);
+	tvplayer->recorder = remote_request_next_free_recorder (-1);
 
-	if ( tvplayer->remote_encoder == NULL ) {
+	if ( tvplayer->recorder == NULL ) {
 		g_warning ("[%s] None remote encoder available", __FUNCTION__);
 		res = FALSE;
 		goto error;
@@ -400,14 +421,14 @@
 	}
 
 	// Init remote encoder. Opens its control socket.
-	res = gmyth_remote_encoder_setup(tvplayer->remote_encoder);
+	res = gmyth_recorder_setup(tvplayer->recorder);
 	if ( !res ) {
 		g_warning ("[%s] Fail while setting remote encoder\n", __FUNCTION__);
 		res = FALSE;
 		goto error;
 	}
 	// Spawn live tv. Uses the socket to send mythprotocol data to start livetv in the backend (remotelly)
-	res = gmyth_remote_encoder_spawntv ( tvplayer->remote_encoder,
+	res = gmyth_recorder_spawntv ( tvplayer->recorder,
 			gmyth_tvchain_get_id(tvplayer->tvchain) );
 	if (!res) {
 		g_warning ("[%s] Fail while spawn tv\n", __FUNCTION__);
@@ -446,9 +467,9 @@
 		res = FALSE;
 	}
 
-	if ( tvplayer->remote_encoder != NULL ) {
-		g_object_unref (tvplayer->remote_encoder);
-		tvplayer->remote_encoder = NULL;
+	if ( tvplayer->recorder != NULL ) {
+		g_object_unref (tvplayer->recorder);
+		tvplayer->recorder = NULL;
 	}
 
 	if ( tvplayer->tvchain != NULL ) {
@@ -589,7 +610,7 @@
     gst_element_set_state (tvplayer->gst_pipeline, GST_STATE_NULL);
     
     if (tvplayer->is_livetv) {
-	    if (!gmyth_remote_encoder_stop_livetv (tvplayer->remote_encoder)) {
+	    if (!gmyth_recorder_stop_livetv (tvplayer->recorder)) {
 	    	g_warning ("[%s] Error while stoping remote encoder", __FUNCTION__);	
 	    }
     }
@@ -660,9 +681,9 @@
 				g_string_free( str_chainid, FALSE );
 		}
 
-		if ( tvplayer->remote_encoder != NULL )	
+		if ( tvplayer->recorder != NULL )	
 			g_object_set (G_OBJECT (tvplayer->gst_source), "mythtv-live-id",
-					tvplayer->remote_encoder->recorder_num, NULL );
+					tvplayer->recorder->recorder_num, NULL );
 		g_debug ("[%s] Setting location to %s", __FUNCTION__, 
 				tvplayer->proginfo->pathname->str);