# Framerate caps seems don't work with gltestsrc

**URL:** https://discourse.gstreamer.org/t/framerate-caps-seems-dont-work-with-gltestsrc/5337
**Category:** Application Development
**Created:** [September 2, 2025, 7:32pm UTC](https://discourse.gstreamer.org/t/framerate-caps-seems-dont-work-with-gltestsrc/5337 "2025-09-02T19:32:53Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![nuffsaid](https://discourse.gstreamer.org/letter_avatar_proxy/v4/letter/n/7cd45c/32.png) [@nuffsaid](https://discourse.gstreamer.org/u/nuffsaid)
#### Post date: [September 2, 2025, 7:32pm UTC](https://discourse.gstreamer.org/t/framerate-caps-seems-dont-work-with-gltestsrc/5337/1 "2025-09-02T19:32:53Z")

</div>

Hello.

Please look at this piece of code…

```c
//...

//src = gst_element_factory_make("videotestsrc", NULL);
src = gst_element_factory_make("gltestsrc", NULL);
fpssink = gst_element_factory_make("fpsdisplaysink", NULL);

pipeline = gst_pipeline_new("main-pipeline");
gst_bin_add_many(GST_BIN(data.pipeline), src, fpssink, NULL);

video_caps = gst_caps_from_string("video/x-raw, framerate=120/1"); // Fail on any framerate
g_assert(gst_element_link_filtered(src, fpssink, video_caps));

```

Assertion on last line will fail. But if i change src to videotestsrc then it will work just as needed. FPS will be limited to value from caps filter.

> **part of debug log**
>
> 0:00:00.412195194 732430 0x561318e95220 DEBUG GST\_ELEMENT\_FACTORY gstelementfactory.c:523:gst\_element\_factory\_create\_with\_properties: created element “capsfilter”  
> 0:00:00.412200829 732430 0x561318e95220 INFO GST\_STATES gstbin.c:2070:gst\_bin\_get\_state\_func: getting state  
> 0:00:00.412207623 732430 0x561318e95220 DEBUG GST\_STATES gstelement.c:2504:gst\_element\_get\_state\_func: getting state, timeout 0:00:00.000000000  
> 0:00:00.412212564 732430 0x561318e95220 DEBUG GST\_STATES gstelement.c:2516:gst\_element\_get\_state\_func: RETURN is SUCCESS  
> 0:00:00.412217695 732430 0x561318e95220 DEBUG GST\_STATES gstelement.c:2583:gst\_element\_get\_state\_func: state current: NULL, pending: VOID\_PENDING, result: SUCCESS  
> 0:00:00.412222403 732430 0x561318e95220 DEBUG GST\_PARENTAGE gstbin.c:1525:gst\_bin\_add: adding element capsfilter0 to bin main-pipeline  
> 0:00:00.412227119 732430 0x561318e95220 DEBUG bin gstbin.c:1167:gst\_bin\_add\_func: element :capsfilter0  
> 0:00:00.412231880 732430 0x561318e95220 DEBUG GST\_REFCOUNTING gstobject.c:710:gst\_object\_set\_parent: set parent (ref and sink)  
> 0:00:00.412236877 732430 0x561318e95220 DEBUG GST\_PARENTAGE gstelement.c:3495:gst\_element\_set\_bus\_func: setting bus to 0x561319868360  
> 0:00:00.412243665 732430 0x561318e95220 DEBUG GST\_CLOCK gstelement.c:501:gst\_element\_set\_base\_time: set base\_time=0:00:00.000000000, old 0:00:00.000000000  
> 0:00:00.412249699 732430 0x561318e95220 DEBUG GST\_CLOCK gstelement.c:563:gst\_element\_set\_start\_time: set start\_time=0:00:00.000000000, old 0:00:00.000000000  
> 0:00:00.412254146 732430 0x561318e95220 DEBUG GST\_CLOCK gstelement.c:442:gst\_element\_set\_clock: setting clock (nil)  
> 0:00:00.412259009 732430 0x561318e95220 DEBUG bin gstbin.c:1279:gst\_bin\_add\_func: added SUCCESS element  
> 0:00:00.412265243 732430 0x561318e95220 DEBUG GST\_PARENTAGE gstbin.c:1363:gst\_bin\_add\_func: added element “capsfilter0”  
> 0:00:00.412273578 732430 0x561318e95220 DEBUG GST\_STATES gstelement.c:2974:gst\_element\_set\_state\_func: set\_state to NULL  
> 0:00:00.412278934 732430 0x561318e95220 DEBUG GST\_STATES gstelement.c:3008:gst\_element\_set\_state\_func: current NULL, old\_pending VOID\_PENDING, next VOID\_PENDING, old return SUCCESS  
> 0:00:00.412283742 732430 0x561318e95220 DEBUG GST\_STATES gstelement.c:3044:gst\_element\_set\_state\_func: final: setting state from NULL to NULL  
> 0:00:00.412288858 732430 0x561318e95220 DEBUG GST\_STATES gstelement.c:3362:gst\_element\_change\_state\_func: element is already in the NULL state  
> 0:00:00.412292815 732430 0x561318e95220 DEBUG GST\_STATES gstelement.c:3135:gst\_element\_change\_state: element changed state SUCCESS  
> 0:00:00.412297155 732430 0x561318e95220 INFO GST\_STATES gstelement.c:2823:gst\_element\_continue\_state: completed state change to NULL  
> 0:00:00.412302087 732430 0x561318e95220 DEBUG GST\_STATES gstelement.c:3058:gst\_element\_set\_state\_func: returned SUCCESS  
> 0:00:00.412312081 732430 0x561318e95220 DEBUG capsfilter gstcapsfilter.c:217:gst\_capsfilter\_set\_property: set new caps video/x-raw, framerate=(fraction)120/1  
> 0:00:00.412316974 732430 0x561318e95220 INFO GST\_EVENT gstevent.c:1654:gst\_event\_new\_reconfigure: creating reconfigure event  
> 0:00:00.412322634 732430 0x561318e95220 DEBUG GST\_EVENT gstevent.c:336:gst\_event\_new\_custom: creating new event 0x561319a81810 reconfigure 61441  
> 0:00:00.412327367 732430 0x561318e95220 DEBUG GST\_PADS gstpad.c:5724:gst\_pad\_push\_event\_unchecked:capsfilter0:sink We’re flushing  
> 0:00:00.412331566 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:2842:gst\_base\_transform\_reconfigure\_sink: Renegotiate event wasn’t handled  
> 0:00:00.412338464 732430 0x561318e95220 INFO GST\_ELEMENT\_PADS gstutils.c:1818:gst\_element\_link\_pads\_full: trying to link element gltestsrc0:(any) to element capsfilter0:sink  
> 0:00:00.412343881 732430 0x561318e95220 INFO GST\_ELEMENT\_PADS gstelement.c:1015:gst\_element\_get\_static\_pad: found pad capsfilter0:sink  
> 0:00:00.412347904 732430 0x561318e95220 DEBUG GST\_ELEMENT\_PADS gstutils.c:1927:gst\_element\_link\_pads\_full: looping through allowed src and dest pads  
> 0:00:00.412352236 732430 0x561318e95220 DEBUG GST\_ELEMENT\_PADS gstutils.c:1930:gst\_element\_link\_pads\_full: trying src pad gltestsrc0:src  
> 0:00:00.412356960 732430 0x561318e95220 INFO GST\_PADS gstutils.c:1634:prepare\_link\_maybe\_ghosting: gltestsrc0 and capsfilter0 in same bin, no need for ghost pads  
> 0:00:00.412375091 732430 0x561318e95220 DEBUG GST\_BUS gstbus.c:339:gst\_bus\_post: [msg 0x561319b11bd0] posting on bus structure-change message: 0x561319b11bd0, time 99:99:99.999999999, seq-num 24, element ‘sink’, GstMessageStructureChange, type=(GstStructureChangeType)link, owner=(GstElement)“(GstGLTestSrc)\ gltestsrc0”, busy=(boolean)true;  
> 0:00:00.412383509 732430 0x561318e95220 DEBUG bin gstbin.c:3704:gst\_bin\_handle\_message\_func: [msg 0x561319b11bd0] handling child sink message of type structure-change  
> 0:00:00.412389295 732430 0x561318e95220 DEBUG bin gstbin.c:882:find\_message: no message found matching types 00001000  
> 0:00:00.412393352 732430 0x561318e95220 DEBUG bin gstbin.c:889:find\_message: structure-change  
> 0:00:00.412398073 732430 0x561318e95220 DEBUG bin gstbin.c:928:bin\_replace\_message: got new message 0x561319b11bd0, structure-change from sink  
> 0:00:00.412402309 732430 0x561318e95220 DEBUG GST\_BUS gstbus.c:381:gst\_bus\_post: [msg 0x561319b11bd0] dropped  
> 0:00:00.412407607 732430 0x561318e95220 INFO GST\_PADS gstpad.c:2449:gst\_pad\_link\_prepare: trying to link gltestsrc0:src and capsfilter0:sink  
> 0:00:00.412412768 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:3113:gst\_pad\_query\_caps:gltestsrc0:src get pad caps with filter (NULL)  
> 0:00:00.412418421 732430 0x561318e95220 DEBUG query gstquery.c:672:gst\_query\_new\_custom: creating new query 0x561319b1f740 caps  
> 0:00:00.412423584 732430 0x561318e95220 DEBUG GST\_PADS gstpad.c:4269:gst\_pad\_query:gltestsrc0:src doing query 0x561319b1f740 (caps)  
> 0:00:00.412430739 732430 0x561318e95220 DEBUG basesrc gstbasesrc.c:1405:gst\_base\_src\_default\_query: query caps returns 1  
> 0:00:00.412435871 732430 0x561318e95220 DEBUG GST\_PADS gstpad.c:4292:gst\_pad\_query:gltestsrc0:src sent query 0x561319b1f740 (caps), result 1  
> 0:00:00.412445092 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:3120:gst\_pad\_query\_caps:gltestsrc0:src query returned video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[1, 2147483647], height=(int)[1, 2147483647], framerate=(fraction)[0/1, 2147483647/1], texture-target=(string)2D  
> 0:00:00.412451303 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:3113:gst\_pad\_query\_caps:capsfilter0:sink get pad caps with filter (NULL)  
> 0:00:00.412456059 732430 0x561318e95220 DEBUG query gstquery.c:672:gst\_query\_new\_custom: creating new query 0x561319b1f740 caps  
> 0:00:00.412460580 732430 0x561318e95220 DEBUG GST\_PADS gstpad.c:4269:gst\_pad\_query:capsfilter0:sink doing query 0x561319b1f740 (caps)  
> 0:00:00.421258567 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:678:gst\_base\_transform\_query\_caps:capsfilter0:sink peer filter caps (NULL)  
> 0:00:00.421271514 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:3159:gst\_pad\_peer\_query\_caps:capsfilter0:src get pad peer caps with filter (NULL)  
> 0:00:00.421284560 732430 0x561318e95220 DEBUG query gstquery.c:672:gst\_query\_new\_custom: creating new query 0x561319b21670 caps  
> 0:00:00.421302147 732430 0x561318e95220 DEBUG GST\_PADS gstpad.c:4401:gst\_pad\_peer\_query:capsfilter0:src peer query 0x561319b21670 (caps)  
> 0:00:00.421307681 732430 0x561318e95220 INFO GST\_PADS gstpad.c:4458:gst\_pad\_peer\_query:capsfilter0:src pad has no peer  
> 0:00:00.421314912 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:687:gst\_base\_transform\_query\_caps:capsfilter0:sink peer caps ANY  
> 0:00:00.421319880 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:690:gst\_base\_transform\_query\_caps:capsfilter0:sink other template ANY  
> 0:00:00.421324460 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:692:gst\_base\_transform\_query\_caps:capsfilter0:sink intersected ANY  
> 0:00:00.421329504 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:471:gst\_base\_transform\_transform\_caps: transform caps (direction = 1)  
> 0:00:00.421335147 732430 0x561318e95220 DEBUG capsfilter gstcapsfilter.c:301:gst\_capsfilter\_transform\_caps: input: ANY  
> 0:00:00.421339686 732430 0x561318e95220 DEBUG capsfilter gstcapsfilter.c:302:gst\_capsfilter\_transform\_caps: filter: (NULL)  
> 0:00:00.421347505 732430 0x561318e95220 DEBUG capsfilter gstcapsfilter.c:303:gst\_capsfilter\_transform\_caps: caps filter: video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421352641 732430 0x561318e95220 DEBUG capsfilter gstcapsfilter.c:305:gst\_capsfilter\_transform\_caps: intersect: video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421357737 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:498:gst\_base\_transform\_transform\_caps: to: video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421362726 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:700:gst\_base\_transform\_query\_caps:capsfilter0:sink transformed video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421367659 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:707:gst\_base\_transform\_query\_caps:capsfilter0:sink our template ANY  
> 0:00:00.421372817 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:710:gst\_base\_transform\_query\_caps:capsfilter0:sink intersected video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421377960 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:734:gst\_base\_transform\_query\_caps: returning video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421394002 732430 0x561318e95220 DEBUG GST\_PADS gstpad.c:4292:gst\_pad\_query:capsfilter0:sink sent query 0x561319b1f740 (caps), result 1  
> 0:00:00.421399658 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:3120:gst\_pad\_query\_caps:capsfilter0:sink query returned video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421410090 732430 0x561318e95220 DEBUG GST\_CAPS gstpad.c:2299:gst\_pad\_link\_check\_compatible\_unlocked:gltestsrc0:src src caps video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[1, 2147483647], height=(int)[1, 2147483647], framerate=(fraction)[0/1, 2147483647/1], texture-target=(string)2D  
> 0:00:00.421417764 732430 0x561318e95220 DEBUG GST\_CAPS gstpad.c:2301:gst\_pad\_link\_check\_compatible\_unlocked:capsfilter0:sink sink caps video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421422673 732430 0x561318e95220 DEBUG GST\_CAPS gstpad.c:2319:gst\_pad\_link\_check\_compatible\_unlocked: caps are not compatible  
> 0:00:00.421427042 732430 0x561318e95220 INFO GST\_PADS gstpad.c:2462:gst\_pad\_link\_prepare: caps are incompatible  
> 0:00:00.421433552 732430 0x561318e95220 INFO GST\_PADS gstpad.c:2572:gst\_pad\_link\_full: link between gltestsrc0:src and capsfilter0:sink failed: no common format  
> 0:00:00.421454707 732430 0x561318e95220 DEBUG GST\_BUS gstbus.c:339:gst\_bus\_post: [msg 0x561319b21670] posting on bus structure-change message: 0x561319b21670, time 99:99:99.999999999, seq-num 25, element ‘sink’, GstMessageStructureChange, type=(GstStructureChangeType)link, owner=(GstElement)“(GstGLTestSrc)\ gltestsrc0”, busy=(boolean)false;  
> 0:00:00.421463792 732430 0x561318e95220 DEBUG bin gstbin.c:3704:gst\_bin\_handle\_message\_func: [msg 0x561319b21670] handling child sink message of type structure-change  
> 0:00:00.421471634 732430 0x561318e95220 DEBUG bin gstbin.c:956:bin\_remove\_messages:capsfilter0:sink deleting message 0x561319b11bd0 of type structure-change (types 0x00001000)  
> 0:00:00.421478459 732430 0x561318e95220 DEBUG GST\_BUS gstbus.c:381:gst\_bus\_post: [msg 0x561319b21670] dropped  
> 0:00:00.421484470 732430 0x561318e95220 DEBUG GST\_ELEMENT\_PADS gstutils.c:1993:gst\_element\_link\_pads\_full: trying dest pad capsfilter0:sink  
> 0:00:00.421489600 732430 0x561318e95220 DEBUG GST\_ELEMENT\_PADS gstutils.c:1148:gst\_element\_get\_compatible\_pad: finding pad compatible with capsfilter0:sink  
> 0:00:00.421497192 732430 0x561318e95220 INFO GST\_PADS gstutils.c:1079:gst\_pad\_check\_link: trying to link gltestsrc0:src and capsfilter0:sink  
> 0:00:00.421502254 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:3113:gst\_pad\_query\_caps:capsfilter0:sink get pad caps with filter (NULL)  
> 0:00:00.421507532 732430 0x561318e95220 DEBUG query gstquery.c:672:gst\_query\_new\_custom: creating new query 0x561319b2b300 caps  
> 0:00:00.421512964 732430 0x561318e95220 DEBUG GST\_PADS gstpad.c:4269:gst\_pad\_query:capsfilter0:sink doing query 0x561319b2b300 (caps)  
> 0:00:00.421517816 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:678:gst\_base\_transform\_query\_caps:capsfilter0:sink peer filter caps (NULL)  
> 0:00:00.421522469 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:3159:gst\_pad\_peer\_query\_caps:capsfilter0:src get pad peer caps with filter (NULL)  
> 0:00:00.421527831 732430 0x561318e95220 DEBUG query gstquery.c:672:gst\_query\_new\_custom: creating new query 0x561319b2b010 caps  
> 0:00:00.421532881 732430 0x561318e95220 DEBUG GST\_PADS gstpad.c:4401:gst\_pad\_peer\_query:capsfilter0:src peer query 0x561319b2b010 (caps)  
> 0:00:00.421537415 732430 0x561318e95220 INFO GST\_PADS gstpad.c:4458:gst\_pad\_peer\_query:capsfilter0:src pad has no peer  
> 0:00:00.421542320 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:687:gst\_base\_transform\_query\_caps:capsfilter0:sink peer caps ANY  
> 0:00:00.421546694 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:690:gst\_base\_transform\_query\_caps:capsfilter0:sink other template ANY  
> 0:00:00.421550974 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:692:gst\_base\_transform\_query\_caps:capsfilter0:sink intersected ANY  
> 0:00:00.421555638 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:471:gst\_base\_transform\_transform\_caps: transform caps (direction = 1)  
> 0:00:00.421560109 732430 0x561318e95220 DEBUG capsfilter gstcapsfilter.c:301:gst\_capsfilter\_transform\_caps: input: ANY  
> 0:00:00.421564483 732430 0x561318e95220 DEBUG capsfilter gstcapsfilter.c:302:gst\_capsfilter\_transform\_caps: filter: (NULL)  
> 0:00:00.421569483 732430 0x561318e95220 DEBUG capsfilter gstcapsfilter.c:303:gst\_capsfilter\_transform\_caps: caps filter: video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421574423 732430 0x561318e95220 DEBUG capsfilter gstcapsfilter.c:305:gst\_capsfilter\_transform\_caps: intersect: video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421579258 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:498:gst\_base\_transform\_transform\_caps: to: video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421584388 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:700:gst\_base\_transform\_query\_caps:capsfilter0:sink transformed video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421588748 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:707:gst\_base\_transform\_query\_caps:capsfilter0:sink our template ANY  
> 0:00:00.421593648 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:710:gst\_base\_transform\_query\_caps:capsfilter0:sink intersected video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421598869 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:734:gst\_base\_transform\_query\_caps: returning video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421604755 732430 0x561318e95220 DEBUG GST\_PADS gstpad.c:4292:gst\_pad\_query:capsfilter0:sink sent query 0x561319b2b300 (caps), result 1  
> 0:00:00.421609542 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:3120:gst\_pad\_query\_caps:capsfilter0:sink query returned video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421613770 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:3113:gst\_pad\_query\_caps:gltestsrc0:src get pad caps with filter (NULL)  
> 0:00:00.421618560 732430 0x561318e95220 DEBUG query gstquery.c:672:gst\_query\_new\_custom: creating new query 0x561319b2a610 caps  
> 0:00:00.421623089 732430 0x561318e95220 DEBUG GST\_PADS gstpad.c:4269:gst\_pad\_query:gltestsrc0:src doing query 0x561319b2a610 (caps)  
> 0:00:00.421630186 732430 0x561318e95220 DEBUG basesrc gstbasesrc.c:1405:gst\_base\_src\_default\_query: query caps returns 1  
> 0:00:00.421638566 732430 0x561318e95220 DEBUG GST\_PADS gstpad.c:4292:gst\_pad\_query:gltestsrc0:src sent query 0x561319b2a610 (caps), result 1  
> 0:00:00.421646227 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:3120:gst\_pad\_query\_caps:gltestsrc0:src query returned video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[1, 2147483647], height=(int)[1, 2147483647], framerate=(fraction)[0/1, 2147483647/1], texture-target=(string)2D  
> 0:00:00.421652704 732430 0x561318e95220 DEBUG GST\_ELEMENT\_PADS gstutils.c:1216:gst\_element\_get\_compatible\_pad: incompatible pads  
> 0:00:00.421656922 732430 0x561318e95220 DEBUG GST\_ELEMENT\_PADS gstutils.c:1223:gst\_element\_get\_compatible\_pad: unreffing pads  
> 0:00:00.421662357 732430 0x561318e95220 DEBUG GST\_ELEMENT\_PADS gstutils.c:1244:gst\_element\_get\_compatible\_pad: Could not find a compatible unlinked always pad to link to capsfilter0:sink, now checking request pads  
> 0:00:00.421669012 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:3113:gst\_pad\_query\_caps:capsfilter0:sink get pad caps with filter (NULL)  
> 0:00:00.421674084 732430 0x561318e95220 DEBUG query gstquery.c:672:gst\_query\_new\_custom: creating new query 0x561319b1f740 caps  
> 0:00:00.421679100 732430 0x561318e95220 DEBUG GST\_PADS gstpad.c:4269:gst\_pad\_query:capsfilter0:sink doing query 0x561319b1f740 (caps)  
> 0:00:00.421683667 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:678:gst\_base\_transform\_query\_caps:capsfilter0:sink peer filter caps (NULL)  
> 0:00:00.421688461 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:3159:gst\_pad\_peer\_query\_caps:capsfilter0:src get pad peer caps with filter (NULL)  
> 0:00:00.421693491 732430 0x561318e95220 DEBUG query gstquery.c:672:gst\_query\_new\_custom: creating new query 0x561319b2ad40 caps  
> 0:00:00.421698245 732430 0x561318e95220 DEBUG GST\_PADS gstpad.c:4401:gst\_pad\_peer\_query:capsfilter0:src peer query 0x561319b2ad40 (caps)  
> 0:00:00.421702754 732430 0x561318e95220 INFO GST\_PADS gstpad.c:4458:gst\_pad\_peer\_query:capsfilter0:src pad has no peer  
> 0:00:00.421707285 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:687:gst\_base\_transform\_query\_caps:capsfilter0:sink peer caps ANY  
> 0:00:00.421711695 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:690:gst\_base\_transform\_query\_caps:capsfilter0:sink other template ANY  
> 0:00:00.421715917 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:692:gst\_base\_transform\_query\_caps:capsfilter0:sink intersected ANY  
> 0:00:00.421720193 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:471:gst\_base\_transform\_transform\_caps: transform caps (direction = 1)  
> 0:00:00.421724686 732430 0x561318e95220 DEBUG capsfilter gstcapsfilter.c:301:gst\_capsfilter\_transform\_caps: input: ANY  
> 0:00:00.421728837 732430 0x561318e95220 DEBUG capsfilter gstcapsfilter.c:302:gst\_capsfilter\_transform\_caps: filter: (NULL)  
> 0:00:00.421733867 732430 0x561318e95220 DEBUG capsfilter gstcapsfilter.c:303:gst\_capsfilter\_transform\_caps: caps filter: video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421738572 732430 0x561318e95220 DEBUG capsfilter gstcapsfilter.c:305:gst\_capsfilter\_transform\_caps: intersect: video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421743342 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:498:gst\_base\_transform\_transform\_caps: to: video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421748220 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:700:gst\_base\_transform\_query\_caps:capsfilter0:sink transformed video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421752552 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:707:gst\_base\_transform\_query\_caps:capsfilter0:sink our template ANY  
> 0:00:00.421757275 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:710:gst\_base\_transform\_query\_caps:capsfilter0:sink intersected video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421762086 732430 0x561318e95220 DEBUG basetransform gstbasetransform.c:734:gst\_base\_transform\_query\_caps: returning video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421767774 732430 0x561318e95220 DEBUG GST\_PADS gstpad.c:4292:gst\_pad\_query:capsfilter0:sink sent query 0x561319b1f740 (caps), result 1  
> 0:00:00.421772930 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:3120:gst\_pad\_query\_caps:capsfilter0:sink query returned video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421808100 732430 0x561318e95220 DEBUG GST\_ELEMENT\_PADS gstutils.c:943:gst\_element\_get\_compatible\_pad\_template: Looking for a suitable pad template in gltestsrc0 out of 1 templates…  
> 0:00:00.421813092 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:958:gst\_element\_get\_compatible\_pad\_template: compatible direction: found src pad template “src”  
> 0:00:00.421818391 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:963:gst\_element\_get\_compatible\_pad\_template: intersecting video/x-raw, framerate=(fraction)120/1  
> 0:00:00.421824785 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:965:gst\_element\_get\_compatible\_pad\_template: ..and video/x-raw(memory:GLMemory), format=(string)RGBA, width=(int)[1, 2147483647], height=(int)[1, 2147483647], framerate=(fraction)[0/1, 2147483647/1], texture-target=(string)2D  
> 0:00:00.421831115 732430 0x561318e95220 DEBUG GST\_CAPS gstutils.c:971:gst\_element\_get\_compatible\_pad\_template: caps are not compatible  
> 0:00:00.421835403 732430 0x561318e95220 DEBUG GST\_ELEMENT\_PADS gstutils.c:986:gst\_element\_get\_compatible\_pad\_template: No compatible pad template found  
> 0:00:00.421842430 732430 0x561318e95220 INFO GST\_ELEMENT\_PADS gstutils.c:1270:gst\_element\_get\_compatible\_pad: Could not find a compatible pad to link to capsfilter0:sink  
> 0:00:00.421847720 732430 0x561318e95220 DEBUG GST\_ELEMENT\_PADS gstutils.c:2028:gst\_element\_link\_pads\_full: no link possible from gltestsrc0 to capsfilter0:sink

Can somebody explain why?

---

<div class="post-metadata">

### Author: ![ystreet00](https://discourse.gstreamer.org/letter_avatar_proxy/v4/letter/y/3d9bf3/32.png) [@ystreet00](https://discourse.gstreamer.org/u/ystreet00)
#### Post date: [September 2, 2025, 11:20pm UTC](https://discourse.gstreamer.org/t/framerate-caps-seems-dont-work-with-gltestsrc/5337/2 "2025-09-02T23:20:13Z")

</div>

`gltestsrc` will output caps with a feature which is not compatible with `video/x-raw` caps (interpreted as having a feature of `memory:SystemMemory`). You need to either use `video/x-raw(ANY)` or `video/x-raw(memory:GLMemory)`. Look at the `gst-inspect-1.0 gltestsrc` output for details or the documentation on `GstCapsFeatures`: [GstCapsFeatures](https://gstreamer.freedesktop.org/documentation/gstreamer/gstcapsfeatures.html?gi-language=c)
