Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "libavutil/opt.h"
- #include "libavutil/avassert.h"
- #include "libavutil/pixdesc.h"
- #include "internal.h"
- #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
- static int config_output(AVFilterLink *outlink)
- {
- AVFilterContext *ctx = outlink->src;
- AVFilterLink *inlink = ctx->inputs[0];
- outlink->w = inlink->w * 2 ;
- outlink->h = inlink->h * 2 ;
- return 0;
- }
- static int filter_frame(AVFilterLink *inlink, AVFrame *in)
- {
- AVFilterContext *ctx = inlink->dst;
- AVFilterLink *outlink = ctx->outputs[0];
- AVFrame *out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
- if (!out) {
- av_frame_free(&in);
- return AVERROR(ENOMEM);
- }
- int i,j;
- av_frame_copy_props(out, in);
- for(i=0;i<inlink->w*2;i++)
- for(j=0;j<inlink->h*2;j++)
- {
- *(out->data[0] + j*out->linesize[0] + i*3) = in->data[0] + (int)(j/2) * in->linesize[0] + (int)(i/2)*3;
- *(out->data[0] + j*out->linesize[0] + i*3 + 1) = in->data[0] + (int)(j/2) * in->linesize[0] + (int)(i/2)*3 + 1;
- *(out->data[0] + j*out->linesize[0] + i*3 + 2) = in->data[0] + (int)(j/2) * in->linesize[0] + (int)(i/2)*3 + 2;
- }
- out->width = outlink->w;
- out->height = outlink->h;
- av_frame_free(&in);
- return ff_filter_frame(outlink, out);
- }
- static const AVFilterPad xbr_inputs[] = {
- {
- .name = "default",
- .type = AVMEDIA_TYPE_VIDEO,
- .filter_frame = filter_frame,
- },
- { NULL }
- };
- static const AVFilterPad xbr_outputs[] = {
- {
- .name = "default",
- .type = AVMEDIA_TYPE_VIDEO,
- .config_props = config_output,
- },
- { NULL }
- };
- AVFilter ff_vf_xbr = {
- .name = "xbr",
- .description = NULL_IF_CONFIG_SMALL("Scale the input by 2, 3 or 4 using the hq*x magnification algorithm."),
- .inputs = xbr_inputs,
- .outputs = xbr_outputs,
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement