Beispiel #1
0
static void end_frame(AVFilterLink *link)
{
    TransContext *trans = link->dst->priv;
    AVFilterPicRef *in  = link->cur_pic;
    AVFilterPicRef *out = link->dst->outputs[0]->outpic;
    AVFilterPicRef *pic = link->cur_pic;
    AVFilterLink *output = link->dst->outputs[0];
    int i, j, plane;

    /* luma plane */
    for(i = 0; i < pic->h; i ++)
        for(j = 0; j < pic->w; j ++)
            *(out->data[0] +   j *out->linesize[0] + i) =
                *(in->data[0]+ i * in->linesize[0] + j);

    /* chroma planes */
    for(plane = 1; plane < 3; plane ++) {
        for(i = 0; i < pic->h >> trans->vsub; i++) {
            for(j = 0; j < pic->w >> trans->hsub; j++)
                *(out->data[plane] +   j *out->linesize[plane] + i) =
                    *(in->data[plane]+ i * in->linesize[plane] + j);
        }
    }

    avfilter_unref_pic(in);
    avfilter_draw_slice(output, 0, out->h, 1);
    avfilter_end_frame(output);
    avfilter_unref_pic(out);
}
Beispiel #2
0
static int request_frame(AVFilterLink *link)
{
    BufferSourceContext *c = link->src->priv;
    AVFilterPicRef *picref;

    if (!c->has_frame) {
        av_log(link->src, AV_LOG_ERROR,
               "request_frame() called with no available frame!\n");
        //return -1;
    }

    /* This picture will be needed unmodified later for decoding the next
     * frame */
    picref = avfilter_get_video_buffer(link, AV_PERM_WRITE | AV_PERM_PRESERVE |
                                       AV_PERM_REUSE2,
                                       link->w, link->h);

    av_picture_copy((AVPicture *)&picref->data, (AVPicture *)&c->frame,
                    picref->pic->format, link->w, link->h);

    picref->pts             = c->pts;
    picref->pixel_aspect    = c->pixel_aspect;
    picref->interlaced      = c->frame.interlaced_frame;
    picref->top_field_first = c->frame.top_field_first;
    avfilter_start_frame(link, avfilter_ref_pic(picref, ~0));
    avfilter_draw_slice(link, 0, link->h, 1);
    avfilter_end_frame(link);
    avfilter_unref_pic(picref);

    c->has_frame = 0;

    return 0;
}
Beispiel #3
0
void avfilter_default_end_frame(AVFilterLink *link)
{
    AVFilterLink *out = NULL;

    if(link->dst->output_count)
        out = link->dst->outputs[0];

    avfilter_unref_pic(link->cur_pic);
    link->cur_pic = NULL;

    if(out) {
        if(out->outpic) {
            avfilter_unref_pic(out->outpic);
            out->outpic = NULL;
        }
        avfilter_end_frame(out);
    }
}
Beispiel #4
0
static int request_frame(AVFilterLink *link)
{
    FPSContext *fps = link->src->priv;

    if (fps->videoend)
        return -1;

    if (!fps->has_frame) // support for filtering without poll_frame usage
        while(!fps->pic || fps->pic->pts < fps->pts)
            if(avfilter_request_frame(link->src->inputs[0]))
                return -1;

    fps->has_frame=0;
    avfilter_start_frame(link, avfilter_ref_pic(fps->pic, ~AV_PERM_WRITE));
    avfilter_draw_slice (link, 0, fps->pic->h, 1);
    avfilter_end_frame  (link);

    avfilter_unref_pic(fps->pic);
    fps->pic = NULL;

    fps->pts += fps->timebase;

    return 0;
}
Beispiel #5
0
static void start_frame(AVFilterLink *link, AVFilterPicRef *picref)
{
    FPSContext *fps = link->dst->priv;
    if(fps->pic) avfilter_unref_pic(fps->pic);
    fps->pic = picref;
}
Beispiel #6
0
static av_cold void uninit(AVFilterContext *ctx)
{
    FPSContext *fps = ctx->priv;
    if(fps->pic) avfilter_unref_pic(fps->pic);
}