Advertisement
4arwa

Xbr-filter

Oct 17th, 2014
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.93 KB | None | 0 0
  1. #include "libavutil/opt.h"
  2. #include "libavutil/avassert.h"
  3. #include "libavutil/pixdesc.h"
  4. #include "internal.h"
  5.  
  6. #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
  7.  
  8. static int config_output(AVFilterLink *outlink)
  9. {
  10. AVFilterContext *ctx = outlink->src;
  11. AVFilterLink *inlink = ctx->inputs[0];
  12.  
  13. outlink->w = inlink->w * 2 ;
  14. outlink->h = inlink->h * 2 ;
  15. return 0;
  16. }
  17.  
  18. static int filter_frame(AVFilterLink *inlink, AVFrame *in)
  19. {
  20. AVFilterContext *ctx = inlink->dst;
  21. AVFilterLink *outlink = ctx->outputs[0];
  22. AVFrame *out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
  23. if (!out) {
  24. av_frame_free(&in);
  25. return AVERROR(ENOMEM);
  26. }
  27. int i,j;
  28.  
  29. av_frame_copy_props(out, in);
  30. for(i=0;i<inlink->w*2;i++)
  31. for(j=0;j<inlink->h*2;j++)
  32. {
  33. *(out->data[0] + j*out->linesize[0] + i*3) = in->data[0] + (int)(j/2) * in->linesize[0] + (int)(i/2)*3;
  34. *(out->data[0] + j*out->linesize[0] + i*3 + 1) = in->data[0] + (int)(j/2) * in->linesize[0] + (int)(i/2)*3 + 1;
  35. *(out->data[0] + j*out->linesize[0] + i*3 + 2) = in->data[0] + (int)(j/2) * in->linesize[0] + (int)(i/2)*3 + 2;
  36.  
  37. }
  38.  
  39. out->width = outlink->w;
  40. out->height = outlink->h;
  41.  
  42.  
  43.  
  44. av_frame_free(&in);
  45. return ff_filter_frame(outlink, out);
  46. }
  47.  
  48. static const AVFilterPad xbr_inputs[] = {
  49. {
  50. .name = "default",
  51. .type = AVMEDIA_TYPE_VIDEO,
  52. .filter_frame = filter_frame,
  53. },
  54. { NULL }
  55. };
  56.  
  57. static const AVFilterPad xbr_outputs[] = {
  58. {
  59. .name = "default",
  60. .type = AVMEDIA_TYPE_VIDEO,
  61. .config_props = config_output,
  62. },
  63. { NULL }
  64. };
  65.  
  66. AVFilter ff_vf_xbr = {
  67. .name = "xbr",
  68. .description = NULL_IF_CONFIG_SMALL("Scale the input by 2, 3 or 4 using the hq*x magnification algorithm."),
  69. .inputs = xbr_inputs,
  70. .outputs = xbr_outputs,
  71. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement