~ubuntu-branches/ubuntu/utopic/libav/utopic

« back to all changes in this revision

Viewing changes to libavfilter/vf_frei0r.c

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2012-12-21 15:32:13 UTC
  • mto: (1.2.18)
  • mto: This revision was merged to the branch mainline in revision 34.
  • Revision ID: package-import@ubuntu.com-20121221153213-fudzrugjzivtv0wp
Tags: upstream-9~beta3
ImportĀ upstreamĀ versionĀ 9~beta3

Show diffs side-by-side

added added

removed removed

Lines of Context:
346
346
    return 0;
347
347
}
348
348
 
349
 
static int null_draw_slice(AVFilterLink *inlink, int y, int h, int slice_dir)
350
 
{
351
 
    return 0;
352
 
}
353
 
 
354
 
static int end_frame(AVFilterLink *inlink)
 
349
static int filter_frame(AVFilterLink *inlink, AVFilterBufferRef *in)
355
350
{
356
351
    Frei0rContext *frei0r = inlink->dst->priv;
357
352
    AVFilterLink *outlink = inlink->dst->outputs[0];
358
 
    AVFilterBufferRef  *inpicref =  inlink->cur_buf;
359
 
    AVFilterBufferRef *outpicref = outlink->out_buf;
360
 
    int ret;
361
 
 
362
 
    frei0r->update(frei0r->instance, inpicref->pts * av_q2d(inlink->time_base) * 1000,
363
 
                   (const uint32_t *)inpicref->data[0],
364
 
                   (uint32_t *)outpicref->data[0]);
365
 
    if ((ret = ff_draw_slice(outlink, 0, outlink->h, 1)) ||
366
 
        (ret = ff_end_frame(outlink)) < 0)
367
 
        return ret;
368
 
    return 0;
 
353
    AVFilterBufferRef *out;
 
354
 
 
355
    out = ff_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h);
 
356
    if (!out) {
 
357
        avfilter_unref_bufferp(&in);
 
358
        return AVERROR(ENOMEM);
 
359
    }
 
360
    avfilter_copy_buffer_ref_props(out, in);
 
361
 
 
362
    frei0r->update(frei0r->instance, in->pts * av_q2d(inlink->time_base) * 1000,
 
363
                   (const uint32_t *)in->data[0],
 
364
                   (uint32_t *)out->data[0]);
 
365
 
 
366
    avfilter_unref_bufferp(&in);
 
367
 
 
368
    return ff_filter_frame(outlink, out);
369
369
}
370
370
 
371
371
static const AVFilterPad avfilter_vf_frei0r_inputs[] = {
372
372
    {
373
373
        .name         = "default",
374
374
        .type         = AVMEDIA_TYPE_VIDEO,
375
 
        .draw_slice   = null_draw_slice,
376
375
        .config_props = config_input_props,
377
 
        .end_frame    = end_frame,
 
376
        .filter_frame = filter_frame,
378
377
        .min_perms    = AV_PERM_READ
379
378
    },
380
379
    { NULL }
456
455
{
457
456
    Frei0rContext *frei0r = outlink->src->priv;
458
457
    AVFilterBufferRef *picref = ff_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, outlink->h);
459
 
    AVFilterBufferRef *buf_out;
460
 
    int ret;
461
458
 
462
459
    if (!picref)
463
460
        return AVERROR(ENOMEM);
466
463
    picref->pts = frei0r->pts++;
467
464
    picref->pos = -1;
468
465
 
469
 
    buf_out = avfilter_ref_buffer(picref, ~0);
470
 
    if (!buf_out) {
471
 
        ret = AVERROR(ENOMEM);
472
 
        goto fail;
473
 
    }
474
 
 
475
 
    ret = ff_start_frame(outlink, buf_out);
476
 
    if (ret < 0)
477
 
        goto fail;
478
 
 
479
466
    frei0r->update(frei0r->instance, av_rescale_q(picref->pts, frei0r->time_base, (AVRational){1,1000}),
480
467
                   NULL, (uint32_t *)picref->data[0]);
481
 
    ret = ff_draw_slice(outlink, 0, outlink->h, 1);
482
 
    if (ret < 0)
483
 
        goto fail;
484
 
 
485
 
    ret = ff_end_frame(outlink);
486
 
 
487
 
fail:
488
 
    avfilter_unref_buffer(picref);
489
 
 
490
 
    return ret;
 
468
 
 
469
    return ff_filter_frame(outlink, picref);
491
470
}
492
471
 
493
472
static const AVFilterPad avfilter_vsrc_frei0r_src_outputs[] = {