Lines Matching full:app
97 PlayoutApp *app; member
121 static void playout_app_free (PlayoutApp * app);
122 static PlayoutItem *playout_item_new (PlayoutApp * app, const gchar * fn);
125 static void playout_app_add_item (PlayoutApp * app, const gchar * fn);
128 static gboolean playout_app_activate_next_item (PlayoutApp * app);
129 static gboolean playout_app_activate_next_item_early (PlayoutApp * app);
130 static PlayoutItem *playout_app_get_current_item (PlayoutApp * app);
134 playout_app_add_audio_sink (PlayoutApp * app) in playout_app_add_audio_sink() argument
141 app->audio_mixer = gst_element_factory_make ("audiomixer", "audio_mixer"); in playout_app_add_audio_sink()
146 app->audio_sink = gst_element_factory_make ("autoaudiosink", NULL); in playout_app_add_audio_sink()
147 g_object_set (app->audio_sink, "async-handling", TRUE, NULL); in playout_app_add_audio_sink()
148 gst_bin_add_many (GST_BIN (app->pipeline), app->audio_mixer, audio_conv, in playout_app_add_audio_sink()
149 audio_resample, queue, app->audio_sink, NULL); in playout_app_add_audio_sink()
150 gst_element_link_many (app->audio_mixer, audio_conv, audio_resample, in playout_app_add_audio_sink()
151 queue, app->audio_sink, NULL); in playout_app_add_audio_sink()
153 if (!gst_element_sync_state_with_parent (app->audio_mixer) || in playout_app_add_audio_sink()
157 !gst_element_sync_state_with_parent (app->audio_sink)) in playout_app_add_audio_sink()
158 GST_ERROR ("app: unable to sync audio mixer + sink state with pipeline"); in playout_app_add_audio_sink()
166 PlayoutApp *app; in playout_app_new() local
168 app = g_new0 (PlayoutApp, 1); in playout_app_new()
170 app->state = PLAYOUT_APP_STATE_READY; in playout_app_new()
172 app->play_queue = in playout_app_new()
174 app->play_queue_current = -1; in playout_app_new()
175 g_mutex_init (&app->play_queue_lock); in playout_app_new()
177 app->main_loop = g_main_loop_new (NULL, FALSE); in playout_app_new()
179 app->pipeline = gst_pipeline_new ("pipeline"); in playout_app_new()
182 app->video_orect.w = OUTPUT_VIDEO_WIDTH; in playout_app_new()
183 app->video_orect.h = OUTPUT_VIDEO_HEIGHT; in playout_app_new()
184 app->video_orect.x = 0; in playout_app_new()
185 app->video_orect.y = 0; in playout_app_new()
186 app->video_mixer = gst_element_factory_make ("compositor", "video_mixer"); in playout_app_new()
190 g_object_set (app->video_mixer, "background", 1, NULL); in playout_app_new()
192 app->video_sink = gst_element_factory_make ("autovideosink", NULL); in playout_app_new()
193 g_object_set (app->video_sink, "async-handling", TRUE, NULL); in playout_app_new()
199 gst_bin_add_many (GST_BIN (app->pipeline), app->video_mixer, video_capsfilter, in playout_app_new()
200 queue, app->video_sink, NULL); in playout_app_new()
201 gst_element_link_many (app->video_mixer, video_capsfilter, queue, in playout_app_new()
202 app->video_sink, NULL); in playout_app_new()
204 return app; in playout_app_new()
208 playout_app_free (PlayoutApp * app) in playout_app_free() argument
210 GST_DEBUG ("Freeing app"); in playout_app_free()
211 g_ptr_array_unref (app->play_queue); in playout_app_free()
212 g_main_loop_unref (app->main_loop); in playout_app_free()
213 gst_element_set_state (app->pipeline, GST_STATE_NULL); in playout_app_free()
214 gst_object_unref (app->pipeline); in playout_app_free()
215 g_free (app); in playout_app_free()
219 playout_app_eos (GstBus * bus, GstMessage * msg, PlayoutApp * app) in playout_app_eos() argument
222 g_main_loop_quit (app->main_loop); in playout_app_eos()
226 playout_item_new (PlayoutApp * app, const gchar * fn) in playout_item_new() argument
230 item->app = app; in playout_item_new()
311 current_item = playout_app_get_current_item (prev_item->app); in playout_item_pad_probe_video_pad_eos_on_buffer()
395 item->app->elapsed_duration += item->running_time; in playout_item_pad_probe_event()
399 ret = playout_app_activate_next_item (item->app); in playout_item_pad_probe_event()
401 GST_DEBUG ("%s: App is going EOS", item->fn); in playout_item_pad_probe_event()
403 item->app->state = PLAYOUT_APP_STATE_EOS; in playout_item_pad_probe_event()
415 if (item->app->state != PLAYOUT_APP_STATE_EOS) { in playout_item_pad_probe_event()
441 * the item from the app, so we queue it for 100ms afterwards */ in playout_item_pad_probe_event()
456 if (item->app->state != PLAYOUT_APP_STATE_EOS) { in playout_item_pad_probe_event()
459 next_item = playout_app_get_current_item (item->app); in playout_item_pad_probe_event()
527 if (item->app->audio_sink == NULL) in playout_item_new_pad()
528 playout_app_add_audio_sink (item->app); in playout_item_new_pad()
622 /* If the app is already playing an item, block everything except queries in playout_item_new_pad()
624 if (item->app->state != PLAYOUT_APP_STATE_READY) in playout_item_new_pad()
658 if (item->app->state != PLAYOUT_APP_STATE_READY) in playout_item_no_more_pads()
667 item->app->state = PLAYOUT_APP_STATE_PLAYING; in playout_item_no_more_pads()
669 if (item->app->play_queue->len > 1) in playout_item_no_more_pads()
670 playout_app_prepare_item (g_ptr_array_index (item->app->play_queue, 1)); in playout_item_no_more_pads()
716 gst_bin_remove (GST_BIN (item->app->pipeline), item->decoder); in playout_item_free()
739 playout_app_add_item (PlayoutApp * app, const gchar * fn) in playout_app_add_item() argument
743 item = playout_item_new (app, fn); in playout_app_add_item()
745 g_mutex_lock (&app->play_queue_lock); in playout_app_add_item()
746 g_ptr_array_add (app->play_queue, item); in playout_app_add_item()
747 g_mutex_unlock (&app->play_queue_lock); in playout_app_add_item()
753 PlayoutApp *app; in playout_app_remove_item() local
756 app = item->app; in playout_app_remove_item()
758 g_mutex_lock (&app->play_queue_lock); in playout_app_remove_item()
759 g_ptr_array_remove (app->play_queue, item); in playout_app_remove_item()
762 app->play_queue_current--; in playout_app_remove_item()
763 g_mutex_unlock (&app->play_queue_lock); in playout_app_remove_item()
770 playout_app_get_current_item (PlayoutApp * app) in playout_app_get_current_item() argument
772 if (app->play_queue_current < 0 || in playout_app_get_current_item()
773 app->play_queue->len < (app->play_queue_current + 1)) in playout_app_get_current_item()
776 return g_ptr_array_index (app->play_queue, app->play_queue_current); in playout_app_get_current_item()
782 PlayoutApp *app = item->app; in playout_app_prepare_item() local
792 gst_bin_add (GST_BIN (app->pipeline), item->decoder); in playout_app_prepare_item()
812 PlayoutApp *app = item->app; in playout_app_activate_item() local
827 sinkpad = gst_element_request_pad_simple (app->audio_mixer, "sink_%u"); in playout_app_activate_item()
839 if (app->elapsed_duration > segment_time) in playout_app_activate_item()
840 app->elapsed_duration -= segment_time; in playout_app_activate_item()
842 app->elapsed_duration = 0; in playout_app_activate_item()
845 if (app->elapsed_duration > 0) { in playout_app_activate_item()
847 item->fn, app->elapsed_duration / GST_MSECOND); in playout_app_activate_item()
848 gst_pad_set_offset (item->audio_pad, app->elapsed_duration); in playout_app_activate_item()
860 sinkpad = gst_element_request_pad_simple (app->video_mixer, "sink_%u"); in playout_app_activate_item()
864 gst_video_sink_center_rect (item->video_irect, item->app->video_orect, in playout_app_activate_item()
875 if (item->app->play_queue->len != (item->app->play_queue_current + 2)) in playout_app_activate_item()
881 if (app->elapsed_duration > 0) { in playout_app_activate_item()
883 item->fn, app->elapsed_duration / GST_MSECOND); in playout_app_activate_item()
884 gst_pad_set_offset (item->video_pad, app->elapsed_duration); in playout_app_activate_item()
895 g_mutex_lock (&item->app->play_queue_lock); in playout_app_activate_item()
896 item->app->play_queue_current++; in playout_app_activate_item()
897 g_mutex_unlock (&item->app->play_queue_lock); in playout_app_activate_item()
906 playout_app_activate_next_item (PlayoutApp * app) in playout_app_activate_next_item() argument
911 if (app->play_queue->len < (app->play_queue_current + 2)) { in playout_app_activate_next_item()
916 item = g_ptr_array_index (app->play_queue, app->play_queue_current + 1); in playout_app_activate_next_item()
923 if (app->play_queue->len > (app->play_queue_current + 1)) { in playout_app_activate_next_item()
924 item = g_ptr_array_index (app->play_queue, app->play_queue_current + 1); in playout_app_activate_next_item()
971 playout_app_activate_next_item_early (PlayoutApp * app) in playout_app_activate_next_item_early() argument
975 item = playout_app_get_current_item (app); in playout_app_activate_next_item_early()
1005 playout_app_play (PlayoutApp * app) in playout_app_play() argument
1009 item = app->play_queue->len ? g_ptr_array_index (app->play_queue, 0) : NULL; in playout_app_play()
1053 PlayoutApp *app; in main() local
1079 GST_DEBUG_CATEGORY_INIT (playout, "playout", 0, "Playout example app"); in main()
1081 app = playout_app_new (); in main()
1084 playout_app_add_item (app, *f); in main()
1088 if (!playout_app_play (app)) in main()
1093 bus = gst_pipeline_get_bus (GST_PIPELINE (app->pipeline)); in main()
1095 g_signal_connect (bus, "message::eos", G_CALLBACK (playout_app_eos), app); in main()
1098 gst_element_set_state (app->pipeline, GST_STATE_PLAYING); in main()
1102 (GSourceFunc) playout_app_activate_next_item_early, app); in main()
1105 g_main_loop_run (app->main_loop); in main()
1107 playout_app_free (app); in main()