* 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
Unified · Split
| @@ -156,6 +156,10 @@ API changes, most recent first: · 155 unmodified lines | |||
| 156 | 2012-03-26 - a67d9cf - lavfi 2.66.100 | 156 | 2012-03-26 - a67d9cf - lavfi 2.66.100 |
| 157 | Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions. | 157 | Add avfilter_fill_frame_from_{audio_,}buffer_ref() functions. |
| 158 | 158 | ||
| 159 | 2013-xx-xx - lavfi 3.8.0 | ||
| 160 | Move all content from avfiltergraph.h to avfilter.h. Deprecate | ||
| 161 | avfilterhraph.h, user applications should include just avfilter.h | ||
| 162 | |||
| 159 | 2013-xx-xx - lavfi 3.7.0 - avfilter.h | 163 | 2013-xx-xx - lavfi 3.7.0 - avfilter.h |
| 160 | Add AVFilter.priv_class for exporting filter options through the AVOptions API | 164 | Add AVFilter.priv_class for exporting filter options through the AVOptions API |
| 161 | in the similar way private options work in lavc and lavf. | 165 | in the similar way private options work in lavc and lavf. |
| @@ -117,7 +117,7 @@ A filtergraph can be represented using a textual representation, which is · 116 unmodified lines | |||
| 117 | recognized by the @option{-filter}/@option{-vf} and @option{-filter_complex} | 117 | recognized by the @option{-filter}/@option{-vf} and @option{-filter_complex} |
| 118 | options in @command{ffmpeg} and @option{-vf} in @command{ffplay}, and by the | 118 | options in @command{ffmpeg} and @option{-vf} in @command{ffplay}, and by the |
| 119 | @code{avfilter_graph_parse()}/@code{avfilter_graph_parse2()} function defined in | 119 | @code{avfilter_graph_parse()}/@code{avfilter_graph_parse2()} function defined in |
| 120 | @file{libavfilter/avfiltergraph.h}. | 120 | @file{libavfilter/avfilter.h}. |
| 121 | 121 | ||
| 122 | A filterchain consists of a sequence of connected filters, each one | 122 | A filterchain consists of a sequence of connected filters, each one |
| 123 | connected to the previous one in the sequence. A filterchain is | 123 | connected to the previous one in the sequence. A filterchain is |
| @@ -64,7 +64,6 @@ · 63 unmodified lines | |||
| 64 | 64 | ||
| 65 | # include "libavfilter/avcodec.h" | 65 | # include "libavfilter/avcodec.h" |
| 66 | # include "libavfilter/avfilter.h" | 66 | # include "libavfilter/avfilter.h" |
| 67 | # include "libavfilter/avfiltergraph.h" | ||
| 68 | # include "libavfilter/buffersrc.h" | 67 | # include "libavfilter/buffersrc.h" |
| 69 | # include "libavfilter/buffersink.h" | 68 | # include "libavfilter/buffersink.h" |
| 70 | 69 | ||
| @@ -37,7 +37,6 @@ · 36 unmodified lines | |||
| 37 | #include "libavcodec/avcodec.h" | 37 | #include "libavcodec/avcodec.h" |
| 38 | 38 | ||
| 39 | #include "libavfilter/avfilter.h" | 39 | #include "libavfilter/avfilter.h" |
| 40 | #include "libavfilter/avfiltergraph.h" | ||
| 41 | 40 | ||
| 42 | #include "libavutil/avutil.h" | 41 | #include "libavutil/avutil.h" |
| 43 | #include "libavutil/dict.h" | 42 | #include "libavutil/dict.h" |
| @@ -21,7 +21,6 @@ · 20 unmodified lines | |||
| 21 | #include "ffmpeg.h" | 21 | #include "ffmpeg.h" |
| 22 | 22 | ||
| 23 | #include "libavfilter/avfilter.h" | 23 | #include "libavfilter/avfilter.h" |
| 24 | #include "libavfilter/avfiltergraph.h" | ||
| 25 | #include "libavfilter/buffersink.h" | 24 | #include "libavfilter/buffersink.h" |
| 26 | 25 | ||
| 27 | #include "libavresample/avresample.h" | 26 | #include "libavresample/avresample.h" |
| @@ -28,7 +28,6 @@ · 27 unmodified lines | |||
| 28 | #include "libavcodec/avcodec.h" | 28 | #include "libavcodec/avcodec.h" |
| 29 | 29 | ||
| 30 | #include "libavfilter/avfilter.h" | 30 | #include "libavfilter/avfilter.h" |
| 31 | #include "libavfilter/avfiltergraph.h" | ||
| 32 | 31 | ||
| 33 | #include "libavutil/avassert.h" | 32 | #include "libavutil/avassert.h" |
| 34 | #include "libavutil/avstring.h" | 33 | #include "libavutil/avstring.h" |
| @@ -48,7 +48,6 @@ · 47 unmodified lines | |||
| 48 | #if CONFIG_AVFILTER | 48 | #if CONFIG_AVFILTER |
| 49 | # include "libavfilter/avcodec.h" | 49 | # include "libavfilter/avcodec.h" |
| 50 | # include "libavfilter/avfilter.h" | 50 | # include "libavfilter/avfilter.h" |
| 51 | # include "libavfilter/avfiltergraph.h" | ||
| 52 | # include "libavfilter/buffersink.h" | 51 | # include "libavfilter/buffersink.h" |
| 53 | # include "libavfilter/buffersrc.h" | 52 | # include "libavfilter/buffersrc.h" |
| 54 | #endif | 53 | #endif |
| @@ -912,6 +912,257 @@ int avfilter_copy_buf_props(AVFrame *dst, const AVFilterBufferRef *src); · 911 unmodified lines | |||
| 912 | */ | 912 | */ |
| 913 | const AVClass *avfilter_get_class(void); | 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 | */ |
| @@ -30,7 +30,6 @@ · 29 unmodified lines | |||
| 30 | #include "libavutil/pixdesc.h" | 30 | #include "libavutil/pixdesc.h" |
| 31 | #include "libavcodec/avcodec.h" // avcodec_find_best_pix_fmt_of_2() | 31 | #include "libavcodec/avcodec.h" // avcodec_find_best_pix_fmt_of_2() |
| 32 | #include "avfilter.h" | 32 | #include "avfilter.h" |
| 33 | #include "avfiltergraph.h" | ||
| 34 | #include "formats.h" | 33 | #include "formats.h" |
| 35 | #include "internal.h" | 34 | #include "internal.h" |
| 36 | 35 | ||
| @@ -25,256 +25,4 @@ · 24 unmodified lines | |||
| 25 | #include "avfilter.h" | 25 | #include "avfilter.h" |
| 26 | #include "libavutil/log.h" | 26 | #include "libavutil/log.h" |
| 27 | 27 | ||
| 28 | typedef struct AVFilterGraph { | ||
| 29 | const AVClass *av_class; | ||
| 30 | #if FF_API_FOO_COUNT | ||
| 31 | attribute_deprecated | ||
| 32 | unsigned filter_count_unused; | ||
| 33 | #endif | ||
| 34 | AVFilterContext **filters; | ||
| 35 | #if !FF_API_FOO_COUNT | ||
| 36 | unsigned nb_filters; | ||
| 37 | #endif | ||
| 38 | |||
| 39 | char *scale_sws_opts; ///< sws options to use for the auto-inserted scale filters | ||
| 40 | char *resample_lavr_opts; ///< libavresample options to use for the auto-inserted resample filters | ||
| 41 | #if FF_API_FOO_COUNT | ||
| 42 | unsigned nb_filters; | ||
| 43 | #endif | ||
| 44 | char *aresample_swr_opts; ///< swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions | ||
| 45 | |||
| 46 | /** | ||
| 47 | * Private fields | ||
| 48 | * | ||
| 49 | * The following fields are for internal use only. | ||
| 50 | * Their type, offset, number and semantic can change without notice. | ||
| 51 | */ | ||
| 52 | |||
| 53 | AVFilterLink **sink_links; | ||
| 54 | int sink_links_count; | ||
| 55 | |||
| 56 | unsigned disable_auto_convert; | ||
| 57 | } AVFilterGraph; | ||
| 58 | |||
| 59 | /** | ||
| 60 | * Allocate a filter graph. | ||
| 61 | */ | ||
| 62 | AVFilterGraph *avfilter_graph_alloc(void); | ||
| 63 | |||
| 64 | /** | ||
| 65 | * Get a filter instance with name name from graph. | ||
| 66 | * | ||
| 67 | * @return the pointer to the found filter instance or NULL if it | ||
| 68 | * cannot be found. | ||
| 69 | */ | ||
| 70 | AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, char *name); | ||
| 71 | |||
| 72 | /** | ||
| 73 | * Add an existing filter instance to a filter graph. | ||
| 74 | * | ||
| 75 | * @param graphctx the filter graph | ||
| 76 | * @param filter the filter to be added | ||
| 77 | */ | ||
| 78 | int avfilter_graph_add_filter(AVFilterGraph *graphctx, AVFilterContext *filter); | ||
| 79 | |||
| 80 | /** | ||
| 81 | * Create and add a filter instance into an existing graph. | ||
| 82 | * The filter instance is created from the filter filt and inited | ||
| 83 | * with the parameters args and opaque. | ||
| 84 | * | ||
| 85 | * In case of success put in *filt_ctx the pointer to the created | ||
| 86 | * filter instance, otherwise set *filt_ctx to NULL. | ||
| 87 | * | ||
| 88 | * @param name the instance name to give to the created filter instance | ||
| 89 | * @param graph_ctx the filter graph | ||
| 90 | * @return a negative AVERROR error code in case of failure, a non | ||
| 91 | * negative value otherwise | ||
| 92 | */ | ||
| 93 | int avfilter_graph_create_filter(AVFilterContext **filt_ctx, AVFilter *filt, | ||
| 94 | const char *name, const char *args, void *opaque, | ||
| 95 | AVFilterGraph *graph_ctx); | ||
| 96 | |||
| 97 | /** | ||
| 98 | * Enable or disable automatic format conversion inside the graph. | ||
| 99 | * | ||
| 100 | * Note that format conversion can still happen inside explicitly inserted | ||
| 101 | * scale and aresample filters. | ||
| 102 | * | ||
| 103 | * @param flags any of the AVFILTER_AUTO_CONVERT_* constants | ||
| 104 | */ | ||
| 105 | void avfilter_graph_set_auto_convert(AVFilterGraph *graph, unsigned flags); | ||
| 106 | |||
| 107 | enum { | ||
| 108 | AVFILTER_AUTO_CONVERT_ALL = 0, /**< all automatic conversions enabled */ | ||
| 109 | AVFILTER_AUTO_CONVERT_NONE = -1, /**< all automatic conversions disabled */ | ||
| 110 | }; | ||
| 111 | |||
| 112 | /** | ||
| 113 | * Check validity and configure all the links and formats in the graph. | ||
| 114 | * | ||
| 115 | * @param graphctx the filter graph | ||
| 116 | * @param log_ctx context used for logging | ||
| 117 | * @return 0 in case of success, a negative AVERROR code otherwise | ||
| 118 | */ | ||
| 119 | int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx); | ||
| 120 | |||
| 121 | /** | ||
| 122 | * Free a graph, destroy its links, and set *graph to NULL. | ||
| 123 | * If *graph is NULL, do nothing. | ||
| 124 | */ | ||
| 125 | void avfilter_graph_free(AVFilterGraph **graph); | ||
| 126 | |||
| 127 | /** | ||
| 128 | * A linked-list of the inputs/outputs of the filter chain. | ||
| 129 | * | ||
| 130 | * This is mainly useful for avfilter_graph_parse() / avfilter_graph_parse2(), | ||
| 131 | * where it is used to communicate open (unlinked) inputs and outputs from and | ||
| 132 | * to the caller. | ||
| 133 | * This struct specifies, per each not connected pad contained in the graph, the | ||
| 134 | * filter context and the pad index required for establishing a link. | ||
| 135 | */ | ||
| 136 | typedef struct AVFilterInOut { | ||
| 137 | /** unique name for this input/output in the list */ | ||
| 138 | char *name; | ||
| 139 | |||
| 140 | /** filter context associated to this input/output */ | ||
| 141 | AVFilterContext *filter_ctx; | ||
| 142 | |||
| 143 | /** index of the filt_ctx pad to use for linking */ | ||
| 144 | int pad_idx; | ||
| 145 | |||
| 146 | /** next input/input in the list, NULL if this is the last */ | ||
| 147 | struct AVFilterInOut *next; | ||
| 148 | } AVFilterInOut; | ||
| 149 | |||
| 150 | /** | ||
| 151 | * Allocate a single AVFilterInOut entry. | ||
| 152 | * Must be freed with avfilter_inout_free(). | ||
| 153 | * @return allocated AVFilterInOut on success, NULL on failure. | ||
| 154 | */ | ||
| 155 | AVFilterInOut *avfilter_inout_alloc(void); | ||
| 156 | |||
| 157 | /** | ||
| 158 | * Free the supplied list of AVFilterInOut and set *inout to NULL. | ||
| 159 | * If *inout is NULL, do nothing. | ||
| 160 | */ | ||
| 161 | void avfilter_inout_free(AVFilterInOut **inout); | ||
| 162 | |||
| 163 | /** | ||
| 164 | * Add a graph described by a string to a graph. | ||
| 165 | * | ||
| 166 | * @param graph the filter graph where to link the parsed graph context | ||
| 167 | * @param filters string to be parsed | ||
| 168 | * @param inputs pointer to a linked list to the inputs of the graph, may be NULL. | ||
| 169 | * If non-NULL, *inputs is updated to contain the list of open inputs | ||
| 170 | * after the parsing, should be freed with avfilter_inout_free(). | ||
| 171 | * @param outputs pointer to a linked list to the outputs of the graph, may be NULL. | ||
| 172 | * If non-NULL, *outputs is updated to contain the list of open outputs | ||
| 173 | * after the parsing, should be freed with avfilter_inout_free(). | ||
| 174 | * @return non negative on success, a negative AVERROR code on error | ||
| 175 | */ | ||
| 176 | int avfilter_graph_parse(AVFilterGraph *graph, const char *filters, | ||
| 177 | AVFilterInOut **inputs, AVFilterInOut **outputs, | ||
| 178 | void *log_ctx); | ||
| 179 | |||
| 180 | /** | ||
| 181 | * Add a graph described by a string to a graph. | ||
| 182 | * | ||
| 183 | * @param[in] graph the filter graph where to link the parsed graph context | ||
| 184 | * @param[in] filters string to be parsed | ||
| 185 | * @param[out] inputs a linked list of all free (unlinked) inputs of the | ||
| 186 | * parsed graph will be returned here. It is to be freed | ||
| 187 | * by the caller using avfilter_inout_free(). | ||
| 188 | * @param[out] outputs a linked list of all free (unlinked) outputs of the | ||
| 189 | * parsed graph will be returned here. It is to be freed by the | ||
| 190 | * caller using avfilter_inout_free(). | ||
| 191 | * @return zero on success, a negative AVERROR code on error | ||
| 192 | * | ||
| 193 | * @note the difference between avfilter_graph_parse2() and | ||
| 194 | * avfilter_graph_parse() is that in avfilter_graph_parse(), the caller provides | ||
| 195 | * the lists of inputs and outputs, which therefore must be known before calling | ||
| 196 | * the function. On the other hand, avfilter_graph_parse2() \em returns the | ||
| 197 | * inputs and outputs that are left unlinked after parsing the graph and the | ||
| 198 | * caller then deals with them. Another difference is that in | ||
| 199 | * avfilter_graph_parse(), the inputs parameter describes inputs of the | ||
| 200 | * <em>already existing</em> part of the graph; i.e. from the point of view of | ||
| 201 | * the newly created part, they are outputs. Similarly the outputs parameter | ||
| 202 | * describes outputs of the already existing filters, which are provided as | ||
| 203 | * inputs to the parsed filters. | ||
| 204 | * avfilter_graph_parse2() takes the opposite approach -- it makes no reference | ||
| 205 | * whatsoever to already existing parts of the graph and the inputs parameter | ||
| 206 | * will on return contain inputs of the newly parsed part of the graph. | ||
| 207 | * Analogously the outputs parameter will contain outputs of the newly created | ||
| 208 | * filters. | ||
| 209 | */ | ||
| 210 | int avfilter_graph_parse2(AVFilterGraph *graph, const char *filters, | ||
| 211 | AVFilterInOut **inputs, | ||
| 212 | AVFilterInOut **outputs); | ||
| 213 | |||
| 214 | |||
| 215 | /** | ||
| 216 | * Send a command to one or more filter instances. | ||
| 217 | * | ||
| 218 | * @param graph the filter graph | ||
| 219 | * @param target the filter(s) to which the command should be sent | ||
| 220 | * "all" sends to all filters | ||
| 221 | * otherwise it can be a filter or filter instance name | ||
| 222 | * which will send the command to all matching filters. | ||
| 223 | * @param cmd the command to sent, for handling simplicity all commands must be alphanumeric only | ||
| 224 | * @param arg the argument for the command | ||
| 225 | * @param res a buffer with size res_size where the filter(s) can return a response. | ||
| 226 | * | ||
| 227 | * @returns >=0 on success otherwise an error code. | ||
| 228 | * AVERROR(ENOSYS) on unsupported commands | ||
| 229 | */ | ||
| 230 | int avfilter_graph_send_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, char *res, int res_len, int flags); | ||
| 231 | |||
| 232 | /** | ||
| 233 | * Queue a command for one or more filter instances. | ||
| 234 | * | ||
| 235 | * @param graph the filter graph | ||
| 236 | * @param target the filter(s) to which the command should be sent | ||
| 237 | * "all" sends to all filters | ||
| 238 | * otherwise it can be a filter or filter instance name | ||
| 239 | * which will send the command to all matching filters. | ||
| 240 | * @param cmd the command to sent, for handling simplicity all commands must be alphanummeric only | ||
| 241 | * @param arg the argument for the command | ||
| 242 | * @param ts time at which the command should be sent to the filter | ||
| 243 | * | ||
| 244 | * @note As this executes commands after this function returns, no return code | ||
| 245 | * from the filter is provided, also AVFILTER_CMD_FLAG_ONE is not supported. | ||
| 246 | */ | ||
| 247 | int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const char *cmd, const char *arg, int flags, double ts); | ||
| 248 | |||
| 249 | |||
| 250 | /** | ||
| 251 | * Dump a graph into a human-readable string representation. | ||
| 252 | * | ||
| 253 | * @param graph the graph to dump | ||
| 254 | * @param options formatting options; currently ignored | ||
| 255 | * @return a string, or NULL in case of memory allocation failure; | ||
| 256 | * the string must be freed using av_free | ||
| 257 | */ | ||
| 258 | char *avfilter_graph_dump(AVFilterGraph *graph, const char *options); | ||
| 259 | |||
| 260 | /** | ||
| 261 | * Request a frame on the oldest sink link. | ||
| 262 | * | ||
| 263 | * If the request returns AVERROR_EOF, try the next. | ||
| 264 | * | ||
| 265 | * Note that this function is not meant to be the sole scheduling mechanism | ||
| 266 | * of a filtergraph, only a convenience function to help drain a filtergraph | ||
| 267 | * in a balanced way under normal circumstances. | ||
| 268 | * | ||
| 269 | * Also note that AVERROR_EOF does not mean that frames did not arrive on | ||
| 270 | * some of the sinks during the process. | ||
| 271 | * When there are multiple sink links, in case the requested link | ||
| 272 | * returns an EOF, this may cause a filter to flush pending frames | ||
| 273 | * which are sent to another sink link, although unrequested. | ||
| 274 | * | ||
| 275 | * @return the return value of ff_request_frame(), | ||
| 276 | * or AVERROR_EOF if all links returned AVERROR_EOF | ||
| 277 | */ | ||
| 278 | int avfilter_graph_request_oldest(AVFilterGraph *graph); | ||
| 279 | |||
| 280 | #endif /* AVFILTER_AVFILTERGRAPH_H */ | 28 | #endif /* AVFILTER_AVFILTERGRAPH_H */ |
| @@ -26,7 +26,6 @@ · 25 unmodified lines | |||
| 26 | #include "libavutil/avstring.h" | 26 | #include "libavutil/avstring.h" |
| 27 | #include "libavutil/mem.h" | 27 | #include "libavutil/mem.h" |
| 28 | #include "avfilter.h" | 28 | #include "avfilter.h" |
| 29 | #include "avfiltergraph.h" | ||
| 30 | 29 | ||
| 31 | #define WHITESPACES " \n\t" | 30 | #define WHITESPACES " \n\t" |
| 32 | 31 | ||
| @@ -29,8 +29,8 @@ · 28 unmodified lines | |||
| 29 | #include "libavutil/avutil.h" | 29 | #include "libavutil/avutil.h" |
| 30 | 30 | ||
| 31 | #define LIBAVFILTER_VERSION_MAJOR 3 | 31 | #define LIBAVFILTER_VERSION_MAJOR 3 |
| 32 | #define LIBAVFILTER_VERSION_MINOR 52 | 32 | #define LIBAVFILTER_VERSION_MINOR 53 |
| 33 | #define LIBAVFILTER_VERSION_MICRO 102 | 33 | #define LIBAVFILTER_VERSION_MICRO 100 |
| 34 | 34 | ||
| 35 | #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ | 35 | #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ |
| 36 | LIBAVFILTER_VERSION_MINOR, \ | 36 | LIBAVFILTER_VERSION_MINOR, \ |
| @@ -28,7 +28,7 @@ · 27 unmodified lines | |||
| 28 | #include "libavutil/channel_layout.h" | 28 | #include "libavutil/channel_layout.h" |
| 29 | #include "libavutil/mem.h" | 29 | #include "libavutil/mem.h" |
| 30 | #include "libavutil/pixdesc.h" | 30 | #include "libavutil/pixdesc.h" |
| 31 | #include "libavfilter/avfiltergraph.h" | 31 | #include "libavfilter/avfilter.h" |
| 32 | 32 | ||
| 33 | #if !HAVE_GETOPT | 33 | #if !HAVE_GETOPT |
| 34 | #include "compat/getopt.c" | 34 | #include "compat/getopt.c" |