From a3add8d78fbe7c397316520f7e5edf84a8a516ca Mon Sep 17 00:00:00 2001 From: Maksym Veremeyenko Date: Fri, 10 Jun 2011 15:26:24 +0300 Subject: [PATCH] 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