Libav 0.7.1
|
00001 /* 00002 * copyright (c) 2001 Fabrice Bellard 00003 * 00004 * This file is part of Libav. 00005 * 00006 * Libav is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * Libav is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with Libav; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00019 */ 00020 00021 #ifndef AVFORMAT_INTERNAL_H 00022 #define AVFORMAT_INTERNAL_H 00023 00024 #include <stdint.h> 00025 #include "avformat.h" 00026 00027 #define MAX_URL_SIZE 4096 00028 00029 #ifdef DEBUG 00030 # define hex_dump_debug(class, buf, size) av_hex_dump_log(class, AV_LOG_DEBUG, buf, size) 00031 #else 00032 # define hex_dump_debug(class, buf, size) 00033 #endif 00034 00035 typedef struct AVCodecTag { 00036 enum CodecID id; 00037 unsigned int tag; 00038 } AVCodecTag; 00039 00040 void ff_dynarray_add(intptr_t **tab_ptr, int *nb_ptr, intptr_t elem); 00041 00042 #ifdef __GNUC__ 00043 #define dynarray_add(tab, nb_ptr, elem)\ 00044 do {\ 00045 __typeof__(tab) _tab = (tab);\ 00046 __typeof__(elem) _elem = (elem);\ 00047 (void)sizeof(**_tab == _elem); /* check that types are compatible */\ 00048 ff_dynarray_add((intptr_t **)_tab, nb_ptr, (intptr_t)_elem);\ 00049 } while(0) 00050 #else 00051 #define dynarray_add(tab, nb_ptr, elem)\ 00052 do {\ 00053 ff_dynarray_add((intptr_t **)(tab), nb_ptr, (intptr_t)(elem));\ 00054 } while(0) 00055 #endif 00056 00057 struct tm *brktimegm(time_t secs, struct tm *tm); 00058 00059 char *ff_data_to_hex(char *buf, const uint8_t *src, int size, int lowercase); 00060 00069 int ff_hex_to_data(uint8_t *data, const char *p); 00070 00071 void ff_program_add_stream_index(AVFormatContext *ac, int progid, unsigned int idx); 00072 00077 void ff_interleave_add_packet(AVFormatContext *s, AVPacket *pkt, 00078 int (*compare)(AVFormatContext *, AVPacket *, AVPacket *)); 00079 00080 void ff_read_frame_flush(AVFormatContext *s); 00081 00082 #define NTP_OFFSET 2208988800ULL 00083 #define NTP_OFFSET_US (NTP_OFFSET * 1000000ULL) 00084 00086 uint64_t ff_ntp_time(void); 00087 00109 int ff_url_join(char *str, int size, const char *proto, 00110 const char *authorization, const char *hostname, 00111 int port, const char *fmt, ...); 00112 00130 void ff_sdp_write_media(char *buff, int size, AVCodecContext *c, 00131 const char *dest_addr, const char *dest_type, 00132 int port, int ttl, AVFormatContext *fmt); 00133 00145 int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt, 00146 AVFormatContext *src); 00147 00151 int ff_get_v_length(uint64_t val); 00152 00156 void ff_put_v(AVIOContext *bc, uint64_t val); 00157 00169 int ff_get_line(AVIOContext *s, char *buf, int maxlen); 00170 00171 #define SPACE_CHARS " \t\r\n" 00172 00183 typedef void (*ff_parse_key_val_cb)(void *context, const char *key, 00184 int key_len, char **dest, int *dest_len); 00194 void ff_parse_key_value(const char *str, ff_parse_key_val_cb callback_get_buf, 00195 void *context); 00196 00201 int ff_find_stream_index(AVFormatContext *s, int id); 00202 00206 int ff_index_search_timestamp(const AVIndexEntry *entries, int nb_entries, 00207 int64_t wanted_timestamp, int flags); 00208 00212 int ff_add_index_entry(AVIndexEntry **index_entries, 00213 int *nb_index_entries, 00214 unsigned int *index_entries_allocated_size, 00215 int64_t pos, int64_t timestamp, int size, int distance, int flags); 00216 00228 AVChapter *ff_new_chapter(AVFormatContext *s, int id, AVRational time_base, 00229 int64_t start, int64_t end, const char *title); 00230 00236 void ff_reduce_index(AVFormatContext *s, int stream_index); 00237 00238 /* 00239 * Convert a relative url into an absolute url, given a base url. 00240 * 00241 * @param buf the buffer where output absolute url is written 00242 * @param size the size of buf 00243 * @param base the base url, may be equal to buf. 00244 * @param rel the new url, which is interpreted relative to base 00245 */ 00246 void ff_make_absolute_url(char *buf, int size, const char *base, 00247 const char *rel); 00248 00249 enum CodecID ff_guess_image2_codec(const char *filename); 00250 00251 #endif /* AVFORMAT_INTERNAL_H */