mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
glvideomixer: need update output geometry after src caps reconfigure
Need update output geometry when sink caps changed and use gst_structure_set to update caps if structure is fixed https://bugzilla.gnome.org/show_bug.cgi?id=787820
This commit is contained in:
parent
3d2f004db2
commit
d6e538dc56
2 changed files with 14 additions and 5 deletions
|
@ -1076,6 +1076,7 @@ _fixate_caps (GstAggregator * agg, GstCaps * caps)
|
|||
best_fps_d = fps_d;
|
||||
}
|
||||
}
|
||||
mix->output_geo_changed = TRUE;
|
||||
GST_OBJECT_UNLOCK (vagg);
|
||||
|
||||
if (best_fps_n <= 0 || best_fps_d <= 0 || best_fps == 0.0) {
|
||||
|
@ -1085,10 +1086,14 @@ _fixate_caps (GstAggregator * agg, GstCaps * caps)
|
|||
}
|
||||
|
||||
s = gst_caps_get_structure (ret, 0);
|
||||
gst_structure_fixate_field_nearest_int (s, "width", best_width);
|
||||
gst_structure_fixate_field_nearest_int (s, "height", best_height);
|
||||
gst_structure_fixate_field_nearest_fraction (s, "framerate", best_fps_n,
|
||||
best_fps_d);
|
||||
if (!gst_structure_fixate_field_nearest_int (s, "width", best_width))
|
||||
gst_structure_set (s, "width", G_TYPE_INT, best_width, NULL);
|
||||
if (!gst_structure_fixate_field_nearest_int (s, "height", best_height))
|
||||
gst_structure_set (s, "height", G_TYPE_INT, best_height, NULL);
|
||||
if (!gst_structure_fixate_field_nearest_fraction (s, "framerate", best_fps_n,
|
||||
best_fps_d))
|
||||
gst_structure_set (s, "framerate", GST_TYPE_FRACTION, best_fps_n,
|
||||
best_fps_d, NULL);
|
||||
ret = gst_caps_fixate (ret);
|
||||
|
||||
return ret;
|
||||
|
@ -1483,7 +1488,8 @@ gst_gl_video_mixer_callback (gpointer stuff)
|
|||
|
||||
_init_vbo_indices (video_mixer);
|
||||
|
||||
if (pad->geometry_change || !pad->vertex_buffer) {
|
||||
if (video_mixer->output_geo_changed || pad->geometry_change
|
||||
|| !pad->vertex_buffer) {
|
||||
gint pad_width, pad_height;
|
||||
gfloat w, h;
|
||||
|
||||
|
@ -1551,6 +1557,7 @@ gst_gl_video_mixer_callback (gpointer stuff)
|
|||
|
||||
walk = g_list_next (walk);
|
||||
}
|
||||
video_mixer->output_geo_changed = FALSE;
|
||||
GST_OBJECT_UNLOCK (video_mixer);
|
||||
|
||||
gl->DisableVertexAttribArray (attr_position_loc);
|
||||
|
|
|
@ -126,6 +126,8 @@ struct _GstGLVideoMixer
|
|||
GLuint vbo_indices;
|
||||
GLuint checker_vbo;
|
||||
GstGLMemory *out_tex;
|
||||
|
||||
gboolean output_geo_changed;
|
||||
};
|
||||
|
||||
struct _GstGLVideoMixerClass
|
||||
|
|
Loading…
Reference in a new issue