<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Hi<o:p></o:p></p><p class=MsoNormal>Have a working transcoder pipeline that uses avlib to do the initial AVC decoding which is followed by a homebrewed HEVC encoder, with its sink pad defined as:<o:p></o:p></p><p class=MsoNormal>  static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",<o:p></o:p></p><p class=MsoNormal>        GST_PAD_SINK,<o:p></o:p></p><p class=MsoNormal>        GST_PAD_ALWAYS,<o:p></o:p></p><p class=MsoNormal>        GST_STATIC_CAPS ("video/x-raw, "<o:p></o:p></p><p class=MsoNormal>                         "format = (string) { " FORMATS " }, "<o:p></o:p></p><p class=MsoNormal>                         "framerate = (fraction) [ 0/1, MAX], "<o:p></o:p></p><p class=MsoNormal>                         "width = (int) [ 16, MAX ], " "height = (int) [ 16, MAX ]")<o:p></o:p></p><p class=MsoNormal>        );<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Trying to replace the avlib AVC decoder with another homebrewed version and am seeing endless calls to encoder’s video_encoder_class->getcaps method, which returns the following:<o:p></o:p></p><p class=MsoNormal>    returning video/x-raw, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)[ 16, 2147483647 ], height=(int)[ 16, 2147483647 ], format=(string){ I420, I420_10LE }<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Decoder’s source pad is defined as follow:<o:p></o:p></p><p class=MsoNormal>  static GstStaticPadTemplate gst_avcdec_src_template =<o:p></o:p></p><p class=MsoNormal>    GST_STATIC_PAD_TEMPLATE ("src",<o:p></o:p></p><p class=MsoNormal>    GST_PAD_SRC,<o:p></o:p></p><p class=MsoNormal>    GST_PAD_ALWAYS,<o:p></o:p></p><p class=MsoNormal>                GST_STATIC_CAPS ("video/x-raw,"<o:p></o:p></p><p class=MsoNormal>                                "width = (int)[ 16, MAX ],"<o:p></o:p></p><p class=MsoNormal>                                "height = (int)[ 16, MAX ],"<o:p></o:p></p><p class=MsoNormal>                                "framerate = (fraction) [ 0/1, MAX ],"<o:p></o:p></p><p class=MsoNormal>                                "format = (string) {I420}"<o:p></o:p></p><p class=MsoNormal>                                                                 )<o:p></o:p></p><p class=MsoNormal>    );<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>And is setup in the following manner:<o:p></o:p></p><p class=MsoNormal>In its init function, I have:<o:p></o:p></p><p class=MsoNormal>…<o:p></o:p></p><p class=MsoNormal>avcdec->srcpad = gst_pad_new_from_static_template (&gst_avcdec_src_template, "src");<o:p></o:p></p><p class=MsoNormal>                GST_PAD_SET_PROXY_CAPS (avcdec->srcpad);<o:p></o:p></p><p class=MsoNormal>                gst_pad_set_query_function (avcdec->srcpad,GST_DEBUG_FUNCPTR (gst_avcdec_src_query));<o:p></o:p></p><p class=MsoNormal>                gst_pad_use_fixed_caps(avcdec->srcpad);<o:p></o:p></p><p class=MsoNormal>                gst_element_add_pad (GST_ELEMENT (avcdec), avcdec->srcpad);<o:p></o:p></p><p class=MsoNormal>…<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>In source pad query function I do the following:<o:p></o:p></p><p class=MsoNormal>…<o:p></o:p></p><p class=MsoNormal>                switch (GST_QUERY_TYPE (query)) {<o:p></o:p></p><p class=MsoNormal>                case GST_QUERY_CAPS:{<o:p></o:p></p><p class=MsoNormal>                                GstCaps *caps;<o:p></o:p></p><p class=MsoNormal>                                GST_DEBUG_OBJECT (avcdec, "Using src template caps");<o:p></o:p></p><p class=MsoNormal>                                caps = gst_static_pad_template_get_caps (&gst_avcdec_src_template);<o:p></o:p></p><p class=MsoNormal>                                //caps = gst_pad_get_pad_template_caps(pad);<o:p></o:p></p><p class=MsoNormal>                                gst_query_set_caps_result (query, caps);<o:p></o:p></p><p class=MsoNormal>                                gst_caps_unref (caps);<o:p></o:p></p><p class=MsoNormal>                                break;<o:p></o:p></p><p class=MsoNormal>                }<o:p></o:p></p><p class=MsoNormal>                default:<o:p></o:p></p><p class=MsoNormal>                                res = gst_pad_query_default (pad, parent, query);<o:p></o:p></p><p class=MsoNormal>                                break;<o:p></o:p></p><p class=MsoNormal>                }<o:p></o:p></p><p class=MsoNormal>                return res;<o:p></o:p></p><p class=MsoNormal>…<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>And on sink pad’s cap event I do this:<o:p></o:p></p><p class=MsoNormal>…<o:p></o:p></p><p class=MsoNormal>//avcdec->vinfo.chroma_site=GST_VIDEO_CHROMA_SITE_MPEG2;<o:p></o:p></p><p class=MsoNormal> // avcdec->vinfo.colorimetry.matrix=GST_VIDEO_COLOR_MATRIX_BT709;<o:p></o:p></p><p class=MsoNormal> // avcdec->vinfo.interlace_mode=GST_VIDEO_INTERLACE_MODE_PROGRESSIVE;<o:p></o:p></p><p class=MsoNormal>  //avcdec->vinfo.size=avcdec->vinfo.width*avcdec->vinfo.height;<o:p></o:p></p><p class=MsoNormal>  gst_video_info_set_format(&avcdec->vinfo,GST_VIDEO_FORMAT_I420,avcdec->vinfo.width,avcdec->vinfo.height);<o:p></o:p></p><p class=MsoNormal>  gst_pad_set_caps (avcdec->srcpad, gst_video_info_to_caps(&avcdec->vinfo));<o:p></o:p></p><p class=MsoNormal>…<o:p></o:p></p><p class=MsoNormal>It should be noted that I can dump proper YUV frames into filesink element.<o:p></o:p></p><p class=MsoNormal>By the looks of it I am missing something, any help or pointers would be appreciated.<o:p></o:p></p><p class=MsoNormal>Cheers,<o:p></o:p></p></div></body></html>