⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtv.c

📁 This code is based on mpeg_play, available from: http://bmrc.berkeley.edu/frame/research/mpeg/
💻 C
📖 第 1 页 / 共 3 页
字号:
    /* remove newline at end of line, and the file:// url header       at the begining, copied this code from the xmms source */    temp = strchr(string, '\n');    if (temp)    {        if (*(temp - 1) == '\r')            *(temp - 1) = '\0';        *temp = '\0';    }    if (!strncmp(string, "file:", 5))        string = string + 5;    gtv_open_file(string, widget);    gtv_play(NULL, widget);}static gint gtv_timer( gpointer raw ){    SMPEG* mpeg = NULL;    SMPEG_Info* info = NULL;    mpeg = (SMPEG*) gtk_object_get_data( GTK_OBJECT( raw ), "mpeg" );    info = (SMPEG_Info*) gtk_object_get_data( GTK_OBJECT( raw ), "info" );    if( mpeg && info ) {	if( SMPEG_status( mpeg ) == SMPEG_PLAYING ) {	    SMPEG_getinfo( mpeg, info );	    gtv_set_frame( raw, info->current_frame );	    gtv_set_fps( raw, info->current_fps );	    gtv_set_trackbar( raw, info->current_offset );	}    }    return 1;}static void gtv_clear_screen( gpointer raw ){    SDL_Surface* sdl_screen = NULL;    sdl_screen = (SDL_Surface*) gtk_object_get_data( GTK_OBJECT( raw ), "sdl_screen" );    if( sdl_screen ) {	SDL_FillRect( sdl_screen, NULL, SDL_MapRGB( sdl_screen->format, 0, 0, 0 ) );	SDL_UpdateRect( sdl_screen, 0, 0, 0, 0 );    }}static void gtv_quit( GtkWidget* item, gpointer raw ){    gtv_close( NULL, raw );    gtk_exit( 0 );}static void gtv_connect( gpointer raw, gchar* name, gchar* signal, GtkSignalFunc func ){    GtkObject* item = NULL;    assert( raw );    item = GTK_OBJECT( gtk_object_get_data( GTK_OBJECT( raw ), name ) );    assert( item );    gtk_signal_connect(item, signal, func, raw );}int main( int argc, char* argv[] ){    static GtkTargetEntry drop_types[] =     {        { "text/plain", 0, 1 }    };    /* These are always on the stack until program exit. */    SMPEG_Info info;    gchar filename_buffer[FILENAME_BUFFER_SIZE];    GtkWidget* window = NULL;    memset( &info, 0, sizeof( info ) );    memset( &filename_buffer, 0, sizeof( gchar ) * FILENAME_BUFFER_SIZE );    gtk_set_locale();    gtk_init( &argc, &argv );    window = create_gtv_window( );    gtk_drag_dest_set(window, GTK_DEST_DEFAULT_ALL, drop_types, 1, GDK_ACTION_COPY);    gtk_signal_connect( GTK_OBJECT( window ), "drag_data_received",			GTK_SIGNAL_FUNC( gtv_drag_data_received ), window );    gtk_signal_connect( GTK_OBJECT( window ), "destroy",			GTK_SIGNAL_FUNC( gtv_quit ), window );    gtk_object_set_data( GTK_OBJECT( window ), "info", &info );    gtk_object_set_data( GTK_OBJECT( window ), "mpeg", NULL );    gtk_object_set_data( GTK_OBJECT( window ), "sdl_screen", NULL );    gtk_object_set_data( GTK_OBJECT( window ), "filename_buffer", filename_buffer );    gtk_widget_show( window );    gtv_connect( window, "open", "activate", GTK_SIGNAL_FUNC( gtv_open ) );    gtv_connect( window, "close", "activate", GTK_SIGNAL_FUNC( gtv_close ) );    gtv_connect( window, "file_info", "activate", GTK_SIGNAL_FUNC( gtv_info ) );    gtv_connect( window, "quit", "activate", GTK_SIGNAL_FUNC( gtv_quit ) );    gtv_connect( window, "about", "activate", GTK_SIGNAL_FUNC( gtv_about ) );    gtv_connect( window, "play", "clicked", GTK_SIGNAL_FUNC( gtv_play ) );    gtv_connect( window, "pause", "clicked", GTK_SIGNAL_FUNC( gtv_pause ) );    gtv_connect( window, "stop", "clicked", GTK_SIGNAL_FUNC( gtv_stop ) );    gtv_connect( window, "step", "clicked", GTK_SIGNAL_FUNC( gtv_step ) );    gtv_connect( window, "to_end", "clicked", GTK_SIGNAL_FUNC( gtv_to_end ) );    gtv_connect( window, "twotimes", "toggled", GTK_SIGNAL_FUNC( gtv_double ) );    gtv_connect( window, "loop", "toggled", GTK_SIGNAL_FUNC( gtv_loop ) );    gtv_connect( window, "audio", "toggled", GTK_SIGNAL_FUNC( gtv_audio ) );    gtv_connect( window, "filter", "toggled", GTK_SIGNAL_FUNC( gtv_filter ) );    gtv_connect( window, "seek", "value_changed", GTK_SIGNAL_FUNC( gtv_seek ) );    gtv_connect( window, "scale", "button_press_event", GTK_SIGNAL_FUNC( gtv_trackbar_drag_on ) );    gtv_connect( window, "scale", "button_release_event", GTK_SIGNAL_FUNC( gtv_trackbar_drag_off ) );    /*    gtk_idle_add_priority( G_PRIORITY_LOW, gtv_timer, window );*/    gtk_timeout_add( TIMER_TIMEOUT, gtv_timer, window );    gtv_set_frame( window, 0 );    gtv_set_fps( window, 0.0 );    gtv_set_buttons_sensitive( window, FALSE );    if( argc > 1 ) {	gtv_open_file( argv[1], window );    }    gtk_main( );    return 0;}static GtkWidget* create_gtv_window( void ){  GtkWidget *gtv_window;  GtkWidget *vbox1;  GtkWidget *menubar1;  GtkWidget *file;  GtkWidget *file_menu;  GtkAccelGroup *file_menu_accels;  GtkWidget *open;  GtkWidget *close;  GtkWidget *separator1;  GtkWidget *file_info;  GtkWidget *separator2;  GtkWidget *quit;  GtkWidget *help;  GtkWidget *help_menu;  GtkAccelGroup *help_menu_accels;  GtkWidget *about;  GtkWidget *table1;  GtkObject *seek;  GtkWidget *scale;  GtkWidget *play;  GtkWidget *pause;  GtkWidget *stop;  GtkWidget *step;  GtkWidget *to_end;  GtkWidget *twotimes;  GtkWidget *loop;  GtkWidget *audio;  GtkWidget *filter;  GtkWidget *label3;  GtkWidget *fps;  GtkWidget *label2;  GtkWidget *frame;  GtkAccelGroup *accel_group;  accel_group = gtk_accel_group_new ();  gtv_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  gtk_object_set_data (GTK_OBJECT (gtv_window), "gtv_window", gtv_window);  gtk_window_set_title (GTK_WINDOW (gtv_window), "gtv");  gtk_widget_set_uposition (GTK_WIDGET (gtv_window), 0, 0);  vbox1 = gtk_vbox_new (FALSE, 0);  gtk_widget_ref (vbox1);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "vbox1", vbox1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (vbox1);  gtk_container_add (GTK_CONTAINER (gtv_window), vbox1);  menubar1 = gtk_menu_bar_new ();  gtk_widget_ref (menubar1);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "menubar1", menubar1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (menubar1);  gtk_box_pack_start (GTK_BOX (vbox1), menubar1, FALSE, FALSE, 0);  file = gtk_menu_item_new_with_label ("File");  gtk_widget_ref (file);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "file", file,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (file);  gtk_container_add (GTK_CONTAINER (menubar1), file);  file_menu = gtk_menu_new ();  gtk_widget_ref (file_menu);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "file_menu", file_menu,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_menu_item_set_submenu (GTK_MENU_ITEM (file), file_menu);  file_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (file_menu));  open = gtk_menu_item_new_with_label ("Open");  gtk_widget_ref (open);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "open", open,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (open);  gtk_container_add (GTK_CONTAINER (file_menu), open);  gtk_widget_add_accelerator (open, "activate", accel_group,                              GDK_O, GDK_CONTROL_MASK,                              GTK_ACCEL_VISIBLE);  close = gtk_menu_item_new_with_label ("Close");  gtk_widget_ref (close);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "close", close,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (close);  gtk_container_add (GTK_CONTAINER (file_menu), close);  gtk_widget_add_accelerator (close, "activate", accel_group,                              GDK_W, GDK_CONTROL_MASK,                              GTK_ACCEL_VISIBLE);  separator1 = gtk_menu_item_new ();  gtk_widget_ref (separator1);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "separator1", separator1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (separator1);  gtk_container_add (GTK_CONTAINER (file_menu), separator1);  gtk_widget_set_sensitive (separator1, FALSE);  file_info = gtk_menu_item_new_with_label ("Info");  gtk_widget_ref (file_info);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "file_info", file_info,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (file_info);  gtk_container_add (GTK_CONTAINER (file_menu), file_info);  gtk_widget_add_accelerator (file_info, "activate", accel_group,                              GDK_I, GDK_CONTROL_MASK,                              GTK_ACCEL_VISIBLE);  separator2 = gtk_menu_item_new ();  gtk_widget_ref (separator2);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "separator2", separator2,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (separator2);  gtk_container_add (GTK_CONTAINER (file_menu), separator2);  gtk_widget_set_sensitive (separator2, FALSE);  quit = gtk_menu_item_new_with_label ("Quit");  gtk_widget_ref (quit);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "quit", quit,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (quit);  gtk_container_add (GTK_CONTAINER (file_menu), quit);  gtk_widget_add_accelerator (quit, "activate", accel_group,                              GDK_Q, GDK_CONTROL_MASK,                              GTK_ACCEL_VISIBLE);  help = gtk_menu_item_new_with_label ("Help");  gtk_widget_ref (help);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "help", help,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (help);  gtk_container_add (GTK_CONTAINER (menubar1), help);  gtk_menu_item_right_justify (GTK_MENU_ITEM (help));  help_menu = gtk_menu_new ();  gtk_widget_ref (help_menu);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "help_menu", help_menu,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_menu_item_set_submenu (GTK_MENU_ITEM (help), help_menu);  help_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (help_menu));  about = gtk_menu_item_new_with_label ("About");  gtk_widget_ref (about);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "about", about,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (about);  gtk_container_add (GTK_CONTAINER (help_menu), about);  gtk_widget_add_accelerator (about, "activate", accel_group,                              GDK_F1, 0,                              GTK_ACCEL_VISIBLE);  table1 = gtk_table_new (4, 5, FALSE);  gtk_widget_ref (table1);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "table1", table1,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (table1);  gtk_box_pack_start (GTK_BOX (vbox1), table1, TRUE, TRUE, 0);  gtk_container_set_border_width (GTK_CONTAINER (table1), 5);  gtk_table_set_row_spacings (GTK_TABLE (table1), 5);  gtk_table_set_col_spacings (GTK_TABLE (table1), 5);  seek = gtk_adjustment_new(0.0, 0.0, 100.0, 1.0, 0.0, 0.0);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "seek", seek,                            (GtkDestroyNotify) (0));  scale = gtk_hscale_new(GTK_ADJUSTMENT(seek));  gtv_trackbar_dragging = 0;  gtk_widget_ref (scale);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "scale", scale,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_range_set_update_policy (GTK_RANGE (scale), GTK_UPDATE_DELAYED);  gtk_widget_show (scale);  gtk_table_attach (GTK_TABLE (table1), scale, 0, 5, 3, 4,                    (GtkAttachOptions) (GTK_FILL),                    (GtkAttachOptions) (0), 0, 0);  play = gtk_button_new_with_label ("  Play  ");  gtk_widget_ref (play);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "play", play,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (play);  gtk_table_attach (GTK_TABLE (table1), play, 0, 1, 1, 2,                    (GtkAttachOptions) (0),                    (GtkAttachOptions) (0), 0, 0);  pause = gtk_button_new_with_label ("  Pause  ");  gtk_widget_ref (pause);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "pause", pause,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (pause);  gtk_table_attach (GTK_TABLE (table1), pause, 1, 2, 1, 2,                    (GtkAttachOptions) (0),                    (GtkAttachOptions) (0), 0, 0);  stop = gtk_button_new_with_label ("  Stop  ");  gtk_widget_ref (stop);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "stop", stop,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (stop);  gtk_table_attach (GTK_TABLE (table1), stop, 2, 3, 1, 2,                    (GtkAttachOptions) (0),                    (GtkAttachOptions) (0), 0, 0);  step = gtk_button_new_with_label ("  Step  ");  gtk_widget_ref (step);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "step", step,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (step);  gtk_table_attach (GTK_TABLE (table1), step, 3, 4, 1, 2,                    (GtkAttachOptions) (0),                    (GtkAttachOptions) (0), 0, 0);  to_end = gtk_button_new_with_label ("  To End  ");  gtk_widget_ref (to_end);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "to_end", to_end,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (to_end);  gtk_table_attach (GTK_TABLE (table1), to_end, 4, 5, 1, 2,                    (GtkAttachOptions) (0),                    (GtkAttachOptions) (0), 0, 0);  twotimes = gtk_check_button_new_with_label ("Double");  gtk_widget_ref (twotimes);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "twotimes", twotimes,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (twotimes);  gtk_table_attach (GTK_TABLE (table1), twotimes, 0, 1, 2, 3,                    (GtkAttachOptions) (0),                    (GtkAttachOptions) (0), 0, 0);  loop = gtk_check_button_new_with_label ("Loop");  gtk_widget_ref (loop);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "loop", loop,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (loop);  gtk_table_attach (GTK_TABLE (table1), loop, 1, 2, 2, 3,                    (GtkAttachOptions) (0),                    (GtkAttachOptions) (0), 0, 0);  audio = gtk_check_button_new_with_label ("Audio");  gtk_widget_ref (audio);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "audio", audio,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (audio);  gtk_table_attach (GTK_TABLE (table1), audio, 2, 3, 2, 3,                    (GtkAttachOptions) (0),                    (GtkAttachOptions) (0), 0, 0);  filter = gtk_check_button_new_with_label ("Filter");  gtk_widget_ref (filter);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "filter", filter,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (filter);  gtk_table_attach (GTK_TABLE (table1), filter, 3, 4, 2, 3,                    (GtkAttachOptions) (0),                    (GtkAttachOptions) (0), 0, 0);  label3 = gtk_label_new ("Current frame:");  gtk_widget_ref (label3);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "label3", label3,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (label3);  gtk_table_attach (GTK_TABLE (table1), label3, 0, 2, 0, 1,                    (GtkAttachOptions) (GTK_FILL),                    (GtkAttachOptions) (0), 0, 0);  gtk_misc_set_alignment (GTK_MISC (label3), 1, 0.5);  fps = gtk_label_new ("<fps>");  gtk_widget_ref (fps);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "fps", fps,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (fps);  gtk_table_attach (GTK_TABLE (table1), fps, 3, 4, 0, 1,                    (GtkAttachOptions) (GTK_FILL),                    (GtkAttachOptions) (0), 0, 0);  gtk_misc_set_alignment (GTK_MISC (fps), 1, 0.5);  label2 = gtk_label_new ("fps");  gtk_widget_ref (label2);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "label2", label2,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (label2);  gtk_table_attach (GTK_TABLE (table1), label2, 4, 5, 0, 1,                    (GtkAttachOptions) (GTK_FILL),                    (GtkAttachOptions) (0), 0, 0);  gtk_misc_set_alignment (GTK_MISC (label2), 0, 0.5);  frame = gtk_label_new ("<frame>");  gtk_widget_ref (frame);  gtk_object_set_data_full (GTK_OBJECT (gtv_window), "frame", frame,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (frame);  gtk_table_attach (GTK_TABLE (table1), frame, 2, 3, 0, 1,                    (GtkAttachOptions) (GTK_FILL),                    (GtkAttachOptions) (0), 0, 0);  gtk_misc_set_alignment (GTK_MISC (frame), 0, 0.5);  gtk_window_add_accel_group (GTK_WINDOW (gtv_window), accel_group);  return gtv_window;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -