avfiltergraph.h 4.88 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/*
 * Filter graphs
 * copyright (c) 2007 Bobby Bingham
 *
 * This file is part of FFmpeg.
 *
 * FFmpeg is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * FFmpeg is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with FFmpeg; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

22 23
#ifndef FFMPEG_AVFILTERGRAPH_H
#define FFMPEG_AVFILTERGRAPH_H
24 25 26

#include "avfilter.h"

27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
/** Linked-list of filters to create for an AVFilterGraphDesc */
typedef struct AVFilterGraphDescFilter
{
    char *name;             ///< filter instance name
    char *filter;           ///< name of filter type
    char *args;             ///< filter parameters
    struct AVFilterGraphDescFilter *next;
} AVFilterGraphDescFilter;

/** Linked-list of links between filters */
typedef struct AVFilterGraphDescLink
{
    /* TODO: allow referencing pads by name, not just by index */
    char *src;              ///< name of the source filter
    unsigned srcpad;        ///< index of the output pad on the source filter

    char *dst;              ///< name of the dest filter
    unsigned dstpad;        ///< index of the input pad on the dest filter

    struct AVFilterGraphDescLink *next;
} AVFilterGraphDescLink;

/** Linked-list of filter pads to be exported from the graph */
typedef struct AVFilterGraphDescExport
{
    /* TODO: allow referencing pads by name, not just by index */
    char *name;             ///< name of the exported pad
    char *filter;           ///< name of the filter
    unsigned pad;           ///< index of the pad to be exported

    struct AVFilterGraphDescExport *next;
} AVFilterGraphDescExport;

60 61 62 63 64 65 66 67 68 69
/** Sections of a filter graph description */
typedef enum
{
    SEC_NONE = 0,
    SEC_FILTERS,
    SEC_LINKS,
    SEC_INPUTS,
    SEC_OUTPUTS
} AVFilterGraphDescSection;

70 71 72 73 74 75 76 77 78
/** Description of a graph to be loaded from a file, etc */
typedef struct
{
    AVFilterGraphDescFilter *filters;   ///< filters in the graph
    AVFilterGraphDescLink   *links;     ///< links between the filters
    AVFilterGraphDescExport *inputs;    ///< inputs to export
    AVFilterGraphDescExport *outputs;   ///< outputs to export
} AVFilterGraphDesc;

79 80 81 82 83 84 85 86 87 88
typedef struct
{
    AVFilterGraphDescSection section;   ///< current section being parsed

    AVFilterGraphDescFilter **filterp;  ///< last parsed filter
    AVFilterGraphDescLink   **linkp;    ///< last parsed link
    AVFilterGraphDescExport **inputp;   ///< last parsed exported input
    AVFilterGraphDescExport **outputp;  ///< last parsed exported output
} AVFilterGraphDescParser;

89 90 91 92 93 94 95 96
/**
 * Parse a graph composed of a simple chain of filters which is described by
 * a single string.
 * @param filters String listing filters and their arguments.
 * @return        The parsed graph description.
 */
AVFilterGraphDesc *avfilter_graph_parse_chain(const char *filters);

97 98 99 100 101 102 103 104 105 106 107 108 109 110
/** Parse a line of a filter graph description.
 * @param desc   Pointer to an AVFilterGraphDesc pointer. If *desc is NULL,
 *               a new AVFilterGraphDesc structure will be created for you.
 *               Must be the same between multiple invocations when parsing
 *               the same description.
 * @param parser Parser state. Must be the same between multiple invocations
 *               when parsing the same description
 * @param line   Line of the graph description to parse.
 * @return       Zero on success, negative on error.
 */
int avfilter_graph_parse_desc(AVFilterGraphDesc **desc,
                              AVFilterGraphDescParser **parser,
                              char *line);

111 112 113 114 115 116 117 118 119 120 121 122 123
/**
 * Load a filter graph description from a file
 * @param filename Name of the file from which to load the description
 * @return         Pointer to the description on success.  NULL on failure
 */
AVFilterGraphDesc *avfilter_graph_load_desc(const char *filename);

/**
 * Free a filter graph description
 * @param desc The graph description to free
 */
void avfilter_graph_free_desc(AVFilterGraphDesc *desc);

124 125 126 127 128
/**
 * Add an existing filter instance to a filter graph.
 * @param graph  The filter graph
 * @param filter The filter to be added
 */
129
void avfilter_graph_add_filter(AVFilterContext *graphctx, AVFilterContext *filter);
130

131
/**
Vitor Sessak's avatar
Vitor Sessak committed
132 133 134 135 136 137
 * Configure the formats of all the links in the graph
 */
int avfilter_graph_config_formats(AVFilterContext *graphctx);

/**
 * Configure the resolution, etc of all links in the graph
138 139 140
 */
int avfilter_graph_config_links(AVFilterContext *graphctx);

141
#endif  /* FFMPEG_AVFILTER_H */