int ff_filter_frame(AVFilterLink *link, AVFrame *frame)

{

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

    AVFilterPad *dst = link->dstpad;

    AVFrame *out;



    FF_DPRINTF_START(NULL, filter_frame);

    ff_dlog_link(NULL, link, 1);



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

        filter_frame = default_filter_frame;



    /* copy the frame if needed */

    if (dst->needs_writable && !av_frame_is_writable(frame)) {

        av_log(link->dst, AV_LOG_DEBUG, "Copying data in avfilter.\n");



        switch (link->type) {

        case AVMEDIA_TYPE_VIDEO:

            out = ff_get_video_buffer(link, link->w, link->h);

            break;

        case AVMEDIA_TYPE_AUDIO:

            out = ff_get_audio_buffer(link, frame->nb_samples);

            break;

        default: return AVERROR(EINVAL);

        }

        if (!out) {

            av_frame_free(&frame);

            return AVERROR(ENOMEM);

        }

        av_frame_copy_props(out, frame);



        switch (link->type) {

        case AVMEDIA_TYPE_VIDEO:

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

                          frame->format, frame->width, frame->height);

            break;

        case AVMEDIA_TYPE_AUDIO:

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

                            0, 0, frame->nb_samples,

                            av_get_channel_layout_nb_channels(frame->channel_layout),

                            frame->format);

            break;

        default: return AVERROR(EINVAL);

        }



        av_frame_free(&frame);

    } else

        out = frame;



    return filter_frame(link, out);

}

int ff_filter_frame(AVFilterLink *link, AVFrame *frame)

{

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

    AVFilterPad *dst = link->dstpad;

    AVFrame *out;



    FF_DPRINTF_START(NULL, filter_frame);

    ff_dlog_link(NULL, link, 1);



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

        filter_frame = default_filter_frame;



    

    if (dst->needs_writable && !av_frame_is_writable(frame)) {

        av_log(link->dst, AV_LOG_DEBUG, "Copying data in avfilter.\n");



        switch (link->type) {

        case AVMEDIA_TYPE_VIDEO:

            out = ff_get_video_buffer(link, link->w, link->h);

            break;

        case AVMEDIA_TYPE_AUDIO:

            out = ff_get_audio_buffer(link, frame->nb_samples);

            break;

        default: return AVERROR(EINVAL);

        }

        if (!out) {

            av_frame_free(&frame);

            return AVERROR(ENOMEM);

        }

        av_frame_copy_props(out, frame);



        switch (link->type) {

        case AVMEDIA_TYPE_VIDEO:

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

                          frame->format, frame->width, frame->height);

            break;

        case AVMEDIA_TYPE_AUDIO:

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

                            0, 0, frame->nb_samples,

                            av_get_channel_layout_nb_channels(frame->channel_layout),

                            frame->format);

            break;

        default: return AVERROR(EINVAL);

        }



        av_frame_free(&frame);

    } else

        out = frame;



    return filter_frame(link, out);

}

    AVFrame *out;         default: return AVERROR(EINVAL);             av_frame_free(&frame);             return AVERROR(ENOMEM);         av_frame_copy_props(out, frame);         default: return AVERROR(EINVAL);
VAR_4intVAR_4 VAR_4ff_filter_frameVAR_4(VAR_4AVFilterLinkVAR_4 *VAR_4VAR_0VAR_4, VAR_4AVFrameVAR_4 *VAR_4VAR_1VAR_4)

{

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

    VAR_4AVFilterPadVAR_4 *VAR_4dstVAR_4 = VAR_4VAR_0VAR_4->VAR_4dstpadVAR_4;

    VAR_4AVFrameVAR_4 *VAR_4outVAR_4;



    VAR_4FF_DPRINTF_STARTVAR_4(VAR_4NULLVAR_4, VAR_4VAR_2VAR_4);

    VAR_4ff_dlog_linkVAR_4(VAR_4NULLVAR_4, VAR_4VAR_0VAR_4, VAR_41VAR_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_4ifVAR_4 (VAR_4dstVAR_4->VAR_4needs_writableVAR_4 && !VAR_4av_frame_is_writableVAR_4(VAR_4VAR_1VAR_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_4nVAR_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_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_4VAR_1VAR_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_4av_frame_freeVAR_4(&VAR_4VAR_1VAR_4);

            VAR_4returnVAR_4 VAR_4AVERRORVAR_4(VAR_4ENOMEMVAR_4);

        }

        VAR_4av_frame_copy_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_4widthVAR_4, VAR_4VAR_1VAR_4->VAR_4heightVAR_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_4nb_samplesVAR_4,

                            VAR_4av_get_channel_layout_nb_channelsVAR_4(VAR_4VAR_1VAR_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_4av_frame_freeVAR_4(&VAR_4VAR_1VAR_4);

    } VAR_4elseVAR_4

        VAR_4outVAR_4 = VAR_4VAR_1VAR_4;



    VAR_4returnVAR_4 VAR_4VAR_2VAR_4(VAR_4VAR_0VAR_4, VAR_4outVAR_4);

}

VAR_4intVAR_4 VAR_4ff_filter_frameVAR_4(VAR_4AVFilterLinkVAR_4 *VAR_4VAR_0VAR_4, VAR_4AVFrameVAR_4 *VAR_4VAR_1VAR_4)
{ VAR_4intVAR_4 (*VAR_4VAR_2VAR_4)(VAR_4AVFilterLinkVAR_4 *, VAR_4AVFrameVAR_4 *); VAR_4AVFilterPadVAR_4 *VAR_4dstVAR_4 = VAR_4VAR_0VAR_4->VAR_4dstpadVAR_4; VAR_4AVFrameVAR_4 *VAR_4outVAR_4; VAR_4FF_DPRINTF_STARTVAR_4(VAR_4NULLVAR_4, VAR_4VAR_2VAR_4); VAR_4ff_dlog_linkVAR_4(VAR_4NULLVAR_4, VAR_4VAR_0VAR_4, VAR_41VAR_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_4ifVAR_4 (VAR_4dstVAR_4->VAR_4needs_writableVAR_4 && !VAR_4av_frame_is_writableVAR_4(VAR_4VAR_1VAR_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_4nVAR_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_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_4VAR_1VAR_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_4av_frame_freeVAR_4(&VAR_4VAR_1VAR_4); VAR_4returnVAR_4 VAR_4AVERRORVAR_4(VAR_4ENOMEMVAR_4); } VAR_4av_frame_copy_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_4widthVAR_4, VAR_4VAR_1VAR_4->VAR_4heightVAR_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_4nb_samplesVAR_4,
VAR_4av_get_channel_layout_nb_channelsVAR_4(VAR_4VAR_1VAR_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_4av_frame_freeVAR_4(&VAR_4VAR_1VAR_4); } VAR_4elseVAR_4 VAR_4outVAR_4 = VAR_4VAR_1VAR_4; VAR_4returnVAR_4 VAR_4VAR_2VAR_4(VAR_4VAR_0VAR_4, VAR_4outVAR_4); }