mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-21 07:46:38 +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
c33fc416b2
commit
60eeef12a0
2 changed files with 14 additions and 5 deletions
|
@ -1076,6 +1076,7 @@ _fixate_caps (GstAggregator * agg, GstCaps * caps)
|
||||||
best_fps_d = fps_d;
|
best_fps_d = fps_d;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mix->output_geo_changed = TRUE;
|
||||||
GST_OBJECT_UNLOCK (vagg);
|
GST_OBJECT_UNLOCK (vagg);
|
||||||
|
|
||||||
if (best_fps_n <= 0 || best_fps_d <= 0 || best_fps == 0.0) {
|
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);
|
s = gst_caps_get_structure (ret, 0);
|
||||||
gst_structure_fixate_field_nearest_int (s, "width", best_width);
|
if (!gst_structure_fixate_field_nearest_int (s, "width", best_width))
|
||||||
gst_structure_fixate_field_nearest_int (s, "height", best_height);
|
gst_structure_set (s, "width", G_TYPE_INT, best_width, NULL);
|
||||||
gst_structure_fixate_field_nearest_fraction (s, "framerate", best_fps_n,
|
if (!gst_structure_fixate_field_nearest_int (s, "height", best_height))
|
||||||
best_fps_d);
|
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);
|
ret = gst_caps_fixate (ret);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -1483,7 +1488,8 @@ gst_gl_video_mixer_callback (gpointer stuff)
|
||||||
|
|
||||||
_init_vbo_indices (video_mixer);
|
_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;
|
gint pad_width, pad_height;
|
||||||
gfloat w, h;
|
gfloat w, h;
|
||||||
|
|
||||||
|
@ -1551,6 +1557,7 @@ gst_gl_video_mixer_callback (gpointer stuff)
|
||||||
|
|
||||||
walk = g_list_next (walk);
|
walk = g_list_next (walk);
|
||||||
}
|
}
|
||||||
|
video_mixer->output_geo_changed = FALSE;
|
||||||
GST_OBJECT_UNLOCK (video_mixer);
|
GST_OBJECT_UNLOCK (video_mixer);
|
||||||
|
|
||||||
gl->DisableVertexAttribArray (attr_position_loc);
|
gl->DisableVertexAttribArray (attr_position_loc);
|
||||||
|
|
|
@ -126,6 +126,8 @@ struct _GstGLVideoMixer
|
||||||
GLuint vbo_indices;
|
GLuint vbo_indices;
|
||||||
GLuint checker_vbo;
|
GLuint checker_vbo;
|
||||||
GstGLMemory *out_tex;
|
GstGLMemory *out_tex;
|
||||||
|
|
||||||
|
gboolean output_geo_changed;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstGLVideoMixerClass
|
struct _GstGLVideoMixerClass
|
||||||
|
|
Loading…
Reference in a new issue