avfiltergraph.h 4.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
/*
 * 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
 */

#ifndef FFMPEG_AVFILTER_GRAPH_H
#define FFMPEG_AVFILTER_GRAPH_H

#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 89 90 91 92 93 94 95 96 97 98 99 100 101 102
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;

/** 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);

103 104 105 106 107 108 109 110 111 112 113 114 115
/**
 * 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);

116 117 118 119 120
/**
 * Add an existing filter instance to a filter graph.
 * @param graph  The filter graph
 * @param filter The filter to be added
 */
121
void avfilter_graph_add_filter(AVFilterContext *graphctx, AVFilterContext *filter);
122

123
/**
Vitor Sessak's avatar
Vitor Sessak committed
124 125 126 127 128 129
 * 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
130 131 132
 */
int avfilter_graph_config_links(AVFilterContext *graphctx);

133
#endif  /* FFMPEG_AVFILTER_H */