* commit '38f0c0781a6e099f11c0acec07f9b8be742190c4': lavfi: merge avfiltergraph.h into avfilter.h Conflicts: doc/APIchanges ffmpeg_filter.c libavfilter/avfilter.h libavfilter/avfiltergraph.h libavfilter/version.h tools/graph2dot.c
Showing the changes to libavfilter/avfilter.h (1 of 13 files). Show all
Unified · Split
| @@ -912,6 +912,257 @@ int avfilter_copy_buf_props(AVFrame *dst, const AVFilterBufferRef *src); · 911 unmodified lines | ||
| 912 | 912 | */ |
| 913 | 913 | const AVClass *avfilter_get_class(void); |
| 914 | 914 | |
| 915 | +typedef struct AVFilterGraph { | |
| 916 | + const AVClass *av_class; | |
| 917 | +#if FF_API_FOO_COUNT | |
| 918 | + attribute_deprecated | |
| 919 | + unsigned filter_count_unused; | |
| 920 | +#endif | |
| 921 | + AVFilterContext **filters; | |
| 922 | +#if !FF_API_FOO_COUNT | |
| 923 | + unsigned nb_filters; | |
| 924 | +#endif | |
| 925 | + | |
| 926 | + char *scale_sws_opts; ///< sws options to use for the auto-inserted scale filters | |
| 927 | + char *resample_lavr_opts; ///< libavresample options to use for the auto-inserted resample filters | |
| 928 | +#if FF_API_FOO_COUNT | |
| 929 | + unsigned nb_filters; | |
| 930 | +#endif | |
| 931 | + char *aresample_swr_opts; ///< swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions | |
| 932 | + | |
| 933 | + /** | |
| 934 | + * Private fields | |
| 935 | + * | |
| 936 | + * The following fields are for internal use only. | |
| 937 | + * Their type, offset, number and semantic can change without notice. | |
| 938 | + */ | |
| 939 | + | |
| 940 | + AVFilterLink **sink_links; | |
| 941 | + int sink_links_count; | |
| 942 | + | |
| 943 | + unsigned disable_auto_convert; | |
| 944 | +} AVFilterGraph; | |
| 945 | + | |
| 946 | +/** | |
| 947 | + * Allocate a filter graph. | |
| 948 | + */ | |
| 949 | +AVFilterGraph *avfilter_graph_alloc(void); | |
| 950 | + | |
| 951 | +/** | |
| 952 | + * Get a filter instance with name name from graph. | |
| 953 | + * | |
| 954 | + * @return the pointer to the found filter instance or NULL if it | |
| 955 | + * cannot be found. | |
| 956 | + */ | |
| 957 | +AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, char *name); | |
| 958 | + | |
| 959 | +/** | |
| 960 | + * Add an existing filter instance to a filter graph. | |
| 961 | + * | |
| 962 | + * @param graphctx the filter graph | |
| 963 | + * @param filter the filter to be added | |
| 964 | + */ | |
| 965 | +int avfilter_graph_add_filter(AVFilterGraph *graphctx, AVFilterContext *filter); | |
| 966 | + | |
| 967 | +/** | |
| 968 | + * Create and add a filter instance into an existing graph. | |
| 969 | + * The filter instance is created from the filter filt and inited | |
| 970 | + * with the parameters args and opaque. | |
| 971 | + * | |
| 972 | + * In case of success put in *filt_ctx the pointer to the created | |
| 973 | + * filter instance, otherwise set *filt_ctx to NULL. | |
| 974 | + * | |
| 975 | + * @param name the instance name to give to the created filter instance | |
| 976 | + * @param graph_ctx the filter graph | |
| 977 | + * @return a negative AVERROR error code in case of failure, a non | |
| 978 | + * negative value otherwise | |
| 979 | + */ | |
| 980 | +int avfilter_graph_create_filter(AVFilterContext **filt_ctx, AVFilter *filt, | |
| 981 | + const char *name, const char *args, void *opaque, | |
| 982 | + AVFilterGraph *graph_ctx); | |
| 983 | + | |
| 984 | +/** | |
| 985 | + * Enable or disable automatic format conversion inside the graph. | |
| 986 | + * | |
| 987 | + * Note that format conversion can still happen inside explicitly inserted | |
| 988 | + * scale and aresample filters. | |
| 989 | + * | |
| 990 | + * @param flags any of the AVFILTER_AUTO_CONVERT_* constants | |
| 991 | + */ | |
| 992 | +void avfilter_graph_set_auto_convert(AVFilterGraph *graph, unsigned flags); | |
| 993 | + | |
| 994 | +enum { | |
| 995 | + AVFILTER_AUTO_CONVERT_ALL = 0, /**< all automatic conversions enabled */ | |
| 996 | + AVFILTER_AUTO_CONVERT_NONE = -1, /**< all automatic conversions disabled */ | |
| 997 | +}; | |
| 998 | + | |
| 999 | +/** | |
| 1000 | + * Check validity and configure all the links and formats in the graph. | |
| 1001 | + * | |
| 1002 | + * @param graphctx the filter graph | |
| 1003 | + * @param log_ctx context used for logging | |
| 1004 | + * @return 0 in case of success, a negative AVERROR code otherwise | |
| 1005 | + */ | |
| 1006 | +int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx); | |
| 1007 | + | |
| 1008 | +/** | |
| 1009 | + * Free a graph, destroy its links, and set *graph to NULL. | |
| 1010 | + * If *graph is NULL, do nothing. | |
| 1011 | + */ | |
| 1012 | +void avfilter_graph_free(AVFilterGraph **graph); | |
| 1013 | + | |
| 1014 | +/** | |
| 1015 | + * A linked-list of the inputs/outputs of the filter chain. | |
| 1016 | + * | |
| 1017 | + * This is mainly useful for avfilter_graph_parse() / avfilter_graph_parse2(), | |
| 1018 | + * where it is used to communicate open (unlinked) inputs and outputs from and | |
| 1019 | + * to the caller. | |
| 1020 | + * This struct specifies, per each not connected pad contained in the graph, the | |
| 1021 | + * filter context and the pad index required for establishing a link. | |
| 1022 | + */ | |
| 1023 | +typedef struct AVFilterInOut { | |
| 1024 | + /** unique name for this input/output in the list */ | |
| 1025 | + char *name; | |
| 1026 | + | |
| 1027 | + /** filter context associated to this input/output */ | |
| 1028 | + AVFilterContext *filter_ctx; | |
| 1029 | + | |
| 1030 | + /** index of the filt_ctx pad to use for linking */ | |
| 1031 | + int pad_idx; | |
| 1032 | + | |
| 1033 | + /** next input/input in the list, NULL if this is the last */ | |
| 1034 | + struct AVFilterInOut *next; | |
| 1035 | +} AVFilterInOut; | |
| 1036 | + | |
| 1037 | +/** | |
| 1038 | + * Allocate a single AVFilterInOut entry. | |
| 1039 | + * Must be freed with avfilter_inout_free(). | |
| 1040 | + * @return allocated AVFilterInOut on success, NULL on failure. | |
| 1041 | + */ | |
| 1042 | +AVFilterInOut *avfilter_inout_alloc(void); | |
| 1043 | + | |
| 1044 | +/** | |
| 1045 | + * Free the supplied list of AVFilterInOut and set *inout to NULL. | |
| 1046 | + * If *inout is NULL, do nothing. | |
| 1047 | + */ | |
| 1048 | +void avfilter_inout_free(AVFilterInOut **inout); | |
| 1049 | + | |
| 1050 | +/** | |
| 1051 | + * Add a graph described by a string to a graph. | |
| 1052 | + * | |
| 1053 | + * @param graph the filter graph where to link the parsed graph context | |
| 1054 | + * @param filters string to be parsed | |
| 1055 | + * @param inputs pointer to a linked list to the inputs of the graph, may be NULL. | |
| 1056 | + * If non-NULL, *inputs is updated to contain the list of open inputs | |
| 1057 | + * after the parsing, should be freed with avfilter_inout_free(). | |
| 1058 | + * @param outputs pointer to a linked list to the outputs of the graph, may be NULL. | |
| 1059 | + * If non-NULL, *outputs is updated to contain the list of open outputs | |
| 1060 | + * after the parsing, should be freed with avfilter_inout_free(). | |
| 1061 | + * @return non negative on success, a negative AVERROR code on error | |
| 1062 | + */ | |
| 1063 | +int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, | |
| 1064 | + AVFilterInOut **inputs, AVFilterInOut **outputs, | |
| 1065 | + void *log_ctx); | |
| 1066 | + | |
| 1067 | +/** | |
| 1068 | + * Add a graph described by a string to a graph. | |
| 1069 | + * | |
| 1070 | + * @param[in] graph the filter graph where to link the parsed graph context | |
| 1071 | + * @param[in] filters string to be parsed | |
| 1072 | + * @param[out] inputs a linked list of all free (unlinked) inputs of the | |
| 1073 | + * parsed graph will be returned here. It is to be freed | |
| 1074 | + * by the caller using avfilter_inout_free(). | |
| 1075 | + * @param[out] outputs a linked list of all free (unlinked) outputs of the | |
| 1076 | + * parsed graph will be returned here. It is to be freed by the | |
| 1077 | + * caller using avfilter_inout_free(). | |
| 1078 | + * @return zero on success, a negative AVERROR code on error | |
| 1079 | + * | |
| 1080 | + * @note the difference between avfilter_graph_parse2() and | |
| 1081 | + * avfilter_graph_parse() is that in avfilter_graph_parse(), the caller provides | |
| 1082 | + * the lists of inputs and outputs, which therefore must be known before calling | |
| 1083 | + * the function. On the other hand, avfilter_graph_parse2() \em returns the | |
| 1084 | + * inputs and outputs that are left unlinked after parsing the graph and the | |
| 1085 | + * caller then deals with them. Another difference is that in | |
| 1086 | + * avfilter_graph_parse(), the inputs parameter describes inputs of the | |
| 1087 | + * <em>already existing</em> part of the graph; i.e. from the point of view of | |
| 1088 | + * the newly created part, they are outputs. Similarly the outputs parameter | |
| 1089 | + * describes outputs of the already existing filters, which are provided as | |
| 1090 | + * inputs to the parsed filters. | |
| 1091 | + * avfilter_graph_parse2() takes the opposite approach -- it makes no reference | |
| 1092 | + * whatsoever to already existing parts of the graph and the inputs parameter | |
| 1093 | + * will on return contain inputs of the newly parsed part of the graph. | |
| 1094 | + * Analogously the outputs parameter will contain outputs of the newly created | |
| 1095 | + * filters. | |
| 1096 | + */ | |
| 1097 | +int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters, | |
| 1098 | + AVFilterInOut **inputs, | |
| 1099 | + AVFilterInOut **outputs); | |
| 1100 | + | |
| 1101 | +/** | |
| 1102 | + * Send a command to one or more filter instances. | |
| 1103 | + * | |
| 1104 | + * @param graph the filter graph | |
| 1105 | + * @param target the filter(s) to which the command should be sent | |
| 1106 | + * "all" sends to all filters | |
| 1107 | + * otherwise it can be a filter or filter instance name | |
| 1108 | + * which will send the command to all matching filters. | |
| 1109 | + * @param cmd the command to sent, for handling simplicity all commands must be alphanumeric only | |
| 1110 | + * @param arg the argument for the command | |
| 1111 | + * @param res a buffer with size res_size where the filter(s) can return a response. | |
| 1112 | + * | |
| 1113 | + * @returns >=0 on success otherwise an error code. | |
| 1114 | + * AVERROR(ENOSYS) on unsupported commands | |
| 1115 | + */ | |
| 1116 | +int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags); | |
| 1117 | + | |
| 1118 | +/** | |
| 1119 | + * Queue a command for one or more filter instances. | |
| 1120 | + * | |
| 1121 | + * @param graph the filter graph | |
| 1122 | + * @param target the filter(s) to which the command should be sent | |
| 1123 | + * "all" sends to all filters | |
| 1124 | + * otherwise it can be a filter or filter instance name | |
| 1125 | + * which will send the command to all matching filters. | |
| 1126 | + * @param cmd the command to sent, for handling simplicity all commands must be alphanummeric only | |
| 1127 | + * @param arg the argument for the command | |
| 1128 | + * @param ts time at which the command should be sent to the filter | |
| 1129 | + * | |
| 1130 | + * @note As this executes commands after this function returns, no return code | |
| 1131 | + * from the filter is provided, also AVFILTER_CMD_FLAG_ONE is not supported. | |
| 1132 | + */ | |
| 1133 | +int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, int flags, double ts); | |
| 1134 | + | |
| 1135 | + | |
| 1136 | +/** | |
| 1137 | + * Dump a graph into a human-readable string representation. | |
| 1138 | + * | |
| 1139 | + * @param graph the graph to dump | |
| 1140 | + * @param options formatting options; currently ignored | |
| 1141 | + * @return a string, or NULL in case of memory allocation failure; | |
| 1142 | + * the string must be freed using av_free | |
| 1143 | + */ | |
| 1144 | +char *avfilter_graph_dump(AVFilterGraph *graph, const char *options); | |
| 1145 | + | |
| 1146 | +/** | |
| 1147 | + * Request a frame on the oldest sink link. | |
| 1148 | + * | |
| 1149 | + * If the request returns AVERROR_EOF, try the next. | |
| 1150 | + * | |
| 1151 | + * Note that this function is not meant to be the sole scheduling mechanism | |
| 1152 | + * of a filtergraph, only a convenience function to help drain a filtergraph | |
| 1153 | + * in a balanced way under normal circumstances. | |
| 1154 | + * | |
| 1155 | + * Also note that AVERROR_EOF does not mean that frames did not arrive on | |
| 1156 | + * some of the sinks during the process. | |
| 1157 | + * When there are multiple sink links, in case the requested link | |
| 1158 | + * returns an EOF, this may cause a filter to flush pending frames | |
| 1159 | + * which are sent to another sink link, although unrequested. | |
| 1160 | + * | |
| 1161 | + * @return the return value of ff_request_frame(), | |
| 1162 | + * or AVERROR_EOF if all links returned AVERROR_EOF | |
| 1163 | + */ | |
| 1164 | +int avfilter_graph_request_oldest(AVFilterGraph *graph); | |
| 1165 | + | |
| 915 | 1166 | /** |
| 916 | 1167 | * @} |
| 917 | 1168 | */ |