예제 #1
0
int avfilter_fill_frame_from_buffer_ref(AVFrame *frame,
                                        const AVFilterBufferRef *ref)
{
    if (!ref)
        return AVERROR(EINVAL);
    return ref->video ? avfilter_fill_frame_from_video_buffer_ref(frame, ref)
                      : avfilter_fill_frame_from_audio_buffer_ref(frame, ref);
}
예제 #2
0
int filter(AVFrame* src, AVFrame *dst)
{
    int ret;
    AVFilterBufferRef *picref;

    /* push the decoded frame into the filtergraph. 3rd parameter might not be needed with new ffmpeg */
    av_vsrc_buffer_add_frame(buffersrc_ctx, src, 0);

    /* pull filtered pictures from the filtergraph */
    ret = avfilter_poll_frame(buffersink_ctx->inputs[0]);
    if (ret > 0) {
        av_vsink_buffer_get_video_buffer_ref(buffersink_ctx, &picref, 0);
        if (picref) {
            avfilter_fill_frame_from_video_buffer_ref(dst, picref);
            dst->pts = picref->pts;
            avfilter_unref_buffer(picref);
        }
    }
    if (ret != 1) {
        av_log(NULL, AV_LOG_WARNING, "filter unexpected number of immediately available frames: %d\n", ret);
    }

    return ret;
}