Imported Debian version 2.5.0~trusty1.1
[deb_ffmpeg.git] / ffmpeg / ffserver_config.h
diff --git a/ffmpeg/ffserver_config.h b/ffmpeg/ffserver_config.h
new file mode 100644 (file)
index 0000000..bdeb3c9
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
+ *
+ * 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 FFSERVER_CONFIG_H
+#define FFSERVER_CONFIG_H
+
+#include "libavutil/dict.h"
+#include "libavformat/avformat.h"
+#include "libavformat/network.h"
+
+#define FFSERVER_MAX_STREAMS 20
+
+/* each generated stream is described here */
+enum FFServerStreamType {
+    STREAM_TYPE_LIVE,
+    STREAM_TYPE_STATUS,
+    STREAM_TYPE_REDIRECT,
+};
+
+enum FFServerIPAddressAction {
+    IP_ALLOW = 1,
+    IP_DENY,
+};
+
+typedef struct FFServerIPAddressACL {
+    struct FFServerIPAddressACL *next;
+    enum FFServerIPAddressAction action;
+    /* These are in host order */
+    struct in_addr first;
+    struct in_addr last;
+} FFServerIPAddressACL;
+
+/* description of each stream of the ffserver.conf file */
+typedef struct FFServerStream {
+    enum FFServerStreamType stream_type;
+    char filename[1024];          /* stream filename */
+    struct FFServerStream *feed;  /* feed we are using (can be null if coming from file) */
+    AVDictionary *in_opts;        /* input parameters */
+    AVDictionary *metadata;       /* metadata to set on the stream */
+    AVInputFormat *ifmt;          /* if non NULL, force input format */
+    AVOutputFormat *fmt;
+    FFServerIPAddressACL *acl;
+    char dynamic_acl[1024];
+    int nb_streams;
+    int prebuffer;                /* Number of milliseconds early to start */
+    int64_t max_time;             /* Number of milliseconds to run */
+    int send_on_key;
+    AVStream *streams[FFSERVER_MAX_STREAMS];
+    int feed_streams[FFSERVER_MAX_STREAMS]; /* index of streams in the feed */
+    char feed_filename[1024];     /* file name of the feed storage, or
+                                     input file name for a stream */
+    pid_t pid;                    /* Of ffmpeg process */
+    time_t pid_start;             /* Of ffmpeg process */
+    char **child_argv;
+    struct FFServerStream *next;
+    unsigned bandwidth;           /* bandwidth, in kbits/s */
+    /* RTSP options */
+    char *rtsp_option;
+    /* multicast specific */
+    int is_multicast;
+    struct in_addr multicast_ip;
+    int multicast_port;           /* first port used for multicast */
+    int multicast_ttl;
+    int loop;                     /* if true, send the stream in loops (only meaningful if file) */
+
+    /* feed specific */
+    int feed_opened;              /* true if someone is writing to the feed */
+    int is_feed;                  /* true if it is a feed */
+    int readonly;                 /* True if writing is prohibited to the file */
+    int truncate;                 /* True if feeder connection truncate the feed file */
+    int conns_served;
+    int64_t bytes_served;
+    int64_t feed_max_size;        /* maximum storage size, zero means unlimited */
+    int64_t feed_write_index;     /* current write position in feed (it wraps around) */
+    int64_t feed_size;            /* current size of feed */
+    struct FFServerStream *next_feed;
+} FFServerStream;
+
+typedef struct FFServerConfig {
+    char *filename;
+    FFServerStream *first_feed;   /* contains only feeds */
+    FFServerStream *first_stream; /* contains all streams, including feeds */
+    unsigned int nb_max_http_connections;
+    unsigned int nb_max_connections;
+    uint64_t max_bandwidth;
+    int debug;
+    char logfilename[1024];
+    struct sockaddr_in http_addr;
+    struct sockaddr_in rtsp_addr;
+    int errors;
+    int warnings;
+    int use_defaults;
+    // Following variables MUST NOT be used outside configuration parsing code.
+    enum AVCodecID guessed_audio_codec_id;
+    enum AVCodecID guessed_video_codec_id;
+    AVDictionary *video_opts;     /* AVOptions for video encoder */
+    AVDictionary *audio_opts;     /* AVOptions for audio encoder */
+    AVCodecContext *dummy_actx;   /* Used internally to test audio AVOptions. */
+    AVCodecContext *dummy_vctx;   /* Used internally to test video AVOptions. */
+    int no_audio;
+    int no_video;
+    int line_num;
+    int stream_use_defaults;
+} FFServerConfig;
+
+void ffserver_get_arg(char *buf, int buf_size, const char **pp);
+
+void ffserver_parse_acl_row(FFServerStream *stream, FFServerStream* feed,
+                            FFServerIPAddressACL *ext_acl,
+                            const char *p, const char *filename, int line_num);
+
+int ffserver_parse_ffconfig(const char *filename, FFServerConfig *config);
+
+void ffserver_free_child_args(void *argsp);
+
+#endif /* FFSERVER_CONFIG_H */