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

📄 gtv.c

📁 This code is based on mpeg_play, available from: http://bmrc.berkeley.edu/frame/research/mpeg/
💻 C
📖 第 1 页 / 共 3 页
字号:
  dialog_vbox2 = GTK_DIALOG (about_dialog)->vbox;  gtk_object_set_data (GTK_OBJECT (about_dialog), "dialog_vbox2", dialog_vbox2);  gtk_widget_show (dialog_vbox2);  scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);  gtk_widget_ref (scrolledwindow2);  gtk_object_set_data_full (GTK_OBJECT (about_dialog), "scrolledwindow2", scrolledwindow2,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (scrolledwindow2);  gtk_box_pack_start (GTK_BOX (dialog_vbox2), scrolledwindow2, TRUE, TRUE, 0);  gtk_container_set_border_width (GTK_CONTAINER (scrolledwindow2), 5);  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow2), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);  viewport2 = gtk_viewport_new (NULL, NULL);  gtk_widget_ref (viewport2);  gtk_object_set_data_full (GTK_OBJECT (about_dialog), "viewport2", viewport2,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (viewport2);  gtk_container_add (GTK_CONTAINER (scrolledwindow2), viewport2);  text = gtk_text_new (NULL, NULL);  gtk_widget_ref (text);  gtk_object_set_data_full (GTK_OBJECT (about_dialog), "text", text,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (text);  gtk_container_add (GTK_CONTAINER (viewport2), text);  dialog_action_area2 = GTK_DIALOG (about_dialog)->action_area;  gtk_object_set_data (GTK_OBJECT (about_dialog), "dialog_action_area2", dialog_action_area2);  gtk_widget_show (dialog_action_area2);  gtk_container_set_border_width (GTK_CONTAINER (dialog_action_area2), 10);  ok = gtk_button_new_with_label ("  OK  ");  gtk_widget_ref (ok);  gtk_object_set_data_full (GTK_OBJECT (about_dialog), "ok", ok,                            (GtkDestroyNotify) gtk_widget_unref);  gtk_widget_show (ok);  gtk_box_pack_start (GTK_BOX (dialog_action_area2), ok, FALSE, FALSE, 0);  return about_dialog;}static void gtv_about( GtkWidget* item, gpointer raw ){    static const char* msg = "gtv - Gtk+ MPEG Player\n" \                             "(c) Michael Vance, 1999\n" \	                     "    briareos@lokigames.com\n" \                             "\n" \                             "Built using:\n" \	                     "SMPEG - http://www.lokigames.com/development\n" \	                     "Gtk+ - http://www.gtk.org\n" \	                     "Glade - http://glade.pn.org\n" \                             "\n" \                             "Distributed under the GPL.\n";    GtkWidget* dialog = NULL;    GtkWidget* ok = NULL;    GtkWidget* text = NULL;    gint ignored = 0;    dialog = create_about_dialog( );    ok = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( dialog ), "ok" ) );    gtk_signal_connect( GTK_OBJECT( ok ), "clicked",			GTK_SIGNAL_FUNC( gtv_dialog_cancel ), raw );    text = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( dialog ), "text" ) );    gtk_editable_insert_text( GTK_EDITABLE( text ), msg, strlen( msg ), &ignored );    /* HACK HACK HACK */    gtk_object_set_data( GTK_OBJECT( raw ), "dialog", dialog );    gtk_grab_add( dialog );    gtk_widget_show( dialog );}static void gtv_rewind( gpointer raw ){    SMPEG* mpeg = NULL;    assert( raw );    mpeg = (SMPEG*) gtk_object_get_data( GTK_OBJECT( raw ), "mpeg" );    if( mpeg ) {	SMPEG_Info* info = NULL;	SMPEG_rewind( mpeg );	gtv_clear_screen( raw );	info = (SMPEG_Info*) gtk_object_get_data( GTK_OBJECT( raw ), "info" );	SMPEG_getinfo( mpeg, info );	gtv_set_frame( raw, info->current_frame );    }}static void gtv_double( GtkWidget* item, gpointer raw ){    SMPEG* mpeg = NULL;    SDL_Surface* sdl_screen = NULL;    SMPEG_Info* info = NULL;    int stopped=0;    int width,height;    assert( raw );    mpeg = (SMPEG*) gtk_object_get_data( GTK_OBJECT( raw ), "mpeg" );    sdl_screen = (SDL_Surface*) gtk_object_get_data( GTK_OBJECT( raw ), "sdl_screen" );    if( mpeg && sdl_screen ) {	GtkWidget* twotimes = NULL;	gboolean active = FALSE;	twotimes = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( raw ), "twotimes" ) );	active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( twotimes ) );	info = (SMPEG_Info*) gtk_object_get_data( GTK_OBJECT( raw ), "info" );	assert( info );        if (SMPEG_status(mpeg)==SMPEG_PLAYING) {		SMPEG_pause(mpeg);		stopped=1;	}	if( active ) {	    width = info->width * 2;	    height = info->height * 2;	} else {	    width = info->width;	    height = info->height;	}	sdl_screen = SDL_SetVideoMode(width, height,		sdl_screen->format->BitsPerPixel,sdl_screen->flags);        gtv_center_window(sdl_screen);	SMPEG_setdisplay( mpeg, sdl_screen, NULL, NULL );		gtk_object_set_data( GTK_OBJECT( raw ), "sdl_screen", sdl_screen );	SMPEG_scaleXY( mpeg, sdl_screen->w, sdl_screen->h );        gtv_center_window(sdl_screen);        if (stopped) SMPEG_pause(mpeg);    }}static void gtv_loop( GtkWidget* item, gpointer raw ){    SMPEG* mpeg = NULL;    assert( raw );    mpeg = (SMPEG*) gtk_object_get_data( GTK_OBJECT( raw ), "mpeg" );    if( mpeg ) {	GtkWidget* loop = NULL;	gboolean active = FALSE;	loop = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( raw ), "loop" ) );	active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( loop ) );	SMPEG_loop( mpeg, active );    }}static void gtv_audio( GtkWidget* item, gpointer raw ){    SMPEG* mpeg = NULL;    assert( raw );    mpeg = (SMPEG*) gtk_object_get_data( GTK_OBJECT( raw ), "mpeg" );    if( mpeg ) {	GtkWidget* audio = NULL;	gboolean active = FALSE;	SMPEG_Info* info = NULL;	audio = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( raw ), "audio" ) );	info = (SMPEG_Info*) gtk_object_get_data( GTK_OBJECT( raw ), "info" );	active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( audio ) );	SMPEG_enableaudio( mpeg, active && info->has_audio );    }}static void gtv_filter( GtkWidget* item, gpointer raw ){    SMPEG* mpeg = NULL;    SMPEG_Info* info = NULL;    assert( raw );    mpeg = (SMPEG*) gtk_object_get_data( GTK_OBJECT( raw ), "mpeg" );    info = (SMPEG_Info*) gtk_object_get_data( GTK_OBJECT( raw ), "info" );    if( mpeg && info->has_video ) {	GtkWidget* filter = NULL;	gboolean active = FALSE;	filter = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( raw ), "filter" ) );	active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( filter ) );	if(active)	{	  SMPEG_Filter * filter;	  /* Activate the bilinear filter */       	  filter = SMPEGfilter_bilinear();	  filter = SMPEG_filter( mpeg, filter );	  filter->destroy(filter);	}	else	{	  SMPEG_Filter * filter;	  /* Reset to default (null) filter */	  filter = SMPEGfilter_null();	  filter = SMPEG_filter( mpeg, filter );	  filter->destroy(filter);	}    }}static void gtv_play( GtkWidget* item, gpointer raw ){    SMPEG* mpeg = NULL;    assert( raw );    mpeg = (SMPEG*) gtk_object_get_data( GTK_OBJECT( raw ), "mpeg" );    if( mpeg ) {      //	gtv_rewind( raw );	SMPEG_play( mpeg );    }}static void gtv_pause( GtkWidget* item, gpointer raw ){    SMPEG* mpeg = NULL;    assert( raw );    mpeg = (SMPEG*) gtk_object_get_data( GTK_OBJECT( raw ), "mpeg" );    if( mpeg ) {	SMPEG_pause( mpeg );    }}static void gtv_stop( GtkWidget* item, gpointer raw ){    SMPEG* mpeg = NULL;    SMPEG_Info* info = NULL;    assert( raw );    mpeg = (SMPEG*) gtk_object_get_data( GTK_OBJECT( raw ), "mpeg" );    info = (SMPEG_Info*) gtk_object_get_data( GTK_OBJECT( raw ), "info" );    if( mpeg ) {	SMPEG_stop( mpeg );	gtv_rewind( raw );	SMPEG_getinfo( mpeg, info );	gtv_set_trackbar( raw, info->current_offset );    }}static void gtv_step( GtkWidget* item, gpointer raw ){    SMPEG* mpeg = NULL;    SMPEG_Info* info = NULL;    assert( raw );    mpeg = (SMPEG*) gtk_object_get_data( GTK_OBJECT( raw ), "mpeg" );    info = (SMPEG_Info*) gtk_object_get_data( GTK_OBJECT( raw ), "info" );    if( mpeg && info && info->has_video && ( SMPEG_status( mpeg ) != SMPEG_PLAYING ) ) {	int next_frame = 0;	GtkWidget* twotimes = NULL;	gboolean active = FALSE;	SDL_Surface* sdl_screen = NULL;	SMPEG_getinfo( mpeg, info );	next_frame = info->current_frame + 1;	twotimes = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( raw ), "twotimes" ) );	active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( twotimes ) );	sdl_screen = (SDL_Surface*) gtk_object_get_data( GTK_OBJECT( raw ), "sdl_screen" );	SMPEG_renderFrame( mpeg, next_frame );	SMPEG_getinfo( mpeg, info );	if( info->current_frame != next_frame ) {            GtkWidget *looping;            /* Sam 5/31/2000 - Only loop if the looping toggle is set */            looping = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(raw), "loop"));            if ( ! gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(looping)) ) {                return;            }	    gtv_rewind( raw );	    gtv_step( NULL, raw );	}	gtv_set_frame( raw, info->current_frame );    }}static void gtv_to_end( GtkWidget* item, gpointer raw ){    SMPEG* mpeg = NULL;    SMPEG_Info* info = NULL;    assert( raw );    mpeg = (SMPEG*) gtk_object_get_data( GTK_OBJECT( raw ), "mpeg" );    info = (SMPEG_Info*) gtk_object_get_data( GTK_OBJECT( raw ), "info" );    if( mpeg && info->has_video ) {	GtkWidget* twotimes = NULL;	gboolean active = FALSE;	SDL_Surface* sdl_screen = NULL;	SMPEG_stop( mpeg );	twotimes = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( raw ), "twotimes" ) );	active = gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( twotimes ) );	sdl_screen = (SDL_Surface*) gtk_object_get_data( GTK_OBJECT( raw ), "sdl_screen" );	if( active ) {	    SMPEG_renderFinal( mpeg, sdl_screen, 0, 0 );	} else {	    SMPEG_renderFinal( mpeg, sdl_screen,			       ( sdl_screen->w - info->width ) / 2,			       ( sdl_screen->h - info->height ) / 2 );	}	SMPEG_getinfo( mpeg, info );	gtv_set_frame( raw, info->current_frame );    }}static void gtv_seek( GtkAdjustment* adjust, gpointer raw ){    SMPEG* mpeg = NULL;    SMPEG_Info* info = NULL;    assert( raw );    if(gtv_trackbar_dragging) return;    mpeg = (SMPEG*) gtk_object_get_data( GTK_OBJECT( raw ), "mpeg" );    info = (SMPEG_Info*) gtk_object_get_data( GTK_OBJECT( raw ), "info" );    if( mpeg && info && info->total_size ) {      /* In case file is growing while we're playing */      SMPEG_getinfo( mpeg, info );            SMPEG_seek(mpeg, (int)((info->total_size*adjust->value)/100));    }    SMPEG_getinfo( mpeg, info );    gtv_set_frame( raw, info->current_frame );}static void gtv_trackbar_drag_on(GtkWidget *widget, gpointer raw){    gtv_trackbar_dragging = 1;}static void gtv_trackbar_drag_off(GtkWidget *widget, gpointer raw){    gtv_trackbar_dragging = 0;}static void gtv_set_frame( gpointer raw, int value ){    GtkWidget* frame = NULL;    gchar buffer[32];    assert( raw );    assert( value >= 0 );    frame = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( raw ), "frame" ) );    g_snprintf( buffer, 32, "%d", value );    gtk_label_set_text( GTK_LABEL( frame ), buffer );}static void gtv_set_fps( gpointer raw, float value ){    GtkWidget* fps = NULL;    gchar buffer[32];    assert( raw );    assert( value >= 0.0 );    fps = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( raw ), "fps" ) );    g_snprintf( buffer, 32, "%2.2f", value );    gtk_label_set_text( GTK_LABEL( fps ), buffer );}static void gtv_set_trackbar( gpointer raw, int value ){    SMPEG* mpeg = NULL;    SMPEG_Info* info = NULL;    GtkWidget* scale = NULL;    GtkAdjustment* seek = NULL;    assert( raw );    assert( value >= 0 );    if(gtv_trackbar_dragging) return;    mpeg = (SMPEG*) gtk_object_get_data( GTK_OBJECT( raw ), "mpeg" );    info = (SMPEG_Info*) gtk_object_get_data( GTK_OBJECT( raw ), "info" );    if( mpeg && info && info->total_size ) {            scale = GTK_WIDGET( gtk_object_get_data( GTK_OBJECT( raw ), "scale" ) );      seek  = gtk_range_get_adjustment ( GTK_RANGE( scale ) );      seek->value = 100. * value / info->total_size;      gtk_range_set_adjustment ( GTK_RANGE( scale ), seek );      gtk_range_slider_update ( GTK_RANGE( scale ) );      gtk_range_clear_background ( GTK_RANGE( scale ) );      gtk_range_draw_background ( GTK_RANGE( scale ) );    }}/* Drag-N-Drop support, contributed by */static void gtv_drag_data_received(GtkWidget * widget,                                   GdkDragContext * context,                                   gint x,                                   gint y,                                   GtkSelectionData * selection_data,                                   guint info,                                   guint time){    gchar *temp, *string;    string = (gchar *)selection_data->data;

⌨️ 快捷键说明

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