int avfilter_link(AVFilterContext *src, unsigned srcpad,

                  AVFilterContext *dst, unsigned dstpad)

{

    AVFilterLink *link;



    if (src->nb_outputs <= srcpad || dst->nb_inputs <= dstpad ||

        src->outputs[srcpad]      || dst->inputs[dstpad])

        return -1;



    if (src->output_pads[srcpad].type != dst->input_pads[dstpad].type) {

        av_log(src, AV_LOG_ERROR,

               "Media type mismatch between the '%s' filter output pad %d and the '%s' filter input pad %d\n",

               src->name, srcpad, dst->name, dstpad);

        return AVERROR(EINVAL);

    }



    src->outputs[srcpad] =

    dst-> inputs[dstpad] = link = av_mallocz(sizeof(AVFilterLink));



    link->src     = src;

    link->dst     = dst;

    link->srcpad  = &src->output_pads[srcpad];

    link->dstpad  = &dst->input_pads[dstpad];

    link->type    = src->output_pads[srcpad].type;

    assert(AV_PIX_FMT_NONE == -1 && AV_SAMPLE_FMT_NONE == -1);

    link->format  = -1;



    return 0;

}
