You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.5KB

  1. /*
  2. * This file is part of FFmpeg.
  3. *
  4. * FFmpeg is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU Lesser General Public
  6. * License as published by the Free Software Foundation; either
  7. * version 2.1 of the License, or (at your option) any later version.
  8. *
  9. * FFmpeg is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12. * Lesser General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU Lesser General Public
  15. * License along with FFmpeg; if not, write to the Free Software
  16. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  17. */
  18. #ifndef AVFILTER_OPENCL_H
  19. #define AVFILTER_OPENCL_H
  20. #include "libavutil/buffer.h"
  21. #include "libavutil/hwcontext.h"
  22. #include "libavutil/hwcontext_opencl.h"
  23. #include "libavutil/pixfmt.h"
  24. #include "avfilter.h"
  25. typedef struct OpenCLFilterContext {
  26. const AVClass *class;
  27. AVBufferRef *device_ref;
  28. AVHWDeviceContext *device;
  29. AVOpenCLDeviceContext *hwctx;
  30. cl_program program;
  31. enum AVPixelFormat output_format;
  32. int output_width;
  33. int output_height;
  34. } OpenCLFilterContext;
  35. /**
  36. * Return that all inputs and outputs support only AV_PIX_FMT_OPENCL.
  37. */
  38. int ff_opencl_filter_query_formats(AVFilterContext *avctx);
  39. /**
  40. * Check that the input link contains a suitable hardware frames
  41. * context and extract the device from it.
  42. */
  43. int ff_opencl_filter_config_input(AVFilterLink *inlink);
  44. /**
  45. * Create a suitable hardware frames context for the output.
  46. */
  47. int ff_opencl_filter_config_output(AVFilterLink *outlink);
  48. /**
  49. * Initialise an OpenCL filter context.
  50. */
  51. int ff_opencl_filter_init(AVFilterContext *avctx);
  52. /**
  53. * Uninitialise an OpenCL filter context.
  54. */
  55. void ff_opencl_filter_uninit(AVFilterContext *avctx);
  56. /**
  57. * Load a new OpenCL program from strings in memory.
  58. *
  59. * Creates a new program and compiles it for the current device.
  60. * Will log any build errors if compilation fails.
  61. */
  62. int ff_opencl_filter_load_program(AVFilterContext *avctx,
  63. const char **program_source_array,
  64. int nb_strings);
  65. /**
  66. * Load a new OpenCL program from a file.
  67. *
  68. * Same as ff_opencl_filter_load_program(), but from a file.
  69. */
  70. int ff_opencl_filter_load_program_from_file(AVFilterContext *avctx,
  71. const char *filename);
  72. #endif /* AVFILTER_OPENCL_H */