Commit 352e605b authored by michael's avatar michael

part of the 'libavformat/utils.c doxygen documentation' patch by (Daniel...

part of the 'libavformat/utils.c doxygen documentation' patch by (Daniel Kristjansson: danielk, cat nyu edu)


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@4405 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 3130a864
...@@ -21,8 +21,16 @@ ...@@ -21,8 +21,16 @@
#undef NDEBUG #undef NDEBUG
#include <assert.h> #include <assert.h>
/**
* @file libavformat/utils.c
* Various utility functions for using ffmpeg library.
*/
/** head of registered input format linked list. */
AVInputFormat *first_iformat = NULL; AVInputFormat *first_iformat = NULL;
/** head of registered output format linked list. */
AVOutputFormat *first_oformat = NULL; AVOutputFormat *first_oformat = NULL;
/** head of registered image format linked list. */
AVImageFormat *first_image_format = NULL; AVImageFormat *first_image_format = NULL;
void av_register_input_format(AVInputFormat *format) void av_register_input_format(AVInputFormat *format)
...@@ -131,7 +139,7 @@ AVOutputFormat *guess_stream_format(const char *short_name, const char *filename ...@@ -131,7 +139,7 @@ AVOutputFormat *guess_stream_format(const char *short_name, const char *filename
} }
/** /**
* guesses the codec id based upon muxer and filename. * Guesses the codec id based upon muxer and filename.
*/ */
enum CodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name, enum CodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name,
const char *filename, const char *mime_type, enum CodecType type){ const char *filename, const char *mime_type, enum CodecType type){
...@@ -150,6 +158,9 @@ enum CodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name, ...@@ -150,6 +158,9 @@ enum CodecID av_guess_codec(AVOutputFormat *fmt, const char *short_name,
return CODEC_ID_NONE; return CODEC_ID_NONE;
} }
/**
* finds AVInputFormat based on input format's short name.
*/
AVInputFormat *av_find_input_format(const char *short_name) AVInputFormat *av_find_input_format(const char *short_name)
{ {
AVInputFormat *fmt; AVInputFormat *fmt;
...@@ -163,7 +174,7 @@ AVInputFormat *av_find_input_format(const char *short_name) ...@@ -163,7 +174,7 @@ AVInputFormat *av_find_input_format(const char *short_name)
/* memory handling */ /* memory handling */
/** /**
* Default packet destructor * Default packet destructor.
*/ */
void av_destruct_packet(AVPacket *pkt) void av_destruct_packet(AVPacket *pkt)
{ {
...@@ -274,7 +285,9 @@ int fifo_size(FifoBuffer *f, uint8_t *rptr) ...@@ -274,7 +285,9 @@ int fifo_size(FifoBuffer *f, uint8_t *rptr)
return size; return size;
} }
/* get data from the fifo (return -1 if not enough data) */ /**
* Get data from the fifo (returns -1 if not enough data).
*/
int fifo_read(FifoBuffer *f, uint8_t *buf, int buf_size, uint8_t **rptr_ptr) int fifo_read(FifoBuffer *f, uint8_t *buf, int buf_size, uint8_t **rptr_ptr)
{ {
uint8_t *rptr; uint8_t *rptr;
...@@ -307,6 +320,9 @@ int fifo_read(FifoBuffer *f, uint8_t *buf, int buf_size, uint8_t **rptr_ptr) ...@@ -307,6 +320,9 @@ int fifo_read(FifoBuffer *f, uint8_t *buf, int buf_size, uint8_t **rptr_ptr)
return 0; return 0;
} }
/**
* Resizes a FIFO.
*/
void fifo_realloc(FifoBuffer *f, unsigned int new_size){ void fifo_realloc(FifoBuffer *f, unsigned int new_size){
unsigned int old_size= f->end - f->buffer; unsigned int old_size= f->end - f->buffer;
...@@ -385,7 +401,9 @@ int filename_number_test(const char *filename) ...@@ -385,7 +401,9 @@ int filename_number_test(const char *filename)
return get_frame_filename(buf, sizeof(buf), filename, 1); return get_frame_filename(buf, sizeof(buf), filename, 1);
} }
/* guess file format */ /**
* Guess file format.
*/
AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened) AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened)
{ {
AVInputFormat *fmt1, *fmt; AVInputFormat *fmt1, *fmt;
...@@ -416,9 +434,8 @@ AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened) ...@@ -416,9 +434,8 @@ AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened)
/* input media file */ /* input media file */
/** /**
* open a media file from an IO stream. 'fmt' must be specified. * Open a media file from an IO stream. 'fmt' must be specified.
*/ */
static const char* format_to_name(void* ptr) static const char* format_to_name(void* ptr)
{ {
AVFormatContext* fc = (AVFormatContext*) ptr; AVFormatContext* fc = (AVFormatContext*) ptr;
...@@ -438,6 +455,10 @@ AVFormatContext *av_alloc_format_context(void) ...@@ -438,6 +455,10 @@ AVFormatContext *av_alloc_format_context(void)
return ic; return ic;
} }
/**
* Allocates all the structures needed to read an input stream.
* This does not open the needed codecs for decoding the stream[s].
*/
int av_open_input_stream(AVFormatContext **ic_ptr, int av_open_input_stream(AVFormatContext **ic_ptr,
ByteIOContext *pb, const char *filename, ByteIOContext *pb, const char *filename,
AVInputFormat *fmt, AVFormatParameters *ap) AVInputFormat *fmt, AVFormatParameters *ap)
...@@ -486,6 +507,7 @@ int av_open_input_stream(AVFormatContext **ic_ptr, ...@@ -486,6 +507,7 @@ int av_open_input_stream(AVFormatContext **ic_ptr,
return err; return err;
} }
/** Size of probe buffer, for guessing file type from file contents. */
#define PROBE_BUF_SIZE 2048 #define PROBE_BUF_SIZE 2048
/** /**
...@@ -594,8 +616,10 @@ int av_open_input_file(AVFormatContext **ic_ptr, const char *filename, ...@@ -594,8 +616,10 @@ int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
/*******************************************************/ /*******************************************************/
/** /**
* Read a transport packet from a media file. This function is * Read a transport packet from a media file.
* absolete and should never be used. Use av_read_frame() instead. *
* This function is absolete and should never be used.
* Use av_read_frame() instead.
* *
* @param s media file handle * @param s media file handle
* @param pkt is filled * @param pkt is filled
...@@ -608,7 +632,9 @@ int av_read_packet(AVFormatContext *s, AVPacket *pkt) ...@@ -608,7 +632,9 @@ int av_read_packet(AVFormatContext *s, AVPacket *pkt)
/**********************************************************/ /**********************************************************/
/* get the number of samples of an audio frame. Return (-1) if error */ /**
* Get the number of samples of an audio frame. Return (-1) if error.
*/
static int get_audio_frame_size(AVCodecContext *enc, int size) static int get_audio_frame_size(AVCodecContext *enc, int size)
{ {
int frame_size; int frame_size;
...@@ -647,7 +673,9 @@ static int get_audio_frame_size(AVCodecContext *enc, int size) ...@@ -647,7 +673,9 @@ static int get_audio_frame_size(AVCodecContext *enc, int size)
} }
/* return the frame duration in seconds, return 0 if not available */ /**
* Return the frame duration in seconds, return 0 if not available.
*/
static void compute_frame_duration(int *pnum, int *pden, AVStream *st, static void compute_frame_duration(int *pnum, int *pden, AVStream *st,
AVCodecParserContext *pc, AVPacket *pkt) AVCodecParserContext *pc, AVPacket *pkt)
{ {
...@@ -906,7 +934,9 @@ static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt) ...@@ -906,7 +934,9 @@ static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt)
} }
/** /**
* Return the next frame of a stream. The returned packet is valid * Return the next frame of a stream.
*
* The returned packet is valid
* until the next av_read_frame() or until av_close_input_file() and * until the next av_read_frame() or until av_close_input_file() and
* must be freed with av_free_packet. For video, the packet contains * must be freed with av_free_packet. For video, the packet contains
* exactly one frame. For audio, it contains an integer number of * exactly one frame. For audio, it contains an integer number of
...@@ -920,7 +950,7 @@ static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt) ...@@ -920,7 +950,7 @@ static int av_read_frame_internal(AVFormatContext *s, AVPacket *pkt)
* has B frames, so it is better to rely on pkt->dts if you do not * has B frames, so it is better to rely on pkt->dts if you do not
* decompress the payload. * decompress the payload.
* *
* Return 0 if OK, < 0 if error or end of file. * @return 0 if OK, < 0 if error or end of file.
*/ */
int av_read_frame(AVFormatContext *s, AVPacket *pkt) int av_read_frame(AVFormatContext *s, AVPacket *pkt)
{ {
...@@ -972,7 +1002,9 @@ int av_find_default_stream_index(AVFormatContext *s) ...@@ -972,7 +1002,9 @@ int av_find_default_stream_index(AVFormatContext *s)
return 0; return 0;
} }
/* flush the frame reader */ /**
* Flush the frame reader.
*/
static void av_read_frame_flush(AVFormatContext *s) static void av_read_frame_flush(AVFormatContext *s)
{ {
AVStream *st; AVStream *st;
...@@ -1004,8 +1036,9 @@ static void av_read_frame_flush(AVFormatContext *s) ...@@ -1004,8 +1036,9 @@ static void av_read_frame_flush(AVFormatContext *s)
} }
/** /**
* updates cur_dts of all streams based on given timestamp and AVStream. * Updates cur_dts of all streams based on given timestamp and AVStream.
* stream ref_st unchanged, others set cur_dts in their native timebase *
* Stream ref_st unchanged, others set cur_dts in their native timebase
* only needed for timestamp wrapping or if (dts not set and pts!=dts) * only needed for timestamp wrapping or if (dts not set and pts!=dts)
* @param timestamp new dts expressed in time_base of param ref_st * @param timestamp new dts expressed in time_base of param ref_st
* @param ref_st reference stream giving time_base of param timestamp * @param ref_st reference stream giving time_base of param timestamp
...@@ -1023,7 +1056,8 @@ static void av_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t time ...@@ -1023,7 +1056,8 @@ static void av_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t time
} }
/** /**
* add a index entry into a sorted list updateing if it is already there. * Add a index entry into a sorted list updateing if it is already there.
*
* @param timestamp timestamp in the timebase of the given stream * @param timestamp timestamp in the timebase of the given stream
*/ */
int av_add_index_entry(AVStream *st, int av_add_index_entry(AVStream *st,
...@@ -1069,7 +1103,9 @@ int av_add_index_entry(AVStream *st, ...@@ -1069,7 +1103,9 @@ int av_add_index_entry(AVStream *st,
return index; return index;
} }
/* build an index for raw streams using a parser */ /**
* build an index for raw streams using a parser.
*/
static void av_build_index_raw(AVFormatContext *s) static void av_build_index_raw(AVFormatContext *s)
{ {
AVPacket pkt1, *pkt = &pkt1; AVPacket pkt1, *pkt = &pkt1;
...@@ -1093,8 +1129,11 @@ static void av_build_index_raw(AVFormatContext *s) ...@@ -1093,8 +1129,11 @@ static void av_build_index_raw(AVFormatContext *s)
} }
} }
/* return TRUE if we deal with a raw stream (raw codec data and /**
parsing needed) */ * Returns TRUE if we deal with a raw stream.
*
* Raw codec data and parsing needed.
*/
static int is_raw_stream(AVFormatContext *s) static int is_raw_stream(AVFormatContext *s)
{ {
AVStream *st; AVStream *st;
...@@ -1108,7 +1147,7 @@ static int is_raw_stream(AVFormatContext *s) ...@@ -1108,7 +1147,7 @@ static int is_raw_stream(AVFormatContext *s)
} }
/** /**
* gets the index for a specific timestamp. * Gets the index for a specific timestamp.
* @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond to * @param flags if AVSEEK_FLAG_BACKWARD then the returned index will correspond to
* the timestamp which is <= the requested one, if backward is 0 * the timestamp which is <= the requested one, if backward is 0
* then it will be >= * then it will be >=
...@@ -1406,7 +1445,11 @@ int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int f ...@@ -1406,7 +1445,11 @@ int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int f
/*******************************************************/ /*******************************************************/
/* return TRUE if the stream has accurate timings for at least one component */ /**
* Returns TRUE if the stream has accurate timings in any stream.
*
* @return TRUE if the stream has accurate timings for at least one component.
*/
static int av_has_timings(AVFormatContext *ic) static int av_has_timings(AVFormatContext *ic)
{ {
int i; int i;
...@@ -1421,8 +1464,11 @@ static int av_has_timings(AVFormatContext *ic) ...@@ -1421,8 +1464,11 @@ static int av_has_timings(AVFormatContext *ic)
return 0; return 0;
} }
/* estimate the stream timings from the one of each components. Also /**
compute the global bitrate if possible */ * Estimate the stream timings from the one of each components.
*
* Also computes the global bitrate if possible.
*/
static void av_update_stream_timings(AVFormatContext *ic) static void av_update_stream_timings(AVFormatContext *ic)
{ {
int64_t start_time, start_time1, end_time, end_time1; int64_t start_time, start_time1, end_time, end_time1;
...@@ -1713,7 +1759,7 @@ static int try_decode_frame(AVStream *st, const uint8_t *data, int size) ...@@ -1713,7 +1759,7 @@ static int try_decode_frame(AVStream *st, const uint8_t *data, int size)
#define MAX_READ_SIZE 5000000 #define MAX_READ_SIZE 5000000
/* maximum duration until we stop analysing the stream */ /* maximum duration until we stop analysing the stream */
#define MAX_STREAM_DURATION ((int)(AV_TIME_BASE * 1.0)) #define MAX_STREAM_DURATION ((int)(AV_TIME_BASE * 2.0))
/** /**
* Read the beginning of a media file to get stream information. This * Read the beginning of a media file to get stream information. This
...@@ -1985,8 +2031,9 @@ int av_read_play(AVFormatContext *s) ...@@ -1985,8 +2031,9 @@ int av_read_play(AVFormatContext *s)
} }
/** /**
* pause a network based stream (e.g. RTSP stream). Use av_read_play() * Pause a network based stream (e.g. RTSP stream).
* to resume it. *
* Use av_read_play() to resume it.
*/ */
int av_read_pause(AVFormatContext *s) int av_read_pause(AVFormatContext *s)
{ {
...@@ -1996,7 +2043,7 @@ int av_read_pause(AVFormatContext *s) ...@@ -1996,7 +2043,7 @@ int av_read_pause(AVFormatContext *s)
} }
/** /**
* Close a media file (but not its codecs) * Close a media file (but not its codecs).
* *
* @param s media file handle * @param s media file handle
*/ */
...@@ -2033,10 +2080,11 @@ void av_close_input_file(AVFormatContext *s) ...@@ -2033,10 +2080,11 @@ void av_close_input_file(AVFormatContext *s)
} }
/** /**
* Add a new stream to a media file. Can only be called in the * Add a new stream to a media file.
* read_header function. If the flag AVFMTCTX_NOHEADER is in the
* format context, then new streams can be added in read_packet too.
* *
* Can only be called in the read_header() function. If the flag
* AVFMTCTX_NOHEADER is in the format context, then new streams
* can be added in read_packet too.
* *
* @param s media file handle * @param s media file handle
* @param id file format dependent stream id * @param id file format dependent stream id
...@@ -2212,8 +2260,9 @@ static void truncate_ts(AVStream *st, AVPacket *pkt){ ...@@ -2212,8 +2260,9 @@ static void truncate_ts(AVStream *st, AVPacket *pkt){
} }
/** /**
* Write a packet to an output media file. The packet shall contain * Write a packet to an output media file.
* one audio or video frame. *
* The packet shall contain one audio or video frame.
* *
* @param s media file handle * @param s media file handle
* @param pkt the packet, which contains the stream_index, buf/buf_size, dts/pts, ... * @param pkt the packet, which contains the stream_index, buf/buf_size, dts/pts, ...
...@@ -2306,7 +2355,8 @@ static int av_interleave_packet(AVFormatContext *s, AVPacket *out, AVPacket *in, ...@@ -2306,7 +2355,8 @@ static int av_interleave_packet(AVFormatContext *s, AVPacket *out, AVPacket *in,
/** /**
* Writes a packet to an output media file ensuring correct interleaving. * Writes a packet to an output media file ensuring correct interleaving.
* The packet shall contain one audio or video frame. *
* The packet must contain one audio or video frame.
* If the packets are already correctly interleaved the application should * If the packets are already correctly interleaved the application should
* call av_write_frame() instead as its slightly faster, its also important * call av_write_frame() instead as its slightly faster, its also important
* to keep in mind that completly non interleaved input will need huge amounts * to keep in mind that completly non interleaved input will need huge amounts
...@@ -2351,11 +2401,12 @@ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt){ ...@@ -2351,11 +2401,12 @@ int av_interleaved_write_frame(AVFormatContext *s, AVPacket *pkt){
} }
/** /**
* write the stream trailer to an output media file and and free the * @brief Write the stream trailer to an output media file and
* file private data. * free the file private data.
* *
* @param s media file handle * @param s media file handle
* @return 0 if OK. AVERROR_xxx if error. */ * @return 0 if OK. AVERROR_xxx if error.
*/
int av_write_trailer(AVFormatContext *s) int av_write_trailer(AVFormatContext *s)
{ {
int ret, i; int ret, i;
...@@ -2473,6 +2524,9 @@ static AbvEntry frame_abvs[] = { ...@@ -2473,6 +2524,9 @@ static AbvEntry frame_abvs[] = {
{ "4cif", 704, 576, 0, 0 }, { "4cif", 704, 576, 0, 0 },
}; };
/**
* parses width and height out of string str.
*/
int parse_image_size(int *width_ptr, int *height_ptr, const char *str) int parse_image_size(int *width_ptr, int *height_ptr, const char *str)
{ {
int i; int i;
...@@ -2501,6 +2555,13 @@ int parse_image_size(int *width_ptr, int *height_ptr, const char *str) ...@@ -2501,6 +2555,13 @@ int parse_image_size(int *width_ptr, int *height_ptr, const char *str)
return 0; return 0;
} }
/**
* Converts frame rate from string to a fraction.
*
* First we try to get an exact integer or fractional frame rate.
* If this fails we convert the frame rate to a double and return
* an approximate fraction using the DEFAULT_FRAME_RATE_BASE.
*/
int parse_frame_rate(int *frame_rate, int *frame_rate_base, const char *arg) int parse_frame_rate(int *frame_rate, int *frame_rate_base, const char *arg)
{ {
int i; int i;
...@@ -2537,14 +2598,20 @@ int parse_frame_rate(int *frame_rate, int *frame_rate_base, const char *arg) ...@@ -2537,14 +2598,20 @@ int parse_frame_rate(int *frame_rate, int *frame_rate_base, const char *arg)
return 0; return 0;
} }
/* Syntax: /**
* Converts date string to number of seconds since Jan 1st, 1970.
*
* @code
* Syntax:
* - If not a duration: * - If not a duration:
* [{YYYY-MM-DD|YYYYMMDD}]{T| }{HH[:MM[:SS[.m...]]][Z]|HH[MM[SS[.m...]]][Z]} * [{YYYY-MM-DD|YYYYMMDD}]{T| }{HH[:MM[:SS[.m...]]][Z]|HH[MM[SS[.m...]]][Z]}
* Time is localtime unless Z is suffixed to the end. In this case GMT * Time is localtime unless Z is suffixed to the end. In this case GMT
* Return the date in micro seconds since 1970 * Return the date in micro seconds since 1970
* - If duration: *
* - If a duration:
* HH[:MM[:SS[.m...]]] * HH[:MM[:SS[.m...]]]
* S+[.m...] * S+[.m...]
* @endcode
*/ */
int64_t parse_date(const char *datestr, int duration) int64_t parse_date(const char *datestr, int duration)
{ {
...@@ -2654,8 +2721,12 @@ int64_t parse_date(const char *datestr, int duration) ...@@ -2654,8 +2721,12 @@ int64_t parse_date(const char *datestr, int duration)
return negative ? -t : t; return negative ? -t : t;
} }
/* syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done. Return /**
1 if found */ * Attempts to find a specific tag in a URL.
*
* syntax: '?tag1=val1&tag2=val2...'. Little URL decoding is done.
* Return 1 if found.
*/
int find_info_tag(char *arg, int arg_size, const char *tag1, const char *info) int find_info_tag(char *arg, int arg_size, const char *tag1, const char *info)
{ {
const char *p; const char *p;
...@@ -2695,9 +2766,12 @@ int find_info_tag(char *arg, int arg_size, const char *tag1, const char *info) ...@@ -2695,9 +2766,12 @@ int find_info_tag(char *arg, int arg_size, const char *tag1, const char *info)
return 0; return 0;
} }
/* Return in 'buf' the path with '%d' replaced by number. Also handles /**
the '%0nd' format where 'n' is the total number of digits and * Returns in 'buf' the path with '%d' replaced by number.
'%%'. Return 0 if OK, and -1 if format error */ *
* Also handles the '%0nd' format where 'n' is the total number
* of digits and '%%'. Return 0 if OK, and -1 if format error.
*/
int get_frame_filename(char *buf, int buf_size, int get_frame_filename(char *buf, int buf_size,
const char *path, int number) const char *path, int number)
{ {
...@@ -2887,7 +2961,8 @@ void url_split(char *proto, int proto_size, ...@@ -2887,7 +2961,8 @@ void url_split(char *proto, int proto_size,
} }
/** /**
* Set the pts for a given stream * Set the pts for a given stream.
*
* @param s stream * @param s stream
* @param pts_wrap_bits number of bits effectively used by the pts * @param pts_wrap_bits number of bits effectively used by the pts
* (used for wrap control, 33 is the value for MPEG) * (used for wrap control, 33 is the value for MPEG)
...@@ -2905,8 +2980,9 @@ void av_set_pts_info(AVStream *s, int pts_wrap_bits, ...@@ -2905,8 +2980,9 @@ void av_set_pts_info(AVStream *s, int pts_wrap_bits,
/* fraction handling */ /* fraction handling */
/** /**
* f = val + (num / den) + 0.5. 'num' is normalized so that it is such * f = val + (num / den) + 0.5.
* as 0 <= num < den. *
* 'num' is normalized so that it is such as 0 <= num < den.
* *
* @param f fractional number * @param f fractional number
* @param val integer value * @param val integer value
...@@ -2925,7 +3001,9 @@ void av_frac_init(AVFrac *f, int64_t val, int64_t num, int64_t den) ...@@ -2925,7 +3001,9 @@ void av_frac_init(AVFrac *f, int64_t val, int64_t num, int64_t den)
f->den = den; f->den = den;
} }
/* set f to (val + 0.5) */ /**
* Set f to (val + 0.5).
*/
void av_frac_set(AVFrac *f, int64_t val) void av_frac_set(AVFrac *f, int64_t val)
{ {
f->val = val; f->val = val;
...@@ -2933,7 +3011,7 @@ void av_frac_set(AVFrac *f, int64_t val) ...@@ -2933,7 +3011,7 @@ void av_frac_set(AVFrac *f, int64_t val)
} }
/** /**
* Fractionnal addition to f: f = f + (incr / f->den) * Fractionnal addition to f: f = f + (incr / f->den).
* *
* @param f fractional number * @param f fractional number
* @param incr increment, can be positive or negative * @param incr increment, can be positive or negative
...@@ -2972,7 +3050,9 @@ void av_register_image_format(AVImageFormat *img_fmt) ...@@ -2972,7 +3050,9 @@ void av_register_image_format(AVImageFormat *img_fmt)
img_fmt->next = NULL; img_fmt->next = NULL;
} }
/* guess image format */ /**
* Guesses image format based on data in the image.
*/
AVImageFormat *av_probe_image_format(AVProbeData *pd) AVImageFormat *av_probe_image_format(AVProbeData *pd)
{ {
AVImageFormat *fmt1, *fmt; AVImageFormat *fmt1, *fmt;
...@@ -2992,6 +3072,9 @@ AVImageFormat *av_probe_image_format(AVProbeData *pd) ...@@ -2992,6 +3072,9 @@ AVImageFormat *av_probe_image_format(AVProbeData *pd)
return fmt; return fmt;
} }
/**
* Guesses image format based on file name extensions.
*/
AVImageFormat *guess_image_format(const char *filename) AVImageFormat *guess_image_format(const char *filename)
{ {
AVImageFormat *fmt1; AVImageFormat *fmt1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment