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