X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fpda%2Fpda_callbacks.c;h=0fb187ab786bdee95c17808c5fdbbdff6e07dd86;hb=72fa5a9d8e8f5a1bbe0d83ffd1f30b3265a531c7;hp=ef8930bfd3c3ed0b190d342944f01a2ff26e2825;hpb=9ac4974df9c83c5feaffdcb58b0b5fe26118fce7;p=vlc diff --git a/modules/gui/pda/pda_callbacks.c b/modules/gui/pda/pda_callbacks.c index ef8930bfd3..0fb187ab78 100644 --- a/modules/gui/pda/pda_callbacks.c +++ b/modules/gui/pda/pda_callbacks.c @@ -1,10 +1,10 @@ /***************************************************************************** * pda_callbacks.c : Callbacks for the pda Linux Gtk+ plugin. ***************************************************************************** - * Copyright (C) 2000, 2001 VideoLAN - * $Id: pda_callbacks.c,v 1.21 2003/11/30 23:19:13 jpsaman Exp $ + * Copyright (C) 2000, 2001 the VideoLAN team + * $Id$ * - * Authors: Jean-Paul Saman + * Authors: Jean-Paul Saman * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,30 +18,30 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ /***************************************************************************** * Preamble *****************************************************************************/ #include /* off_t */ -#include -#include -#include -#include -#include -#include +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include +#include + #include #include #include #include #include -#ifdef HAVE_CONFIG_H -# include -#endif - #include #include "pda_callbacks.h" @@ -56,7 +56,7 @@ static char *get_file_perms(struct stat st); /***************************************************************************** * Useful function to retrieve p_intf ****************************************************************************/ -void * E_(__GtkGetIntf)( GtkWidget * widget ) +void * __GtkGetIntf( GtkWidget * widget ) { void *p_data; @@ -87,14 +87,14 @@ void * E_(__GtkGetIntf)( GtkWidget * widget ) return p_data; } -void PlaylistAddItem(GtkWidget *widget, gchar *name, char **ppsz_options, int i_size) +static void PlaylistAddItem(GtkWidget *widget, gchar *name, char **ppsz_options, int i_size) { intf_thread_t *p_intf = GtkGetIntf( widget ); playlist_t *p_playlist; + int i_id , i_pos=0; GtkTreeView *p_tvplaylist = NULL; - p_playlist = (playlist_t *) - vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); + p_playlist = pl_Hold( p_intf ); if( p_playlist == NULL) { /* Bail out when VLC's playlist object is not found. */ @@ -109,7 +109,7 @@ void PlaylistAddItem(GtkWidget *widget, gchar *name, char **ppsz_options, int i_ GtkTreeIter p_play_iter; p_play_model = gtk_tree_view_get_model(p_tvplaylist); - + if (p_play_model) { int i; @@ -119,7 +119,7 @@ void PlaylistAddItem(GtkWidget *widget, gchar *name, char **ppsz_options, int i_ gtk_list_store_set (GTK_LIST_STORE(p_play_model), &p_play_iter, 0, name, /* Add path to it !!! */ 1, "no info", - 2, p_playlist->i_size, /* Hidden index. */ + 2, playlist_CurrentSize(p_playlist), /* Hidden index. */ -1 ); /* Add to VLC's playlist */ @@ -132,8 +132,12 @@ void PlaylistAddItem(GtkWidget *widget, gchar *name, char **ppsz_options, int i_ else #endif { - playlist_Add( p_playlist, (const char*)name, (const char**)ppsz_options, i_size, - PLAYLIST_APPEND, PLAYLIST_END ); + i_id = playlist_AddExt( p_playlist, (const char*)name, + (const char*)name, + PLAYLIST_APPEND, PLAYLIST_END, + (mtime_t) 0, + i_options, (const char **) ppsz_options, VLC_INPUT_OPTION_TRUSTED, + true, pl_Unlocked ); } /* Cleanup memory */ @@ -142,10 +146,11 @@ void PlaylistAddItem(GtkWidget *widget, gchar *name, char **ppsz_options, int i_ free(ppsz_options); } } - vlc_object_release( p_playlist ); + pl_Release( p_intf ); } -void PlaylistRebuildListStore( GtkListStore * p_list, playlist_t * p_playlist ) +void PlaylistRebuildListStore( intf_thread_t *p_intf, + GtkListStore * p_list, playlist_t * p_playlist ) { GtkTreeIter iter; int i_dummy; @@ -156,19 +161,23 @@ void PlaylistRebuildListStore( GtkListStore * p_list, playlist_t * p_playlist ) red.blue = 0; red.green = 0; #endif - vlc_mutex_lock( &p_playlist->object_lock ); - for( i_dummy = 0; i_dummy < p_playlist->i_size ; i_dummy++ ) + PL_LOCK; + for( i_dummy = 0; i_dummy < playlist_CurrentSize(p_playlist) ; i_dummy++ ) { - ppsz_text[0] = p_playlist->pp_items[i_dummy]->psz_name; - ppsz_text[1] = "no info"; - gtk_list_store_append (p_list, &iter); - gtk_list_store_set (p_list, &iter, - 0, ppsz_text[0], - 1, ppsz_text[1], - 2, i_dummy, /* Hidden index */ - -1); + playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_dummy ); + if( p_item ) + { + ppsz_text[0] = p_item->p_input->psz_name; + ppsz_text[1] = "no info"; + gtk_list_store_append (p_list, &iter); + gtk_list_store_set (p_list, &iter, + 0, ppsz_text[0], + 1, ppsz_text[1], + 2, i_dummy, /* Hidden index */ + -1); + } } - vlc_mutex_unlock( &p_playlist->object_lock ); + PL_UNLOCK; } /***************************************************************** @@ -221,11 +230,11 @@ void ReadDirectory(intf_thread_t *p_intf, GtkListStore *p_list, char *psz_dir ) 4, ppsz_text[3], -1); - if (ppsz_text[1]) free(ppsz_text[1]); + free(ppsz_text[1]); } /* kludge */ for (i=0; id_name[0] != '.') && (lstat(pp_namelist[i]->d_name, &st)==0)) { @@ -250,7 +259,7 @@ void ReadDirectory(intf_thread_t *p_intf, GtkListStore *p_list, char *psz_dir ) 4, ppsz_text[3], -1); - if (ppsz_text[1]) free(ppsz_text[1]); + free(ppsz_text[1]); } } free(pp_namelist); @@ -261,7 +270,7 @@ static char *get_file_perms(const struct stat st) { char *psz_perm; - psz_perm = (char *) malloc(sizeof(char)*10); + psz_perm = (char *) malloc(10); strncpy( psz_perm, "----------", sizeof("----------")); /* determine permission modes */ @@ -317,7 +326,7 @@ static char *get_file_perms(const struct stat st) psz_perm[8]= 'w'; if (st.st_mode & S_IXOTH) { - // 'sticky' bit + /* 'sticky' bit */ if (st.st_mode &S_ISVTX) psz_perm[9] = 't'; else @@ -338,32 +347,30 @@ gboolean onPDADeleteEvent(GtkWidget *widget, GdkEvent *event, gpointer user_data intf_thread_t *p_intf = GtkGetIntf( widget ); vlc_mutex_lock( &p_intf->change_lock ); - p_intf->p_vlc->b_die = VLC_TRUE; + libvlc_Quit( p_intf->p_libvlc ); vlc_mutex_unlock( &p_intf->change_lock ); - msg_Dbg( p_intf, "about to exit vlc ... signalled" ); + msg_Dbg( p_intf, "about to exit vlc ... signaled" ); return TRUE; } - void onRewind(GtkButton *button, gpointer user_data) { intf_thread_t *p_intf = GtkGetIntf( button ); if (p_intf->p_sys->p_input != NULL) { - input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_SLOWER ); + var_SetVoid( p_intf->p_sys->p_input, "rate-slower" ); } } - void onPause(GtkButton *button, gpointer user_data) { intf_thread_t *p_intf = GtkGetIntf( button ); if (p_intf->p_sys->p_input != NULL) { - input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_PAUSE ); + var_SetInteger( p_intf->p_sys->p_input, "state", PAUSE_S ); } } @@ -371,45 +378,44 @@ void onPause(GtkButton *button, gpointer user_data) void onPlay(GtkButton *button, gpointer user_data) { intf_thread_t *p_intf = GtkGetIntf( GTK_WIDGET( button ) ); - playlist_t *p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); + playlist_t *p_playlist = pl_Hold( p_intf ); if (p_playlist) { - vlc_mutex_lock( &p_playlist->object_lock ); - if (p_playlist->i_size) + int s; + + PL_LOCK; + s = playlist_CurrentSize(p_playlist); + PL_UNLOCK; + /* FIXME: This is racy... */ + if (s) { - vlc_mutex_unlock( &p_playlist->object_lock ); playlist_Play( p_playlist ); + gdk_window_lower( p_intf->p_sys->p_window->window ); } - else - { - vlc_mutex_unlock( &p_playlist->object_lock ); - } - vlc_object_release( p_playlist ); + pl_Release( p_intf ); } } - void onStop(GtkButton *button, gpointer user_data) { intf_thread_t *p_intf = GtkGetIntf( GTK_WIDGET( button ) ); - playlist_t *p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); + playlist_t *p_playlist = pl_Hold( p_intf ); if (p_playlist) { playlist_Stop( p_playlist ); - vlc_object_release( p_playlist ); + pl_Release( p_intf ); + gdk_window_raise( p_intf->p_sys->p_window->window ); } } - void onForward(GtkButton *button, gpointer user_data) { intf_thread_t *p_intf = GtkGetIntf( button ); if (p_intf->p_sys->p_input != NULL) { - input_SetStatus( p_intf->p_sys->p_input, INPUT_STATUS_FASTER ); + var_SetVoid( p_intf->p_sys->p_input, "rate-faster" ); } } @@ -418,7 +424,7 @@ void onAbout(GtkButton *button, gpointer user_data) { intf_thread_t *p_intf = GtkGetIntf( GTK_WIDGET(button) ); - // Toggle notebook + /* Toggle notebook */ if (p_intf->p_sys->p_notebook) { gtk_widget_show( GTK_WIDGET(p_intf->p_sys->p_notebook) ); @@ -426,11 +432,11 @@ void onAbout(GtkButton *button, gpointer user_data) } } - gboolean SliderRelease(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { intf_thread_t *p_intf = GtkGetIntf( widget ); + msg_Dbg( p_intf, "SliderButton Release" ); vlc_mutex_lock( &p_intf->change_lock ); p_intf->p_sys->b_slider_free = 1; vlc_mutex_unlock( &p_intf->change_lock ); @@ -438,19 +444,26 @@ gboolean SliderRelease(GtkWidget *widget, GdkEventButton *event, gpointer user_d return TRUE; } - gboolean SliderPress(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { intf_thread_t *p_intf = GtkGetIntf( widget ); + msg_Dbg( p_intf, "SliderButton Press" ); vlc_mutex_lock( &p_intf->change_lock ); p_intf->p_sys->b_slider_free = 0; vlc_mutex_unlock( &p_intf->change_lock ); - return TRUE; + return FALSE; } -void addSelectedToPlaylist(GtkTreeModel *model, GtkTreePath *path, +void SliderMove(GtkRange *range, GtkScrollType scroll, gpointer user_data) +{ + intf_thread_t *p_intf = GtkGetIntf( range ); + msg_Dbg( p_intf, "SliderButton Move" ); +} + + +static void addSelectedToPlaylist(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer *userdata) { gchar *psz_filename; @@ -471,13 +484,13 @@ void onFileListRow(GtkTreeView *treeview, GtkTreePath *path, struct stat st; GtkTreeModel *p_model; GtkTreeIter iter; - gchar *psz_filename; + char *psz_filename; /* This might be a directory selection */ p_model = gtk_tree_view_get_model(treeview); if (!p_model) { - msg_Err(p_intf, "PDA: Filelist model contains a NULL pointer\n" ); + msg_Err(p_intf, "PDA: Filelist model contains a NULL pointer" ); return; } if (!gtk_tree_model_get_iter(p_model, &iter, path)) @@ -509,16 +522,8 @@ void onFileListRow(GtkTreeView *treeview, GtkTreePath *path, g_object_unref(p_store); } } - else - { - gtk_tree_selection_selected_foreach(p_selection, (GtkTreeSelectionForeachFunc) &addSelectedToPlaylist, (gpointer) treeview); - } } } - else - { - gtk_tree_selection_selected_foreach(p_selection, (GtkTreeSelectionForeachFunc) &addSelectedToPlaylist, (gpointer) treeview); - } } void onAddFileToPlaylist(GtkButton *button, gpointer user_data) @@ -530,7 +535,7 @@ void onAddFileToPlaylist(GtkButton *button, gpointer user_data) { GtkTreeSelection *p_selection = gtk_tree_view_get_selection(p_treeview); - gtk_tree_selection_selected_foreach(p_selection, (GtkTreeSelectionForeachFunc) &addSelectedToPlaylist, (gpointer) p_treeview); + gtk_tree_selection_selected_foreach(p_selection, (GtkTreeSelectionForeachFunc) &addSelectedToPlaylist, (gpointer) p_treeview); } } @@ -581,17 +586,27 @@ void NetworkBuildMRL(GtkEditable *editable, gpointer user_data) void onAddNetworkPlaylist(GtkButton *button, gpointer user_data) { - GtkEntry *p_mrl = NULL; - const gchar *psz_mrl_name; + intf_thread_t *p_intf = GtkGetIntf( button ); + + GtkEntry *p_mrl = NULL; + GtkCheckButton *p_network_transcode = NULL; + gboolean b_network_transcode; + const gchar *psz_mrl_name; p_mrl = (GtkEntry*) lookup_widget(GTK_WIDGET(button),"entryMRL" ); - if (p_mrl) + psz_mrl_name = gtk_entry_get_text(p_mrl); + + p_network_transcode = (GtkCheckButton*) lookup_widget(GTK_WIDGET(button), "checkNetworkTranscode" ); + b_network_transcode = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(p_network_transcode)); + if (b_network_transcode) { - psz_mrl_name = gtk_entry_get_text(p_mrl); - if (psz_mrl_name != NULL) - { - PlaylistAddItem(GTK_WIDGET(button), (gchar *)psz_mrl_name, 0, 0); - } + msg_Dbg( p_intf, "Network transcode option selected." ); + onAddTranscodeToPlaylist(button, (gchar *)psz_mrl_name); + } + else + { + msg_Dbg( p_intf, "Network receiving selected." ); + PlaylistAddItem(GTK_WIDGET(button), (gchar *)psz_mrl_name, 0, 0); } } @@ -629,6 +644,9 @@ void onAddCameraToPlaylist(GtkButton *button, gpointer user_data) gint i_v4l_decimation; /* end MJPEG only */ + GtkCheckButton *p_check_v4l_transcode = NULL; + gboolean b_v4l_transcode; + char **ppsz_options = NULL; /* list of options */ int i_options=0; char v4l_mrl[6]; @@ -637,16 +655,12 @@ void onAddCameraToPlaylist(GtkButton *button, gpointer user_data) ppsz_options = (char **) malloc(11 *sizeof(char*)); if (ppsz_options == NULL) - { - msg_Err(p_intf, "No memory to allocate for v4l options."); return; - } for (i=0; i<11; i++) { - ppsz_options[i] = (char *) malloc(VLC_MAX_MRL * sizeof(char)); + ppsz_options[i] = (char *) malloc(VLC_MAX_MRL); if (ppsz_options[i] == NULL) { - msg_Err(p_intf, "No memory to allocate for v4l options string %i.", i); for (i-=1; i>=0; i--) free(ppsz_options[i]); free(ppsz_options); @@ -655,7 +669,7 @@ void onAddCameraToPlaylist(GtkButton *button, gpointer user_data) } i_pos = snprintf( &v4l_mrl[0], 6, "v4l"); - v4l_mrl[5]='\0'; + v4l_mrl[5]='\0'; entryV4LChannel = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryV4LChannel" ); entryV4LFrequency = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryV4LFrequency" ); @@ -716,7 +730,18 @@ void onAddCameraToPlaylist(GtkButton *button, gpointer user_data) } /* end MJPEG only */ - PlaylistAddItem(GTK_WIDGET(button), (gchar*) &v4l_mrl, ppsz_options, i_options); + p_check_v4l_transcode = (GtkCheckButton*) lookup_widget(GTK_WIDGET(button), "checkV4LTranscode" ); + b_v4l_transcode = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(p_check_v4l_transcode)); + if (b_v4l_transcode) + { + msg_Dbg( p_intf, "Camera transcode option selected." ); + onAddTranscodeToPlaylist(button, (gchar *)v4l_mrl); + } + else + { + msg_Dbg( p_intf, "Camera reception option selected." ); + PlaylistAddItem(GTK_WIDGET(button), (gchar*) &v4l_mrl, ppsz_options, i_options); + } } @@ -740,14 +765,47 @@ gboolean onPlaylistRowSelected(GtkTreeView *treeview, gboolean start_editing, gp void onPlaylistRow(GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) { + intf_thread_t *p_intf = GtkGetIntf( GTK_WIDGET(treeview) ); + GtkTreeSelection *p_selection = gtk_tree_view_get_selection(treeview); + playlist_t * p_playlist = pl_Hold( p_intf ); + + if( p_playlist == NULL ) + { + return; // FALSE; + } + + if (gtk_tree_selection_count_selected_rows(p_selection) == 1) + { + GtkTreeModel *p_model; + GtkTreeIter iter; + int i_row; + int i_skip; + + /* This might be a directory selection */ + p_model = gtk_tree_view_get_model(treeview); + if (!p_model) + { + msg_Err(p_intf, "PDA: Playlist model contains a NULL pointer" ); + return; + } + if (!gtk_tree_model_get_iter(p_model, &iter, path)) + { + msg_Err( p_intf, "PDA: Playlist could not get iter from model" ); + return; + } + + gtk_tree_model_get(p_model, &iter, 2, &i_row, -1); + i_skip = i_row - p_playlist->i_current_index; + playlist_Skip( p_playlist, i_skip ); + } + pl_Release( p_intf ); } void onUpdatePlaylist(GtkButton *button, gpointer user_data) { intf_thread_t * p_intf = GtkGetIntf( button ); - playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); + playlist_t * p_playlist = pl_Hold( p_intf ); GtkTreeView *p_tvplaylist = NULL; if( p_playlist == NULL ) @@ -767,19 +825,23 @@ void onUpdatePlaylist(GtkButton *button, gpointer user_data) G_TYPE_UINT); /* Hidden field */ if (p_model) { - PlaylistRebuildListStore(p_model, p_playlist); + PlaylistRebuildListStore(p_intf, p_model, p_playlist); gtk_tree_view_set_model(GTK_TREE_VIEW(p_tvplaylist), GTK_TREE_MODEL(p_model)); g_object_unref(p_model); } } - vlc_object_release( p_playlist ); + pl_Release( p_intf ); +} + +static void deleteItemFromPlaylist(gpointer data, gpointer user_data) +{ + gtk_tree_path_free((GtkTreePath*) data); // removing an item. } void onDeletePlaylist(GtkButton *button, gpointer user_data) { intf_thread_t *p_intf = GtkGetIntf( button ); - playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); + playlist_t * p_playlist = pl_Hold( p_intf ); GtkTreeView *p_tvplaylist; /* Delete an arbitrary item from the playlist */ @@ -804,7 +866,7 @@ void onDeletePlaylist(GtkButton *button, gpointer user_data) */ p_rows = g_list_reverse( p_rows ); } - + for (p_node=p_rows; p_node!=NULL; p_node = p_node->next) { GtkTreeIter iter; @@ -818,11 +880,14 @@ void onDeletePlaylist(GtkButton *button, gpointer user_data) gint item; gtk_tree_model_get(p_model, &iter, 2, &item, -1); - playlist_Delete(p_playlist, item); + msg_Err( p_playlist, "PDA delete broken"); } } } +#if 0 g_list_foreach (p_rows, (GFunc*)gtk_tree_path_free, NULL); +#endif /* Testing the next line */ + g_list_foreach (p_rows, deleteItemFromPlaylist, NULL); g_list_free (p_rows); } @@ -833,20 +898,19 @@ void onDeletePlaylist(GtkButton *button, gpointer user_data) G_TYPE_UINT); /* Hidden field */ if (p_store) { - PlaylistRebuildListStore(p_store, p_playlist); + PlaylistRebuildListStore(p_intf, p_store, p_playlist); gtk_tree_view_set_model(GTK_TREE_VIEW(p_tvplaylist), GTK_TREE_MODEL(p_store)); g_object_unref(p_store); } } - vlc_object_release( p_playlist ); + pl_Release( p_intf ); } void onClearPlaylist(GtkButton *button, gpointer user_data) { intf_thread_t *p_intf = GtkGetIntf( button ); - playlist_t * p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, - FIND_ANYWHERE ); + playlist_t * p_playlist = pl_Hold( p_intf ); GtkTreeView *p_tvplaylist; int item; @@ -855,11 +919,11 @@ void onClearPlaylist(GtkButton *button, gpointer user_data) return; } - for(item = p_playlist->i_size - 1; item >= 0 ;item-- ) + for(item = playlist_CurrentSize(p_playlist) - 1; item >= 0 ;item-- ) { - playlist_Delete( p_playlist, item); + msg_Err( p_playlist, "fix pda delete" ); } - vlc_object_release( p_playlist ); + pl_Release( p_intf ); // Remove all entries from the Playlist widget. p_tvplaylist = (GtkTreeView*) lookup_widget( GTK_WIDGET(button), "tvPlaylist"); @@ -953,16 +1017,12 @@ void onAddTranscodeToPlaylist(GtkButton *button, gpointer user_data) ppsz_options = (char **) malloc(3 *sizeof(char*)); if (ppsz_options == NULL) - { - msg_Err(p_intf, "No memory to allocate for v4l options."); return; - } for (i=0; i<3; i++) { - ppsz_options[i] = (char *) malloc(VLC_MAX_MRL * sizeof(char)); + ppsz_options[i] = (char *) malloc(VLC_MAX_MRL); if (ppsz_options[i] == NULL) { - msg_Err(p_intf, "No memory to allocate for v4l options string %i.", i); for (i-=1; i>=0; i--) free(ppsz_options[i]); free(ppsz_options); @@ -970,6 +1030,11 @@ void onAddTranscodeToPlaylist(GtkButton *button, gpointer user_data) } } + /* Update the playlist */ + playlist_t *p_playlist = pl_Hold( p_intf ); + if( p_playlist == NULL ) return; + + /* Get all the options. */ i_pos = snprintf( &mrl[0], VLC_MAX_MRL, "sout"); mrl[6] = '\0'; /* option 1 */ @@ -980,12 +1045,12 @@ void onAddTranscodeToPlaylist(GtkButton *button, gpointer user_data) p_entryVideoBitrate = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryVideoBitrate" ); p_entryVideoBitrateTolerance = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryVideoBitrateTolerance" ); p_entryVideoKeyFrameInterval = (GtkSpinButton*) lookup_widget( GTK_WIDGET(button), "entryVideoKeyFrameInterval" ); - + p_video_codec = gtk_entry_get_text(GTK_ENTRY(p_entryVideoCodec)); i_video_bitrate = gtk_spin_button_get_value_as_int(p_entryVideoBitrate); i_video_bitrate_tolerance = gtk_spin_button_get_value_as_int(p_entryVideoBitrateTolerance); i_video_keyframe_interval = gtk_spin_button_get_value_as_int(p_entryVideoKeyFrameInterval); - + i_pos += snprintf( &ppsz_options[i_options][i_pos], VLC_MAX_MRL - i_pos, "vcodec=%s,", (char*)p_video_codec ); if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; i_pos += snprintf( &ppsz_options[i_options][i_pos], VLC_MAX_MRL - i_pos, "vb=%d,", (int)i_video_bitrate ); @@ -1017,7 +1082,7 @@ void onAddTranscodeToPlaylist(GtkButton *button, gpointer user_data) /* option 2 */ i_pos = 0; - i_pos = snprintf( &ppsz_options[i_options++][i_pos], VLC_MAX_MRL - i_pos, "dst=" ); + i_pos = snprintf( &ppsz_options[i_options++][i_pos], VLC_MAX_MRL - i_pos, "#" ); if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; p_entryStdAccess = (GtkEntry*) lookup_widget( GTK_WIDGET(button), "entryStdAccess" ); @@ -1033,46 +1098,42 @@ void onAddTranscodeToPlaylist(GtkButton *button, gpointer user_data) b_sap_announce = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(p_checkSAP)); b_slp_announce = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(p_checkSLP)); - if ( strncasecmp( (const char*)p_std_access, "display", 7 ) == 0) - { - i_pos += snprintf( &ppsz_options[i_options][i_pos], VLC_MAX_MRL - i_pos, "%s,", (char*)p_std_access); - if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; - } - else - { - i_pos += snprintf( &ppsz_options[i_options][i_pos], VLC_MAX_MRL - i_pos, "std{access=%s,", (char*)p_std_access); - if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; - i_pos += snprintf( &ppsz_options[i_options][i_pos], VLC_MAX_MRL - i_pos, "mux=%s,", (char*)p_std_muxer); - if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; - i_pos += snprintf( &ppsz_options[i_options][i_pos], VLC_MAX_MRL - i_pos, "url=%s", (char*)p_std_url); - if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; + i_pos += snprintf( &ppsz_options[i_options][i_pos], VLC_MAX_MRL - i_pos, "std{access=%s,", (char*)p_std_access); + if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; + i_pos += snprintf( &ppsz_options[i_options][i_pos], VLC_MAX_MRL - i_pos, "mux=%s,", (char*)p_std_muxer); + if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; + i_pos += snprintf( &ppsz_options[i_options][i_pos], VLC_MAX_MRL - i_pos, "dst=%s", (char*)p_std_url); + if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; - if (strncasecmp( (const char*)p_std_access, "udp", 3)==0) + if (strncasecmp( (const char*)p_std_access, "udp", 3)==0) + { + if (b_sap_announce) { - if (b_sap_announce) - { - i_pos += snprintf( &ppsz_options[i_options][i_pos], VLC_MAX_MRL - i_pos, "sap=%s", (char*)p_std_announce); - if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; - } - if (b_slp_announce) - { - i_pos += snprintf( &ppsz_options[i_options][i_pos], VLC_MAX_MRL - i_pos, "slp=%s", (char*)p_std_announce); - if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; - } + i_pos += snprintf( &ppsz_options[i_options][i_pos], VLC_MAX_MRL - i_pos, "sap=%s", (char*)p_std_announce); + if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; + } + if (b_slp_announce) + { + i_pos += snprintf( &ppsz_options[i_options][i_pos], VLC_MAX_MRL - i_pos, "slp=%s", (char*)p_std_announce); + if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; } - i_pos += snprintf( &ppsz_options[i_options][i_pos], VLC_MAX_MRL - i_pos, "}"); - if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; - - i_std_ttl = gtk_spin_button_get_value_as_int(p_entryStdTTL); - - i_pos = snprintf( &ppsz_options[i_options++][0], VLC_MAX_MRL, "ttl=%d", (int)i_std_ttl); - if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; } - PlaylistAddItem(GTK_WIDGET(button), (gchar*) &mrl, ppsz_options, i_options); -} + i_std_ttl = gtk_spin_button_get_value_as_int(p_entryStdTTL); + i_pos += snprintf( &ppsz_options[i_options++][i_pos], VLC_MAX_MRL - i_pos, "ttl=%d}", (int)i_std_ttl); + if (i_pos>=VLC_MAX_MRL) ppsz_options[i_options][VLC_MAX_MRL-1] = '\0'; + if (user_data != NULL) + { + msg_Dbg(p_intf, "Adding transcoding options to playlist item." ); + } + else + { + msg_Dbg(p_intf, "Adding --sout to playlist." ); + PlaylistAddItem(GTK_WIDGET(button), (gchar*) &mrl, ppsz_options, i_options); + } +} void onEntryStdAccessChanged(GtkEditable *editable, gpointer user_data) { @@ -1081,7 +1142,7 @@ void onEntryStdAccessChanged(GtkEditable *editable, gpointer user_data) GtkCheckButton *p_checkSAP = NULL; GtkCheckButton *p_checkSLP = NULL; GtkEntry *p_entryStdAccess = NULL; - const gchar *p_std_access; + const gchar *p_std_access = NULL; gboolean b_announce = FALSE; p_entryStdAccess = (GtkEntry*) lookup_widget( GTK_WIDGET(editable), "entryStdAccess" );