X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Favfilter.h;h=832f421beeed2f091f31e46c5df171b881cbfd4e;hb=006aa1a4c2307209ad11c3ad0ad1d888c8df98fe;hp=a2e23dd2fc4d1bf48fdc09dfad5607a84ef3f8c6;hpb=6b5dc050a2d9991009155c263a7b28422b6c97c0;p=ffmpeg diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index a2e23dd2fc4..832f421beee 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -22,8 +22,10 @@ #ifndef AVFILTER_AVFILTER_H #define AVFILTER_AVFILTER_H +#include "libavutil/avutil.h" + #define LIBAVFILTER_VERSION_MAJOR 1 -#define LIBAVFILTER_VERSION_MINOR 3 +#define LIBAVFILTER_VERSION_MINOR 17 #define LIBAVFILTER_VERSION_MICRO 0 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ @@ -42,6 +44,17 @@ */ unsigned avfilter_version(void); +/** + * Returns the libavfilter build-time configuration. + */ +const char *avfilter_configuration(void); + +/** + * Returns the libavfilter license. + */ +const char *avfilter_license(void); + + typedef struct AVFilterContext AVFilterContext; typedef struct AVFilterLink AVFilterLink; typedef struct AVFilterPad AVFilterPad; @@ -176,7 +189,17 @@ struct AVFilterFormats * @param pix_fmt list of pixel formats, terminated by PIX_FMT_NONE * @return the format list, with no existing references */ -AVFilterFormats *avfilter_make_format_list(enum PixelFormat *pix_fmt); +AVFilterFormats *avfilter_make_format_list(const enum PixelFormat *pix_fmts); + +/** + * Adds pix_fmt to the list of pixel formats contained in *avff. + * If *avff is NULL the function allocates the filter formats struct + * and puts its pointer in *avff. + * + * @return a non negative value in case of success, or a negative + * value corresponding to an AVERROR code in case of error + */ +int avfilter_add_colorspace(AVFilterFormats **avff, enum PixelFormat pix_fmt); /** * Returns a list of all colorspaces supported by FFmpeg. @@ -208,8 +231,9 @@ AVFilterFormats *avfilter_merge_formats(AVFilterFormats *a, AVFilterFormats *b); void avfilter_formats_ref(AVFilterFormats *formats, AVFilterFormats **ref); /** - * Removes *ref as a reference to the format list it currently points to, - * deallocates that list if this was the last reference, and sets *ref to NULL. + * If *ref is non-NULL, removes *ref as a reference to the format list + * it currently points to, deallocates that list if this was the last + * reference, and sets *ref to NULL. * * Before After * ________ ________ NULL @@ -288,7 +312,7 @@ struct AVFilterPad /** * Callback function to get a buffer. If NULL, the filter system will - * handle buffer requests. + * use avfilter_default_get_video_buffer(). * * Input video pads only. */ @@ -309,7 +333,7 @@ struct AVFilterPad * * Input video pads only. */ - void (*draw_slice)(AVFilterLink *link, int y, int height); + void (*draw_slice)(AVFilterLink *link, int y, int height, int slice_dir); /** * Frame poll callback. This returns the number of immediately available @@ -351,7 +375,7 @@ struct AVFilterPad /** default handler for start_frame() for video inputs */ void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref); /** default handler for draw_slice() for video inputs */ -void avfilter_default_draw_slice(AVFilterLink *link, int y, int h); +void avfilter_default_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); /** default handler for end_frame() for video inputs */ void avfilter_default_end_frame(AVFilterLink *link); /** default handler for config_props() for video outputs */ @@ -374,7 +398,7 @@ int avfilter_default_query_formats(AVFilterContext *ctx); * Filter definition. This defines the pads a filter contains, and all the * callback functions used to interact with the filter. */ -typedef struct +typedef struct AVFilter { const char *name; ///< filter name @@ -396,16 +420,23 @@ typedef struct void (*uninit)(AVFilterContext *ctx); /** - * Query formats supported by the filter and its pads. Should set the + * Queries formats supported by the filter and its pads, and sets the * in_formats for links connected to its output pads, and out_formats * for links connected to its input pads. * - * Should return zero on success. + * @return zero on success, a negative value corresponding to an + * AVERROR code otherwise */ int (*query_formats)(AVFilterContext *); const AVFilterPad *inputs; ///< NULL terminated list of inputs. NULL if none const AVFilterPad *outputs; ///< NULL terminated list of outputs. NULL if none + + /** + * A description for the filter. You should use the + * NULL_IF_CONFIG_SMALL() macro to define it. + */ + const char *description; } AVFilter; /** An instance of a filter */ @@ -539,16 +570,25 @@ void avfilter_end_frame(AVFilterLink *link); /** * Sends a slice to the next filter. + * + * Slices have to be provided in sequential order, either in + * top-bottom or bottom-top order. If slices are provided in + * non-sequential order the behavior of the function is undefined. + * * @param link the output link over which the frame is being sent * @param y offset in pixels from the top of the image for this slice * @param h height of this slice in pixels + * @param slice_dir the assumed direction for sending slices, + * from the top slice to the bottom slice if the value is 1, + * from the bottom slice to the top slice if the value is -1, + * for other values the behavior of the function is undefined. */ -void avfilter_draw_slice(AVFilterLink *link, int y, int h); +void avfilter_draw_slice(AVFilterLink *link, int y, int h, int slice_dir); -/** Initialize the filter system. Registers all builtin filters */ +/** Initializes the filter system. Registers all builtin filters. */ void avfilter_register_all(void); -/** Uninitialize the filter system. Unregisters all filters */ +/** Uninitializes the filter system. Unregisters all filters. */ void avfilter_uninit(void); /** @@ -557,8 +597,10 @@ void avfilter_uninit(void); * filter can still by instantiated with avfilter_open even if it is not * registered. * @param filter the filter to register + * @return 0 if the registration was succesfull, a negative value + * otherwise */ -void avfilter_register(AVFilter *filter); +int avfilter_register(AVFilter *filter); /** * Gets a filter definition matching the given name. @@ -568,6 +610,14 @@ void avfilter_register(AVFilter *filter); */ AVFilter *avfilter_get_by_name(const char *name); +/** + * If filter is NULL, returns a pointer to the first registered filter pointer, + * if filter is non-NULL, returns the next pointer after filter. + * If the returned pointer points to NULL, the last registered filter + * was already reached. + */ +AVFilter **av_filter_next(AVFilter **filter); + /** * Creates a filter instance. * @param filter the filter to create an instance of