Lines Matching refs:app

196 static void clear_streams (PlaybackApp * app);
197 static void find_interface_elements (PlaybackApp * app);
199 PlaybackApp * app);
201 PlaybackApp * app);
203 static void video_sink_activate_cb (GtkEntry * entry, PlaybackApp * app);
204 static void text_sink_activate_cb (GtkEntry * entry, PlaybackApp * app);
205 static void audio_sink_activate_cb (GtkEntry * entry, PlaybackApp * app);
206 static void buffer_size_activate_cb (GtkEntry * entry, PlaybackApp * app);
207 static void buffer_duration_activate_cb (GtkEntry * entry, PlaybackApp * app);
209 PlaybackApp * app);
210 static void connection_speed_activate_cb (GtkEntry * entry, PlaybackApp * app);
211 static void av_offset_activate_cb (GtkEntry * entry, PlaybackApp * app);
212 static void text_offset_activate_cb (GtkEntry * entry, PlaybackApp * app);
213 static void subtitle_encoding_activate_cb (GtkEntry * entry, PlaybackApp * app);
267 make_playbin_pipeline (PlaybackApp * app, const gchar * location) in make_playbin_pipeline() argument
271 app->pipeline = pipeline = gst_element_factory_make ("playbin", "playbin"); in make_playbin_pipeline()
275 app->current_sub_path ? app->current_sub_path->data : NULL); in make_playbin_pipeline()
278 app); in make_playbin_pipeline()
279 g_signal_connect (pipeline, "notify::mute", G_CALLBACK (mute_notify_cb), app); in make_playbin_pipeline()
281 app->navigation_element = GST_ELEMENT (gst_object_ref (pipeline)); in make_playbin_pipeline()
282 app->colorbalance_element = GST_ELEMENT (gst_object_ref (pipeline)); in make_playbin_pipeline()
287 make_parselaunch_pipeline (PlaybackApp * app, const gchar * description) in make_parselaunch_pipeline() argument
289 app->pipeline = gst_parse_launch (description, NULL); in make_parselaunch_pipeline()
296 void (*func) (PlaybackApp * app, const gchar * location);
311 format_value (GtkScale * scale, gdouble value, PlaybackApp * app) in format_value() argument
316 real = value * app->duration / N_GRAD; in format_value()
362 query_positions (PlaybackApp * app) in query_positions() argument
366 g_print ("positions %8.8s: ", GST_ELEMENT_NAME (app->pipeline)); in query_positions()
373 if (gst_element_query_position (app->pipeline, format, &position) && in query_positions()
374 gst_element_query_duration (app->pipeline, format, &total)) { in query_positions()
382 g_print (" %s\n", GST_ELEMENT_NAME (app->pipeline)); in query_positions()
386 PlaybackApp * app);
388 PlaybackApp * app);
389 static void seek_cb (GtkRange * range, PlaybackApp * app);
392 set_scale (PlaybackApp * app, gdouble value) in set_scale() argument
394 g_signal_handlers_block_by_func (app->seek_scale, start_seek, app); in set_scale()
395 g_signal_handlers_block_by_func (app->seek_scale, stop_seek, app); in set_scale()
396 g_signal_handlers_block_by_func (app->seek_scale, seek_cb, app); in set_scale()
397 gtk_range_set_value (GTK_RANGE (app->seek_scale), value); in set_scale()
398 g_signal_handlers_unblock_by_func (app->seek_scale, start_seek, app); in set_scale()
399 g_signal_handlers_unblock_by_func (app->seek_scale, stop_seek, app); in set_scale()
400 g_signal_handlers_unblock_by_func (app->seek_scale, seek_cb, app); in set_scale()
401 gtk_widget_queue_draw (app->seek_scale); in set_scale()
405 update_fill (PlaybackApp * app) in update_fill() argument
411 if (gst_element_query (app->pipeline, query)) { in update_fill()
439 gtk_range_set_fill_level (GTK_RANGE (app->seek_scale), fill); in update_fill()
447 update_seek_range (PlaybackApp * app) in update_seek_range() argument
455 if (gst_element_query (app->pipeline, query)) { in update_seek_range()
465 gtk_label_set_text (GTK_LABEL (app->seek_start_label), str); in update_seek_range()
469 gtk_label_set_text (GTK_LABEL (app->seek_stop_label), str); in update_seek_range()
478 update_scale (PlaybackApp * app) in update_scale() argument
487 gst_element_query_position (app->pipeline, format, &app->position); in update_scale()
488 gst_element_query_duration (app->pipeline, format, &app->duration); in update_scale()
490 if (app->stats) in update_scale()
491 query_positions (app); in update_scale()
493 if (app->position >= app->duration) in update_scale()
494 app->duration = app->position; in update_scale()
496 if (app->duration > 0) { in update_scale()
497 set_scale (app, app->position * N_GRAD / app->duration); in update_scale()
500 if (app->seek_format) { in update_scale()
501 format = app->seek_format->value; in update_scale()
503 gst_element_query_position (app->pipeline, format, &seek_pos); in update_scale()
504 gst_element_query_duration (app->pipeline, format, &seek_dur); in update_scale()
507 gtk_label_set_text (GTK_LABEL (app->seek_position_label), str); in update_scale()
511 gtk_label_set_text (GTK_LABEL (app->seek_duration_label), str); in update_scale()
518 static void set_update_scale (PlaybackApp * app, gboolean active);
519 static void set_update_fill (PlaybackApp * app, gboolean active);
522 end_scrub (PlaybackApp * app) in end_scrub() argument
525 gst_element_set_state (app->pipeline, GST_STATE_PAUSED); in end_scrub()
526 app->seek_timeout_id = 0; in end_scrub()
532 send_event (PlaybackApp * app, GstEvent * event) in send_event() argument
536 GST_DEBUG ("send event on element %s", GST_ELEMENT_NAME (app->pipeline)); in send_event()
537 res = gst_element_send_event (app->pipeline, event); in send_event()
543 do_seek (PlaybackApp * app, GstFormat format, gint64 position) in do_seek() argument
550 if (app->flush_seek) in do_seek()
552 if (app->accurate_seek) in do_seek()
554 if (app->keyframe_seek) in do_seek()
556 if (app->loop_seek) in do_seek()
558 if (app->skip_seek) in do_seek()
560 if (app->skip_seek_key_only) in do_seek()
562 if (app->skip_seek_no_audio) in do_seek()
564 if (app->snap_before) in do_seek()
566 if (app->snap_after) in do_seek()
569 if (app->rate >= 0) { in do_seek()
570 s_event = gst_event_new_seek (app->rate, in do_seek()
574 app->rate, GST_TIME_ARGS (position), GST_TIME_ARGS (app->duration)); in do_seek()
576 s_event = gst_event_new_seek (app->rate, in do_seek()
580 app->rate, GST_TIME_ARGS (0), GST_TIME_ARGS (position)); in do_seek()
583 res = send_event (app, s_event); in do_seek()
586 if (app->flush_seek) { in do_seek()
587 gst_element_get_state (GST_ELEMENT (app->pipeline), NULL, NULL, in do_seek()
590 set_update_scale (app, TRUE); in do_seek()
594 set_update_scale (app, TRUE); in do_seek()
599 seek_cb (GtkRange * range, PlaybackApp * app) in seek_cb() argument
604 gtk_range_get_value (GTK_RANGE (app->seek_scale)) * app->duration / in seek_cb()
608 gtk_range_get_value (GTK_RANGE (app->seek_scale)), real); in seek_cb()
611 do_seek (app, GST_FORMAT_TIME, real); in seek_cb()
613 if (app->play_scrub) { in seek_cb()
614 if (app->buffering) { in seek_cb()
618 gst_element_set_state (app->pipeline, GST_STATE_PLAYING); in seek_cb()
621 if (app->seek_timeout_id == 0) { in seek_cb()
622 app->seek_timeout_id = in seek_cb()
623 g_timeout_add (SCRUB_TIME, (GSourceFunc) end_scrub, app); in seek_cb()
629 advanced_seek_button_cb (GtkButton * button, PlaybackApp * app) in advanced_seek_button_cb() argument
636 fmt = app->seek_format->value; in advanced_seek_button_cb()
638 text = gtk_entry_get_text (GTK_ENTRY (app->seek_entry)); in advanced_seek_button_cb()
642 do_seek (app, fmt, pos); in advanced_seek_button_cb()
647 set_update_fill (PlaybackApp * app, gboolean active) in set_update_fill() argument
652 if (app->fill_id == 0) { in set_update_fill()
653 app->fill_id = in set_update_fill()
654 g_timeout_add (FILL_INTERVAL, (GSourceFunc) update_fill, app); in set_update_fill()
657 if (app->fill_id) { in set_update_fill()
658 g_source_remove (app->fill_id); in set_update_fill()
659 app->fill_id = 0; in set_update_fill()
665 set_update_scale (PlaybackApp * app, gboolean active) in set_update_scale() argument
670 if (app->update_id == 0) { in set_update_scale()
671 app->update_id = in set_update_scale()
672 g_timeout_add (UPDATE_INTERVAL, (GSourceFunc) update_scale, app); in set_update_scale()
674 if (app->slow_update_id == 0) { in set_update_scale()
675 app->slow_update_id = in set_update_scale()
677 app); in set_update_scale()
680 if (app->update_id) { in set_update_scale()
681 g_source_remove (app->update_id); in set_update_scale()
682 app->update_id = 0; in set_update_scale()
684 if (app->slow_update_id) { in set_update_scale()
685 g_source_remove (app->slow_update_id); in set_update_scale()
686 app->slow_update_id = 0; in set_update_scale()
692 start_seek (GtkRange * range, GdkEventButton * event, PlaybackApp * app) in start_seek() argument
697 set_update_scale (app, FALSE); in start_seek()
699 if (app->state == GST_STATE_PLAYING && app->flush_seek && app->scrub) { in start_seek()
701 gst_element_set_state (app->pipeline, GST_STATE_PAUSED); in start_seek()
704 if (app->changed_id == 0 && app->flush_seek && app->scrub) { in start_seek()
705 app->changed_id = in start_seek()
706 g_signal_connect (app->seek_scale, "value-changed", in start_seek()
707 G_CALLBACK (seek_cb), app); in start_seek()
714 stop_seek (GtkRange * range, GdkEventButton * event, PlaybackApp * app) in stop_seek() argument
716 if (app->changed_id) { in stop_seek()
717 g_signal_handler_disconnect (app->seek_scale, app->changed_id); in stop_seek()
718 app->changed_id = 0; in stop_seek()
721 if (!app->flush_seek || !app->scrub) { in stop_seek()
726 gtk_range_get_value (GTK_RANGE (app->seek_scale)) * app->duration / in stop_seek()
728 do_seek (app, GST_FORMAT_TIME, real); in stop_seek()
731 if (app->seek_timeout_id != 0) { in stop_seek()
732 g_source_remove (app->seek_timeout_id); in stop_seek()
733 app->seek_timeout_id = 0; in stop_seek()
736 if (app->state == GST_STATE_PAUSED) { in stop_seek()
738 gst_element_set_state (app->pipeline, GST_STATE_PAUSED); in stop_seek()
741 if (app->state == GST_STATE_PLAYING) { in stop_seek()
742 if (app->buffering) { in stop_seek()
746 gst_element_set_state (app->pipeline, GST_STATE_PLAYING); in stop_seek()
755 play_cb (GtkButton * button, PlaybackApp * app) in play_cb() argument
759 if (app->state != GST_STATE_PLAYING) { in play_cb()
761 gtk_statusbar_pop (GTK_STATUSBAR (app->statusbar), app->status_id); in play_cb()
763 if (app->pipeline_type == 0) { in play_cb()
764 video_sink_activate_cb (GTK_ENTRY (app->video_sink_entry), app); in play_cb()
765 audio_sink_activate_cb (GTK_ENTRY (app->audio_sink_entry), app); in play_cb()
766 text_sink_activate_cb (GTK_ENTRY (app->text_sink_entry), app); in play_cb()
767 buffer_size_activate_cb (GTK_ENTRY (app->buffer_size_entry), app); in play_cb()
768 buffer_duration_activate_cb (GTK_ENTRY (app->buffer_duration_entry), app); in play_cb()
769 ringbuffer_maxsize_activate_cb (GTK_ENTRY (app->ringbuffer_maxsize_entry), in play_cb()
770 app); in play_cb()
771 connection_speed_activate_cb (GTK_ENTRY (app->connection_speed_entry), in play_cb()
772 app); in play_cb()
773 av_offset_activate_cb (GTK_ENTRY (app->av_offset_entry), app); in play_cb()
774 text_offset_activate_cb (GTK_ENTRY (app->text_offset_entry), app); in play_cb()
775 subtitle_encoding_activate_cb (GTK_ENTRY (app->subtitle_encoding_entry), in play_cb()
776 app); in play_cb()
779 ret = gst_element_set_state (app->pipeline, GST_STATE_PLAYING); in play_cb()
784 app->is_live = TRUE; in play_cb()
789 app->state = GST_STATE_PLAYING; in play_cb()
790 gtk_statusbar_push (GTK_STATUSBAR (app->statusbar), app->status_id, in play_cb()
799 gtk_statusbar_push (GTK_STATUSBAR (app->statusbar), app->status_id, in play_cb()
805 pause_cb (GtkButton * button, PlaybackApp * app) in pause_cb() argument
807 g_mutex_lock (&app->state_mutex); in pause_cb()
808 if (app->state != GST_STATE_PAUSED) { in pause_cb()
811 gtk_statusbar_pop (GTK_STATUSBAR (app->statusbar), app->status_id); in pause_cb()
813 ret = gst_element_set_state (app->pipeline, GST_STATE_PAUSED); in pause_cb()
818 app->is_live = TRUE; in pause_cb()
824 app->state = GST_STATE_PAUSED; in pause_cb()
825 gtk_statusbar_push (GTK_STATUSBAR (app->statusbar), app->status_id, in pause_cb()
828 g_mutex_unlock (&app->state_mutex); in pause_cb()
834 g_mutex_unlock (&app->state_mutex); in pause_cb()
836 gtk_statusbar_push (GTK_STATUSBAR (app->statusbar), app->status_id, in pause_cb()
842 stop_cb (GtkButton * button, PlaybackApp * app) in stop_cb() argument
844 if (app->state != STOP_STATE) { in stop_cb()
849 gtk_statusbar_pop (GTK_STATUSBAR (app->statusbar), app->status_id); in stop_cb()
851 g_mutex_lock (&app->state_mutex); in stop_cb()
852 ret = gst_element_set_state (app->pipeline, STOP_STATE); in stop_cb()
856 app->state = STOP_STATE; in stop_cb()
857 gtk_statusbar_push (GTK_STATUSBAR (app->statusbar), app->status_id, in stop_cb()
859 gtk_widget_queue_draw (app->video_window); in stop_cb()
861 app->is_live = FALSE; in stop_cb()
862 app->buffering = FALSE; in stop_cb()
863 set_update_scale (app, FALSE); in stop_cb()
864 set_scale (app, 0.0); in stop_cb()
865 set_update_fill (app, FALSE); in stop_cb()
867 if (app->pipeline_type == 0) in stop_cb()
868 clear_streams (app); in stop_cb()
869 g_mutex_unlock (&app->state_mutex); in stop_cb()
871 gtk_widget_set_sensitive (GTK_WIDGET (app->seek_scale), TRUE); in stop_cb()
872 for (i = 0; i < G_N_ELEMENTS (app->navigation_buttons); i++) in stop_cb()
873 gtk_widget_set_sensitive (app->navigation_buttons[i].button, FALSE); in stop_cb()
879 g_mutex_unlock (&app->state_mutex); in stop_cb()
881 gtk_statusbar_push (GTK_STATUSBAR (app->statusbar), app->status_id, in stop_cb()
887 snap_before_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in snap_before_toggle_cb() argument
889 app->snap_before = gtk_toggle_button_get_active (button); in snap_before_toggle_cb()
893 snap_after_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in snap_after_toggle_cb() argument
895 app->snap_after = gtk_toggle_button_get_active (button); in snap_after_toggle_cb()
899 accurate_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in accurate_toggle_cb() argument
901 app->accurate_seek = gtk_toggle_button_get_active (button); in accurate_toggle_cb()
905 key_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in key_toggle_cb() argument
907 app->keyframe_seek = gtk_toggle_button_get_active (button); in key_toggle_cb()
911 loop_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in loop_toggle_cb() argument
913 app->loop_seek = gtk_toggle_button_get_active (button); in loop_toggle_cb()
914 if (app->state == GST_STATE_PLAYING) { in loop_toggle_cb()
918 gtk_range_get_value (GTK_RANGE (app->seek_scale)) * app->duration / in loop_toggle_cb()
920 do_seek (app, GST_FORMAT_TIME, real); in loop_toggle_cb()
925 flush_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in flush_toggle_cb() argument
927 app->flush_seek = gtk_toggle_button_get_active (button); in flush_toggle_cb()
931 scrub_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in scrub_toggle_cb() argument
933 app->scrub = gtk_toggle_button_get_active (button); in scrub_toggle_cb()
937 play_scrub_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in play_scrub_toggle_cb() argument
939 app->play_scrub = gtk_toggle_button_get_active (button); in play_scrub_toggle_cb()
943 skip_toggle_common (gboolean * v, GtkToggleButton * button, PlaybackApp * app) in skip_toggle_common() argument
946 if (app->state == GST_STATE_PLAYING) { in skip_toggle_common()
950 gtk_range_get_value (GTK_RANGE (app->seek_scale)) * app->duration / in skip_toggle_common()
952 do_seek (app, GST_FORMAT_TIME, real); in skip_toggle_common()
957 skip_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in skip_toggle_cb() argument
959 skip_toggle_common (&app->skip_seek, button, app); in skip_toggle_cb()
963 skip_key_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in skip_key_toggle_cb() argument
965 skip_toggle_common (&app->skip_seek_key_only, button, app); in skip_key_toggle_cb()
969 skip_audio_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in skip_audio_toggle_cb() argument
971 skip_toggle_common (&app->skip_seek_no_audio, button, app); in skip_audio_toggle_cb()
975 rate_spinbutton_changed_cb (GtkSpinButton * button, PlaybackApp * app) in rate_spinbutton_changed_cb() argument
981 app->rate = gtk_spin_button_get_value (button); in rate_spinbutton_changed_cb()
983 GST_DEBUG ("rate changed to %lf", app->rate); in rate_spinbutton_changed_cb()
986 if (app->flush_seek) in rate_spinbutton_changed_cb()
988 if (app->loop_seek) in rate_spinbutton_changed_cb()
990 if (app->accurate_seek) in rate_spinbutton_changed_cb()
992 if (app->keyframe_seek) in rate_spinbutton_changed_cb()
994 if (app->skip_seek) in rate_spinbutton_changed_cb()
996 if (app->skip_seek_key_only) in rate_spinbutton_changed_cb()
998 if (app->skip_seek_no_audio) in rate_spinbutton_changed_cb()
1001 if (app->rate >= 0.0) { in rate_spinbutton_changed_cb()
1002 s_event = gst_event_new_seek (app->rate, in rate_spinbutton_changed_cb()
1003 GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, app->position, in rate_spinbutton_changed_cb()
1006 s_event = gst_event_new_seek (app->rate, in rate_spinbutton_changed_cb()
1008 GST_SEEK_TYPE_SET, app->position); in rate_spinbutton_changed_cb()
1011 res = send_event (app, s_event); in rate_spinbutton_changed_cb()
1014 if (app->flush_seek) { in rate_spinbutton_changed_cb()
1015 gst_element_get_state (GST_ELEMENT (app->pipeline), NULL, NULL, in rate_spinbutton_changed_cb()
1038 vis_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in vis_toggle_cb() argument
1043 update_flag (app->pipeline, GST_PLAY_FLAG_VIS, state); in vis_toggle_cb()
1044 gtk_widget_set_sensitive (app->vis_combo, state); in vis_toggle_cb()
1048 audio_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in audio_toggle_cb() argument
1053 update_flag (app->pipeline, GST_PLAY_FLAG_AUDIO, state); in audio_toggle_cb()
1054 gtk_widget_set_sensitive (app->audio_combo, state); in audio_toggle_cb()
1058 video_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in video_toggle_cb() argument
1063 update_flag (app->pipeline, GST_PLAY_FLAG_VIDEO, state); in video_toggle_cb()
1064 gtk_widget_set_sensitive (app->video_combo, state); in video_toggle_cb()
1068 text_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in text_toggle_cb() argument
1073 update_flag (app->pipeline, GST_PLAY_FLAG_TEXT, state); in text_toggle_cb()
1074 gtk_widget_set_sensitive (app->text_combo, state); in text_toggle_cb()
1078 mute_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in mute_toggle_cb() argument
1083 g_object_set (app->pipeline, "mute", mute, NULL); in mute_toggle_cb()
1087 download_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in download_toggle_cb() argument
1092 update_flag (app->pipeline, GST_PLAY_FLAG_DOWNLOAD, state); in download_toggle_cb()
1096 buffering_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in buffering_toggle_cb() argument
1101 update_flag (app->pipeline, GST_PLAY_FLAG_BUFFERING, state); in buffering_toggle_cb()
1105 soft_volume_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in soft_volume_toggle_cb() argument
1110 update_flag (app->pipeline, GST_PLAY_FLAG_SOFT_VOLUME, state); in soft_volume_toggle_cb()
1114 native_audio_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in native_audio_toggle_cb() argument
1119 update_flag (app->pipeline, GST_PLAY_FLAG_NATIVE_AUDIO, state); in native_audio_toggle_cb()
1123 native_video_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in native_video_toggle_cb() argument
1128 update_flag (app->pipeline, GST_PLAY_FLAG_NATIVE_VIDEO, state); in native_video_toggle_cb()
1132 deinterlace_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in deinterlace_toggle_cb() argument
1137 update_flag (app->pipeline, GST_PLAY_FLAG_DEINTERLACE, state); in deinterlace_toggle_cb()
1141 soft_colorbalance_toggle_cb (GtkToggleButton * button, PlaybackApp * app) in soft_colorbalance_toggle_cb() argument
1146 update_flag (app->pipeline, GST_PLAY_FLAG_SOFT_COLORBALANCE, state); in soft_colorbalance_toggle_cb()
1150 clear_streams (PlaybackApp * app) in clear_streams() argument
1155 for (i = 0; i < app->n_video; i++) in clear_streams()
1156 gtk_combo_box_text_remove (GTK_COMBO_BOX_TEXT (app->video_combo), 0); in clear_streams()
1157 for (i = 0; i < app->n_audio; i++) in clear_streams()
1158 gtk_combo_box_text_remove (GTK_COMBO_BOX_TEXT (app->audio_combo), 0); in clear_streams()
1159 for (i = 0; i < app->n_text; i++) in clear_streams()
1160 gtk_combo_box_text_remove (GTK_COMBO_BOX_TEXT (app->text_combo), 0); in clear_streams()
1162 app->n_audio = app->n_video = app->n_text = 0; in clear_streams()
1163 gtk_widget_set_sensitive (app->video_combo, FALSE); in clear_streams()
1164 gtk_widget_set_sensitive (app->audio_combo, FALSE); in clear_streams()
1165 gtk_widget_set_sensitive (app->text_combo, FALSE); in clear_streams()
1167 app->need_streams = TRUE; in clear_streams()
1171 update_streams (PlaybackApp * app) in update_streams() argument
1175 if (app->pipeline_type == 0 && app->need_streams) { in update_streams()
1182 clear_streams (app); in update_streams()
1185 g_object_get (app->pipeline, "n-video", &app->n_video, NULL); in update_streams()
1186 g_object_get (app->pipeline, "n-audio", &app->n_audio, NULL); in update_streams()
1187 g_object_get (app->pipeline, "n-text", &app->n_text, NULL); in update_streams()
1189 g_print ("video %d, audio %d, text %d\n", app->n_video, app->n_audio, in update_streams()
1190 app->n_text); in update_streams()
1193 for (i = 0; i < app->n_video; i++) { in update_streams()
1194 g_signal_emit_by_name (app->pipeline, "get-video-tags", i, &tags); in update_streams()
1203 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (app->video_combo), in update_streams()
1208 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (app->video_checkbox)); in update_streams()
1209 gtk_widget_set_sensitive (app->video_combo, state && app->n_video > 0); in update_streams()
1210 gtk_combo_box_set_active (GTK_COMBO_BOX (app->video_combo), active_idx); in update_streams()
1213 for (i = 0; i < app->n_audio; i++) { in update_streams()
1214 g_signal_emit_by_name (app->pipeline, "get-audio-tags", i, &tags); in update_streams()
1223 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (app->audio_combo), in update_streams()
1228 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (app->audio_checkbox)); in update_streams()
1229 gtk_widget_set_sensitive (app->audio_combo, state && app->n_audio > 0); in update_streams()
1230 gtk_combo_box_set_active (GTK_COMBO_BOX (app->audio_combo), active_idx); in update_streams()
1233 for (i = 0; i < app->n_text; i++) { in update_streams()
1234 g_signal_emit_by_name (app->pipeline, "get-text-tags", i, &tags); in update_streams()
1255 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (app->text_combo), in update_streams()
1260 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (app->text_checkbox)); in update_streams()
1261 gtk_widget_set_sensitive (app->text_combo, state && app->n_text > 0); in update_streams()
1262 gtk_combo_box_set_active (GTK_COMBO_BOX (app->text_combo), active_idx); in update_streams()
1264 app->need_streams = FALSE; in update_streams()
1269 video_combo_cb (GtkComboBox * combo, PlaybackApp * app) in video_combo_cb() argument
1276 g_object_set (app->pipeline, "current-video", active, NULL); in video_combo_cb()
1280 audio_combo_cb (GtkComboBox * combo, PlaybackApp * app) in audio_combo_cb() argument
1287 g_object_set (app->pipeline, "current-audio", active, NULL); in audio_combo_cb()
1291 text_combo_cb (GtkComboBox * combo, PlaybackApp * app) in text_combo_cb() argument
1298 g_object_set (app->pipeline, "current-text", active, NULL); in text_combo_cb()
1318 init_visualization_features (PlaybackApp * app) in init_visualization_features() argument
1322 app->vis_entries = g_array_new (FALSE, FALSE, sizeof (VisEntry)); in init_visualization_features()
1335 g_array_append_val (app->vis_entries, entry); in init_visualization_features()
1336 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (app->vis_combo), name); in init_visualization_features()
1338 gtk_combo_box_set_active (GTK_COMBO_BOX (app->vis_combo), 0); in init_visualization_features()
1343 vis_combo_cb (GtkComboBox * combo, PlaybackApp * app) in vis_combo_cb() argument
1350 index = gtk_combo_box_get_active (GTK_COMBO_BOX (app->vis_combo)); in vis_combo_cb()
1351 if (app->vis_entries->len > 0) { in vis_combo_cb()
1352 entry = &g_array_index (app->vis_entries, VisEntry, index); in vis_combo_cb()
1360 g_object_set (app->pipeline, "vis-plugin", element, NULL); in vis_combo_cb()
1365 volume_spinbutton_changed_cb (GtkSpinButton * button, PlaybackApp * app) in volume_spinbutton_changed_cb() argument
1371 g_object_set (app->pipeline, "volume", volume, NULL); in volume_spinbutton_changed_cb()
1375 volume_notify_idle_cb (PlaybackApp * app) in volume_notify_idle_cb() argument
1379 g_object_get (app->pipeline, "volume", &new_volume, NULL); in volume_notify_idle_cb()
1381 gtk_spin_button_get_value (GTK_SPIN_BUTTON (app->volume_spinbutton)); in volume_notify_idle_cb()
1383 g_signal_handlers_block_by_func (app->volume_spinbutton, in volume_notify_idle_cb()
1384 volume_spinbutton_changed_cb, app); in volume_notify_idle_cb()
1385 gtk_spin_button_set_value (GTK_SPIN_BUTTON (app->volume_spinbutton), in volume_notify_idle_cb()
1387 g_signal_handlers_unblock_by_func (app->volume_spinbutton, in volume_notify_idle_cb()
1388 volume_spinbutton_changed_cb, app); in volume_notify_idle_cb()
1395 volume_notify_cb (GstElement * pipeline, GParamSpec * arg, PlaybackApp * app) in volume_notify_cb() argument
1398 g_idle_add ((GSourceFunc) volume_notify_idle_cb, app); in volume_notify_cb()
1402 mute_notify_idle_cb (PlaybackApp * app) in mute_notify_idle_cb() argument
1406 g_object_get (app->pipeline, "mute", &new_mute, NULL); in mute_notify_idle_cb()
1408 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (app->mute_checkbox)); in mute_notify_idle_cb()
1410 g_signal_handlers_block_by_func (app->mute_checkbox, mute_toggle_cb, app); in mute_notify_idle_cb()
1411 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (app->mute_checkbox), in mute_notify_idle_cb()
1413 g_signal_handlers_unblock_by_func (app->mute_checkbox, mute_toggle_cb, app); in mute_notify_idle_cb()
1420 mute_notify_cb (GstElement * pipeline, GParamSpec * arg, PlaybackApp * app) in mute_notify_cb() argument
1423 g_idle_add ((GSourceFunc) mute_notify_idle_cb, app); in mute_notify_cb()
1427 shot_cb (GtkButton * button, PlaybackApp * app) in shot_cb() argument
1442 g_signal_emit_by_name (app->pipeline, "convert-sample", caps, &sample); in shot_cb()
1494 step_cb (GtkButton * button, PlaybackApp * app) in step_cb() argument
1503 active = gtk_combo_box_get_active (GTK_COMBO_BOX (app->step_format_combo)); in step_cb()
1506 (app->step_amount_spinbutton)); in step_cb()
1508 gtk_spin_button_get_value (GTK_SPIN_BUTTON (app->step_rate_spinbutton)); in step_cb()
1526 res = send_event (app, event); in step_cb()
1534 message_received (GstBus * bus, GstMessage * message, PlaybackApp * app) in message_received() argument
1540 GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (app->pipeline), in message_received()
1544 GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (app->pipeline), in message_received()
1567 do_shuttle (PlaybackApp * app) in do_shuttle() argument
1571 if (app->shuttling) in do_shuttle()
1576 gst_element_send_event (app->pipeline, in do_shuttle()
1577 gst_event_new_step (GST_FORMAT_TIME, duration, app->shuttle_rate, FALSE, in do_shuttle()
1582 msg_sync_step_done (GstBus * bus, GstMessage * message, PlaybackApp * app) in msg_sync_step_done() argument
1600 if (g_mutex_trylock (&app->state_mutex)) { in msg_sync_step_done()
1601 if (app->shuttling) in msg_sync_step_done()
1602 do_shuttle (app); in msg_sync_step_done()
1603 g_mutex_unlock (&app->state_mutex); in msg_sync_step_done()
1611 shuttle_toggled (GtkToggleButton * button, PlaybackApp * app) in shuttle_toggled() argument
1617 if (active != app->shuttling) { in shuttle_toggled()
1618 app->shuttling = active; in shuttle_toggled()
1619 g_print ("shuttling %s\n", app->shuttling ? "active" : "inactive"); in shuttle_toggled()
1621 app->shuttle_rate = 0.0; in shuttle_toggled()
1622 app->play_rate = 1.0; in shuttle_toggled()
1623 pause_cb (NULL, app); in shuttle_toggled()
1624 gst_element_get_state (app->pipeline, NULL, NULL, -1); in shuttle_toggled()
1630 shuttle_rate_switch (PlaybackApp * app) in shuttle_rate_switch() argument
1636 if (app->state == GST_STATE_PLAYING) { in shuttle_rate_switch()
1638 pause_cb (NULL, app); in shuttle_rate_switch()
1639 gst_element_get_state (app->pipeline, NULL, NULL, -1); in shuttle_rate_switch()
1642 if (app->play_rate == 1.0) in shuttle_rate_switch()
1643 app->play_rate = -1.0; in shuttle_rate_switch()
1645 app->play_rate = 1.0; in shuttle_rate_switch()
1647 g_print ("rate changed to %lf %" GST_TIME_FORMAT "\n", app->play_rate, in shuttle_rate_switch()
1648 GST_TIME_ARGS (app->position)); in shuttle_rate_switch()
1653 if (app->play_rate >= 0.0) { in shuttle_rate_switch()
1654 s_event = gst_event_new_seek (app->play_rate, in shuttle_rate_switch()
1655 GST_FORMAT_TIME, flags, GST_SEEK_TYPE_SET, app->position, in shuttle_rate_switch()
1658 s_event = gst_event_new_seek (app->play_rate, in shuttle_rate_switch()
1660 GST_SEEK_TYPE_SET, app->position); in shuttle_rate_switch()
1662 res = send_event (app, s_event); in shuttle_rate_switch()
1664 gst_element_get_state (app->pipeline, NULL, NULL, SEEK_TIMEOUT); in shuttle_rate_switch()
1671 shuttle_value_changed (GtkRange * range, PlaybackApp * app) in shuttle_value_changed() argument
1679 pause_cb (NULL, app); in shuttle_value_changed()
1680 gst_element_get_state (app->pipeline, NULL, NULL, -1); in shuttle_value_changed()
1684 if ((rate < 0.0 && app->play_rate > 0.0) || (rate > 0.0 in shuttle_value_changed()
1685 && app->play_rate < 0.0)) { in shuttle_value_changed()
1686 shuttle_rate_switch (app); in shuttle_value_changed()
1689 app->shuttle_rate = ABS (rate); in shuttle_value_changed()
1690 if (app->state != GST_STATE_PLAYING) { in shuttle_value_changed()
1691 do_shuttle (app); in shuttle_value_changed()
1692 play_cb (NULL, app); in shuttle_value_changed()
1698 colorbalance_value_changed (GtkRange * range, PlaybackApp * app) in colorbalance_value_changed() argument
1706 if (range == GTK_RANGE (app->contrast_scale)) in colorbalance_value_changed()
1708 else if (range == GTK_RANGE (app->brightness_scale)) in colorbalance_value_changed()
1710 else if (range == GTK_RANGE (app->hue_scale)) in colorbalance_value_changed()
1712 else if (range == GTK_RANGE (app->saturation_scale)) in colorbalance_value_changed()
1721 if (!app->colorbalance_element) { in colorbalance_value_changed()
1722 find_interface_elements (app); in colorbalance_value_changed()
1723 if (!app->colorbalance_element) in colorbalance_value_changed()
1729 (app->colorbalance_element)); in colorbalance_value_changed()
1746 gst_color_balance_set_value (GST_COLOR_BALANCE (app->colorbalance_element), in colorbalance_value_changed()
1751 seek_format_changed_cb (GtkComboBox * box, PlaybackApp * app) in seek_format_changed_cb() argument
1759 for (l = app->formats; l; l = l->next) { in seek_format_changed_cb()
1771 app->seek_format = format; in seek_format_changed_cb()
1772 update_scale (app); in seek_format_changed_cb()
1779 update_formats (PlaybackApp * app) in update_formats() argument
1790 (app->seek_format_combo)); in update_formats()
1797 g_list_free (app->formats); in update_formats()
1798 app->formats = NULL; in update_formats()
1805 app->formats = g_list_prepend (app->formats, def); in update_formats()
1810 g_list_free (app->formats); in update_formats()
1811 app->formats = NULL; in update_formats()
1823 app->formats = g_list_reverse (app->formats); in update_formats()
1826 g_signal_handlers_block_by_func (app->seek_format_combo, in update_formats()
1827 seek_format_changed_cb, app); in update_formats()
1828 gtk_combo_box_text_remove_all (GTK_COMBO_BOX_TEXT (app->seek_format_combo)); in update_formats()
1830 for (i = 0, l = app->formats; l; l = l->next, i++) { in update_formats()
1833 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (app->seek_format_combo), in update_formats()
1838 g_signal_handlers_unblock_by_func (app->seek_format_combo, in update_formats()
1839 seek_format_changed_cb, app); in update_formats()
1841 gtk_combo_box_set_active (GTK_COMBO_BOX (app->seek_format_combo), in update_formats()
1848 msg_async_done (GstBus * bus, GstMessage * message, PlaybackApp * app) in msg_async_done() argument
1853 update_formats (app); in msg_async_done()
1857 update_scale (app); in msg_async_done()
1860 update_streams (app); in msg_async_done()
1862 find_interface_elements (app); in msg_async_done()
1866 msg_state_changed (GstBus * bus, GstMessage * message, PlaybackApp * app) in msg_state_changed() argument
1873 if (s && GST_MESSAGE_SRC (message) == GST_OBJECT_CAST (app->pipeline)) { in msg_state_changed()
1880 set_update_scale (app, TRUE); in msg_state_changed()
1882 set_update_scale (app, FALSE); in msg_state_changed()
1892 GST_DEBUG_BIN_TO_DOT_FILE_WITH_TS (GST_BIN (app->pipeline), in msg_state_changed()
1901 msg_segment_done (GstBus * bus, GstMessage * message, PlaybackApp * app) in msg_segment_done() argument
1908 GST_DEBUG ("position is %" GST_TIME_FORMAT, GST_TIME_ARGS (app->position)); in msg_segment_done()
1909 gst_message_parse_segment_done (message, &format, &app->position); in msg_segment_done()
1911 GST_TIME_ARGS (app->position)); in msg_segment_done()
1916 if (app->loop_seek) in msg_segment_done()
1918 if (app->skip_seek) in msg_segment_done()
1920 if (app->skip_seek_key_only) in msg_segment_done()
1922 if (app->skip_seek_no_audio) in msg_segment_done()
1925 s_event = gst_event_new_seek (app->rate, in msg_segment_done()
1927 GST_SEEK_TYPE_SET, app->duration); in msg_segment_done()
1930 app->rate, GST_TIME_ARGS (app->duration)); in msg_segment_done()
1932 res = send_event (app, s_event); in msg_segment_done()
1940 do_stream_buffering (PlaybackApp * app, gint percent) in do_stream_buffering() argument
1944 gtk_statusbar_pop (GTK_STATUSBAR (app->statusbar), app->status_id); in do_stream_buffering()
1946 gtk_statusbar_push (GTK_STATUSBAR (app->statusbar), app->status_id, bufstr); in do_stream_buffering()
1951 app->buffering = FALSE; in do_stream_buffering()
1953 if (app->state == GST_STATE_PLAYING) { in do_stream_buffering()
1955 if (!app->is_live) { in do_stream_buffering()
1957 gst_element_set_state (app->pipeline, GST_STATE_PLAYING); in do_stream_buffering()
1959 gtk_statusbar_pop (GTK_STATUSBAR (app->statusbar), app->status_id); in do_stream_buffering()
1960 gtk_statusbar_push (GTK_STATUSBAR (app->statusbar), app->status_id, in do_stream_buffering()
1965 if (!app->buffering && app->state == GST_STATE_PLAYING) { in do_stream_buffering()
1967 if (!app->is_live) { in do_stream_buffering()
1969 gst_element_set_state (app->pipeline, GST_STATE_PAUSED); in do_stream_buffering()
1972 app->buffering = TRUE; in do_stream_buffering()
1977 do_download_buffering (PlaybackApp * app, gint percent) in do_download_buffering() argument
1979 if (!app->buffering && percent < 100) { in do_download_buffering()
1982 app->buffering = TRUE; in do_download_buffering()
1985 gtk_statusbar_push (GTK_STATUSBAR (app->statusbar), app->status_id, bufstr); in do_download_buffering()
1989 set_update_fill (app, TRUE); in do_download_buffering()
1991 if (app->state == GST_STATE_PLAYING && !app->is_live) { in do_download_buffering()
1993 gst_element_set_state (app->pipeline, GST_STATE_PAUSED); in do_download_buffering()
1995 app->state = GST_STATE_PAUSED; in do_download_buffering()
2001 msg_buffering (GstBus * bus, GstMessage * message, PlaybackApp * app) in msg_buffering() argument
2008 gst_message_parse_buffering_stats (message, &app->mode, NULL, NULL, in msg_buffering()
2009 &app->buffering_left); in msg_buffering()
2011 switch (app->mode) { in msg_buffering()
2013 do_download_buffering (app, percent); in msg_buffering()
2016 app->is_live = TRUE; in msg_buffering()
2019 do_stream_buffering (app, percent); in msg_buffering()
2025 msg_clock_lost (GstBus * bus, GstMessage * message, PlaybackApp * app) in msg_clock_lost() argument
2028 if (app->state == GST_STATE_PLAYING) { in msg_clock_lost()
2029 gst_element_set_state (app->pipeline, GST_STATE_PAUSED); in msg_clock_lost()
2030 gst_element_set_state (app->pipeline, GST_STATE_PLAYING); in msg_clock_lost()
2062 find_interface_elements (PlaybackApp * app) in find_interface_elements() argument
2068 if (app->pipeline_type == 0) in find_interface_elements()
2071 if (app->navigation_element) in find_interface_elements()
2072 gst_object_unref (app->navigation_element); in find_interface_elements()
2073 app->navigation_element = NULL; in find_interface_elements()
2075 if (app->colorbalance_element) in find_interface_elements()
2076 gst_object_unref (app->colorbalance_element); in find_interface_elements()
2077 app->colorbalance_element = NULL; in find_interface_elements()
2079 app->navigation_element = in find_interface_elements()
2080 gst_bin_get_by_interface (GST_BIN (app->pipeline), GST_TYPE_NAVIGATION); in find_interface_elements()
2082 it = gst_bin_iterate_all_by_interface (GST_BIN (app->pipeline), in find_interface_elements()
2090 if (!app->colorbalance_element) { in find_interface_elements()
2091 app->colorbalance_element = in find_interface_elements()
2102 if (app->colorbalance_element) in find_interface_elements()
2103 gst_object_unref (app->colorbalance_element); in find_interface_elements()
2104 app->colorbalance_element = in find_interface_elements()
2113 if (hardware && app->colorbalance_element) in find_interface_elements()
2121 if (app->colorbalance_element) in find_interface_elements()
2122 gst_object_unref (app->colorbalance_element); in find_interface_elements()
2123 app->colorbalance_element = NULL; in find_interface_elements()
2138 navigation_cmd_cb (GtkButton * button, PlaybackApp * app) in navigation_cmd_cb() argument
2143 if (!app->navigation_element) { in navigation_cmd_cb()
2144 find_interface_elements (app); in navigation_cmd_cb()
2145 if (!app->navigation_element) in navigation_cmd_cb()
2149 for (i = 0; i < G_N_ELEMENTS (app->navigation_buttons); i++) { in navigation_cmd_cb()
2150 if (app->navigation_buttons[i].button == GTK_WIDGET (button)) { in navigation_cmd_cb()
2151 cmd = app->navigation_buttons[i].cmd; in navigation_cmd_cb()
2157 gst_navigation_send_command (GST_NAVIGATION (app->navigation_element), cmd); in navigation_cmd_cb()
2167 bus_sync_handler (GstBus * bus, GstMessage * message, PlaybackApp * app) in bus_sync_handler() argument
2172 if (app->overlay_element) in bus_sync_handler()
2173 gst_object_unref (app->overlay_element); in bus_sync_handler()
2174 app->overlay_element = GST_ELEMENT (gst_object_ref (element)); in bus_sync_handler()
2177 app->embed_xid); in bus_sync_handler()
2184 g_assert (app->embed_xid != 0); in bus_sync_handler()
2187 app->embed_xid); in bus_sync_handler()
2189 find_interface_elements (app); in bus_sync_handler()
2196 draw_cb (GtkWidget * widget, cairo_t * cr, PlaybackApp * app) in draw_cb() argument
2198 if (app->state < GST_STATE_PAUSED) { in draw_cb()
2209 if (app->overlay_element) in draw_cb()
2210 gst_video_overlay_expose (GST_VIDEO_OVERLAY (app->overlay_element)); in draw_cb()
2216 realize_cb (GtkWidget * widget, PlaybackApp * app) in realize_cb() argument
2226 app->embed_xid = (guintptr) GDK_WINDOW_HWND (window); in realize_cb()
2228 app->embed_xid); in realize_cb()
2230 app->embed_xid = (guintptr) gdk_quartz_window_get_nsview (window); in realize_cb()
2232 app->embed_xid); in realize_cb()
2234 app->embed_xid = GDK_WINDOW_XID (window); in realize_cb()
2236 app->embed_xid); in realize_cb()
2241 button_press_cb (GtkWidget * widget, GdkEventButton * event, PlaybackApp * app) in button_press_cb() argument
2245 if (app->navigation_element) in button_press_cb()
2246 gst_navigation_send_mouse_event (GST_NAVIGATION (app->navigation_element), in button_press_cb()
2254 PlaybackApp * app) in button_release_cb() argument
2256 if (app->navigation_element) in button_release_cb()
2257 gst_navigation_send_mouse_event (GST_NAVIGATION (app->navigation_element), in button_release_cb()
2264 key_press_cb (GtkWidget * widget, GdkEventKey * event, PlaybackApp * app) in key_press_cb() argument
2266 if (app->navigation_element) in key_press_cb()
2267 gst_navigation_send_key_event (GST_NAVIGATION (app->navigation_element), in key_press_cb()
2274 key_release_cb (GtkWidget * widget, GdkEventKey * event, PlaybackApp * app) in key_release_cb() argument
2276 if (app->navigation_element) in key_release_cb()
2277 gst_navigation_send_key_event (GST_NAVIGATION (app->navigation_element), in key_release_cb()
2284 motion_notify_cb (GtkWidget * widget, GdkEventMotion * event, PlaybackApp * app) in motion_notify_cb() argument
2286 if (app->navigation_element) in motion_notify_cb()
2287 gst_navigation_send_mouse_event (GST_NAVIGATION (app->navigation_element), in motion_notify_cb()
2294 msg_eos (GstBus * bus, GstMessage * message, PlaybackApp * app) in msg_eos() argument
2296 message_received (bus, message, app); in msg_eos()
2299 if (app->current_path && app->pipeline_type == 0) { in msg_eos()
2300 stop_cb (NULL, app); in msg_eos()
2301 app->current_path = g_list_next (app->current_path); in msg_eos()
2302 app->current_sub_path = g_list_next (app->current_sub_path); in msg_eos()
2303 if (app->current_path) { in msg_eos()
2304 playbin_set_uri (app->pipeline, app->current_path->data, in msg_eos()
2305 app->current_sub_path ? app->current_sub_path->data : NULL); in msg_eos()
2306 play_cb (NULL, app); in msg_eos()
2312 msg_step_done (GstBus * bus, GstMessage * message, PlaybackApp * app) in msg_step_done() argument
2314 if (!app->shuttling) in msg_step_done()
2315 message_received (bus, message, app); in msg_step_done()
2319 msg (GstBus * bus, GstMessage * message, PlaybackApp * app) in msg() argument
2333 for (j = 0; j < G_N_ELEMENTS (app->navigation_buttons); j++) in msg()
2334 gtk_widget_set_sensitive (app->navigation_buttons[j].button, FALSE); in msg()
2353 for (j = 0; j < G_N_ELEMENTS (app->navigation_buttons); j++) { in msg()
2354 if (app->navigation_buttons[j].cmd != cmd) in msg()
2357 gtk_widget_set_sensitive (app->navigation_buttons[j].button, in msg()
2363 gtk_widget_set_sensitive (GTK_WIDGET (app->seek_scale), !is_menu); in msg()
2369 message_received (bus, message, app); in msg()
2378 connect_bus_signals (PlaybackApp * app) in connect_bus_signals() argument
2380 GstBus *bus = gst_pipeline_get_bus (GST_PIPELINE (app->pipeline)); in connect_bus_signals()
2383 if (app->pipeline_type != 0) { in connect_bus_signals()
2385 gst_bus_set_sync_handler (bus, (GstBusSyncHandler) bus_sync_handler, app, in connect_bus_signals()
2394 G_CALLBACK (msg_state_changed), app); in connect_bus_signals()
2396 app); in connect_bus_signals()
2398 app); in connect_bus_signals()
2401 app); in connect_bus_signals()
2403 app); in connect_bus_signals()
2404 g_signal_connect (bus, "message::error", G_CALLBACK (message_received), app); in connect_bus_signals()
2406 app); in connect_bus_signals()
2407 g_signal_connect (bus, "message::eos", G_CALLBACK (msg_eos), app); in connect_bus_signals()
2408 g_signal_connect (bus, "message::tag", G_CALLBACK (message_received), app); in connect_bus_signals()
2410 app); in connect_bus_signals()
2412 app); in connect_bus_signals()
2413 g_signal_connect (bus, "message::buffering", G_CALLBACK (msg_buffering), app); in connect_bus_signals()
2417 app); in connect_bus_signals()
2419 G_CALLBACK (msg_sync_step_done), app); in connect_bus_signals()
2420 g_signal_connect (bus, "message", G_CALLBACK (msg), app); in connect_bus_signals()
2460 delete_event_cb (GtkWidget * widget, GdkEvent * event, PlaybackApp * app) in delete_event_cb() argument
2462 stop_cb (NULL, app); in delete_event_cb()
2467 video_sink_activate_cb (GtkEntry * entry, PlaybackApp * app) in video_sink_activate_cb() argument
2477 g_object_set (app->pipeline, "video-sink", sink, NULL); in video_sink_activate_cb()
2481 audio_sink_activate_cb (GtkEntry * entry, PlaybackApp * app) in audio_sink_activate_cb() argument
2491 g_object_set (app->pipeline, "audio-sink", sink, NULL); in audio_sink_activate_cb()
2495 text_sink_activate_cb (GtkEntry * entry, PlaybackApp * app) in text_sink_activate_cb() argument
2505 g_object_set (app->pipeline, "text-sink", sink, NULL); in text_sink_activate_cb()
2509 buffer_size_activate_cb (GtkEntry * entry, PlaybackApp * app) in buffer_size_activate_cb() argument
2520 g_object_set (app->pipeline, "buffer-size", (gint) v, NULL); in buffer_size_activate_cb()
2526 buffer_duration_activate_cb (GtkEntry * entry, PlaybackApp * app) in buffer_duration_activate_cb() argument
2537 g_object_set (app->pipeline, "buffer-duration", v, NULL); in buffer_duration_activate_cb()
2543 ringbuffer_maxsize_activate_cb (GtkEntry * entry, PlaybackApp * app) in ringbuffer_maxsize_activate_cb() argument
2554 g_object_set (app->pipeline, "ring-buffer-max-size", v, NULL); in ringbuffer_maxsize_activate_cb()
2560 connection_speed_activate_cb (GtkEntry * entry, PlaybackApp * app) in connection_speed_activate_cb() argument
2571 g_object_set (app->pipeline, "connection-speed", v, NULL); in connection_speed_activate_cb()
2577 subtitle_encoding_activate_cb (GtkEntry * entry, PlaybackApp * app) in subtitle_encoding_activate_cb() argument
2582 g_object_set (app->pipeline, "subtitle-encoding", text, NULL); in subtitle_encoding_activate_cb()
2586 subtitle_fontdesc_cb (GtkFontButton * button, PlaybackApp * app) in subtitle_fontdesc_cb() argument
2591 g_object_set (app->pipeline, "subtitle-font-desc", text, NULL); in subtitle_fontdesc_cb()
2608 av_offset_activate_cb (GtkEntry * entry, PlaybackApp * app) in av_offset_activate_cb() argument
2615 g_object_set (app->pipeline, "av-offset", v, NULL); in av_offset_activate_cb()
2619 text_offset_activate_cb (GtkEntry * entry, PlaybackApp * app) in text_offset_activate_cb() argument
2626 g_object_set (app->pipeline, "text-offset", v, NULL); in text_offset_activate_cb()
2643 create_ui (PlaybackApp * app) in create_ui() argument
2650 app->window = gtk_window_new (GTK_WINDOW_TOPLEVEL); in create_ui()
2651 app->video_window = gtk_drawing_area_new (); in create_ui()
2652 g_signal_connect (app->video_window, "draw", G_CALLBACK (draw_cb), app); in create_ui()
2653 g_signal_connect (app->video_window, "realize", G_CALLBACK (realize_cb), app); in create_ui()
2654 g_signal_connect (app->video_window, "button-press-event", in create_ui()
2655 G_CALLBACK (button_press_cb), app); in create_ui()
2656 g_signal_connect (app->video_window, "button-release-event", in create_ui()
2657 G_CALLBACK (button_release_cb), app); in create_ui()
2658 g_signal_connect (app->video_window, "key-press-event", in create_ui()
2659 G_CALLBACK (key_press_cb), app); in create_ui()
2660 g_signal_connect (app->video_window, "key-release-event", in create_ui()
2661 G_CALLBACK (key_release_cb), app); in create_ui()
2662 g_signal_connect (app->video_window, "motion-notify-event", in create_ui()
2663 G_CALLBACK (motion_notify_cb), app); in create_ui()
2664 gtk_widget_set_can_focus (app->video_window, TRUE); in create_ui()
2665 gtk_widget_add_events (app->video_window, in create_ui()
2669 app->statusbar = gtk_statusbar_new (); in create_ui()
2670 app->status_id = in create_ui()
2671 gtk_statusbar_get_context_id (GTK_STATUSBAR (app->statusbar), in create_ui()
2673 gtk_statusbar_push (GTK_STATUSBAR (app->statusbar), app->status_id, in create_ui()
2748 gtk_spin_button_set_value (GTK_SPIN_BUTTON (rate_spinbutton), app->rate); in create_ui()
2751 G_CALLBACK (accurate_toggle_cb), app); in create_ui()
2753 G_CALLBACK (key_toggle_cb), app); in create_ui()
2755 G_CALLBACK (loop_toggle_cb), app); in create_ui()
2757 G_CALLBACK (flush_toggle_cb), app); in create_ui()
2759 G_CALLBACK (scrub_toggle_cb), app); in create_ui()
2761 G_CALLBACK (play_scrub_toggle_cb), app); in create_ui()
2763 G_CALLBACK (skip_toggle_cb), app); in create_ui()
2765 G_CALLBACK (skip_key_toggle_cb), app); in create_ui()
2767 G_CALLBACK (skip_audio_toggle_cb), app); in create_ui()
2769 G_CALLBACK (rate_spinbutton_changed_cb), app); in create_ui()
2771 G_CALLBACK (snap_before_toggle_cb), app); in create_ui()
2773 G_CALLBACK (snap_after_toggle_cb), app); in create_ui()
2796 app->seek_format_combo = gtk_combo_box_text_new (); in create_ui()
2797 g_signal_connect (app->seek_format_combo, "changed", in create_ui()
2798 G_CALLBACK (seek_format_changed_cb), app); in create_ui()
2799 gtk_grid_attach (GTK_GRID (advanced_seek_grid), app->seek_format_combo, 0, in create_ui()
2802 app->seek_entry = gtk_entry_new (); in create_ui()
2803 gtk_entry_set_width_chars (GTK_ENTRY (app->seek_entry), 12); in create_ui()
2804 gtk_grid_attach (GTK_GRID (advanced_seek_grid), app->seek_entry, 0, 1, 1, in create_ui()
2809 G_CALLBACK (advanced_seek_button_cb), app); in create_ui()
2817 app->seek_position_label = gtk_label_new ("-1"); in create_ui()
2818 gtk_grid_attach (GTK_GRID (advanced_seek_grid), app->seek_position_label, 3, in create_ui()
2820 app->seek_duration_label = gtk_label_new ("-1"); in create_ui()
2821 gtk_grid_attach (GTK_GRID (advanced_seek_grid), app->seek_duration_label, 3, in create_ui()
2829 app->seek_start_label = gtk_label_new ("-1"); in create_ui()
2830 gtk_grid_attach (GTK_GRID (advanced_seek_grid), app->seek_start_label, 5, in create_ui()
2832 app->seek_stop_label = gtk_label_new ("-1"); in create_ui()
2833 gtk_grid_attach (GTK_GRID (advanced_seek_grid), app->seek_stop_label, 5, in create_ui()
2849 app->step_format_combo = gtk_combo_box_text_new (); in create_ui()
2850 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (app->step_format_combo), in create_ui()
2852 gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (app->step_format_combo), in create_ui()
2854 gtk_combo_box_set_active (GTK_COMBO_BOX (app->step_format_combo), 0); in create_ui()
2855 gtk_box_pack_start (GTK_BOX (hbox), app->step_format_combo, FALSE, FALSE, in create_ui()
2858 app->step_amount_spinbutton = gtk_spin_button_new_with_range (1, 1000, 1); in create_ui()
2859 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (app->step_amount_spinbutton), in create_ui()
2861 gtk_spin_button_set_value (GTK_SPIN_BUTTON (app->step_amount_spinbutton), in create_ui()
2863 gtk_box_pack_start (GTK_BOX (hbox), app->step_amount_spinbutton, FALSE, in create_ui()
2866 app->step_rate_spinbutton = gtk_spin_button_new_with_range (0.0, 100, 0.1); in create_ui()
2867 gtk_spin_button_set_digits (GTK_SPIN_BUTTON (app->step_rate_spinbutton), 3); in create_ui()
2868 gtk_spin_button_set_value (GTK_SPIN_BUTTON (app->step_rate_spinbutton), in create_ui()
2870 gtk_box_pack_start (GTK_BOX (hbox), app->step_rate_spinbutton, FALSE, FALSE, in create_ui()
2880 app); in create_ui()
2887 app); in create_ui()
2891 app->shuttle_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment); in create_ui()
2892 gtk_scale_set_digits (GTK_SCALE (app->shuttle_scale), 2); in create_ui()
2893 gtk_scale_set_value_pos (GTK_SCALE (app->shuttle_scale), GTK_POS_TOP); in create_ui()
2894 g_signal_connect (app->shuttle_scale, "value-changed", in create_ui()
2895 G_CALLBACK (shuttle_value_changed), app); in create_ui()
2896 g_signal_connect (app->shuttle_scale, "format_value", in create_ui()
2897 G_CALLBACK (shuttle_format_value), app); in create_ui()
2899 gtk_box_pack_start (GTK_BOX (hbox), app->shuttle_scale, TRUE, TRUE, 2); in create_ui()
2919 G_CALLBACK (navigation_cmd_cb), app); in create_ui()
2923 app->navigation_buttons[i].button = navigation_button; in create_ui()
2924 app->navigation_buttons[i++].cmd = GST_NAVIGATION_COMMAND_MENU1; in create_ui()
2928 G_CALLBACK (navigation_cmd_cb), app); in create_ui()
2932 app->navigation_buttons[i].button = navigation_button; in create_ui()
2933 app->navigation_buttons[i++].cmd = GST_NAVIGATION_COMMAND_MENU2; in create_ui()
2937 G_CALLBACK (navigation_cmd_cb), app); in create_ui()
2941 app->navigation_buttons[i].button = navigation_button; in create_ui()
2942 app->navigation_buttons[i++].cmd = GST_NAVIGATION_COMMAND_MENU3; in create_ui()
2946 G_CALLBACK (navigation_cmd_cb), app); in create_ui()
2950 app->navigation_buttons[i].button = navigation_button; in create_ui()
2951 app->navigation_buttons[i++].cmd = GST_NAVIGATION_COMMAND_MENU4; in create_ui()
2955 G_CALLBACK (navigation_cmd_cb), app); in create_ui()
2959 app->navigation_buttons[i].button = navigation_button; in create_ui()
2960 app->navigation_buttons[i++].cmd = GST_NAVIGATION_COMMAND_MENU5; in create_ui()
2964 G_CALLBACK (navigation_cmd_cb), app); in create_ui()
2968 app->navigation_buttons[i].button = navigation_button; in create_ui()
2969 app->navigation_buttons[i++].cmd = GST_NAVIGATION_COMMAND_MENU6; in create_ui()
2973 G_CALLBACK (navigation_cmd_cb), app); in create_ui()
2977 app->navigation_buttons[i].button = navigation_button; in create_ui()
2978 app->navigation_buttons[i++].cmd = GST_NAVIGATION_COMMAND_MENU7; in create_ui()
2982 G_CALLBACK (navigation_cmd_cb), app); in create_ui()
2985 app->navigation_buttons[i].button = navigation_button; in create_ui()
2986 app->navigation_buttons[i++].cmd = GST_NAVIGATION_COMMAND_LEFT; in create_ui()
2990 G_CALLBACK (navigation_cmd_cb), app); in create_ui()
2993 app->navigation_buttons[i].button = navigation_button; in create_ui()
2994 app->navigation_buttons[i++].cmd = GST_NAVIGATION_COMMAND_RIGHT; in create_ui()
2998 G_CALLBACK (navigation_cmd_cb), app); in create_ui()
3001 app->navigation_buttons[i].button = navigation_button; in create_ui()
3002 app->navigation_buttons[i++].cmd = GST_NAVIGATION_COMMAND_UP; in create_ui()
3006 G_CALLBACK (navigation_cmd_cb), app); in create_ui()
3009 app->navigation_buttons[i].button = navigation_button; in create_ui()
3010 app->navigation_buttons[i++].cmd = GST_NAVIGATION_COMMAND_DOWN; in create_ui()
3014 G_CALLBACK (navigation_cmd_cb), app); in create_ui()
3017 app->navigation_buttons[i].button = navigation_button; in create_ui()
3018 app->navigation_buttons[i++].cmd = GST_NAVIGATION_COMMAND_ACTIVATE; in create_ui()
3022 G_CALLBACK (navigation_cmd_cb), app); in create_ui()
3025 app->navigation_buttons[i].button = navigation_button; in create_ui()
3026 app->navigation_buttons[i++].cmd = GST_NAVIGATION_COMMAND_PREV_ANGLE; in create_ui()
3030 G_CALLBACK (navigation_cmd_cb), app); in create_ui()
3033 app->navigation_buttons[i].button = navigation_button; in create_ui()
3034 app->navigation_buttons[i++].cmd = GST_NAVIGATION_COMMAND_NEXT_ANGLE; in create_ui()
3051 app->contrast_scale = in create_ui()
3053 gtk_scale_set_draw_value (GTK_SCALE (app->contrast_scale), FALSE); in create_ui()
3054 g_signal_connect (app->contrast_scale, "value-changed", in create_ui()
3055 G_CALLBACK (colorbalance_value_changed), app); in create_ui()
3056 gtk_container_add (GTK_CONTAINER (frame), app->contrast_scale); in create_ui()
3064 app->brightness_scale = in create_ui()
3066 gtk_scale_set_draw_value (GTK_SCALE (app->brightness_scale), FALSE); in create_ui()
3067 g_signal_connect (app->brightness_scale, "value-changed", in create_ui()
3068 G_CALLBACK (colorbalance_value_changed), app); in create_ui()
3069 gtk_container_add (GTK_CONTAINER (frame), app->brightness_scale); in create_ui()
3077 app->hue_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment); in create_ui()
3078 gtk_scale_set_draw_value (GTK_SCALE (app->hue_scale), FALSE); in create_ui()
3079 g_signal_connect (app->hue_scale, "value-changed", in create_ui()
3080 G_CALLBACK (colorbalance_value_changed), app); in create_ui()
3081 gtk_container_add (GTK_CONTAINER (frame), app->hue_scale); in create_ui()
3089 app->saturation_scale = in create_ui()
3091 gtk_scale_set_draw_value (GTK_SCALE (app->saturation_scale), FALSE); in create_ui()
3092 g_signal_connect (app->saturation_scale, "value-changed", in create_ui()
3093 G_CALLBACK (colorbalance_value_changed), app); in create_ui()
3094 gtk_container_add (GTK_CONTAINER (frame), app->saturation_scale); in create_ui()
3103 app->seek_scale = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, adjustment); in create_ui()
3104 gtk_scale_set_digits (GTK_SCALE (app->seek_scale), 2); in create_ui()
3105 gtk_scale_set_value_pos (GTK_SCALE (app->seek_scale), GTK_POS_RIGHT); in create_ui()
3106 gtk_range_set_show_fill_level (GTK_RANGE (app->seek_scale), TRUE); in create_ui()
3107 gtk_range_set_restrict_to_fill_level (GTK_RANGE (app->seek_scale), FALSE); in create_ui()
3108 gtk_range_set_fill_level (GTK_RANGE (app->seek_scale), N_GRAD); in create_ui()
3110 g_signal_connect (app->seek_scale, "button_press_event", in create_ui()
3111 G_CALLBACK (start_seek), app); in create_ui()
3112 g_signal_connect (app->seek_scale, "button_release_event", in create_ui()
3113 G_CALLBACK (stop_seek), app); in create_ui()
3114 g_signal_connect (app->seek_scale, "format_value", G_CALLBACK (format_value), in create_ui()
3115 app); in create_ui()
3117 if (app->pipeline_type == 0) { in create_ui()
3125 app->video_combo = gtk_combo_box_text_new (); in create_ui()
3126 app->audio_combo = gtk_combo_box_text_new (); in create_ui()
3127 app->text_combo = gtk_combo_box_text_new (); in create_ui()
3128 gtk_widget_set_sensitive (app->video_combo, FALSE); in create_ui()
3129 gtk_widget_set_sensitive (app->audio_combo, FALSE); in create_ui()
3130 gtk_widget_set_sensitive (app->text_combo, FALSE); in create_ui()
3131 gtk_box_pack_start (GTK_BOX (panel), app->video_combo, TRUE, TRUE, 2); in create_ui()
3132 gtk_box_pack_start (GTK_BOX (panel), app->audio_combo, TRUE, TRUE, 2); in create_ui()
3133 gtk_box_pack_start (GTK_BOX (panel), app->text_combo, TRUE, TRUE, 2); in create_ui()
3134 g_signal_connect (G_OBJECT (app->video_combo), "changed", in create_ui()
3135 G_CALLBACK (video_combo_cb), app); in create_ui()
3136 g_signal_connect (G_OBJECT (app->audio_combo), "changed", in create_ui()
3137 G_CALLBACK (audio_combo_cb), app); in create_ui()
3138 g_signal_connect (G_OBJECT (app->text_combo), "changed", in create_ui()
3139 G_CALLBACK (text_combo_cb), app); in create_ui()
3147 app->video_checkbox = gtk_check_button_new_with_label ("Video"); in create_ui()
3148 app->audio_checkbox = gtk_check_button_new_with_label ("Audio"); in create_ui()
3149 app->text_checkbox = gtk_check_button_new_with_label ("Text"); in create_ui()
3150 app->vis_checkbox = gtk_check_button_new_with_label ("Vis"); in create_ui()
3151 app->soft_volume_checkbox = gtk_check_button_new_with_label ("Soft Volume"); in create_ui()
3152 app->native_audio_checkbox = in create_ui()
3154 app->native_video_checkbox = in create_ui()
3156 app->download_checkbox = gtk_check_button_new_with_label ("Download"); in create_ui()
3157 app->buffering_checkbox = gtk_check_button_new_with_label ("Buffering"); in create_ui()
3158 app->deinterlace_checkbox = gtk_check_button_new_with_label ("Deinterlace"); in create_ui()
3159 app->soft_colorbalance_checkbox = in create_ui()
3161 app->mute_checkbox = gtk_check_button_new_with_label ("Mute"); in create_ui()
3163 app->volume_spinbutton = gtk_spin_button_new_with_range (0, 10.0, 0.1); in create_ui()
3165 gtk_grid_attach (GTK_GRID (boxes), app->video_checkbox, 0, 0, 1, 1); in create_ui()
3166 gtk_grid_attach (GTK_GRID (boxes), app->audio_checkbox, 1, 0, 1, 1); in create_ui()
3167 gtk_grid_attach (GTK_GRID (boxes), app->text_checkbox, 2, 0, 1, 1); in create_ui()
3168 gtk_grid_attach (GTK_GRID (boxes), app->vis_checkbox, 3, 0, 1, 1); in create_ui()
3169 gtk_grid_attach (GTK_GRID (boxes), app->soft_volume_checkbox, 4, 0, 1, 1); in create_ui()
3170 gtk_grid_attach (GTK_GRID (boxes), app->native_audio_checkbox, 5, 0, 1, 1); in create_ui()
3171 gtk_grid_attach (GTK_GRID (boxes), app->native_video_checkbox, 0, 1, 1, 1); in create_ui()
3172 gtk_grid_attach (GTK_GRID (boxes), app->download_checkbox, 1, 1, 1, 1); in create_ui()
3173 gtk_grid_attach (GTK_GRID (boxes), app->buffering_checkbox, 2, 1, 1, 1); in create_ui()
3174 gtk_grid_attach (GTK_GRID (boxes), app->deinterlace_checkbox, 3, 1, 1, 1); in create_ui()
3175 gtk_grid_attach (GTK_GRID (boxes), app->soft_colorbalance_checkbox, 4, 1, 1, in create_ui()
3178 gtk_grid_attach (GTK_GRID (boxes), app->mute_checkbox, 6, 0, 1, 1); in create_ui()
3180 gtk_grid_attach (GTK_GRID (boxes), app->volume_spinbutton, 6, 1, 1, 1); in create_ui()
3182 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (app->video_checkbox), in create_ui()
3184 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (app->audio_checkbox), in create_ui()
3186 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (app->text_checkbox), TRUE); in create_ui()
3187 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (app->vis_checkbox), FALSE); in create_ui()
3188 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (app->soft_volume_checkbox), in create_ui()
3191 (app->native_audio_checkbox), FALSE); in create_ui()
3193 (app->native_video_checkbox), FALSE); in create_ui()
3194 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (app->download_checkbox), in create_ui()
3196 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (app->buffering_checkbox), in create_ui()
3198 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (app->deinterlace_checkbox), in create_ui()
3201 (app->soft_colorbalance_checkbox), TRUE); in create_ui()
3202 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (app->mute_checkbox), in create_ui()
3204 gtk_spin_button_set_value (GTK_SPIN_BUTTON (app->volume_spinbutton), 1.0); in create_ui()
3206 g_signal_connect (G_OBJECT (app->video_checkbox), "toggled", in create_ui()
3207 G_CALLBACK (video_toggle_cb), app); in create_ui()
3208 g_signal_connect (G_OBJECT (app->audio_checkbox), "toggled", in create_ui()
3209 G_CALLBACK (audio_toggle_cb), app); in create_ui()
3210 g_signal_connect (G_OBJECT (app->text_checkbox), "toggled", in create_ui()
3211 G_CALLBACK (text_toggle_cb), app); in create_ui()
3212 g_signal_connect (G_OBJECT (app->vis_checkbox), "toggled", in create_ui()
3213 G_CALLBACK (vis_toggle_cb), app); in create_ui()
3214 g_signal_connect (G_OBJECT (app->soft_volume_checkbox), "toggled", in create_ui()
3215 G_CALLBACK (soft_volume_toggle_cb), app); in create_ui()
3216 g_signal_connect (G_OBJECT (app->native_audio_checkbox), "toggled", in create_ui()
3217 G_CALLBACK (native_audio_toggle_cb), app); in create_ui()
3218 g_signal_connect (G_OBJECT (app->native_video_checkbox), "toggled", in create_ui()
3219 G_CALLBACK (native_video_toggle_cb), app); in create_ui()
3220 g_signal_connect (G_OBJECT (app->download_checkbox), "toggled", in create_ui()
3221 G_CALLBACK (download_toggle_cb), app); in create_ui()
3222 g_signal_connect (G_OBJECT (app->buffering_checkbox), "toggled", in create_ui()
3223 G_CALLBACK (buffering_toggle_cb), app); in create_ui()
3224 g_signal_connect (G_OBJECT (app->deinterlace_checkbox), "toggled", in create_ui()
3225 G_CALLBACK (deinterlace_toggle_cb), app); in create_ui()
3226 g_signal_connect (G_OBJECT (app->soft_colorbalance_checkbox), "toggled", in create_ui()
3227 G_CALLBACK (soft_colorbalance_toggle_cb), app); in create_ui()
3228 g_signal_connect (G_OBJECT (app->mute_checkbox), "toggled", in create_ui()
3229 G_CALLBACK (mute_toggle_cb), app); in create_ui()
3230 g_signal_connect (G_OBJECT (app->volume_spinbutton), "value-changed", in create_ui()
3231 G_CALLBACK (volume_spinbutton_changed_cb), app); in create_ui()
3239 app); in create_ui()
3240 app->vis_combo = gtk_combo_box_text_new (); in create_ui()
3241 g_signal_connect (G_OBJECT (app->vis_combo), "changed", in create_ui()
3242 G_CALLBACK (vis_combo_cb), app); in create_ui()
3243 gtk_widget_set_sensitive (app->vis_combo, FALSE); in create_ui()
3245 gtk_box_pack_start (GTK_BOX (boxes2), app->vis_combo, TRUE, TRUE, 2); in create_ui()
3248 init_visualization_features (app); in create_ui()
3259 app->video_sink_entry = gtk_entry_new (); in create_ui()
3260 g_signal_connect (app->video_sink_entry, "activate", in create_ui()
3261 G_CALLBACK (video_sink_activate_cb), app); in create_ui()
3262 gtk_grid_attach (GTK_GRID (boxes3), app->video_sink_entry, 0, 1, 1, 1); in create_ui()
3266 app->audio_sink_entry = gtk_entry_new (); in create_ui()
3267 g_signal_connect (app->audio_sink_entry, "activate", in create_ui()
3268 G_CALLBACK (audio_sink_activate_cb), app); in create_ui()
3269 gtk_grid_attach (GTK_GRID (boxes3), app->audio_sink_entry, 1, 1, 1, 1); in create_ui()
3273 app->text_sink_entry = gtk_entry_new (); in create_ui()
3274 g_signal_connect (app->text_sink_entry, "activate", in create_ui()
3275 G_CALLBACK (text_sink_activate_cb), app); in create_ui()
3276 gtk_grid_attach (GTK_GRID (boxes3), app->text_sink_entry, 2, 1, 1, 1); in create_ui()
3280 app->buffer_size_entry = gtk_entry_new (); in create_ui()
3281 gtk_entry_set_text (GTK_ENTRY (app->buffer_size_entry), "-1"); in create_ui()
3282 g_signal_connect (app->buffer_size_entry, "activate", in create_ui()
3283 G_CALLBACK (buffer_size_activate_cb), app); in create_ui()
3284 gtk_grid_attach (GTK_GRID (boxes3), app->buffer_size_entry, 0, 3, 1, 1); in create_ui()
3288 app->buffer_duration_entry = gtk_entry_new (); in create_ui()
3289 gtk_entry_set_text (GTK_ENTRY (app->buffer_duration_entry), "-1"); in create_ui()
3290 g_signal_connect (app->buffer_duration_entry, "activate", in create_ui()
3291 G_CALLBACK (buffer_duration_activate_cb), app); in create_ui()
3292 gtk_grid_attach (GTK_GRID (boxes3), app->buffer_duration_entry, 1, 3, 1, 1); in create_ui()
3296 app->ringbuffer_maxsize_entry = gtk_entry_new (); in create_ui()
3297 gtk_entry_set_text (GTK_ENTRY (app->ringbuffer_maxsize_entry), "0"); in create_ui()
3298 g_signal_connect (app->ringbuffer_maxsize_entry, "activate", in create_ui()
3299 G_CALLBACK (ringbuffer_maxsize_activate_cb), app); in create_ui()
3300 gtk_grid_attach (GTK_GRID (boxes3), app->ringbuffer_maxsize_entry, 2, 3, 1, in create_ui()
3305 app->connection_speed_entry = gtk_entry_new (); in create_ui()
3306 gtk_entry_set_text (GTK_ENTRY (app->connection_speed_entry), "0"); in create_ui()
3307 g_signal_connect (app->connection_speed_entry, "activate", in create_ui()
3308 G_CALLBACK (connection_speed_activate_cb), app); in create_ui()
3309 gtk_grid_attach (GTK_GRID (boxes3), app->connection_speed_entry, 3, 3, 1, in create_ui()
3314 app->av_offset_entry = gtk_entry_new (); in create_ui()
3315 g_signal_connect (app->av_offset_entry, "activate", in create_ui()
3316 G_CALLBACK (av_offset_activate_cb), app); in create_ui()
3317 gtk_entry_set_text (GTK_ENTRY (app->av_offset_entry), "0"); in create_ui()
3318 g_signal_connect (app->av_offset_entry, "activate", in create_ui()
3319 G_CALLBACK (av_offset_activate_cb), app); in create_ui()
3320 gtk_grid_attach (GTK_GRID (boxes3), app->av_offset_entry, 4, 3, 1, 1); in create_ui()
3324 app->text_offset_entry = gtk_entry_new (); in create_ui()
3325 g_signal_connect (app->text_offset_entry, "activate", in create_ui()
3326 G_CALLBACK (text_offset_activate_cb), app); in create_ui()
3327 gtk_entry_set_text (GTK_ENTRY (app->text_offset_entry), "0"); in create_ui()
3328 g_signal_connect (app->text_offset_entry, "activate", in create_ui()
3329 G_CALLBACK (text_offset_activate_cb), app); in create_ui()
3330 gtk_grid_attach (GTK_GRID (boxes3), app->text_offset_entry, 5, 3, 1, 1); in create_ui()
3334 app->subtitle_encoding_entry = gtk_entry_new (); in create_ui()
3335 g_signal_connect (app->subtitle_encoding_entry, "activate", in create_ui()
3336 G_CALLBACK (subtitle_encoding_activate_cb), app); in create_ui()
3337 gtk_grid_attach (GTK_GRID (boxes3), app->subtitle_encoding_entry, 0, 5, 1, in create_ui()
3342 app->subtitle_fontdesc_button = gtk_font_button_new (); in create_ui()
3343 g_signal_connect (app->subtitle_fontdesc_button, "font-set", in create_ui()
3344 G_CALLBACK (subtitle_fontdesc_cb), app); in create_ui()
3345 gtk_grid_attach (GTK_GRID (boxes3), app->subtitle_fontdesc_button, 1, 5, 1, in create_ui()
3359 gtk_window_set_default_size (GTK_WINDOW (app->window), 250, 96); in create_ui()
3361 gtk_widget_set_size_request (GTK_WIDGET (app->video_window), -1, in create_ui()
3363 gtk_container_add (GTK_CONTAINER (app->window), vbox); in create_ui()
3364 gtk_box_pack_start (GTK_BOX (vbox), app->video_window, TRUE, TRUE, 2); in create_ui()
3378 gtk_box_pack_start (GTK_BOX (vbox), app->seek_scale, FALSE, FALSE, 2); in create_ui()
3379 gtk_box_pack_start (GTK_BOX (vbox), app->statusbar, FALSE, FALSE, 2); in create_ui()
3383 app); in create_ui()
3385 app); in create_ui()
3387 app); in create_ui()
3389 g_signal_connect (G_OBJECT (app->window), "delete-event", in create_ui()
3390 G_CALLBACK (delete_event_cb), app); in create_ui()
3397 set_defaults (PlaybackApp * app) in set_defaults() argument
3399 memset (app, 0, sizeof (PlaybackApp)); in set_defaults()
3401 app->flush_seek = TRUE; in set_defaults()
3402 app->scrub = TRUE; in set_defaults()
3403 app->rate = 1.0; in set_defaults()
3405 app->position = app->duration = -1; in set_defaults()
3406 app->state = GST_STATE_NULL; in set_defaults()
3408 app->need_streams = TRUE; in set_defaults()
3410 g_mutex_init (&app->state_mutex); in set_defaults()
3412 app->play_rate = 1.0; in set_defaults()
3416 reset_app (PlaybackApp * app) in reset_app() argument
3418 g_list_free (app->formats); in reset_app()
3420 g_mutex_clear (&app->state_mutex); in reset_app()
3422 if (app->overlay_element) in reset_app()
3423 gst_object_unref (app->overlay_element); in reset_app()
3424 if (app->navigation_element) in reset_app()
3425 gst_object_unref (app->navigation_element); in reset_app()
3427 g_list_foreach (app->paths, (GFunc) g_free, NULL); in reset_app()
3428 g_list_free (app->paths); in reset_app()
3429 g_list_foreach (app->sub_paths, (GFunc) g_free, NULL); in reset_app()
3430 g_list_free (app->sub_paths); in reset_app()
3431 if (app->vis_entries) in reset_app()
3432 g_array_free (app->vis_entries, TRUE); in reset_app()
3434 gst_object_unref (app->pipeline); in reset_app()
3440 PlaybackApp app; in main() local
3442 {"stats", 's', 0, G_OPTION_ARG_NONE, &app.stats, in main()
3444 {"verbose", 'v', 0, G_OPTION_ARG_NONE, &app.verbose, in main()
3451 set_defaults (&app); in main()
3473 app.pipeline_type = -1; in main()
3475 app.pipeline_type = atoi (argv[1]); in main()
3481 app.pipeline_type = i; in main()
3487 if (app.pipeline_type < 0 || app.pipeline_type >= G_N_ELEMENTS (pipelines)) { in main()
3492 app.pipeline_spec = argv[2]; in main()
3494 if (g_path_is_absolute (app.pipeline_spec) && in main()
3495 (g_strrstr (app.pipeline_spec, "*") != NULL || in main()
3496 g_strrstr (app.pipeline_spec, "?") != NULL)) { in main()
3497 app.paths = handle_wildcards (app.pipeline_spec); in main()
3499 app.paths = g_list_prepend (app.paths, g_strdup (app.pipeline_spec)); in main()
3502 if (!app.paths) { in main()
3503 g_print ("opening %s failed\n", app.pipeline_spec); in main()
3507 app.current_path = app.paths; in main()
3513 app.sub_paths = handle_wildcards (argv[3]); in main()
3515 app.sub_paths = g_list_prepend (app.sub_paths, g_strdup (argv[3])); in main()
3518 if (!app.sub_paths) { in main()
3523 app.current_sub_path = app.sub_paths; in main()
3526 pipelines[app.pipeline_type].func (&app, app.current_path->data); in main()
3527 if (!app.pipeline || !GST_IS_PIPELINE (app.pipeline)) { in main()
3532 create_ui (&app); in main()
3535 gtk_widget_show_all (app.window); in main()
3540 gtk_widget_realize (app.window); in main()
3544 g_assert (app.embed_xid != 0); in main()
3546 if (app.pipeline_type == 0) { in main()
3547 gst_video_overlay_set_window_handle (GST_VIDEO_OVERLAY (app.pipeline), in main()
3548 app.embed_xid); in main()
3552 if (app.verbose) { in main()
3553 g_signal_connect (app.pipeline, "deep_notify", in main()
3557 connect_bus_signals (&app); in main()
3562 gst_element_set_state (app.pipeline, GST_STATE_NULL); in main()
3564 reset_app (&app); in main()