|
|
|
|
#ifndef AVFORMAT_H
|
|
|
|
|
#define AVFORMAT_H
|
|
|
|
|
|
|
|
|
|
/*************************************************
|
|
|
|
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>ý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD>ʹ<EFBFBD>õĺꡢ<EFBFBD><EFBFBD><EFBFBD>ݽṹ<EFBFBD>ͺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
**ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD>ꡢ<EFBFBD><EFBFBD><EFBFBD>ݽṹ<EFBFBD>ͺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
|
|
|
|
*************************************************/
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
|
|
|
|
|
extern "C"
|
|
|
|
|
{
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
/* <EFBFBD>汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
#define LIBAVFORMAT_VERSION_INT ((50<<16)+(4<<8)+0)
|
|
|
|
|
#define LIBAVFORMAT_VERSION 50.4.0
|
|
|
|
|
#define LIBAVFORMAT_BUILD LIBAVFORMAT_VERSION_INT
|
|
|
|
|
|
|
|
|
|
#define LIBAVFORMAT_IDENT "Lavf" AV_STRINGIFY(LIBAVFORMAT_VERSION)
|
|
|
|
|
|
|
|
|
|
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> */
|
|
|
|
|
#include "../libavcodec/avcodec.h"
|
|
|
|
|
|
|
|
|
|
/* io<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> */
|
|
|
|
|
#include "avio.h"
|
|
|
|
|
|
|
|
|
|
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>붨<EFBFBD><EFBFBD> */
|
|
|
|
|
#define AVERROR_UNKNOWN (-1) // unknown error
|
|
|
|
|
#define AVERROR_IO (-2) // i/o error
|
|
|
|
|
#define AVERROR_NUMEXPECTED (-3) // number syntax expected in filename
|
|
|
|
|
#define AVERROR_INVALIDDATA (-4) // invalid data found
|
|
|
|
|
#define AVERROR_NOMEM (-5) // not enough memory
|
|
|
|
|
#define AVERROR_NOFMT (-6) // unknown format
|
|
|
|
|
#define AVERROR_NOTSUPP (-7) // operation not supported
|
|
|
|
|
|
|
|
|
|
/* <EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת */
|
|
|
|
|
#define AVSEEK_FLAG_BACKWARD 1 // seek backward
|
|
|
|
|
#define AVSEEK_FLAG_BYTE 2 // seeking based on position in bytes
|
|
|
|
|
#define AVSEEK_FLAG_ANY 4 // seek to any frame, even non keyframes
|
|
|
|
|
|
|
|
|
|
#define AVFMT_NOFILE 0x0001 // no file should be opened
|
|
|
|
|
|
|
|
|
|
#define PKT_FLAG_KEY 0x0001
|
|
|
|
|
|
|
|
|
|
#define AVINDEX_KEYFRAME 0x0001
|
|
|
|
|
|
|
|
|
|
#define AVPROBE_SCORE_MAX 100
|
|
|
|
|
|
|
|
|
|
#define MAX_STREAMS 20
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
** <EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ֡<EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
|
|
|
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
typedef struct AVPacket
|
|
|
|
|
{
|
|
|
|
|
int64_t pts; // presentation time stamp in time_base units <EFBFBD><EFBFBD>ʾʱ<EFBFBD>䣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾʱ<EFBFBD><EFBFBD>
|
|
|
|
|
int64_t dts; // decompression time stamp in time_base units <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǻ<EFBFBD><EFBFBD><EFBFBD>Ҫ
|
|
|
|
|
int64_t pos; // byte position in stream, -1 if unknown
|
|
|
|
|
uint8_t *data; // ʵ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|
|
|
|
int size; // ʵ<EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С
|
|
|
|
|
int stream_index; // <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
|
|
|
|
|
int flags; //<EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD>һЩ<EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>ǹؼ<EFBFBD>֡<EFBFBD>ȡ<EFBFBD>
|
|
|
|
|
void(*destruct)(struct AVPacket*); // <EFBFBD><EFBFBD><EFBFBD>ٺ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
} AVPacket;
|
|
|
|
|
|
|
|
|
|
/* <EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>б<EFBFBD> */
|
|
|
|
|
typedef struct AVPacketList
|
|
|
|
|
{
|
|
|
|
|
AVPacket pkt;
|
|
|
|
|
struct AVPacketList *next;
|
|
|
|
|
} AVPacketList;
|
|
|
|
|
|
|
|
|
|
/* <EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
static inline void av_destruct_packet(AVPacket *pkt)
|
|
|
|
|
{
|
|
|
|
|
av_free(pkt->data);
|
|
|
|
|
pkt->data = NULL;
|
|
|
|
|
pkt->size = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* <EFBFBD>ͷ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD> */
|
|
|
|
|
static inline void av_free_packet(AVPacket *pkt)
|
|
|
|
|
{
|
|
|
|
|
if (pkt && pkt->destruct)
|
|
|
|
|
pkt->destruct(pkt);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
** <EFBFBD><EFBFBD>ȡһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>
|
|
|
|
|
** <EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
|
|
|
|
|
** ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ƫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĴ<EFBFBD>СҲȷ<EFBFBD><EFBFBD>
|
|
|
|
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>з<EFBFBD><EFBFBD>䡣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һЩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
static inline int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size)
|
|
|
|
|
{
|
|
|
|
|
int ret;
|
|
|
|
|
unsigned char *data;
|
|
|
|
|
if ((unsigned)size > (unsigned)size + FF_INPUT_BUFFER_PADDING_SIZE)
|
|
|
|
|
return AVERROR_NOMEM;
|
|
|
|
|
|
|
|
|
|
// <EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
|
|
|
|
|
if (!data)
|
|
|
|
|
return AVERROR_NOMEM;
|
|
|
|
|
|
|
|
|
|
memset(data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
|
|
|
|
|
|
|
|
|
|
pkt->pts = AV_NOPTS_VALUE;
|
|
|
|
|
pkt->dts = AV_NOPTS_VALUE;
|
|
|
|
|
pkt->pos = - 1;
|
|
|
|
|
pkt->flags = 0;
|
|
|
|
|
pkt->stream_index = 0;
|
|
|
|
|
pkt->data = data;
|
|
|
|
|
pkt->size = size;
|
|
|
|
|
pkt->destruct = av_destruct_packet;
|
|
|
|
|
|
|
|
|
|
pkt->pos = url_ftell(s);
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD>ȡʵ<EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ret = url_fread(s, pkt->data, size);
|
|
|
|
|
if (ret <= 0)
|
|
|
|
|
av_free_packet(pkt);
|
|
|
|
|
else
|
|
|
|
|
pkt->size = ret;
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
** ̽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
** Ϊʶ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƥ<EFBFBD><EFBFBD> ffplay ֧<EFBFBD>ֵ<EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
** <EFBFBD>ýṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>ʹ<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD><EFBFBD>Ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
typedef struct AVProbeData
|
|
|
|
|
{
|
|
|
|
|
// <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
const char *filename;
|
|
|
|
|
// ̽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
unsigned char *buf;
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int buf_size;
|
|
|
|
|
} AVProbeData;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
** <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD>flags <EFBFBD><EFBFBD> size λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>˽<EFBFBD>ʡ<EFBFBD>ڴ<EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
typedef struct AVIndexEntry
|
|
|
|
|
{
|
|
|
|
|
int64_t pos;
|
|
|
|
|
int64_t timestamp;
|
|
|
|
|
int flags: 2;
|
|
|
|
|
int size: 30; //yeah trying to keep the size of this small to reduce memory requirements (its 24 vs 32 byte due to possible 8byte align)
|
|
|
|
|
} AVIndexEntry;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>
|
|
|
|
|
** AVStream <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>ʾһ<EFBFBD><EFBFBD>ý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ý<EFBFBD><EFBFBD>һЩͨ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><EFBFBD>Էֳ<EFBFBD>AVI<EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>mp4<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
typedef struct AVStream
|
|
|
|
|
{
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
AVCodecContext *actx; // codec context, change from AVCodecContext *codec;
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void *priv_data; // AVIStream <EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AVIStream
|
|
|
|
|
|
|
|
|
|
// ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
AVRational time_base; // <EFBFBD><EFBFBD> av_set_pts_info()<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>粻֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD>ҵ<EFBFBD>ʱ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>
|
|
|
|
|
AVIndexEntry *index_entries; // only used if the format does not support seeking natively
|
|
|
|
|
int nb_index_entries;
|
|
|
|
|
int index_entries_allocated_size;
|
|
|
|
|
|
|
|
|
|
double frame_last_delay; // ֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD>
|
|
|
|
|
} AVStream;
|
|
|
|
|
|
|
|
|
|
/* <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
typedef struct AVFormatParameters
|
|
|
|
|
{
|
|
|
|
|
int dbg; //only for debug ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>־
|
|
|
|
|
} AVFormatParameters;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>Ľṹ<EFBFBD><EFBFBD>ָ<EFBFBD>룩
|
|
|
|
|
** AVInputFormat <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>ע<EFBFBD>ⲻ<EFBFBD><EFBFBD>AVI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>AV Input<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><EFBFBD>ܺ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
** <EFBFBD>ڳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
typedef struct AVInputFormat
|
|
|
|
|
{
|
|
|
|
|
// <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
const char *name;
|
|
|
|
|
|
|
|
|
|
int priv_data_size;
|
|
|
|
|
|
|
|
|
|
// ̽<EFBFBD>⺯<EFBFBD><EFBFBD>
|
|
|
|
|
int(*read_probe)(AVProbeData*);
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD>ȡͷ<EFBFBD><EFBFBD>
|
|
|
|
|
int(*read_header)(struct AVFormatContext *, AVFormatParameters *ap);
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD>ȡһ֡<EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int(*read_packet)(struct AVFormatContext *, AVPacket *pkt);
|
|
|
|
|
|
|
|
|
|
// <EFBFBD>ر<EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
int(*read_close)(struct AVFormatContext*);
|
|
|
|
|
|
|
|
|
|
const char *extensions; // <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>ĸ<EFBFBD>ʽ
|
|
|
|
|
struct AVInputFormat *next;
|
|
|
|
|
|
|
|
|
|
} AVInputFormat;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
** AVFormatContext <EFBFBD>ṹ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĵ<EFBFBD>ǰ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽʹ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD>
|
|
|
|
|
** <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
typedef struct AVFormatContext // format I/O context
|
|
|
|
|
{
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>ĸ<EFBFBD>ʽ<EFBFBD><EFBFBD>AVFormatContext<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>AVInputFormat<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
struct AVInputFormat *iformat;
|
|
|
|
|
|
|
|
|
|
void *priv_data;
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
|
|
|
|
|
ByteIOContext pb;
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int nb_streams;
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
AVStream *streams[MAX_STREAMS];
|
|
|
|
|
|
|
|
|
|
} AVFormatContext;
|
|
|
|
|
|
|
|
|
|
int avidec_init(void);
|
|
|
|
|
|
|
|
|
|
void av_register_input_format(AVInputFormat *format);
|
|
|
|
|
|
|
|
|
|
void av_register_all(void);
|
|
|
|
|
|
|
|
|
|
AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened);
|
|
|
|
|
int match_ext(const char *filename, const char *extensions);
|
|
|
|
|
|
|
|
|
|
int av_open_input_stream(AVFormatContext **ic_ptr, ByteIOContext *pb, const char *filename,
|
|
|
|
|
AVInputFormat *fmt, AVFormatParameters *ap);
|
|
|
|
|
|
|
|
|
|
int av_open_input_file(AVFormatContext **ic_ptr, const char *filename, AVInputFormat *fmt,
|
|
|
|
|
int buf_size, AVFormatParameters *ap);
|
|
|
|
|
|
|
|
|
|
int av_read_frame(AVFormatContext *s, AVPacket *pkt);
|
|
|
|
|
int av_read_packet(AVFormatContext *s, AVPacket *pkt);
|
|
|
|
|
void av_close_input_file(AVFormatContext *s);
|
|
|
|
|
AVStream *av_new_stream(AVFormatContext *s, int id);
|
|
|
|
|
void av_set_pts_info(AVStream *s, int pts_wrap_bits, int pts_num, int pts_den);
|
|
|
|
|
|
|
|
|
|
int av_index_search_timestamp(AVStream *st, int64_t timestamp, int flags);
|
|
|
|
|
int av_add_index_entry(AVStream *st, int64_t pos, int64_t timestamp, int size, int distance, int flags);
|
|
|
|
|
|
|
|
|
|
int strstart(const char *str, const char *val, const char **ptr);
|
|
|
|
|
void pstrcpy(char *buf, int buf_size, const char *str);
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif
|