Lines Matching refs:overlay

262 static void gst_base_text_overlay_init (GstBaseTextOverlay * overlay,
269 GstBaseTextOverlay * overlay, GstCaps * filter);
271 GstBaseTextOverlay * overlay, GstCaps * filter);
272 static gboolean gst_base_text_overlay_setcaps (GstBaseTextOverlay * overlay,
274 static gboolean gst_base_text_overlay_setcaps_txt (GstBaseTextOverlay * overlay,
296 static void gst_base_text_overlay_pop_text (GstBaseTextOverlay * overlay);
305 gst_base_text_overlay_adjust_values_with_fontdesc (GstBaseTextOverlay * overlay,
310 gst_base_text_overlay_update_render_size (GstBaseTextOverlay * overlay);
339 gst_base_text_overlay_get_text (GstBaseTextOverlay * overlay, in gst_base_text_overlay_get_text() argument
342 return g_strdup (overlay->default_text); in gst_base_text_overlay_get_text()
638 GstBaseTextOverlay *overlay = GST_BASE_TEXT_OVERLAY (object); in gst_base_text_overlay_finalize() local
640 g_free (overlay->default_text); in gst_base_text_overlay_finalize()
642 if (overlay->composition) { in gst_base_text_overlay_finalize()
643 gst_video_overlay_composition_unref (overlay->composition); in gst_base_text_overlay_finalize()
644 overlay->composition = NULL; in gst_base_text_overlay_finalize()
647 if (overlay->text_image) { in gst_base_text_overlay_finalize()
648 gst_buffer_unref (overlay->text_image); in gst_base_text_overlay_finalize()
649 overlay->text_image = NULL; in gst_base_text_overlay_finalize()
652 if (overlay->layout) { in gst_base_text_overlay_finalize()
653 g_object_unref (overlay->layout); in gst_base_text_overlay_finalize()
654 overlay->layout = NULL; in gst_base_text_overlay_finalize()
657 if (overlay->text_buffer) { in gst_base_text_overlay_finalize()
658 gst_buffer_unref (overlay->text_buffer); in gst_base_text_overlay_finalize()
659 overlay->text_buffer = NULL; in gst_base_text_overlay_finalize()
662 if (overlay->pango_context) { in gst_base_text_overlay_finalize()
663 g_object_unref (overlay->pango_context); in gst_base_text_overlay_finalize()
664 overlay->pango_context = NULL; in gst_base_text_overlay_finalize()
667 g_mutex_clear (&overlay->lock); in gst_base_text_overlay_finalize()
668 g_cond_clear (&overlay->cond); in gst_base_text_overlay_finalize()
674 gst_base_text_overlay_init (GstBaseTextOverlay * overlay, in gst_base_text_overlay_init() argument
682 overlay->pango_context = in gst_base_text_overlay_init()
685 pango_context_set_base_gravity (overlay->pango_context, PANGO_GRAVITY_SOUTH); in gst_base_text_overlay_init()
689 overlay->video_sinkpad = gst_pad_new_from_template (template, "video_sink"); in gst_base_text_overlay_init()
691 gst_pad_set_event_function (overlay->video_sinkpad, in gst_base_text_overlay_init()
693 gst_pad_set_chain_function (overlay->video_sinkpad, in gst_base_text_overlay_init()
695 gst_pad_set_query_function (overlay->video_sinkpad, in gst_base_text_overlay_init()
697 GST_PAD_SET_PROXY_ALLOCATION (overlay->video_sinkpad); in gst_base_text_overlay_init()
698 gst_element_add_pad (GST_ELEMENT (overlay), overlay->video_sinkpad); in gst_base_text_overlay_init()
705 overlay->text_sinkpad = gst_pad_new_from_template (template, "text_sink"); in gst_base_text_overlay_init()
707 gst_pad_set_event_function (overlay->text_sinkpad, in gst_base_text_overlay_init()
709 gst_pad_set_chain_function (overlay->text_sinkpad, in gst_base_text_overlay_init()
711 gst_pad_set_link_function (overlay->text_sinkpad, in gst_base_text_overlay_init()
713 gst_pad_set_unlink_function (overlay->text_sinkpad, in gst_base_text_overlay_init()
715 gst_element_add_pad (GST_ELEMENT (overlay), overlay->text_sinkpad); in gst_base_text_overlay_init()
720 overlay->srcpad = gst_pad_new_from_template (template, "src"); in gst_base_text_overlay_init()
722 gst_pad_set_event_function (overlay->srcpad, in gst_base_text_overlay_init()
724 gst_pad_set_query_function (overlay->srcpad, in gst_base_text_overlay_init()
726 gst_element_add_pad (GST_ELEMENT (overlay), overlay->srcpad); in gst_base_text_overlay_init()
728 overlay->layout = pango_layout_new (overlay->pango_context); in gst_base_text_overlay_init()
729 desc = pango_context_get_font_description (overlay->pango_context); in gst_base_text_overlay_init()
730 gst_base_text_overlay_adjust_values_with_fontdesc (overlay, desc); in gst_base_text_overlay_init()
732 overlay->color = DEFAULT_PROP_COLOR; in gst_base_text_overlay_init()
733 overlay->outline_color = DEFAULT_PROP_OUTLINE_COLOR; in gst_base_text_overlay_init()
734 overlay->halign = DEFAULT_PROP_HALIGNMENT; in gst_base_text_overlay_init()
735 overlay->valign = DEFAULT_PROP_VALIGNMENT; in gst_base_text_overlay_init()
736 overlay->xpad = DEFAULT_PROP_XPAD; in gst_base_text_overlay_init()
737 overlay->ypad = DEFAULT_PROP_YPAD; in gst_base_text_overlay_init()
738 overlay->deltax = DEFAULT_PROP_DELTAX; in gst_base_text_overlay_init()
739 overlay->deltay = DEFAULT_PROP_DELTAY; in gst_base_text_overlay_init()
740 overlay->xpos = DEFAULT_PROP_XPOS; in gst_base_text_overlay_init()
741 overlay->ypos = DEFAULT_PROP_YPOS; in gst_base_text_overlay_init()
743 overlay->wrap_mode = DEFAULT_PROP_WRAP_MODE; in gst_base_text_overlay_init()
745 overlay->want_shading = DEFAULT_PROP_SHADING; in gst_base_text_overlay_init()
746 overlay->shading_value = DEFAULT_PROP_SHADING_VALUE; in gst_base_text_overlay_init()
747 overlay->silent = DEFAULT_PROP_SILENT; in gst_base_text_overlay_init()
748 overlay->draw_shadow = DEFAULT_PROP_DRAW_SHADOW; in gst_base_text_overlay_init()
749 overlay->draw_outline = DEFAULT_PROP_DRAW_OUTLINE; in gst_base_text_overlay_init()
750 overlay->wait_text = DEFAULT_PROP_WAIT_TEXT; in gst_base_text_overlay_init()
751 overlay->auto_adjust_size = DEFAULT_PROP_AUTO_ADJUST_SIZE; in gst_base_text_overlay_init()
753 overlay->default_text = g_strdup (DEFAULT_PROP_TEXT); in gst_base_text_overlay_init()
754 overlay->need_render = TRUE; in gst_base_text_overlay_init()
755 overlay->text_image = NULL; in gst_base_text_overlay_init()
756 overlay->use_vertical_render = DEFAULT_PROP_VERTICAL_RENDER; in gst_base_text_overlay_init()
757 overlay->scale_mode = DEFAULT_PROP_SCALE_MODE; in gst_base_text_overlay_init()
758 overlay->scale_par_n = DEFAULT_PROP_SCALE_PAR_N; in gst_base_text_overlay_init()
759 overlay->scale_par_d = DEFAULT_PROP_SCALE_PAR_D; in gst_base_text_overlay_init()
761 overlay->line_align = DEFAULT_PROP_LINE_ALIGNMENT; in gst_base_text_overlay_init()
762 pango_layout_set_alignment (overlay->layout, in gst_base_text_overlay_init()
763 (PangoAlignment) overlay->line_align); in gst_base_text_overlay_init()
765 overlay->text_buffer = NULL; in gst_base_text_overlay_init()
766 overlay->text_linked = FALSE; in gst_base_text_overlay_init()
768 overlay->composition = NULL; in gst_base_text_overlay_init()
769 overlay->upstream_composition = NULL; in gst_base_text_overlay_init()
771 overlay->width = 1; in gst_base_text_overlay_init()
772 overlay->height = 1; in gst_base_text_overlay_init()
774 overlay->window_width = 1; in gst_base_text_overlay_init()
775 overlay->window_height = 1; in gst_base_text_overlay_init()
777 overlay->text_width = DEFAULT_PROP_TEXT_WIDTH; in gst_base_text_overlay_init()
778 overlay->text_height = DEFAULT_PROP_TEXT_HEIGHT; in gst_base_text_overlay_init()
780 overlay->text_x = DEFAULT_PROP_TEXT_X; in gst_base_text_overlay_init()
781 overlay->text_y = DEFAULT_PROP_TEXT_Y; in gst_base_text_overlay_init()
783 overlay->render_width = 1; in gst_base_text_overlay_init()
784 overlay->render_height = 1; in gst_base_text_overlay_init()
785 overlay->render_scale = 1.0l; in gst_base_text_overlay_init()
787 g_mutex_init (&overlay->lock); in gst_base_text_overlay_init()
788 g_cond_init (&overlay->cond); in gst_base_text_overlay_init()
789 gst_segment_init (&overlay->segment, GST_FORMAT_TIME); in gst_base_text_overlay_init()
793 gst_base_text_overlay_set_wrap_mode (GstBaseTextOverlay * overlay, gint width) in gst_base_text_overlay_set_wrap_mode() argument
795 if (overlay->wrap_mode == GST_BASE_TEXT_OVERLAY_WRAP_MODE_NONE) { in gst_base_text_overlay_set_wrap_mode()
796 GST_DEBUG_OBJECT (overlay, "Set wrap mode NONE"); in gst_base_text_overlay_set_wrap_mode()
797 pango_layout_set_width (overlay->layout, -1); in gst_base_text_overlay_set_wrap_mode()
801 GST_DEBUG_OBJECT (overlay, "Set layout width %d", width); in gst_base_text_overlay_set_wrap_mode()
802 GST_DEBUG_OBJECT (overlay, "Set wrap mode %d", overlay->wrap_mode); in gst_base_text_overlay_set_wrap_mode()
803 pango_layout_set_width (overlay->layout, width); in gst_base_text_overlay_set_wrap_mode()
806 pango_layout_set_wrap (overlay->layout, (PangoWrapMode) overlay->wrap_mode); in gst_base_text_overlay_set_wrap_mode()
810 gst_base_text_overlay_setcaps_txt (GstBaseTextOverlay * overlay, GstCaps * caps) in gst_base_text_overlay_setcaps_txt() argument
817 overlay->have_pango_markup = (strcmp (format, "pango-markup") == 0); in gst_base_text_overlay_setcaps_txt()
824 gst_base_text_overlay_negotiate (GstBaseTextOverlay * overlay, GstCaps * caps) in gst_base_text_overlay_negotiate() argument
837 GST_DEBUG_OBJECT (overlay, "performing negotiation"); in gst_base_text_overlay_negotiate()
840 gst_pad_check_reconfigure (overlay->srcpad); in gst_base_text_overlay_negotiate()
843 caps = gst_pad_get_current_caps (overlay->video_sinkpad); in gst_base_text_overlay_negotiate()
857 width = overlay->width; in gst_base_text_overlay_negotiate()
858 height = overlay->height; in gst_base_text_overlay_negotiate()
877 peercaps = gst_pad_peer_query_caps (overlay->srcpad, overlay_caps); in gst_base_text_overlay_negotiate()
881 GST_DEBUG_OBJECT (overlay, "caps have overlay meta %d", caps_has_meta); in gst_base_text_overlay_negotiate()
887 ret = gst_pad_set_caps (overlay->srcpad, overlay_caps); in gst_base_text_overlay_negotiate()
892 if (!gst_pad_peer_query (overlay->srcpad, query)) { in gst_base_text_overlay_negotiate()
894 GST_DEBUG_OBJECT (overlay, "ALLOCATION query failed"); in gst_base_text_overlay_negotiate()
898 if (overlay->video_flushing) in gst_base_text_overlay_negotiate()
905 GST_DEBUG_OBJECT (overlay, "sink alloc has overlay meta %d", in gst_base_text_overlay_negotiate()
915 GST_DEBUG_OBJECT (overlay, "received window size: %dx%d", width, in gst_base_text_overlay_negotiate()
926 overlay->window_width = width; in gst_base_text_overlay_negotiate()
927 overlay->window_height = height; in gst_base_text_overlay_negotiate()
928 gst_base_text_overlay_update_render_size (overlay); in gst_base_text_overlay_negotiate()
950 GST_DEBUG_OBJECT (overlay, "Using caps %" GST_PTR_FORMAT, overlay_caps); in gst_base_text_overlay_negotiate()
953 GST_DEBUG_OBJECT (overlay, "Using caps %" GST_PTR_FORMAT, caps); in gst_base_text_overlay_negotiate()
954 ret = gst_pad_set_caps (overlay->srcpad, caps); in gst_base_text_overlay_negotiate()
957 overlay->attach_compo_to_buffer = attach; in gst_base_text_overlay_negotiate()
960 GST_DEBUG_OBJECT (overlay, "negotiation failed, schedule reconfigure"); in gst_base_text_overlay_negotiate()
961 gst_pad_mark_reconfigure (overlay->srcpad); in gst_base_text_overlay_negotiate()
973 gst_pad_mark_reconfigure (overlay->srcpad); in gst_base_text_overlay_negotiate()
992 gst_base_text_overlay_setcaps (GstBaseTextOverlay * overlay, GstCaps * caps) in gst_base_text_overlay_setcaps() argument
1001 if (GST_VIDEO_INFO_WIDTH (&info) != GST_VIDEO_INFO_WIDTH (&overlay->info) || in gst_base_text_overlay_setcaps()
1002 GST_VIDEO_INFO_HEIGHT (&info) != GST_VIDEO_INFO_HEIGHT (&overlay->info)) in gst_base_text_overlay_setcaps()
1003 overlay->need_render = TRUE; in gst_base_text_overlay_setcaps()
1005 overlay->info = info; in gst_base_text_overlay_setcaps()
1006 overlay->format = GST_VIDEO_INFO_FORMAT (&info); in gst_base_text_overlay_setcaps()
1007 overlay->width = GST_VIDEO_INFO_WIDTH (&info); in gst_base_text_overlay_setcaps()
1008 overlay->height = GST_VIDEO_INFO_HEIGHT (&info); in gst_base_text_overlay_setcaps()
1010 ret = gst_base_text_overlay_negotiate (overlay, caps); in gst_base_text_overlay_setcaps()
1012 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_setcaps()
1014 if (!overlay->attach_compo_to_buffer && in gst_base_text_overlay_setcaps()
1016 GST_DEBUG_OBJECT (overlay, "unsupported caps %" GST_PTR_FORMAT, caps); in gst_base_text_overlay_setcaps()
1019 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_setcaps()
1026 GST_DEBUG_OBJECT (overlay, "could not parse caps"); in gst_base_text_overlay_setcaps()
1035 GstBaseTextOverlay *overlay = GST_BASE_TEXT_OVERLAY (object); in gst_base_text_overlay_set_property() local
1037 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_set_property()
1040 g_free (overlay->default_text); in gst_base_text_overlay_set_property()
1041 overlay->default_text = g_value_dup_string (value); in gst_base_text_overlay_set_property()
1044 overlay->want_shading = g_value_get_boolean (value); in gst_base_text_overlay_set_property()
1047 overlay->xpad = g_value_get_int (value); in gst_base_text_overlay_set_property()
1050 overlay->ypad = g_value_get_int (value); in gst_base_text_overlay_set_property()
1053 overlay->deltax = g_value_get_int (value); in gst_base_text_overlay_set_property()
1056 overlay->deltay = g_value_get_int (value); in gst_base_text_overlay_set_property()
1059 overlay->xpos = g_value_get_double (value); in gst_base_text_overlay_set_property()
1062 overlay->ypos = g_value_get_double (value); in gst_base_text_overlay_set_property()
1065 overlay->xpos = g_value_get_double (value); in gst_base_text_overlay_set_property()
1068 overlay->ypos = g_value_get_double (value); in gst_base_text_overlay_set_property()
1071 overlay->valign = g_value_get_enum (value); in gst_base_text_overlay_set_property()
1074 overlay->halign = g_value_get_enum (value); in gst_base_text_overlay_set_property()
1077 overlay->wrap_mode = g_value_get_enum (value); in gst_base_text_overlay_set_property()
1087 GST_LOG_OBJECT (overlay, "font description set: %s", fontdesc_str); in gst_base_text_overlay_set_property()
1088 pango_layout_set_font_description (overlay->layout, desc); in gst_base_text_overlay_set_property()
1089 gst_base_text_overlay_adjust_values_with_fontdesc (overlay, desc); in gst_base_text_overlay_set_property()
1092 GST_WARNING_OBJECT (overlay, "font description parse failed: %s", in gst_base_text_overlay_set_property()
1098 overlay->color = g_value_get_uint (value); in gst_base_text_overlay_set_property()
1101 overlay->outline_color = g_value_get_uint (value); in gst_base_text_overlay_set_property()
1104 overlay->silent = g_value_get_boolean (value); in gst_base_text_overlay_set_property()
1107 overlay->draw_shadow = g_value_get_boolean (value); in gst_base_text_overlay_set_property()
1110 overlay->draw_outline = g_value_get_boolean (value); in gst_base_text_overlay_set_property()
1113 overlay->line_align = g_value_get_enum (value); in gst_base_text_overlay_set_property()
1114 pango_layout_set_alignment (overlay->layout, in gst_base_text_overlay_set_property()
1115 (PangoAlignment) overlay->line_align); in gst_base_text_overlay_set_property()
1118 overlay->wait_text = g_value_get_boolean (value); in gst_base_text_overlay_set_property()
1121 overlay->auto_adjust_size = g_value_get_boolean (value); in gst_base_text_overlay_set_property()
1124 overlay->use_vertical_render = g_value_get_boolean (value); in gst_base_text_overlay_set_property()
1125 if (overlay->use_vertical_render) { in gst_base_text_overlay_set_property()
1126 overlay->valign = GST_BASE_TEXT_OVERLAY_VALIGN_TOP; in gst_base_text_overlay_set_property()
1127 overlay->halign = GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT; in gst_base_text_overlay_set_property()
1128 overlay->line_align = GST_BASE_TEXT_OVERLAY_LINE_ALIGN_LEFT; in gst_base_text_overlay_set_property()
1129 pango_layout_set_alignment (overlay->layout, in gst_base_text_overlay_set_property()
1130 (PangoAlignment) overlay->line_align); in gst_base_text_overlay_set_property()
1134 overlay->scale_mode = g_value_get_enum (value); in gst_base_text_overlay_set_property()
1137 overlay->scale_par_n = gst_value_get_fraction_numerator (value); in gst_base_text_overlay_set_property()
1138 overlay->scale_par_d = gst_value_get_fraction_denominator (value); in gst_base_text_overlay_set_property()
1141 overlay->shading_value = g_value_get_uint (value); in gst_base_text_overlay_set_property()
1148 overlay->need_render = TRUE; in gst_base_text_overlay_set_property()
1149 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_set_property()
1156 GstBaseTextOverlay *overlay = GST_BASE_TEXT_OVERLAY (object); in gst_base_text_overlay_get_property() local
1158 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_get_property()
1161 g_value_set_string (value, overlay->default_text); in gst_base_text_overlay_get_property()
1164 g_value_set_boolean (value, overlay->want_shading); in gst_base_text_overlay_get_property()
1167 g_value_set_int (value, overlay->xpad); in gst_base_text_overlay_get_property()
1170 g_value_set_int (value, overlay->ypad); in gst_base_text_overlay_get_property()
1173 g_value_set_int (value, overlay->deltax); in gst_base_text_overlay_get_property()
1176 g_value_set_int (value, overlay->deltay); in gst_base_text_overlay_get_property()
1179 g_value_set_double (value, overlay->xpos); in gst_base_text_overlay_get_property()
1182 g_value_set_double (value, overlay->ypos); in gst_base_text_overlay_get_property()
1185 g_value_set_double (value, overlay->xpos); in gst_base_text_overlay_get_property()
1188 g_value_set_double (value, overlay->ypos); in gst_base_text_overlay_get_property()
1191 g_value_set_enum (value, overlay->valign); in gst_base_text_overlay_get_property()
1194 g_value_set_enum (value, overlay->halign); in gst_base_text_overlay_get_property()
1197 g_value_set_enum (value, overlay->wrap_mode); in gst_base_text_overlay_get_property()
1200 g_value_set_boolean (value, overlay->silent); in gst_base_text_overlay_get_property()
1203 g_value_set_boolean (value, overlay->draw_shadow); in gst_base_text_overlay_get_property()
1206 g_value_set_boolean (value, overlay->draw_outline); in gst_base_text_overlay_get_property()
1209 g_value_set_enum (value, overlay->line_align); in gst_base_text_overlay_get_property()
1212 g_value_set_boolean (value, overlay->wait_text); in gst_base_text_overlay_get_property()
1215 g_value_set_boolean (value, overlay->auto_adjust_size); in gst_base_text_overlay_get_property()
1218 g_value_set_boolean (value, overlay->use_vertical_render); in gst_base_text_overlay_get_property()
1221 g_value_set_enum (value, overlay->scale_mode); in gst_base_text_overlay_get_property()
1224 gst_value_set_fraction (value, overlay->scale_par_n, in gst_base_text_overlay_get_property()
1225 overlay->scale_par_d); in gst_base_text_overlay_get_property()
1228 g_value_set_uint (value, overlay->color); in gst_base_text_overlay_get_property()
1231 g_value_set_uint (value, overlay->outline_color); in gst_base_text_overlay_get_property()
1234 g_value_set_uint (value, overlay->shading_value); in gst_base_text_overlay_get_property()
1240 desc = pango_layout_get_font_description (overlay->layout); in gst_base_text_overlay_get_property()
1249 g_value_set_int (value, overlay->text_x); in gst_base_text_overlay_get_property()
1252 g_value_set_int (value, overlay->text_y); in gst_base_text_overlay_get_property()
1255 g_value_set_uint (value, overlay->text_width); in gst_base_text_overlay_get_property()
1258 g_value_set_uint (value, overlay->text_height); in gst_base_text_overlay_get_property()
1265 overlay->need_render = TRUE; in gst_base_text_overlay_get_property()
1266 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_get_property()
1274 GstBaseTextOverlay *overlay; in gst_base_text_overlay_src_query() local
1276 overlay = GST_BASE_TEXT_OVERLAY (parent); in gst_base_text_overlay_src_query()
1284 caps = gst_base_text_overlay_get_src_caps (pad, overlay, filter); in gst_base_text_overlay_src_query()
1299 gst_base_text_overlay_update_render_size (GstBaseTextOverlay * overlay) in gst_base_text_overlay_update_render_size() argument
1301 gdouble video_aspect = (gdouble) overlay->width / (gdouble) overlay->height; in gst_base_text_overlay_update_render_size()
1302 gdouble window_aspect = (gdouble) overlay->window_width / in gst_base_text_overlay_update_render_size()
1303 (gdouble) overlay->window_height; in gst_base_text_overlay_update_render_size()
1309 text_buffer_width = overlay->window_width; in gst_base_text_overlay_update_render_size()
1310 text_buffer_height = window_aspect * overlay->window_height / video_aspect; in gst_base_text_overlay_update_render_size()
1312 text_buffer_width = video_aspect * overlay->window_width / window_aspect; in gst_base_text_overlay_update_render_size()
1313 text_buffer_height = overlay->window_height; in gst_base_text_overlay_update_render_size()
1316 if ((overlay->render_width == text_buffer_width) && in gst_base_text_overlay_update_render_size()
1317 (overlay->render_height == text_buffer_height)) in gst_base_text_overlay_update_render_size()
1320 overlay->need_render = TRUE; in gst_base_text_overlay_update_render_size()
1321 overlay->render_width = text_buffer_width; in gst_base_text_overlay_update_render_size()
1322 overlay->render_height = text_buffer_height; in gst_base_text_overlay_update_render_size()
1323 overlay->render_scale = (gdouble) overlay->render_width / in gst_base_text_overlay_update_render_size()
1324 (gdouble) overlay->width; in gst_base_text_overlay_update_render_size()
1327 "and render scale %f", overlay->render_width, overlay->render_height, in gst_base_text_overlay_update_render_size()
1328 overlay->width, overlay->height, overlay->window_width, in gst_base_text_overlay_update_render_size()
1329 overlay->window_height, overlay->render_scale); in gst_base_text_overlay_update_render_size()
1336 GstBaseTextOverlay *overlay; in gst_base_text_overlay_src_event() local
1339 overlay = GST_BASE_TEXT_OVERLAY (parent); in gst_base_text_overlay_src_event()
1341 if (overlay->text_linked) { in gst_base_text_overlay_src_event()
1343 ret = gst_pad_push_event (overlay->video_sinkpad, event); in gst_base_text_overlay_src_event()
1344 gst_pad_push_event (overlay->text_sinkpad, event); in gst_base_text_overlay_src_event()
1346 ret = gst_pad_push_event (overlay->video_sinkpad, event); in gst_base_text_overlay_src_event()
1433 GstBaseTextOverlay * overlay, GstCaps * filter) in gst_base_text_overlay_get_videosink_caps() argument
1435 GstPad *srcpad = overlay->srcpad; in gst_base_text_overlay_get_videosink_caps()
1446 GST_DEBUG_OBJECT (overlay, "overlay filter %" GST_PTR_FORMAT, in gst_base_text_overlay_get_videosink_caps()
1486 GST_DEBUG_OBJECT (overlay, "returning %" GST_PTR_FORMAT, caps); in gst_base_text_overlay_get_videosink_caps()
1492 gst_base_text_overlay_get_src_caps (GstPad * pad, GstBaseTextOverlay * overlay, in gst_base_text_overlay_get_src_caps() argument
1495 GstPad *sinkpad = overlay->video_sinkpad; in gst_base_text_overlay_get_src_caps()
1548 GST_DEBUG_OBJECT (overlay, "returning %" GST_PTR_FORMAT, caps); in gst_base_text_overlay_get_src_caps()
1554 gst_base_text_overlay_adjust_values_with_fontdesc (GstBaseTextOverlay * overlay, in gst_base_text_overlay_adjust_values_with_fontdesc() argument
1558 overlay->shadow_offset = (double) (font_size) / 13.0; in gst_base_text_overlay_adjust_values_with_fontdesc()
1559 overlay->outline_offset = (double) (font_size) / 15.0; in gst_base_text_overlay_adjust_values_with_fontdesc()
1560 if (overlay->outline_offset < MINIMUM_OUTLINE_OFFSET) in gst_base_text_overlay_adjust_values_with_fontdesc()
1561 overlay->outline_offset = MINIMUM_OUTLINE_OFFSET; in gst_base_text_overlay_adjust_values_with_fontdesc()
1565 gst_base_text_overlay_get_pos (GstBaseTextOverlay * overlay, in gst_base_text_overlay_get_pos() argument
1570 width = overlay->logical_rect.width; in gst_base_text_overlay_get_pos()
1571 height = overlay->logical_rect.height; in gst_base_text_overlay_get_pos()
1573 *xpos = overlay->ink_rect.x - overlay->logical_rect.x; in gst_base_text_overlay_get_pos()
1574 switch (overlay->halign) { in gst_base_text_overlay_get_pos()
1576 *xpos += overlay->xpad; in gst_base_text_overlay_get_pos()
1580 *xpos += (overlay->width - width) / 2; in gst_base_text_overlay_get_pos()
1583 *xpos += overlay->width - width - overlay->xpad; in gst_base_text_overlay_get_pos()
1584 *xpos = MIN (overlay->width - overlay->ink_rect.width, *xpos); in gst_base_text_overlay_get_pos()
1587 *xpos += (gint) (overlay->width * overlay->xpos) - width / 2; in gst_base_text_overlay_get_pos()
1588 *xpos = CLAMP (*xpos, 0, overlay->width - overlay->ink_rect.width); in gst_base_text_overlay_get_pos()
1593 *xpos = (overlay->width - overlay->text_width) * overlay->xpos; in gst_base_text_overlay_get_pos()
1598 *xpos += overlay->deltax; in gst_base_text_overlay_get_pos()
1600 *ypos = overlay->ink_rect.y - overlay->logical_rect.y; in gst_base_text_overlay_get_pos()
1601 switch (overlay->valign) { in gst_base_text_overlay_get_pos()
1605 *ypos += overlay->height - height - overlay->ypad; in gst_base_text_overlay_get_pos()
1606 *ypos = MIN (overlay->height - overlay->ink_rect.height, *ypos); in gst_base_text_overlay_get_pos()
1609 *ypos += overlay->height - height - overlay->ypad; in gst_base_text_overlay_get_pos()
1613 *ypos += overlay->ypad; in gst_base_text_overlay_get_pos()
1617 *ypos = (gint) (overlay->height * overlay->ypos) - height / 2; in gst_base_text_overlay_get_pos()
1618 *ypos = CLAMP (*ypos, 0, overlay->height - overlay->ink_rect.height); in gst_base_text_overlay_get_pos()
1621 *ypos = (overlay->height - overlay->text_height) * overlay->ypos; in gst_base_text_overlay_get_pos()
1624 *ypos = (overlay->height - height) / 2; in gst_base_text_overlay_get_pos()
1627 *ypos = overlay->ypad; in gst_base_text_overlay_get_pos()
1630 *ypos += overlay->deltay; in gst_base_text_overlay_get_pos()
1632 overlay->text_x = *xpos; in gst_base_text_overlay_get_pos()
1633 overlay->text_y = *ypos; in gst_base_text_overlay_get_pos()
1635 GST_DEBUG_OBJECT (overlay, "Placing overlay at (%d, %d)", *xpos, *ypos); in gst_base_text_overlay_get_pos()
1639 gst_base_text_overlay_set_composition (GstBaseTextOverlay * overlay) in gst_base_text_overlay_set_composition() argument
1644 if (overlay->text_image && overlay->text_width != 1) { in gst_base_text_overlay_set_composition()
1647 gst_base_text_overlay_get_pos (overlay, &xpos, &ypos); in gst_base_text_overlay_set_composition()
1649 render_width = overlay->ink_rect.width; in gst_base_text_overlay_set_composition()
1650 render_height = overlay->ink_rect.height; in gst_base_text_overlay_set_composition()
1654 overlay->default_text, overlay->window_width, overlay->window_height, in gst_base_text_overlay_set_composition()
1655 overlay->text_width, overlay->text_height, render_width, in gst_base_text_overlay_set_composition()
1658 gst_buffer_add_video_meta (overlay->text_image, GST_VIDEO_FRAME_FLAG_NONE, in gst_base_text_overlay_set_composition()
1660 overlay->text_width, overlay->text_height); in gst_base_text_overlay_set_composition()
1662 rectangle = gst_video_overlay_rectangle_new_raw (overlay->text_image, in gst_base_text_overlay_set_composition()
1666 if (overlay->composition) in gst_base_text_overlay_set_composition()
1667 gst_video_overlay_composition_unref (overlay->composition); in gst_base_text_overlay_set_composition()
1669 if (overlay->upstream_composition) { in gst_base_text_overlay_set_composition()
1670 overlay->composition = in gst_base_text_overlay_set_composition()
1671 gst_video_overlay_composition_copy (overlay->upstream_composition); in gst_base_text_overlay_set_composition()
1672 gst_video_overlay_composition_add_rectangle (overlay->composition, in gst_base_text_overlay_set_composition()
1675 overlay->composition = gst_video_overlay_composition_new (rectangle); in gst_base_text_overlay_set_composition()
1680 } else if (overlay->composition) { in gst_base_text_overlay_set_composition()
1681 gst_video_overlay_composition_unref (overlay->composition); in gst_base_text_overlay_set_composition()
1682 overlay->composition = NULL; in gst_base_text_overlay_set_composition()
1697 gst_base_text_overlay_render_pangocairo (GstBaseTextOverlay * overlay, in gst_base_text_overlay_render_pangocairo() argument
1715 if (overlay->auto_adjust_size) { in gst_base_text_overlay_render_pangocairo()
1717 scalef_x = scalef_y = (double) (overlay->width) / DEFAULT_SCALE_BASIS; in gst_base_text_overlay_render_pangocairo()
1720 if (overlay->scale_mode != GST_BASE_TEXT_OVERLAY_SCALE_MODE_NONE) { in gst_base_text_overlay_render_pangocairo()
1723 switch (overlay->scale_mode) { in gst_base_text_overlay_render_pangocairo()
1725 par_n = overlay->info.par_n; in gst_base_text_overlay_render_pangocairo()
1726 par_d = overlay->info.par_d; in gst_base_text_overlay_render_pangocairo()
1730 if (!gst_util_fraction_multiply (overlay->window_width, in gst_base_text_overlay_render_pangocairo()
1731 overlay->window_height, overlay->height, overlay->width, in gst_base_text_overlay_render_pangocairo()
1733 GST_WARNING_OBJECT (overlay, in gst_base_text_overlay_render_pangocairo()
1739 par_n = overlay->scale_par_n; in gst_base_text_overlay_render_pangocairo()
1740 par_d = overlay->scale_par_d; in gst_base_text_overlay_render_pangocairo()
1751 if (overlay->use_vertical_render) { in gst_base_text_overlay_render_pangocairo()
1756 GST_DEBUG_OBJECT (overlay, in gst_base_text_overlay_render_pangocairo()
1758 overlay->scale_mode, par_n, par_d, scalef_x, scalef_y); in gst_base_text_overlay_render_pangocairo()
1761 if (overlay->draw_shadow) in gst_base_text_overlay_render_pangocairo()
1762 shadow_offset = ceil (overlay->shadow_offset); in gst_base_text_overlay_render_pangocairo()
1766 if (overlay->draw_outline) in gst_base_text_overlay_render_pangocairo()
1767 outline_offset = ceil (overlay->outline_offset); in gst_base_text_overlay_render_pangocairo()
1769 if (overlay->halign == GST_BASE_TEXT_OVERLAY_HALIGN_LEFT || in gst_base_text_overlay_render_pangocairo()
1770 overlay->halign == GST_BASE_TEXT_OVERLAY_HALIGN_RIGHT) in gst_base_text_overlay_render_pangocairo()
1771 xpad = overlay->xpad; in gst_base_text_overlay_render_pangocairo()
1773 if (overlay->valign == GST_BASE_TEXT_OVERLAY_VALIGN_TOP || in gst_base_text_overlay_render_pangocairo()
1774 overlay->valign == GST_BASE_TEXT_OVERLAY_VALIGN_BOTTOM) in gst_base_text_overlay_render_pangocairo()
1775 ypad = overlay->ypad; in gst_base_text_overlay_render_pangocairo()
1777 pango_layout_set_width (overlay->layout, -1); in gst_base_text_overlay_render_pangocairo()
1779 pango_layout_set_markup (overlay->layout, string, textlen); in gst_base_text_overlay_render_pangocairo()
1782 pango_layout_get_pixel_extents (overlay->layout, &ink_rect, &logical_rect); in gst_base_text_overlay_render_pangocairo()
1791 if (overlay->use_vertical_render) { in gst_base_text_overlay_render_pangocairo()
1792 if (width + ypad > overlay->height) { in gst_base_text_overlay_render_pangocairo()
1793 width = overlay->height - ypad; in gst_base_text_overlay_render_pangocairo()
1796 } else if (width + xpad > overlay->width) { in gst_base_text_overlay_render_pangocairo()
1797 width = overlay->width - xpad; in gst_base_text_overlay_render_pangocairo()
1803 gst_base_text_overlay_set_wrap_mode (overlay, in gst_base_text_overlay_render_pangocairo()
1805 pango_layout_get_pixel_extents (overlay->layout, &ink_rect, &logical_rect); in gst_base_text_overlay_render_pangocairo()
1814 if (overlay->use_vertical_render) { in gst_base_text_overlay_render_pangocairo()
1815 if (height + xpad > overlay->width) { in gst_base_text_overlay_render_pangocairo()
1816 height = overlay->width - xpad; in gst_base_text_overlay_render_pangocairo()
1819 } else if (height + ypad > overlay->height) { in gst_base_text_overlay_render_pangocairo()
1820 height = overlay->height - ypad; in gst_base_text_overlay_render_pangocairo()
1824 GST_DEBUG_OBJECT (overlay, "Rendering with ink rect (%d, %d) %dx%d and " in gst_base_text_overlay_render_pangocairo()
1828 GST_DEBUG_OBJECT (overlay, "Rendering with width %d and height %d " in gst_base_text_overlay_render_pangocairo()
1834 overlay->ink_rect.x = in gst_base_text_overlay_render_pangocairo()
1836 overlay->ink_rect.y = in gst_base_text_overlay_render_pangocairo()
1838 overlay->ink_rect.width = width; in gst_base_text_overlay_render_pangocairo()
1839 overlay->ink_rect.height = height; in gst_base_text_overlay_render_pangocairo()
1841 overlay->logical_rect.x = in gst_base_text_overlay_render_pangocairo()
1843 overlay->logical_rect.y = in gst_base_text_overlay_render_pangocairo()
1845 overlay->logical_rect.width = in gst_base_text_overlay_render_pangocairo()
1847 overlay->logical_rect.height = in gst_base_text_overlay_render_pangocairo()
1851 if (overlay->use_vertical_render) { in gst_base_text_overlay_render_pangocairo()
1852 PangoRectangle tmp = overlay->ink_rect; in gst_base_text_overlay_render_pangocairo()
1854 overlay->ink_rect.x = tmp.y; in gst_base_text_overlay_render_pangocairo()
1855 overlay->ink_rect.y = tmp.x; in gst_base_text_overlay_render_pangocairo()
1856 overlay->ink_rect.width = tmp.height; in gst_base_text_overlay_render_pangocairo()
1857 overlay->ink_rect.height = tmp.width; in gst_base_text_overlay_render_pangocairo()
1859 overlay->ink_rect.x += overlay->ink_rect.width; in gst_base_text_overlay_render_pangocairo()
1861 tmp = overlay->logical_rect; in gst_base_text_overlay_render_pangocairo()
1862 overlay->logical_rect.x = tmp.y; in gst_base_text_overlay_render_pangocairo()
1863 overlay->logical_rect.y = tmp.x; in gst_base_text_overlay_render_pangocairo()
1864 overlay->logical_rect.width = tmp.height; in gst_base_text_overlay_render_pangocairo()
1865 overlay->logical_rect.height = tmp.width; in gst_base_text_overlay_render_pangocairo()
1866 overlay->logical_rect.x += overlay->logical_rect.width; in gst_base_text_overlay_render_pangocairo()
1870 width = ceil (width * overlay->render_scale); in gst_base_text_overlay_render_pangocairo()
1871 height = ceil (height * overlay->render_scale); in gst_base_text_overlay_render_pangocairo()
1872 scalef_x *= overlay->render_scale; in gst_base_text_overlay_render_pangocairo()
1873 scalef_y *= overlay->render_scale; in gst_base_text_overlay_render_pangocairo()
1876 GST_DEBUG_OBJECT (overlay, in gst_base_text_overlay_render_pangocairo()
1882 GST_DEBUG_OBJECT (overlay, in gst_base_text_overlay_render_pangocairo()
1892 if (overlay->use_vertical_render) { in gst_base_text_overlay_render_pangocairo()
1901 if (overlay->use_vertical_render) { in gst_base_text_overlay_render_pangocairo()
1925 gst_buffer_replace (&overlay->text_image, buffer); in gst_base_text_overlay_render_pangocairo()
1955 if (overlay->draw_shadow) { in gst_base_text_overlay_render_pangocairo()
1960 pango_attr_list_ref (pango_layout_get_attributes (overlay->layout)); in gst_base_text_overlay_render_pangocairo()
1970 cairo_translate (cr, overlay->shadow_offset, overlay->shadow_offset); in gst_base_text_overlay_render_pangocairo()
1972 pango_layout_set_attributes (overlay->layout, filtered_attr); in gst_base_text_overlay_render_pangocairo()
1973 pango_cairo_show_layout (cr, overlay->layout); in gst_base_text_overlay_render_pangocairo()
1974 pango_layout_set_attributes (overlay->layout, origin_attr); in gst_base_text_overlay_render_pangocairo()
1981 if (overlay->draw_outline) { in gst_base_text_overlay_render_pangocairo()
1982 a = (overlay->outline_color >> 24) & 0xff; in gst_base_text_overlay_render_pangocairo()
1983 r = (overlay->outline_color >> 16) & 0xff; in gst_base_text_overlay_render_pangocairo()
1984 g = (overlay->outline_color >> 8) & 0xff; in gst_base_text_overlay_render_pangocairo()
1985 b = (overlay->outline_color >> 0) & 0xff; in gst_base_text_overlay_render_pangocairo()
1989 cairo_set_line_width (cr, overlay->outline_offset); in gst_base_text_overlay_render_pangocairo()
1990 pango_cairo_layout_path (cr, overlay->layout); in gst_base_text_overlay_render_pangocairo()
1995 a = (overlay->color >> 24) & 0xff; in gst_base_text_overlay_render_pangocairo()
1996 r = (overlay->color >> 16) & 0xff; in gst_base_text_overlay_render_pangocairo()
1997 g = (overlay->color >> 8) & 0xff; in gst_base_text_overlay_render_pangocairo()
1998 b = (overlay->color >> 0) & 0xff; in gst_base_text_overlay_render_pangocairo()
2003 pango_cairo_show_layout (cr, overlay->layout); in gst_base_text_overlay_render_pangocairo()
2010 overlay->text_width = width; in gst_base_text_overlay_render_pangocairo()
2012 overlay->text_height = height; in gst_base_text_overlay_render_pangocairo()
2014 gst_base_text_overlay_set_composition (overlay); in gst_base_text_overlay_render_pangocairo()
2018 gst_base_text_overlay_shade_planar_Y (GstBaseTextOverlay * overlay, in gst_base_text_overlay_shade_planar_Y() argument
2029 gint y = dest_ptr[(i * dest_stride) + j] - overlay->shading_value; in gst_base_text_overlay_shade_planar_Y()
2037 gst_base_text_overlay_shade_packed_Y (GstBaseTextOverlay * overlay, in gst_base_text_overlay_shade_packed_Y() argument
2064 y = dest_ptr[y_pos] - overlay->shading_value; in gst_base_text_overlay_shade_packed_Y()
2075 gst_base_text_overlay_shade_xRGB (GstBaseTextOverlay * overlay, in gst_base_text_overlay_shade_xRGB() argument
2087 y_pos = (i * 4 * overlay->width) + j * 4; in gst_base_text_overlay_shade_xRGB()
2089 y = dest_ptr[y_pos + k] - overlay->shading_value; in gst_base_text_overlay_shade_xRGB()
2098 gst_base_text_overlay_shade_rgb24 (GstBaseTextOverlay * overlay, in gst_base_text_overlay_shade_rgb24() argument
2105 shading_val = -overlay->shading_value; in gst_base_text_overlay_shade_rgb24()
2123 gst_base_text_overlay_shade_IYU1 (GstBaseTextOverlay * overlay, in gst_base_text_overlay_shade_IYU1() argument
2129 shading_val = -overlay->shading_value; in gst_base_text_overlay_shade_IYU1()
2152 gst_base_text_overlay_shade_##name (GstBaseTextOverlay * overlay, GstVideoFrame * dest, \
2163 y_pos = (i * 4 * overlay->width) + j * 4;\
2165 y = dest_ptr[y_pos + k] - overlay->shading_value;\
2177 gst_base_text_overlay_render_text (GstBaseTextOverlay * overlay, in gst_base_text_overlay_render_text() argument
2182 if (!overlay->need_render) { in gst_base_text_overlay_render_text()
2203 gst_base_text_overlay_render_pangocairo (overlay, string, textlen); in gst_base_text_overlay_render_text()
2207 overlay->need_render = FALSE; in gst_base_text_overlay_render_text()
2215 gst_base_text_overlay_shade_background (GstBaseTextOverlay * overlay, in gst_base_text_overlay_shade_background() argument
2218 x0 = CLAMP (x0 - BOX_XPAD, 0, overlay->width); in gst_base_text_overlay_shade_background()
2219 x1 = CLAMP (x1 + BOX_XPAD, 0, overlay->width); in gst_base_text_overlay_shade_background()
2221 y0 = CLAMP (y0 - BOX_YPAD, 0, overlay->height); in gst_base_text_overlay_shade_background()
2222 y1 = CLAMP (y1 + BOX_YPAD, 0, overlay->height); in gst_base_text_overlay_shade_background()
2224 switch (overlay->format) { in gst_base_text_overlay_shade_background()
2236 gst_base_text_overlay_shade_planar_Y (overlay, frame, x0, x1, y0, y1); in gst_base_text_overlay_shade_background()
2244 gst_base_text_overlay_shade_packed_Y (overlay, frame, x0, x1, y0, y1); in gst_base_text_overlay_shade_background()
2247 gst_base_text_overlay_shade_xRGB (overlay, frame, x0, x1, y0, y1); in gst_base_text_overlay_shade_background()
2250 gst_base_text_overlay_shade_xBGR (overlay, frame, x0, x1, y0, y1); in gst_base_text_overlay_shade_background()
2253 gst_base_text_overlay_shade_BGRx (overlay, frame, x0, x1, y0, y1); in gst_base_text_overlay_shade_background()
2256 gst_base_text_overlay_shade_RGBx (overlay, frame, x0, x1, y0, y1); in gst_base_text_overlay_shade_background()
2259 gst_base_text_overlay_shade_ARGB (overlay, frame, x0, x1, y0, y1); in gst_base_text_overlay_shade_background()
2262 gst_base_text_overlay_shade_ABGR (overlay, frame, x0, x1, y0, y1); in gst_base_text_overlay_shade_background()
2265 gst_base_text_overlay_shade_RGBA (overlay, frame, x0, x1, y0, y1); in gst_base_text_overlay_shade_background()
2268 gst_base_text_overlay_shade_BGRA (overlay, frame, x0, x1, y0, y1); in gst_base_text_overlay_shade_background()
2272 gst_base_text_overlay_shade_rgb24 (overlay, frame, x0, x1, y0, y1); in gst_base_text_overlay_shade_background()
2275 gst_base_text_overlay_shade_IYU1 (overlay, frame, x0, x1, y0, y1); in gst_base_text_overlay_shade_background()
2278 GST_FIXME_OBJECT (overlay, "implement background shading for format %s", in gst_base_text_overlay_shade_background()
2285 gst_base_text_overlay_push_frame (GstBaseTextOverlay * overlay, in gst_base_text_overlay_push_frame() argument
2290 if (overlay->composition == NULL) in gst_base_text_overlay_push_frame()
2293 if (gst_pad_check_reconfigure (overlay->srcpad)) { in gst_base_text_overlay_push_frame()
2294 if (!gst_base_text_overlay_negotiate (overlay, NULL)) { in gst_base_text_overlay_push_frame()
2295 gst_pad_mark_reconfigure (overlay->srcpad); in gst_base_text_overlay_push_frame()
2297 if (GST_PAD_IS_FLUSHING (overlay->srcpad)) in gst_base_text_overlay_push_frame()
2306 if (overlay->attach_compo_to_buffer) { in gst_base_text_overlay_push_frame()
2307 GST_DEBUG_OBJECT (overlay, "Attaching text overlay image to video buffer"); in gst_base_text_overlay_push_frame()
2309 overlay->composition); in gst_base_text_overlay_push_frame()
2314 if (!gst_video_frame_map (&frame, &overlay->info, video_frame, in gst_base_text_overlay_push_frame()
2319 if (overlay->want_shading) { in gst_base_text_overlay_push_frame()
2322 gst_base_text_overlay_get_pos (overlay, &xpos, &ypos); in gst_base_text_overlay_push_frame()
2324 gst_base_text_overlay_shade_background (overlay, &frame, in gst_base_text_overlay_push_frame()
2325 xpos, xpos + overlay->text_width, ypos, ypos + overlay->text_height); in gst_base_text_overlay_push_frame()
2328 gst_video_overlay_composition_blend (overlay->composition, &frame); in gst_base_text_overlay_push_frame()
2334 return gst_pad_push (overlay->srcpad, video_frame); in gst_base_text_overlay_push_frame()
2340 GST_DEBUG_OBJECT (overlay, "received invalid buffer"); in gst_base_text_overlay_push_frame()
2349 GstBaseTextOverlay *overlay; in gst_base_text_overlay_text_pad_link() local
2351 overlay = GST_BASE_TEXT_OVERLAY (parent); in gst_base_text_overlay_text_pad_link()
2352 if (G_UNLIKELY (!overlay)) in gst_base_text_overlay_text_pad_link()
2355 GST_DEBUG_OBJECT (overlay, "Text pad linked"); in gst_base_text_overlay_text_pad_link()
2357 overlay->text_linked = TRUE; in gst_base_text_overlay_text_pad_link()
2365 GstBaseTextOverlay *overlay; in gst_base_text_overlay_text_pad_unlink() local
2368 overlay = GST_BASE_TEXT_OVERLAY (parent); in gst_base_text_overlay_text_pad_unlink()
2370 GST_DEBUG_OBJECT (overlay, "Text pad unlinked"); in gst_base_text_overlay_text_pad_unlink()
2372 overlay->text_linked = FALSE; in gst_base_text_overlay_text_pad_unlink()
2374 gst_segment_init (&overlay->text_segment, GST_FORMAT_UNDEFINED); in gst_base_text_overlay_text_pad_unlink()
2382 GstBaseTextOverlay *overlay = NULL; in gst_base_text_overlay_text_event() local
2384 overlay = GST_BASE_TEXT_OVERLAY (parent); in gst_base_text_overlay_text_event()
2394 ret = gst_base_text_overlay_setcaps_txt (overlay, caps); in gst_base_text_overlay_text_event()
2402 overlay->text_eos = FALSE; in gst_base_text_overlay_text_event()
2407 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_text_event()
2408 gst_segment_copy_into (segment, &overlay->text_segment); in gst_base_text_overlay_text_event()
2409 GST_DEBUG_OBJECT (overlay, "TEXT SEGMENT now: %" GST_SEGMENT_FORMAT, in gst_base_text_overlay_text_event()
2410 &overlay->text_segment); in gst_base_text_overlay_text_event()
2411 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_text_event()
2413 GST_ELEMENT_WARNING (overlay, STREAM, MUX, (NULL), in gst_base_text_overlay_text_event()
2422 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_text_event()
2423 GST_BASE_TEXT_OVERLAY_BROADCAST (overlay); in gst_base_text_overlay_text_event()
2424 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_text_event()
2436 overlay->text_segment.position = start; in gst_base_text_overlay_text_event()
2440 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_text_event()
2441 GST_BASE_TEXT_OVERLAY_BROADCAST (overlay); in gst_base_text_overlay_text_event()
2442 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_text_event()
2449 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_text_event()
2450 GST_INFO_OBJECT (overlay, "text flush stop"); in gst_base_text_overlay_text_event()
2451 overlay->text_flushing = FALSE; in gst_base_text_overlay_text_event()
2452 overlay->text_eos = FALSE; in gst_base_text_overlay_text_event()
2453 gst_base_text_overlay_pop_text (overlay); in gst_base_text_overlay_text_event()
2454 gst_segment_init (&overlay->text_segment, GST_FORMAT_TIME); in gst_base_text_overlay_text_event()
2455 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_text_event()
2460 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_text_event()
2461 GST_INFO_OBJECT (overlay, "text flush start"); in gst_base_text_overlay_text_event()
2462 overlay->text_flushing = TRUE; in gst_base_text_overlay_text_event()
2463 GST_BASE_TEXT_OVERLAY_BROADCAST (overlay); in gst_base_text_overlay_text_event()
2464 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_text_event()
2469 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_text_event()
2470 overlay->text_eos = TRUE; in gst_base_text_overlay_text_event()
2471 GST_INFO_OBJECT (overlay, "text EOS"); in gst_base_text_overlay_text_event()
2474 GST_BASE_TEXT_OVERLAY_BROADCAST (overlay); in gst_base_text_overlay_text_event()
2475 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_text_event()
2492 GstBaseTextOverlay *overlay = NULL; in gst_base_text_overlay_video_event() local
2494 overlay = GST_BASE_TEXT_OVERLAY (parent); in gst_base_text_overlay_video_event()
2504 ret = gst_base_text_overlay_setcaps (overlay, caps); in gst_base_text_overlay_video_event()
2512 GST_DEBUG_OBJECT (overlay, "received new segment"); in gst_base_text_overlay_video_event()
2517 gst_segment_copy_into (segment, &overlay->segment); in gst_base_text_overlay_video_event()
2518 GST_DEBUG_OBJECT (overlay, "VIDEO SEGMENT now: %" GST_SEGMENT_FORMAT, in gst_base_text_overlay_video_event()
2519 &overlay->segment); in gst_base_text_overlay_video_event()
2521 GST_ELEMENT_WARNING (overlay, STREAM, MUX, (NULL), in gst_base_text_overlay_video_event()
2529 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_video_event()
2530 GST_INFO_OBJECT (overlay, "video EOS"); in gst_base_text_overlay_video_event()
2531 overlay->video_eos = TRUE; in gst_base_text_overlay_video_event()
2532 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_video_event()
2536 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_video_event()
2537 GST_INFO_OBJECT (overlay, "video flush start"); in gst_base_text_overlay_video_event()
2538 overlay->video_flushing = TRUE; in gst_base_text_overlay_video_event()
2539 GST_BASE_TEXT_OVERLAY_BROADCAST (overlay); in gst_base_text_overlay_video_event()
2540 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_video_event()
2544 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_video_event()
2545 GST_INFO_OBJECT (overlay, "video flush stop"); in gst_base_text_overlay_video_event()
2546 overlay->video_flushing = FALSE; in gst_base_text_overlay_video_event()
2547 overlay->video_eos = FALSE; in gst_base_text_overlay_video_event()
2548 gst_segment_init (&overlay->segment, GST_FORMAT_TIME); in gst_base_text_overlay_video_event()
2549 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_video_event()
2565 GstBaseTextOverlay *overlay; in gst_base_text_overlay_video_query() local
2567 overlay = GST_BASE_TEXT_OVERLAY (parent); in gst_base_text_overlay_video_query()
2575 caps = gst_base_text_overlay_get_videosink_caps (pad, overlay, filter); in gst_base_text_overlay_video_query()
2591 gst_base_text_overlay_pop_text (GstBaseTextOverlay * overlay) in gst_base_text_overlay_pop_text() argument
2593 g_return_if_fail (GST_IS_BASE_TEXT_OVERLAY (overlay)); in gst_base_text_overlay_pop_text()
2595 if (overlay->text_buffer) { in gst_base_text_overlay_pop_text()
2596 GST_DEBUG_OBJECT (overlay, "releasing text buffer %p", in gst_base_text_overlay_pop_text()
2597 overlay->text_buffer); in gst_base_text_overlay_pop_text()
2598 gst_buffer_unref (overlay->text_buffer); in gst_base_text_overlay_pop_text()
2599 overlay->text_buffer = NULL; in gst_base_text_overlay_pop_text()
2603 GST_BASE_TEXT_OVERLAY_BROADCAST (overlay); in gst_base_text_overlay_pop_text()
2614 GstBaseTextOverlay *overlay = NULL; in gst_base_text_overlay_text_chain() local
2618 overlay = GST_BASE_TEXT_OVERLAY (parent); in gst_base_text_overlay_text_chain()
2620 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_text_chain()
2622 if (overlay->text_flushing) { in gst_base_text_overlay_text_chain()
2623 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_text_chain()
2625 GST_LOG_OBJECT (overlay, "text flushing"); in gst_base_text_overlay_text_chain()
2629 if (overlay->text_eos) { in gst_base_text_overlay_text_chain()
2630 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_text_chain()
2632 GST_LOG_OBJECT (overlay, "text EOS"); in gst_base_text_overlay_text_chain()
2636 GST_LOG_OBJECT (overlay, "%" GST_SEGMENT_FORMAT " BUFFER: ts=%" in gst_base_text_overlay_text_chain()
2637 GST_TIME_FORMAT ", end=%" GST_TIME_FORMAT, &overlay->segment, in gst_base_text_overlay_text_chain()
2650 in_seg = gst_segment_clip (&overlay->text_segment, GST_FORMAT_TIME, in gst_base_text_overlay_text_chain()
2665 while (overlay->text_buffer != NULL) { in gst_base_text_overlay_text_chain()
2668 GST_BASE_TEXT_OVERLAY_WAIT (overlay); in gst_base_text_overlay_text_chain()
2670 if (overlay->text_flushing) { in gst_base_text_overlay_text_chain()
2671 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_text_chain()
2678 overlay->text_segment.position = clip_start; in gst_base_text_overlay_text_chain()
2680 overlay->text_buffer = buffer; /* pass ownership of @buffer */ in gst_base_text_overlay_text_chain()
2684 overlay->need_render = TRUE; in gst_base_text_overlay_text_chain()
2687 GST_BASE_TEXT_OVERLAY_BROADCAST (overlay); in gst_base_text_overlay_text_chain()
2690 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_text_chain()
2704 GstBaseTextOverlay *overlay; in gst_base_text_overlay_video_chain() local
2711 overlay = GST_BASE_TEXT_OVERLAY (parent); in gst_base_text_overlay_video_chain()
2715 if (overlay->upstream_composition != composition_meta->overlay) { in gst_base_text_overlay_video_chain()
2717 overlay->upstream_composition = composition_meta->overlay; in gst_base_text_overlay_video_chain()
2718 overlay->need_render = TRUE; in gst_base_text_overlay_video_chain()
2720 } else if (overlay->upstream_composition != NULL) { in gst_base_text_overlay_video_chain()
2721 overlay->upstream_composition = NULL; in gst_base_text_overlay_video_chain()
2722 overlay->need_render = TRUE; in gst_base_text_overlay_video_chain()
2725 klass = GST_BASE_TEXT_OVERLAY_GET_CLASS (overlay); in gst_base_text_overlay_video_chain()
2739 GST_LOG_OBJECT (overlay, "%" GST_SEGMENT_FORMAT " BUFFER: ts=%" in gst_base_text_overlay_video_chain()
2740 GST_TIME_FORMAT ", end=%" GST_TIME_FORMAT, &overlay->segment, in gst_base_text_overlay_video_chain()
2745 if (stop == GST_CLOCK_TIME_NONE && start < overlay->segment.start) in gst_base_text_overlay_video_chain()
2748 in_seg = gst_segment_clip (&overlay->segment, GST_FORMAT_TIME, start, stop, in gst_base_text_overlay_video_chain()
2756 GST_DEBUG_OBJECT (overlay, "clipping buffer timestamp/duration to segment"); in gst_base_text_overlay_video_chain()
2767 if (overlay->info.fps_n && overlay->info.fps_d) { in gst_base_text_overlay_video_chain()
2768 GST_DEBUG_OBJECT (overlay, "estimating duration based on framerate"); in gst_base_text_overlay_video_chain()
2770 overlay->info.fps_d, overlay->info.fps_n); in gst_base_text_overlay_video_chain()
2772 GST_LOG_OBJECT (overlay, "no duration, assuming minimal duration"); in gst_base_text_overlay_video_chain()
2777 gst_object_sync_values (GST_OBJECT (overlay), GST_BUFFER_TIMESTAMP (buffer)); in gst_base_text_overlay_video_chain()
2781 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_video_chain()
2783 if (overlay->video_flushing) in gst_base_text_overlay_video_chain()
2786 if (overlay->video_eos) in gst_base_text_overlay_video_chain()
2789 if (overlay->silent) { in gst_base_text_overlay_video_chain()
2790 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_video_chain()
2791 ret = gst_pad_push (overlay->srcpad, buffer); in gst_base_text_overlay_video_chain()
2794 overlay->segment.position = clip_start; in gst_base_text_overlay_video_chain()
2800 if (!overlay->text_linked) { in gst_base_text_overlay_video_chain()
2802 text = klass->get_text (overlay, buffer); in gst_base_text_overlay_video_chain()
2804 text = g_strdup (overlay->default_text); in gst_base_text_overlay_video_chain()
2807 GST_LOG_OBJECT (overlay, "Text pad not linked, rendering default " in gst_base_text_overlay_video_chain()
2810 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_video_chain()
2814 gst_base_text_overlay_render_text (overlay, text, -1); in gst_base_text_overlay_video_chain()
2815 ret = gst_base_text_overlay_push_frame (overlay, buffer); in gst_base_text_overlay_video_chain()
2818 ret = gst_pad_push (overlay->srcpad, buffer); in gst_base_text_overlay_video_chain()
2822 if (overlay->text_buffer) { in gst_base_text_overlay_video_chain()
2832 if (!GST_BUFFER_TIMESTAMP_IS_VALID (overlay->text_buffer) || in gst_base_text_overlay_video_chain()
2833 !GST_BUFFER_DURATION_IS_VALID (overlay->text_buffer)) { in gst_base_text_overlay_video_chain()
2834 GST_WARNING_OBJECT (overlay, in gst_base_text_overlay_video_chain()
2839 text_start = GST_BUFFER_TIMESTAMP (overlay->text_buffer); in gst_base_text_overlay_video_chain()
2840 text_end = text_start + GST_BUFFER_DURATION (overlay->text_buffer); in gst_base_text_overlay_video_chain()
2844 gst_segment_to_running_time (&overlay->segment, GST_FORMAT_TIME, in gst_base_text_overlay_video_chain()
2847 gst_segment_to_running_time (&overlay->segment, GST_FORMAT_TIME, in gst_base_text_overlay_video_chain()
2853 gst_segment_to_running_time (&overlay->text_segment, in gst_base_text_overlay_video_chain()
2856 gst_segment_to_running_time (&overlay->text_segment, in gst_base_text_overlay_video_chain()
2860 GST_LOG_OBJECT (overlay, "T: %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT, in gst_base_text_overlay_video_chain()
2863 GST_LOG_OBJECT (overlay, "V: %" GST_TIME_FORMAT " - %" GST_TIME_FORMAT, in gst_base_text_overlay_video_chain()
2870 GST_LOG_OBJECT (overlay, "text buffer too old, popping"); in gst_base_text_overlay_video_chain()
2872 gst_base_text_overlay_pop_text (overlay); in gst_base_text_overlay_video_chain()
2873 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_video_chain()
2876 GST_LOG_OBJECT (overlay, "text in future, pushing video buf"); in gst_base_text_overlay_video_chain()
2877 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_video_chain()
2879 ret = gst_pad_push (overlay->srcpad, buffer); in gst_base_text_overlay_video_chain()
2885 gst_buffer_map (overlay->text_buffer, &map, GST_MAP_READ); in gst_base_text_overlay_video_chain()
2896 GST_WARNING_OBJECT (overlay, "received invalid UTF-8"); in gst_base_text_overlay_video_chain()
2903 if (overlay->have_pango_markup) { in gst_base_text_overlay_video_chain()
2916 GST_DEBUG_OBJECT (overlay, "Rendering text '%*s'", text_len, text); in gst_base_text_overlay_video_chain()
2917 gst_base_text_overlay_render_text (overlay, text, text_len); in gst_base_text_overlay_video_chain()
2919 GST_DEBUG_OBJECT (overlay, "No text to render (empty buffer)"); in gst_base_text_overlay_video_chain()
2920 gst_base_text_overlay_render_text (overlay, " ", 1); in gst_base_text_overlay_video_chain()
2925 GST_DEBUG_OBJECT (overlay, "No text to render (empty buffer)"); in gst_base_text_overlay_video_chain()
2926 gst_base_text_overlay_render_text (overlay, " ", 1); in gst_base_text_overlay_video_chain()
2929 gst_buffer_unmap (overlay->text_buffer, &map); in gst_base_text_overlay_video_chain()
2931 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_video_chain()
2932 ret = gst_base_text_overlay_push_frame (overlay, buffer); in gst_base_text_overlay_video_chain()
2935 GST_LOG_OBJECT (overlay, "text buffer not needed any longer"); in gst_base_text_overlay_video_chain()
2940 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_video_chain()
2941 gst_base_text_overlay_pop_text (overlay); in gst_base_text_overlay_video_chain()
2942 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_video_chain()
2947 if (overlay->text_eos) in gst_base_text_overlay_video_chain()
2950 if (!overlay->wait_text) in gst_base_text_overlay_video_chain()
2954 if (overlay->text_segment.format == GST_FORMAT_TIME) { in gst_base_text_overlay_video_chain()
2959 gst_segment_to_running_time (&overlay->segment, GST_FORMAT_TIME, in gst_base_text_overlay_video_chain()
2962 gst_segment_to_running_time (&overlay->text_segment, in gst_base_text_overlay_video_chain()
2963 GST_FORMAT_TIME, overlay->text_segment.start); in gst_base_text_overlay_video_chain()
2965 gst_segment_to_running_time (&overlay->text_segment, in gst_base_text_overlay_video_chain()
2966 GST_FORMAT_TIME, overlay->text_segment.position); in gst_base_text_overlay_video_chain()
2977 GST_DEBUG_OBJECT (overlay, "no text buffer, need to wait for one"); in gst_base_text_overlay_video_chain()
2978 GST_BASE_TEXT_OVERLAY_WAIT (overlay); in gst_base_text_overlay_video_chain()
2979 GST_DEBUG_OBJECT (overlay, "resuming"); in gst_base_text_overlay_video_chain()
2980 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_video_chain()
2983 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_video_chain()
2984 GST_LOG_OBJECT (overlay, "no need to wait for a text buffer"); in gst_base_text_overlay_video_chain()
2985 ret = gst_pad_push (overlay->srcpad, buffer); in gst_base_text_overlay_video_chain()
2993 overlay->segment.position = clip_start; in gst_base_text_overlay_video_chain()
2999 GST_WARNING_OBJECT (overlay, "buffer without timestamp, discarding"); in gst_base_text_overlay_video_chain()
3006 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_video_chain()
3007 GST_DEBUG_OBJECT (overlay, "flushing, discarding buffer"); in gst_base_text_overlay_video_chain()
3013 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_video_chain()
3014 GST_DEBUG_OBJECT (overlay, "eos, discarding buffer"); in gst_base_text_overlay_video_chain()
3020 GST_DEBUG_OBJECT (overlay, "buffer out of segment, discarding"); in gst_base_text_overlay_video_chain()
3031 GstBaseTextOverlay *overlay = GST_BASE_TEXT_OVERLAY (element); in gst_base_text_overlay_change_state() local
3035 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_change_state()
3036 overlay->text_flushing = TRUE; in gst_base_text_overlay_change_state()
3037 overlay->video_flushing = TRUE; in gst_base_text_overlay_change_state()
3040 gst_base_text_overlay_pop_text (overlay); in gst_base_text_overlay_change_state()
3041 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_change_state()
3053 GST_BASE_TEXT_OVERLAY_LOCK (overlay); in gst_base_text_overlay_change_state()
3054 overlay->text_flushing = FALSE; in gst_base_text_overlay_change_state()
3055 overlay->video_flushing = FALSE; in gst_base_text_overlay_change_state()
3056 overlay->video_eos = FALSE; in gst_base_text_overlay_change_state()
3057 overlay->text_eos = FALSE; in gst_base_text_overlay_change_state()
3058 gst_segment_init (&overlay->segment, GST_FORMAT_TIME); in gst_base_text_overlay_change_state()
3059 gst_segment_init (&overlay->text_segment, GST_FORMAT_TIME); in gst_base_text_overlay_change_state()
3060 GST_BASE_TEXT_OVERLAY_UNLOCK (overlay); in gst_base_text_overlay_change_state()