introduce timecodes display
authorMaksym Veremeyenko <verem@m1stereo.tv>
Fri, 10 Jun 2011 12:26:24 +0000 (15:26 +0300)
committerMaksym Veremeyenko <verem@m1stereo.tv>
Sun, 12 Jun 2011 13:07:00 +0000 (16:07 +0300)
src/dv1394app.c
src/dv1394app.h
src/page_clips.c
src/page_status.c

index d367235..b1919ae 100644 (file)
@@ -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;
+}
index 70671be..ae411c5 100644 (file)
@@ -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
 
index 50b8912..173f97e 100644 (file)
@@ -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;
index bd8bd84..1ca9487 100644 (file)
@@ -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();