static int ff_filter_frame_framed(AVFilterLink *link, AVFilterBufferRef *frame)

{

    int (*filter_frame)(AVFilterLink *, AVFilterBufferRef *);

    AVFilterPad *src = link->srcpad;

    AVFilterPad *dst = link->dstpad;

    AVFilterBufferRef *out;

    int perms, ret;

    AVFilterCommand *cmd= link->dst->command_queue;

    int64_t pts;



    if (link->closed) {

        avfilter_unref_buffer(frame);

        return AVERROR_EOF;

    }



    if (!(filter_frame = dst->filter_frame))

        filter_frame = default_filter_frame;



    av_assert1((frame->perms & src->min_perms) == src->min_perms);

    frame->perms &= ~ src->rej_perms;

    perms = frame->perms;



    if (frame->linesize[0] < 0)

        perms |= AV_PERM_NEG_LINESIZES;



    /* prepare to copy the frame if the buffer has insufficient permissions */

    if ((dst->min_perms & perms) != dst->min_perms ||

        dst->rej_perms & perms) {

        av_log(link->dst, AV_LOG_DEBUG,

               "Copying data in avfilter (have perms %x, need %x, reject %x)\n",

               perms, link->dstpad->min_perms, link->dstpad->rej_perms);



        /* Maybe use ff_copy_buffer_ref instead? */

        switch (link->type) {

        case AVMEDIA_TYPE_VIDEO:

            out = ff_get_video_buffer(link, dst->min_perms,

                                      link->w, link->h);

            break;

        case AVMEDIA_TYPE_AUDIO:

            out = ff_get_audio_buffer(link, dst->min_perms,

                                      frame->audio->nb_samples);

            break;

        default: return AVERROR(EINVAL);

        }

        if (!out) {

            avfilter_unref_buffer(frame);

            return AVERROR(ENOMEM);

        }

        avfilter_copy_buffer_ref_props(out, frame);



        switch (link->type) {

        case AVMEDIA_TYPE_VIDEO:

            av_image_copy(out->data, out->linesize, frame->data, frame->linesize,

                          frame->format, frame->video->w, frame->video->h);

            break;

        case AVMEDIA_TYPE_AUDIO:

            av_samples_copy(out->extended_data, frame->extended_data,

                            0, 0, frame->audio->nb_samples,

                            av_get_channel_layout_nb_channels(frame->audio->channel_layout),

                            frame->format);

            break;

        default: return AVERROR(EINVAL);

        }



        avfilter_unref_buffer(frame);

    } else

        out = frame;



    while(cmd && cmd->time <= frame->pts * av_q2d(link->time_base)){

        av_log(link->dst, AV_LOG_DEBUG,

               "Processing command time:%f command:%s arg:%s\n",

               cmd->time, cmd->command, cmd->arg);

        avfilter_process_command(link->dst, cmd->command, cmd->arg, 0, 0, cmd->flags);

        ff_command_queue_pop(link->dst);

        cmd= link->dst->command_queue;

    }



    pts = out->pts;

    ret = filter_frame(link, out);

    ff_update_link_current_pts(link, pts);

    return ret;

}

static int ff_filter_frame_framed(AVFilterLink *link, AVFilterBufferRef *frame)

{

    int (*filter_frame)(AVFilterLink *, AVFilterBufferRef *);

    AVFilterPad *src = link->srcpad;

    AVFilterPad *dst = link->dstpad;

    AVFilterBufferRef *out;

    int perms, ret;

    AVFilterCommand *cmd= link->dst->command_queue;

    int64_t pts;



    if (link->closed) {

        avfilter_unref_buffer(frame);

        return AVERROR_EOF;

    }



    if (!(filter_frame = dst->filter_frame))

        filter_frame = default_filter_frame;



    av_assert1((frame->perms & src->min_perms) == src->min_perms);

    frame->perms &= ~ src->rej_perms;

    perms = frame->perms;



    if (frame->linesize[0] < 0)

        perms |= AV_PERM_NEG_LINESIZES;



    

    if ((dst->min_perms & perms) != dst->min_perms ||

        dst->rej_perms & perms) {

        av_log(link->dst, AV_LOG_DEBUG,

               "Copying data in avfilter (have perms %x, need %x, reject %x)\n",

               perms, link->dstpad->min_perms, link->dstpad->rej_perms);



        

        switch (link->type) {

        case AVMEDIA_TYPE_VIDEO:

            out = ff_get_video_buffer(link, dst->min_perms,

                                      link->w, link->h);

            break;

        case AVMEDIA_TYPE_AUDIO:

            out = ff_get_audio_buffer(link, dst->min_perms,

                                      frame->audio->nb_samples);

            break;

        default: return AVERROR(EINVAL);

        }

        if (!out) {

            avfilter_unref_buffer(frame);

            return AVERROR(ENOMEM);

        }

        avfilter_copy_buffer_ref_props(out, frame);



        switch (link->type) {

        case AVMEDIA_TYPE_VIDEO:

            av_image_copy(out->data, out->linesize, frame->data, frame->linesize,

                          frame->format, frame->video->w, frame->video->h);

            break;

        case AVMEDIA_TYPE_AUDIO:

            av_samples_copy(out->extended_data, frame->extended_data,

                            0, 0, frame->audio->nb_samples,

                            av_get_channel_layout_nb_channels(frame->audio->channel_layout),

                            frame->format);

            break;

        default: return AVERROR(EINVAL);

        }



        avfilter_unref_buffer(frame);

    } else

        out = frame;



    while(cmd && cmd->time <= frame->pts * av_q2d(link->time_base)){

        av_log(link->dst, AV_LOG_DEBUG,

               "Processing command time:%f command:%s arg:%s\n",

               cmd->time, cmd->command, cmd->arg);

        avfilter_process_command(link->dst, cmd->command, cmd->arg, 0, 0, cmd->flags);

        ff_command_queue_pop(link->dst);

        cmd= link->dst->command_queue;

    }



    pts = out->pts;

    ret = filter_frame(link, out);

    ff_update_link_current_pts(link, pts);

    return ret;

}

    while(cmd && cmd->time <= frame->pts * av_q2d(link->time_base)){
VAR_4staticVAR_4 VAR_4intVAR_4 VAR_4ff_filter_frame_framedVAR_4(VAR_4AVFilterLinkVAR_4 *VAR_4VAR_0VAR_4, VAR_4AVFilterBufferRefVAR_4 *VAR_4VAR_1VAR_4)

{

    VAR_4intVAR_4 (*VAR_4VAR_2VAR_4)(VAR_4AVFilterLinkVAR_4 *, VAR_4AVFilterBufferRefVAR_4 *);

    VAR_4AVFilterPadVAR_4 *VAR_4srcVAR_4 = VAR_4VAR_0VAR_4->VAR_4srcpadVAR_4;

    VAR_4AVFilterPadVAR_4 *VAR_4dstVAR_4 = VAR_4VAR_0VAR_4->VAR_4dstpadVAR_4;

    VAR_4AVFilterBufferRefVAR_4 *VAR_4outVAR_4;

    VAR_4intVAR_4 VAR_4permsVAR_4, VAR_4retVAR_4;

    VAR_4AVFilterCommandVAR_4 *VAR_4cmdVAR_4= VAR_4VAR_0VAR_4->VAR_4dstVAR_4->VAR_4command_queueVAR_4;

    VAR_4int64_tVAR_4 VAR_4ptsVAR_4;



    VAR_4ifVAR_4 (VAR_4VAR_0VAR_4->VAR_4closedVAR_4) {

        VAR_4avfilter_unref_bufferVAR_4(VAR_4VAR_1VAR_4);

        VAR_4returnVAR_4 VAR_4AVERROR_EOFVAR_4;

    }



    VAR_4ifVAR_4 (!(VAR_4VAR_2VAR_4 = VAR_4dstVAR_4->VAR_4VAR_2VAR_4))

        VAR_4VAR_2VAR_4 = VAR_4default_filter_frameVAR_4;



    VAR_4av_assert1VAR_4((VAR_4VAR_1VAR_4->VAR_4permsVAR_4 & VAR_4srcVAR_4->VAR_4min_permsVAR_4) == VAR_4srcVAR_4->VAR_4min_permsVAR_4);

    VAR_4VAR_1VAR_4->VAR_4permsVAR_4 &= ~ VAR_4srcVAR_4->VAR_4rej_permsVAR_4;

    VAR_4permsVAR_4 = VAR_4VAR_1VAR_4->VAR_4permsVAR_4;



    VAR_4ifVAR_4 (VAR_4VAR_1VAR_4->VAR_4linesizeVAR_4[VAR_40VAR_4] < VAR_40VAR_4)

        VAR_4permsVAR_4 |= VAR_4AV_PERM_NEG_LINESIZESVAR_4;



    

    VAR_4ifVAR_4 ((VAR_4dstVAR_4->VAR_4min_permsVAR_4 & VAR_4permsVAR_4) != VAR_4dstVAR_4->VAR_4min_permsVAR_4 ||

        VAR_4dstVAR_4->VAR_4rej_permsVAR_4 & VAR_4permsVAR_4) {

        VAR_4av_logVAR_4(VAR_4VAR_0VAR_4->VAR_4dstVAR_4, VAR_4AV_LOG_DEBUGVAR_4,

               "VAR_4CopyingVAR_4 VAR_4dataVAR_4 VAR_4inVAR_4 VAR_4avfilterVAR_4 (VAR_4haveVAR_4 VAR_4permsVAR_4 %VAR_4xVAR_4, VAR_4needVAR_4 %VAR_4xVAR_4, VAR_4rejectVAR_4 %VAR_4xVAR_4)\VAR_4nVAR_4",

               VAR_4permsVAR_4, VAR_4VAR_0VAR_4->VAR_4dstpadVAR_4->VAR_4min_permsVAR_4, VAR_4VAR_0VAR_4->VAR_4dstpadVAR_4->VAR_4rej_permsVAR_4);



        

        VAR_4switchVAR_4 (VAR_4VAR_0VAR_4->VAR_4typeVAR_4) {

        VAR_4caseVAR_4 VAR_4AVMEDIA_TYPE_VIDEOVAR_4:

            VAR_4outVAR_4 = VAR_4ff_get_video_bufferVAR_4(VAR_4VAR_0VAR_4, VAR_4dstVAR_4->VAR_4min_permsVAR_4,

                                      VAR_4VAR_0VAR_4->VAR_4wVAR_4, VAR_4VAR_0VAR_4->VAR_4hVAR_4);

            VAR_4breakVAR_4;

        VAR_4caseVAR_4 VAR_4AVMEDIA_TYPE_AUDIOVAR_4:

            VAR_4outVAR_4 = VAR_4ff_get_audio_bufferVAR_4(VAR_4VAR_0VAR_4, VAR_4dstVAR_4->VAR_4min_permsVAR_4,

                                      VAR_4VAR_1VAR_4->VAR_4audioVAR_4->VAR_4nb_samplesVAR_4);

            VAR_4breakVAR_4;

        VAR_4defaultVAR_4: VAR_4returnVAR_4 VAR_4AVERRORVAR_4(VAR_4EINVALVAR_4);

        }

        VAR_4ifVAR_4 (!VAR_4outVAR_4) {

            VAR_4avfilter_unref_bufferVAR_4(VAR_4VAR_1VAR_4);

            VAR_4returnVAR_4 VAR_4AVERRORVAR_4(VAR_4ENOMEMVAR_4);

        }

        VAR_4avfilter_copy_buffer_ref_propsVAR_4(VAR_4outVAR_4, VAR_4VAR_1VAR_4);



        VAR_4switchVAR_4 (VAR_4VAR_0VAR_4->VAR_4typeVAR_4) {

        VAR_4caseVAR_4 VAR_4AVMEDIA_TYPE_VIDEOVAR_4:

            VAR_4av_image_copyVAR_4(VAR_4outVAR_4->VAR_4dataVAR_4, VAR_4outVAR_4->VAR_4linesizeVAR_4, VAR_4VAR_1VAR_4->VAR_4dataVAR_4, VAR_4VAR_1VAR_4->VAR_4linesizeVAR_4,

                          VAR_4VAR_1VAR_4->VAR_4formatVAR_4, VAR_4VAR_1VAR_4->VAR_4videoVAR_4->VAR_4wVAR_4, VAR_4VAR_1VAR_4->VAR_4videoVAR_4->VAR_4hVAR_4);

            VAR_4breakVAR_4;

        VAR_4caseVAR_4 VAR_4AVMEDIA_TYPE_AUDIOVAR_4:

            VAR_4av_samples_copyVAR_4(VAR_4outVAR_4->VAR_4extended_dataVAR_4, VAR_4VAR_1VAR_4->VAR_4extended_dataVAR_4,

                            VAR_40VAR_4, VAR_40VAR_4, VAR_4VAR_1VAR_4->VAR_4audioVAR_4->VAR_4nb_samplesVAR_4,

                            VAR_4av_get_channel_layout_nb_channelsVAR_4(VAR_4VAR_1VAR_4->VAR_4audioVAR_4->VAR_4channel_layoutVAR_4),

                            VAR_4VAR_1VAR_4->VAR_4formatVAR_4);

            VAR_4breakVAR_4;

        VAR_4defaultVAR_4: VAR_4returnVAR_4 VAR_4AVERRORVAR_4(VAR_4EINVALVAR_4);

        }



        VAR_4avfilter_unref_bufferVAR_4(VAR_4VAR_1VAR_4);

    } VAR_4elseVAR_4

        VAR_4outVAR_4 = VAR_4VAR_1VAR_4;



    VAR_4whileVAR_4(VAR_4cmdVAR_4 && VAR_4cmdVAR_4->VAR_4timeVAR_4 <= VAR_4VAR_1VAR_4->VAR_4ptsVAR_4 * VAR_4av_q2dVAR_4(VAR_4VAR_0VAR_4->VAR_4time_baseVAR_4)){

        VAR_4av_logVAR_4(VAR_4VAR_0VAR_4->VAR_4dstVAR_4, VAR_4AV_LOG_DEBUGVAR_4,

               "VAR_4ProcessingVAR_4 VAR_4commandVAR_4 VAR_4timeVAR_4:%VAR_4fVAR_4 VAR_4commandVAR_4:%VAR_4sVAR_4 VAR_4argVAR_4:%VAR_4sVAR_4\VAR_4nVAR_4",

               VAR_4cmdVAR_4->VAR_4timeVAR_4, VAR_4cmdVAR_4->VAR_4commandVAR_4, VAR_4cmdVAR_4->VAR_4argVAR_4);

        VAR_4avfilter_process_commandVAR_4(VAR_4VAR_0VAR_4->VAR_4dstVAR_4, VAR_4cmdVAR_4->VAR_4commandVAR_4, VAR_4cmdVAR_4->VAR_4argVAR_4, VAR_40VAR_4, VAR_40VAR_4, VAR_4cmdVAR_4->VAR_4flagsVAR_4);

        VAR_4ff_command_queue_popVAR_4(VAR_4VAR_0VAR_4->VAR_4dstVAR_4);

        VAR_4cmdVAR_4= VAR_4VAR_0VAR_4->VAR_4dstVAR_4->VAR_4command_queueVAR_4;

    }



    VAR_4ptsVAR_4 = VAR_4outVAR_4->VAR_4ptsVAR_4;

    VAR_4retVAR_4 = VAR_4VAR_2VAR_4(VAR_4VAR_0VAR_4, VAR_4outVAR_4);

    VAR_4ff_update_link_current_ptsVAR_4(VAR_4VAR_0VAR_4, VAR_4ptsVAR_4);

    VAR_4returnVAR_4 VAR_4retVAR_4;

}

VAR_4staticVAR_4 VAR_4intVAR_4 VAR_4ff_filter_frame_framedVAR_4(VAR_4AVFilterLinkVAR_4 *VAR_4VAR_0VAR_4, VAR_4AVFilterBufferRefVAR_4 *VAR_4VAR_1VAR_4)
{ VAR_4intVAR_4 (*VAR_4VAR_2VAR_4)(VAR_4AVFilterLinkVAR_4 *, VAR_4AVFilterBufferRefVAR_4 *); VAR_4AVFilterPadVAR_4 *VAR_4srcVAR_4 = VAR_4VAR_0VAR_4->VAR_4srcpadVAR_4; VAR_4AVFilterPadVAR_4 *VAR_4dstVAR_4 = VAR_4VAR_0VAR_4->VAR_4dstpadVAR_4; VAR_4AVFilterBufferRefVAR_4 *VAR_4outVAR_4; VAR_4intVAR_4 VAR_4permsVAR_4, VAR_4retVAR_4; VAR_4AVFilterCommandVAR_4 *VAR_4cmdVAR_4= VAR_4VAR_0VAR_4->VAR_4dstVAR_4->VAR_4command_queueVAR_4; VAR_4int64_tVAR_4 VAR_4ptsVAR_4; VAR_4ifVAR_4 (VAR_4VAR_0VAR_4->VAR_4closedVAR_4) { VAR_4avfilter_unref_bufferVAR_4(VAR_4VAR_1VAR_4); VAR_4returnVAR_4 VAR_4AVERROR_EOFVAR_4; } VAR_4ifVAR_4 (!(VAR_4VAR_2VAR_4 = VAR_4dstVAR_4->VAR_4VAR_2VAR_4))
VAR_4VAR_2VAR_4 = VAR_4default_filter_frameVAR_4; VAR_4av_assert1VAR_4((VAR_4VAR_1VAR_4->VAR_4permsVAR_4 & VAR_4srcVAR_4->VAR_4min_permsVAR_4) == VAR_4srcVAR_4->VAR_4min_permsVAR_4); VAR_4VAR_1VAR_4->VAR_4permsVAR_4 &= ~ VAR_4srcVAR_4->VAR_4rej_permsVAR_4; VAR_4permsVAR_4 = VAR_4VAR_1VAR_4->VAR_4permsVAR_4; VAR_4ifVAR_4 (VAR_4VAR_1VAR_4->VAR_4linesizeVAR_4[VAR_40VAR_4] < VAR_40VAR_4)
VAR_4permsVAR_4 |= VAR_4AV_PERM_NEG_LINESIZESVAR_4; VAR_4ifVAR_4 ((VAR_4dstVAR_4->VAR_4min_permsVAR_4 & VAR_4permsVAR_4) != VAR_4dstVAR_4->VAR_4min_permsVAR_4 ||
VAR_4dstVAR_4->VAR_4rej_permsVAR_4 & VAR_4permsVAR_4) { VAR_4av_logVAR_4(VAR_4VAR_0VAR_4->VAR_4dstVAR_4, VAR_4AV_LOG_DEBUGVAR_4,
"VAR_4CopyingVAR_4 VAR_4dataVAR_4 VAR_4inVAR_4 VAR_4avfilterVAR_4 (VAR_4haveVAR_4 VAR_4permsVAR_4 %VAR_4xVAR_4, VAR_4needVAR_4 %VAR_4xVAR_4, VAR_4rejectVAR_4 %VAR_4xVAR_4)\VAR_4nVAR_4",
VAR_4permsVAR_4, VAR_4VAR_0VAR_4->VAR_4dstpadVAR_4->VAR_4min_permsVAR_4, VAR_4VAR_0VAR_4->VAR_4dstpadVAR_4->VAR_4rej_permsVAR_4); VAR_4switchVAR_4 (VAR_4VAR_0VAR_4->VAR_4typeVAR_4) { VAR_4caseVAR_4 VAR_4AVMEDIA_TYPE_VIDEOVAR_4:
VAR_4outVAR_4 = VAR_4ff_get_video_bufferVAR_4(VAR_4VAR_0VAR_4, VAR_4dstVAR_4->VAR_4min_permsVAR_4,
VAR_4VAR_0VAR_4->VAR_4wVAR_4, VAR_4VAR_0VAR_4->VAR_4hVAR_4); VAR_4breakVAR_4; VAR_4caseVAR_4 VAR_4AVMEDIA_TYPE_AUDIOVAR_4:
VAR_4outVAR_4 = VAR_4ff_get_audio_bufferVAR_4(VAR_4VAR_0VAR_4, VAR_4dstVAR_4->VAR_4min_permsVAR_4,
VAR_4VAR_1VAR_4->VAR_4audioVAR_4->VAR_4nb_samplesVAR_4); VAR_4breakVAR_4; VAR_4defaultVAR_4: VAR_4returnVAR_4 VAR_4AVERRORVAR_4(VAR_4EINVALVAR_4); } VAR_4ifVAR_4 (!VAR_4outVAR_4) { VAR_4avfilter_unref_bufferVAR_4(VAR_4VAR_1VAR_4); VAR_4returnVAR_4 VAR_4AVERRORVAR_4(VAR_4ENOMEMVAR_4); } VAR_4avfilter_copy_buffer_ref_propsVAR_4(VAR_4outVAR_4, VAR_4VAR_1VAR_4); VAR_4switchVAR_4 (VAR_4VAR_0VAR_4->VAR_4typeVAR_4) { VAR_4caseVAR_4 VAR_4AVMEDIA_TYPE_VIDEOVAR_4:
VAR_4av_image_copyVAR_4(VAR_4outVAR_4->VAR_4dataVAR_4, VAR_4outVAR_4->VAR_4linesizeVAR_4, VAR_4VAR_1VAR_4->VAR_4dataVAR_4, VAR_4VAR_1VAR_4->VAR_4linesizeVAR_4,
VAR_4VAR_1VAR_4->VAR_4formatVAR_4, VAR_4VAR_1VAR_4->VAR_4videoVAR_4->VAR_4wVAR_4, VAR_4VAR_1VAR_4->VAR_4videoVAR_4->VAR_4hVAR_4); VAR_4breakVAR_4; VAR_4caseVAR_4 VAR_4AVMEDIA_TYPE_AUDIOVAR_4:
VAR_4av_samples_copyVAR_4(VAR_4outVAR_4->VAR_4extended_dataVAR_4, VAR_4VAR_1VAR_4->VAR_4extended_dataVAR_4,
VAR_40VAR_4, VAR_40VAR_4, VAR_4VAR_1VAR_4->VAR_4audioVAR_4->VAR_4nb_samplesVAR_4,
VAR_4av_get_channel_layout_nb_channelsVAR_4(VAR_4VAR_1VAR_4->VAR_4audioVAR_4->VAR_4channel_layoutVAR_4),
VAR_4VAR_1VAR_4->VAR_4formatVAR_4); VAR_4breakVAR_4; VAR_4defaultVAR_4: VAR_4returnVAR_4 VAR_4AVERRORVAR_4(VAR_4EINVALVAR_4); } VAR_4avfilter_unref_bufferVAR_4(VAR_4VAR_1VAR_4); } VAR_4elseVAR_4 VAR_4outVAR_4 = VAR_4VAR_1VAR_4; VAR_4whileVAR_4(VAR_4cmdVAR_4 && VAR_4cmdVAR_4->VAR_4timeVAR_4 <= VAR_4VAR_1VAR_4->VAR_4ptsVAR_4 * VAR_4av_q2dVAR_4(VAR_4VAR_0VAR_4->VAR_4time_baseVAR_4)){ VAR_4av_logVAR_4(VAR_4VAR_0VAR_4->VAR_4dstVAR_4, VAR_4AV_LOG_DEBUGVAR_4,
"VAR_4ProcessingVAR_4 VAR_4commandVAR_4 VAR_4timeVAR_4:%VAR_4fVAR_4 VAR_4commandVAR_4:%VAR_4sVAR_4 VAR_4argVAR_4:%VAR_4sVAR_4\VAR_4nVAR_4",
VAR_4cmdVAR_4->VAR_4timeVAR_4, VAR_4cmdVAR_4->VAR_4commandVAR_4, VAR_4cmdVAR_4->VAR_4argVAR_4); VAR_4avfilter_process_commandVAR_4(VAR_4VAR_0VAR_4->VAR_4dstVAR_4, VAR_4cmdVAR_4->VAR_4commandVAR_4, VAR_4cmdVAR_4->VAR_4argVAR_4, VAR_40VAR_4, VAR_40VAR_4, VAR_4cmdVAR_4->VAR_4flagsVAR_4); VAR_4ff_command_queue_popVAR_4(VAR_4VAR_0VAR_4->VAR_4dstVAR_4); VAR_4cmdVAR_4= VAR_4VAR_0VAR_4->VAR_4dstVAR_4->VAR_4command_queueVAR_4; } VAR_4ptsVAR_4 = VAR_4outVAR_4->VAR_4ptsVAR_4; VAR_4retVAR_4 = VAR_4VAR_2VAR_4(VAR_4VAR_0VAR_4, VAR_4outVAR_4); VAR_4ff_update_link_current_ptsVAR_4(VAR_4VAR_0VAR_4, VAR_4ptsVAR_4); VAR_4returnVAR_4 VAR_4retVAR_4; }