~ubuntu-branches/ubuntu/oneiric/mplayer2/oneiric-proposed

« back to all changes in this revision

Viewing changes to ffmpeg-mt/libavformat/internal.h

  • Committer: Bazaar Package Importer
  • Author(s): Reinhard Tartler
  • Date: 2011-03-20 22:48:03 UTC
  • Revision ID: james.westby@ubuntu.com-20110320224803-kc2nlrxz6pcphmf1
Tags: upstream-2.0~rc2
ImportĀ upstreamĀ versionĀ 2.0~rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * copyright (c) 2001 Fabrice Bellard
 
3
 *
 
4
 * This file is part of FFmpeg.
 
5
 *
 
6
 * FFmpeg is free software; you can redistribute it and/or
 
7
 * modify it under the terms of the GNU Lesser General Public
 
8
 * License as published by the Free Software Foundation; either
 
9
 * version 2.1 of the License, or (at your option) any later version.
 
10
 *
 
11
 * FFmpeg is distributed in the hope that it will be useful,
 
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
14
 * Lesser General Public License for more details.
 
15
 *
 
16
 * You should have received a copy of the GNU Lesser General Public
 
17
 * License along with FFmpeg; if not, write to the Free Software
 
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
19
 */
 
20
 
 
21
#ifndef AVFORMAT_INTERNAL_H
 
22
#define AVFORMAT_INTERNAL_H
 
23
 
 
24
#include <stdint.h>
 
25
#include "avformat.h"
 
26
 
 
27
#define MAX_URL_SIZE 4096
 
28
 
 
29
typedef struct AVCodecTag {
 
30
    enum CodecID id;
 
31
    unsigned int tag;
 
32
} AVCodecTag;
 
33
 
 
34
void ff_dynarray_add(intptr_t **tab_ptr, int *nb_ptr, intptr_t elem);
 
35
 
 
36
#ifdef __GNUC__
 
37
#define dynarray_add(tab, nb_ptr, elem)\
 
38
do {\
 
39
    __typeof__(tab) _tab = (tab);\
 
40
    __typeof__(elem) _elem = (elem);\
 
41
    (void)sizeof(**_tab == _elem); /* check that types are compatible */\
 
42
    ff_dynarray_add((intptr_t **)_tab, nb_ptr, (intptr_t)_elem);\
 
43
} while(0)
 
44
#else
 
45
#define dynarray_add(tab, nb_ptr, elem)\
 
46
do {\
 
47
    ff_dynarray_add((intptr_t **)(tab), nb_ptr, (intptr_t)(elem));\
 
48
} while(0)
 
49
#endif
 
50
 
 
51
time_t mktimegm(struct tm *tm);
 
52
struct tm *brktimegm(time_t secs, struct tm *tm);
 
53
const char *small_strptime(const char *p, const char *fmt,
 
54
                           struct tm *dt);
 
55
 
 
56
char *ff_data_to_hex(char *buf, const uint8_t *src, int size, int lowercase);
 
57
 
 
58
/**
 
59
 * Parse a string of hexadecimal strings. Any space between the hexadecimal
 
60
 * digits is ignored.
 
61
 *
 
62
 * @param data if non-null, the parsed data is written to this pointer
 
63
 * @param p the string to parse
 
64
 * @return the number of bytes written (or to be written, if data is null)
 
65
 */
 
66
int ff_hex_to_data(uint8_t *data, const char *p);
 
67
 
 
68
void ff_program_add_stream_index(AVFormatContext *ac, int progid, unsigned int idx);
 
69
 
 
70
/**
 
71
 * Add packet to AVFormatContext->packet_buffer list, determining its
 
72
 * interleaved position using compare() function argument.
 
73
 */
 
74
void ff_interleave_add_packet(AVFormatContext *s, AVPacket *pkt,
 
75
                              int (*compare)(AVFormatContext *, AVPacket *, AVPacket *));
 
76
 
 
77
void ff_read_frame_flush(AVFormatContext *s);
 
78
 
 
79
#define NTP_OFFSET 2208988800ULL
 
80
#define NTP_OFFSET_US (NTP_OFFSET * 1000000ULL)
 
81
 
 
82
/** Get the current time since NTP epoch in microseconds. */
 
83
uint64_t ff_ntp_time(void);
 
84
 
 
85
/**
 
86
 * Probe a bytestream to determine the input format. Each time a probe returns
 
87
 * with a score that is too low, the probe buffer size is increased and another
 
88
 * attempt is made. When the maximum probe size is reached, the input format
 
89
 * with the highest score is returned.
 
90
 *
 
91
 * @param pb the bytestream to probe, it may be closed and opened again
 
92
 * @param fmt the input format is put here
 
93
 * @param filename the filename of the stream
 
94
 * @param logctx the log context
 
95
 * @param offset the offset within the bytestream to probe from
 
96
 * @param max_probe_size the maximum probe buffer size (zero for default)
 
97
 * @return 0 in case of success, a negative value corresponding to an
 
98
 * AVERROR code otherwise
 
99
 */
 
100
int ff_probe_input_buffer(ByteIOContext **pb, AVInputFormat **fmt,
 
101
                          const char *filename, void *logctx,
 
102
                          unsigned int offset, unsigned int max_probe_size);
 
103
 
 
104
#if FF_API_URL_SPLIT
 
105
/**
 
106
 * @deprecated use av_url_split() instead
 
107
 */
 
108
void ff_url_split(char *proto, int proto_size,
 
109
                  char *authorization, int authorization_size,
 
110
                  char *hostname, int hostname_size,
 
111
                  int *port_ptr,
 
112
                  char *path, int path_size,
 
113
                  const char *url);
 
114
#endif
 
115
 
 
116
/**
 
117
 * Assemble a URL string from components. This is the reverse operation
 
118
 * of av_url_split.
 
119
 *
 
120
 * Note, this requires networking to be initialized, so the caller must
 
121
 * ensure ff_network_init has been called.
 
122
 *
 
123
 * @see av_url_split
 
124
 *
 
125
 * @param str the buffer to fill with the url
 
126
 * @param size the size of the str buffer
 
127
 * @param proto the protocol identifier, if null, the separator
 
128
 *              after the identifier is left out, too
 
129
 * @param authorization an optional authorization string, may be null.
 
130
 *                      An empty string is treated the same as a null string.
 
131
 * @param hostname the host name string
 
132
 * @param port the port number, left out from the string if negative
 
133
 * @param fmt a generic format string for everything to add after the
 
134
 *            host/port, may be null
 
135
 * @return the number of characters written to the destination buffer
 
136
 */
 
137
int ff_url_join(char *str, int size, const char *proto,
 
138
                const char *authorization, const char *hostname,
 
139
                int port, const char *fmt, ...);
 
140
 
 
141
/**
 
142
 * Append the media-specific SDP fragment for the media stream c
 
143
 * to the buffer buff.
 
144
 *
 
145
 * Note, the buffer needs to be initialized, since it is appended to
 
146
 * existing content.
 
147
 *
 
148
 * @param buff the buffer to append the SDP fragment to
 
149
 * @param size the size of the buff buffer
 
150
 * @param c the AVCodecContext of the media to describe
 
151
 * @param dest_addr the destination address of the media stream, may be NULL
 
152
 * @param dest_type the destination address type, may be NULL
 
153
 * @param port the destination port of the media stream, 0 if unknown
 
154
 * @param ttl the time to live of the stream, 0 if not multicast
 
155
 */
 
156
void ff_sdp_write_media(char *buff, int size, AVCodecContext *c,
 
157
                        const char *dest_addr, const char *dest_type,
 
158
                        int port, int ttl);
 
159
 
 
160
/**
 
161
 * Write a packet to another muxer than the one the user originally
 
162
 * intended. Useful when chaining muxers, where one muxer internally
 
163
 * writes a received packet to another muxer.
 
164
 *
 
165
 * @param dst the muxer to write the packet to
 
166
 * @param dst_stream the stream index within dst to write the packet to
 
167
 * @param pkt the packet to be written
 
168
 * @param src the muxer the packet originally was intended for
 
169
 * @return the value av_write_frame returned
 
170
 */
 
171
int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
 
172
                     AVFormatContext *src);
 
173
 
 
174
/**
 
175
 * Get the length in bytes which is needed to store val as v.
 
176
 */
 
177
int ff_get_v_length(uint64_t val);
 
178
 
 
179
/**
 
180
 * Put val using a variable number of bytes.
 
181
 */
 
182
void ff_put_v(ByteIOContext *bc, uint64_t val);
 
183
 
 
184
/**
 
185
 * Read a whole line of text from ByteIOContext. Stop reading after reaching
 
186
 * either a \n, a \0 or EOF. The returned string is always \0 terminated,
 
187
 * and may be truncated if the buffer is too small.
 
188
 *
 
189
 * @param s the read-only ByteIOContext
 
190
 * @param buf buffer to store the read line
 
191
 * @param maxlen size of the buffer
 
192
 * @return the length of the string written in the buffer, not including the
 
193
 *         final \0
 
194
 */
 
195
int ff_get_line(ByteIOContext *s, char *buf, int maxlen);
 
196
 
 
197
#define SPACE_CHARS " \t\r\n"
 
198
 
 
199
/**
 
200
 * Callback function type for ff_parse_key_value.
 
201
 *
 
202
 * @param key a pointer to the key
 
203
 * @param key_len the number of bytes that belong to the key, including the '='
 
204
 *                char
 
205
 * @param dest return the destination pointer for the value in *dest, may
 
206
 *             be null to ignore the value
 
207
 * @param dest_len the length of the *dest buffer
 
208
 */
 
209
typedef void (*ff_parse_key_val_cb)(void *context, const char *key,
 
210
                                    int key_len, char **dest, int *dest_len);
 
211
/**
 
212
 * Parse a string with comma-separated key=value pairs. The value strings
 
213
 * may be quoted and may contain escaped characters within quoted strings.
 
214
 *
 
215
 * @param str the string to parse
 
216
 * @param callback_get_buf function that returns where to store the
 
217
 *                         unescaped value string.
 
218
 * @param context the opaque context pointer to pass to callback_get_buf
 
219
 */
 
220
void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf,
 
221
                        void *context);
 
222
 
 
223
/**
 
224
 * Find stream index based on format-specific stream ID
 
225
 * @return stream index, or < 0 on error
 
226
 */
 
227
int ff_find_stream_index(AVFormatContext *s, int id);
 
228
 
 
229
#endif /* AVFORMAT_INTERNAL_H */