mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
videoaggregator: Add class property to disable caps scaling
Add preserve_update_caps_result boolean on the class to allow sub-classes to disable videoaggregator removing sizes and framerate from the update_caps() return result.
This commit is contained in:
parent
70bae08cdd
commit
03aec73bd4
2 changed files with 17 additions and 7 deletions
|
@ -674,6 +674,7 @@ gst_videoaggregator_update_src_caps (GstVideoAggregator * vagg)
|
||||||
GstCaps *caps, *peercaps, *info_caps;
|
GstCaps *caps, *peercaps, *info_caps;
|
||||||
GstStructure *s;
|
GstStructure *s;
|
||||||
GstVideoInfo info;
|
GstVideoInfo info;
|
||||||
|
int i;
|
||||||
|
|
||||||
if (GST_VIDEO_INFO_FPS_N (&vagg->info) != best_fps_n ||
|
if (GST_VIDEO_INFO_FPS_N (&vagg->info) != best_fps_n ||
|
||||||
GST_VIDEO_INFO_FPS_D (&vagg->info) != best_fps_d) {
|
GST_VIDEO_INFO_FPS_D (&vagg->info) != best_fps_d) {
|
||||||
|
@ -711,11 +712,8 @@ gst_videoaggregator_update_src_caps (GstVideoAggregator * vagg)
|
||||||
caps = info_caps;
|
caps = info_caps;
|
||||||
}
|
}
|
||||||
|
|
||||||
peercaps = gst_pad_peer_query_caps (agg->srcpad, NULL);
|
/* If the sub-class allows it, allow size/framerate changes */
|
||||||
if (peercaps) {
|
if (!vagg_klass->preserve_update_caps_result) {
|
||||||
GstCaps *tmp;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
s = gst_caps_get_structure (caps, 0);
|
s = gst_caps_get_structure (caps, 0);
|
||||||
gst_structure_get (s, "width", G_TYPE_INT, &best_width, "height",
|
gst_structure_get (s, "width", G_TYPE_INT, &best_width, "height",
|
||||||
G_TYPE_INT, &best_height, NULL);
|
G_TYPE_INT, &best_height, NULL);
|
||||||
|
@ -726,6 +724,12 @@ gst_videoaggregator_update_src_caps (GstVideoAggregator * vagg)
|
||||||
"height", GST_TYPE_INT_RANGE, 1, G_MAXINT, "framerate",
|
"height", GST_TYPE_INT_RANGE, 1, G_MAXINT, "framerate",
|
||||||
GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
|
GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
peercaps = gst_pad_peer_query_caps (agg->srcpad, caps);
|
||||||
|
if (peercaps) {
|
||||||
|
GstCaps *tmp;
|
||||||
|
|
||||||
|
|
||||||
tmp = gst_caps_intersect (caps, peercaps);
|
tmp = gst_caps_intersect (caps, peercaps);
|
||||||
GST_DEBUG_OBJECT (vagg, "intersecting %" GST_PTR_FORMAT
|
GST_DEBUG_OBJECT (vagg, "intersecting %" GST_PTR_FORMAT
|
||||||
|
|
|
@ -86,6 +86,9 @@ struct _GstVideoAggregator
|
||||||
* Notifies subclasses what caps format has been negotiated
|
* Notifies subclasses what caps format has been negotiated
|
||||||
* @find_best_format: Optional.
|
* @find_best_format: Optional.
|
||||||
* Lets subclasses decide of the best common format to use.
|
* Lets subclasses decide of the best common format to use.
|
||||||
|
* @preserve_update_caps_result: Sub-classes should set this to true if the return result
|
||||||
|
* of the update_caps() method should not be further modified
|
||||||
|
* by GstVideoAggregator by removing fields.
|
||||||
**/
|
**/
|
||||||
struct _GstVideoAggregatorClass
|
struct _GstVideoAggregatorClass
|
||||||
{
|
{
|
||||||
|
@ -105,6 +108,9 @@ struct _GstVideoAggregatorClass
|
||||||
GstCaps * downstream_caps,
|
GstCaps * downstream_caps,
|
||||||
GstVideoInfo * best_info,
|
GstVideoInfo * best_info,
|
||||||
gboolean * at_least_one_alpha);
|
gboolean * at_least_one_alpha);
|
||||||
|
|
||||||
|
gboolean preserve_update_caps_result;
|
||||||
|
|
||||||
/* < private > */
|
/* < private > */
|
||||||
gpointer _gst_reserved[GST_PADDING_LARGE];
|
gpointer _gst_reserved[GST_PADDING_LARGE];
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue