11.06.11 18:59, Maksym Veremeyenko написав(ла):
[...]
*0001-introduce-timecodes-display.patch* - switch display all timings in
timecode (require previous patches for melted to provide proper fps)

--
________________________________________
Maksym Veremeyenko
>From 8a12273a54cf8b028bca37773f3fb079ccd97a51 Mon Sep 17 00:00:00 2001
From: Maksym Veremeyenko <ve...@m1stereo.tv>
Date: Fri, 10 Jun 2011 15:26:24 +0300
Subject: [PATCH 1/6] introduce timecodes display

---
 src/dv1394app.c   |   22 +++++++++++++++++++++
 src/dv1394app.h   |    2 +
 src/page_clips.c  |   18 +++++++++++++++-
 src/page_status.c |   55 +++++++++++++++++++++++-----------------------------
 4 files changed, 64 insertions(+), 33 deletions(-)

diff --git a/src/dv1394app.c b/src/dv1394app.c
index d367235..b1919ae 100644
--- a/src/dv1394app.c
+++ b/src/dv1394app.c
@@ -555,3 +555,25 @@ void dv1394app_close( dv1394app this )
 		page_close( this->pages[ -- this->page_count ] );
 	free( this );
 }
+
+char* frames2tc( int f, float fps, char* buf )
+{
+	int tc[4] = { 0, 0, 0, 0 };
+	float d;
+	int t;
+
+	if ( fps )
+	{
+		d = f / fps;
+		t = d;
+
+		tc[0] = (d - t) * fps;
+		tc[1] = t % 60; t /= 60;
+		tc[2] = t % 60; t /= 60;
+		tc[3] = t % 24;
+	}
+
+	sprintf(buf, "%.2d:%.2d:%.2d:%.2d", tc[3], tc[2], tc[1], tc[0]);
+
+	return buf;
+}
diff --git a/src/dv1394app.h b/src/dv1394app.h
index 70671be..ae411c5 100644
--- a/src/dv1394app.h
+++ b/src/dv1394app.h
@@ -63,5 +63,7 @@ extern void dv1394app_show_status( dv1394app, mvcp_status );
 extern void dv1394app_disconnect( dv1394app );
 extern void dv1394app_close( dv1394app );
 
+extern char* frames2tc( int f, float fps, char* buf );
+
 #endif
 
diff --git a/src/page_clips.c b/src/page_clips.c
index 50b8912..173f97e 100644
--- a/src/page_clips.c
+++ b/src/page_clips.c
@@ -155,7 +155,13 @@ static void list_queue( page_clips this, int clip )
 		GtkCellRenderer *renderer;
 		GtkTreeViewColumn *column;
 
-		list_store = gtk_list_store_new( 6, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT );
+		list_store = gtk_list_store_new( 6,
+			G_TYPE_BOOLEAN,
+			G_TYPE_STRING,
+			G_TYPE_STRING,
+			G_TYPE_STRING,
+			G_TYPE_STRING,
+			G_TYPE_INT );
 		gtk_tree_view_set_model( GTK_TREE_VIEW( treeview ), GTK_TREE_MODEL( list_store ) );
 		
 		renderer = gtk_cell_renderer_toggle_new( );
@@ -188,9 +194,17 @@ static void list_queue( page_clips this, int clip )
 	
 	for ( index = 0; index < mvcp_list_count( list ); index ++ )
 	{
+		char tc1[12], tc2[12], tc3[12];
 		mvcp_list_get( list, index, &entry );
 		gtk_list_store_append( list_store, &iter );
-		gtk_list_store_set( list_store, &iter, 0, index == clip, 1, ( int )entry.in, 2, ( int )entry.out, 3, ( int )entry.size, 4, entry.full, 5, entry.clip, -1 );
+		gtk_list_store_set( list_store, &iter,
+			0, index == clip,
+			1, frames2tc( entry.in, entry.fps, tc1),
+			2, frames2tc( entry.out, entry.fps, tc2),
+			3, frames2tc( entry.size, entry.fps, tc3),
+			4, entry.full,
+			5, entry.clip,
+			-1 );
 	}
 
 	this->clip = clip;
diff --git a/src/page_status.c b/src/page_status.c
index bd8bd84..1ca9487 100644
--- a/src/page_status.c
+++ b/src/page_status.c
@@ -51,45 +51,38 @@ static GtkWidget *this_page_get_widget( page );
 /** Show the status associated to a unit.
 */
 
+static char* status_to_text( mvcp_status status )
+{
+	switch( status->status )
+	{
+		case unit_offline:	return "offline";	break;
+		case unit_undefined:	return "undefined";	break;
+		case unit_not_loaded:	return "unloaded";	break;
+		case unit_stopped:	return "stopped";	break;
+		case unit_playing:	return "playing";	break;
+		case unit_paused:	return "paused";	break;
+		case unit_disconnected:	return "disconnect";	break;
+		case unit_unknown:	return "unknown";	break;
+	}
+	return "unknown";
+}
+
 static int show_status( page_status this, mvcp_status status )
 {
 	GtkWidget *widget = this_page_get_widget( ( page )this );
 	char temp[ 1024 ] = "";
 	char temp2[ 1024 ];
 	char label_name[ 256 ];
+	char tc1[12], tc2[12], tc3[12];
 
-	sprintf( temp, "%05d %05d %05d %s [", status->in, status->position, status->out, status->clip );
-	
-	switch( status->status )
-	{
-		case unit_offline:
-			strcat( temp, "offline" );
-			break;
-		case unit_undefined:
-			strcat( temp, "undefined" );
-			break;
-		case unit_not_loaded:
-			strcat( temp, "unloaded" );
-			break;
-		case unit_stopped:
-			strcat( temp, "stopped" );
-			break;
-		case unit_playing:
-			strcat( temp, "playing" );
-			break;
-		case unit_paused:
-			strcat( temp, "paused" );
-			break;
-		case unit_disconnected:
-			strcat( temp, "disconnect" );
-			break;
-		default:
-			strcat( temp, "unknown" );
-			break;
-	}
+	sprintf( temp, "[%s] IN:%s POS:%s OUT:%s %s",
+		status_to_text( status ),
+		frames2tc(status->in,       status->fps, tc1),
+		frames2tc(status->position, status->fps, tc2),
+		frames2tc(status->out,      status->fps, tc3),
+		status->clip
+	);
 
-	strcat( temp, "]" );
-	
 	sprintf( label_name, "label_unit_%d", status->unit );
 
 	gdk_threads_enter();
-- 
1.7.4.4

------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________
Mlt-devel mailing list
Mlt-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mlt-devel

Reply via email to