mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
converted to new API
Originally committed as revision 547 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
db7f1f95ac
commit
c9a65ca8c3
@ -5,10 +5,13 @@ PWD=$(shell pwd)
|
|||||||
|
|
||||||
CFLAGS= $(OPTFLAGS) -Wall -g -I.. -I$(SRC_PATH) -I$(SRC_PATH)/libavcodec -DHAVE_AV_CONFIG_H
|
CFLAGS= $(OPTFLAGS) -Wall -g -I.. -I$(SRC_PATH) -I$(SRC_PATH)/libavcodec -DHAVE_AV_CONFIG_H
|
||||||
|
|
||||||
OBJS= rm.o mpeg.o asf.o avienc.o jpeg.o swf.o wav.o raw.o \
|
OBJS= utils.o
|
||||||
avidec.o ffm.o \
|
|
||||||
avio.o aviobuf.o utils.o \
|
# mux and demuxes
|
||||||
file.o img.o au.o gif.o mov.o crc.o
|
OBJS+=mpeg.o mpegts.o ffm.o crc.o img.o raw.o rm.o asf.o \
|
||||||
|
avienc.o avidec.o wav.o swf.o au.o gif.o mov.o jpeg.o
|
||||||
|
# file I/O
|
||||||
|
OBJS+= avio.o aviobuf.o file.o
|
||||||
|
|
||||||
ifeq ($(CONFIG_GRAB),yes)
|
ifeq ($(CONFIG_GRAB),yes)
|
||||||
OBJS+= grab.o audio.o
|
OBJS+= grab.o audio.o
|
||||||
|
65
libav/asf.c
65
libav/asf.c
@ -420,12 +420,7 @@ static int asf_write_header1(AVFormatContext *s, INT64 file_size, INT64 data_chu
|
|||||||
|
|
||||||
static int asf_write_header(AVFormatContext *s)
|
static int asf_write_header(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
ASFContext *asf;
|
ASFContext *asf = s->priv_data;
|
||||||
|
|
||||||
asf = av_mallocz(sizeof(ASFContext));
|
|
||||||
if (!asf)
|
|
||||||
return -1;
|
|
||||||
s->priv_data = asf;
|
|
||||||
|
|
||||||
asf->packet_size = PACKET_SIZE;
|
asf->packet_size = PACKET_SIZE;
|
||||||
asf->nb_packets = 0;
|
asf->nb_packets = 0;
|
||||||
@ -614,8 +609,6 @@ static int asf_write_trailer(AVFormatContext *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
put_flush_packet(&s->pb);
|
put_flush_packet(&s->pb);
|
||||||
|
|
||||||
av_free(asf);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -679,9 +672,34 @@ static void get_str16_nolen(ByteIOContext *pb, int len, char *buf, int buf_size)
|
|||||||
*q = '\0';
|
*q = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int asf_probe(AVProbeData *pd)
|
||||||
|
{
|
||||||
|
GUID g;
|
||||||
|
const unsigned char *p;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* check file header */
|
||||||
|
if (pd->buf_size <= 32)
|
||||||
|
return 0;
|
||||||
|
p = pd->buf;
|
||||||
|
g.v1 = p[0] | (p[1] << 8) | (p[2] << 16) | (p[3] << 24);
|
||||||
|
p += 4;
|
||||||
|
g.v2 = p[0] | (p[1] << 8);
|
||||||
|
p += 2;
|
||||||
|
g.v3 = p[0] | (p[1] << 8);
|
||||||
|
p += 2;
|
||||||
|
for(i=0;i<8;i++)
|
||||||
|
g.v4[i] = *p++;
|
||||||
|
|
||||||
|
if (!memcmp(&g, &asf_header, sizeof(GUID)))
|
||||||
|
return AVPROBE_SCORE_MAX;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||||
{
|
{
|
||||||
ASFContext *asf;
|
ASFContext *asf = s->priv_data;
|
||||||
GUID g;
|
GUID g;
|
||||||
ByteIOContext *pb = &s->pb;
|
ByteIOContext *pb = &s->pb;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
@ -689,11 +707,6 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
int size, i, bps;
|
int size, i, bps;
|
||||||
INT64 gsize;
|
INT64 gsize;
|
||||||
|
|
||||||
asf = av_mallocz(sizeof(ASFContext));
|
|
||||||
if (!asf)
|
|
||||||
return -1;
|
|
||||||
s->priv_data = asf;
|
|
||||||
|
|
||||||
get_guid(pb, &g);
|
get_guid(pb, &g);
|
||||||
if (memcmp(&g, &asf_header, sizeof(GUID)))
|
if (memcmp(&g, &asf_header, sizeof(GUID)))
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -1015,11 +1028,22 @@ static int asf_read_close(AVFormatContext *s)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat asf_format = {
|
AVInputFormat asf_iformat = {
|
||||||
|
"asf",
|
||||||
|
"asf format",
|
||||||
|
sizeof(ASFContext),
|
||||||
|
asf_probe,
|
||||||
|
asf_read_header,
|
||||||
|
asf_read_packet,
|
||||||
|
asf_read_close,
|
||||||
|
};
|
||||||
|
|
||||||
|
AVOutputFormat asf_oformat = {
|
||||||
"asf",
|
"asf",
|
||||||
"asf format",
|
"asf format",
|
||||||
"application/octet-stream",
|
"application/octet-stream",
|
||||||
"asf,wmv",
|
"asf,wmv",
|
||||||
|
sizeof(ASFContext),
|
||||||
#ifdef CONFIG_MP3LAME
|
#ifdef CONFIG_MP3LAME
|
||||||
CODEC_ID_MP3LAME,
|
CODEC_ID_MP3LAME,
|
||||||
#else
|
#else
|
||||||
@ -1029,8 +1053,11 @@ AVFormat asf_format = {
|
|||||||
asf_write_header,
|
asf_write_header,
|
||||||
asf_write_packet,
|
asf_write_packet,
|
||||||
asf_write_trailer,
|
asf_write_trailer,
|
||||||
|
|
||||||
asf_read_header,
|
|
||||||
asf_read_packet,
|
|
||||||
asf_read_close,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int asf_init(void)
|
||||||
|
{
|
||||||
|
av_register_input_format(&asf_iformat);
|
||||||
|
av_register_output_format(&asf_oformat);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
36
libav/au.c
36
libav/au.c
@ -99,6 +99,18 @@ static int au_write_trailer(AVFormatContext *s)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int au_probe(AVProbeData *p)
|
||||||
|
{
|
||||||
|
/* check file header */
|
||||||
|
if (p->buf_size <= 24)
|
||||||
|
return 0;
|
||||||
|
if (p->buf[0] == '.' && p->buf[1] == 's' &&
|
||||||
|
p->buf[2] == 'n' && p->buf[3] == 'd')
|
||||||
|
return AVPROBE_SCORE_MAX;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* au input */
|
/* au input */
|
||||||
static int au_read_header(AVFormatContext *s,
|
static int au_read_header(AVFormatContext *s,
|
||||||
AVFormatParameters *ap)
|
AVFormatParameters *ap)
|
||||||
@ -175,18 +187,32 @@ static int au_read_close(AVFormatContext *s)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat au_format = {
|
static AVInputFormat au_iformat = {
|
||||||
|
"au",
|
||||||
|
"SUN AU Format",
|
||||||
|
0,
|
||||||
|
au_probe,
|
||||||
|
au_read_header,
|
||||||
|
au_read_packet,
|
||||||
|
au_read_close,
|
||||||
|
};
|
||||||
|
|
||||||
|
static AVOutputFormat au_oformat = {
|
||||||
"au",
|
"au",
|
||||||
"SUN AU Format",
|
"SUN AU Format",
|
||||||
"audio/basic",
|
"audio/basic",
|
||||||
"au",
|
"au",
|
||||||
|
0,
|
||||||
CODEC_ID_PCM_S16BE,
|
CODEC_ID_PCM_S16BE,
|
||||||
CODEC_ID_NONE,
|
CODEC_ID_NONE,
|
||||||
au_write_header,
|
au_write_header,
|
||||||
au_write_packet,
|
au_write_packet,
|
||||||
au_write_trailer,
|
au_write_trailer,
|
||||||
|
|
||||||
au_read_header,
|
|
||||||
au_read_packet,
|
|
||||||
au_read_close,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int au_init(void)
|
||||||
|
{
|
||||||
|
av_register_input_format(&au_iformat);
|
||||||
|
av_register_output_format(&au_oformat);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -147,21 +147,15 @@ static int audio_close(AudioData *s)
|
|||||||
/* sound output support */
|
/* sound output support */
|
||||||
static int audio_write_header(AVFormatContext *s1)
|
static int audio_write_header(AVFormatContext *s1)
|
||||||
{
|
{
|
||||||
AudioData *s;
|
AudioData *s = s1->priv_data;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
s = av_mallocz(sizeof(AudioData));
|
|
||||||
if (!s)
|
|
||||||
return -ENOMEM;
|
|
||||||
s1->priv_data = s;
|
|
||||||
|
|
||||||
st = s1->streams[0];
|
st = s1->streams[0];
|
||||||
s->sample_rate = st->codec.sample_rate;
|
s->sample_rate = st->codec.sample_rate;
|
||||||
s->channels = st->codec.channels;
|
s->channels = st->codec.channels;
|
||||||
ret = audio_open(s, 1);
|
ret = audio_open(s, 1);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
av_free(s);
|
|
||||||
return -EIO;
|
return -EIO;
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
@ -201,7 +195,6 @@ static int audio_write_trailer(AVFormatContext *s1)
|
|||||||
AudioData *s = s1->priv_data;
|
AudioData *s = s1->priv_data;
|
||||||
|
|
||||||
audio_close(s);
|
audio_close(s);
|
||||||
av_free(s);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,31 +202,23 @@ static int audio_write_trailer(AVFormatContext *s1)
|
|||||||
|
|
||||||
static int audio_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
static int audio_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
||||||
{
|
{
|
||||||
AudioData *s;
|
AudioData *s = s1->priv_data;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
if (!ap || ap->sample_rate <= 0 || ap->channels <= 0)
|
if (!ap || ap->sample_rate <= 0 || ap->channels <= 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
s = av_mallocz(sizeof(AudioData));
|
st = av_new_stream(s1, 0);
|
||||||
if (!s)
|
|
||||||
return -ENOMEM;
|
|
||||||
st = av_mallocz(sizeof(AVStream));
|
|
||||||
if (!st) {
|
if (!st) {
|
||||||
av_free(s);
|
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
s1->priv_data = s;
|
|
||||||
s1->nb_streams = 1;
|
|
||||||
s1->streams[0] = st;
|
|
||||||
s->sample_rate = ap->sample_rate;
|
s->sample_rate = ap->sample_rate;
|
||||||
s->channels = ap->channels;
|
s->channels = ap->channels;
|
||||||
|
|
||||||
ret = audio_open(s, 0);
|
ret = audio_open(s, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
av_free(st);
|
av_free(st);
|
||||||
av_free(s);
|
|
||||||
return -EIO;
|
return -EIO;
|
||||||
} else {
|
} else {
|
||||||
/* take real parameters */
|
/* take real parameters */
|
||||||
@ -284,15 +269,26 @@ static int audio_read_close(AVFormatContext *s1)
|
|||||||
AudioData *s = s1->priv_data;
|
AudioData *s = s1->priv_data;
|
||||||
|
|
||||||
audio_close(s);
|
audio_close(s);
|
||||||
av_free(s);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat audio_device_format = {
|
AVInputFormat audio_in_format = {
|
||||||
|
"audio_device",
|
||||||
|
"audio grab and output",
|
||||||
|
sizeof(AudioData),
|
||||||
|
NULL,
|
||||||
|
audio_read_header,
|
||||||
|
audio_read_packet,
|
||||||
|
audio_read_close,
|
||||||
|
flags: AVFMT_NOFILE,
|
||||||
|
};
|
||||||
|
|
||||||
|
AVOutputFormat audio_out_format = {
|
||||||
"audio_device",
|
"audio_device",
|
||||||
"audio grab and output",
|
"audio grab and output",
|
||||||
"",
|
"",
|
||||||
"",
|
"",
|
||||||
|
sizeof(AudioData),
|
||||||
/* XXX: we make the assumption that the soundcard accepts this format */
|
/* XXX: we make the assumption that the soundcard accepts this format */
|
||||||
/* XXX: find better solution with "preinit" method, needed also in
|
/* XXX: find better solution with "preinit" method, needed also in
|
||||||
other formats */
|
other formats */
|
||||||
@ -305,10 +301,12 @@ AVFormat audio_device_format = {
|
|||||||
audio_write_header,
|
audio_write_header,
|
||||||
audio_write_packet,
|
audio_write_packet,
|
||||||
audio_write_trailer,
|
audio_write_trailer,
|
||||||
|
flags: AVFMT_NOFILE,
|
||||||
audio_read_header,
|
|
||||||
audio_read_packet,
|
|
||||||
audio_read_close,
|
|
||||||
NULL,
|
|
||||||
AVFMT_NOFILE,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int audio_init(void)
|
||||||
|
{
|
||||||
|
av_register_input_format(&audio_in_format);
|
||||||
|
av_register_output_format(&audio_out_format);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -23,8 +23,3 @@ extern CodecTag codec_wav_tags[];
|
|||||||
|
|
||||||
unsigned int codec_get_tag(const CodecTag *tags, int id);
|
unsigned int codec_get_tag(const CodecTag *tags, int id);
|
||||||
int codec_get_id(const CodecTag *tags, unsigned int tag);
|
int codec_get_id(const CodecTag *tags, unsigned int tag);
|
||||||
|
|
||||||
/* avidec.c */
|
|
||||||
int avi_read_header(AVFormatContext *s, AVFormatParameters *ap);
|
|
||||||
int avi_read_packet(AVFormatContext *s, AVPacket *pkt);
|
|
||||||
int avi_read_close(AVFormatContext *s);
|
|
||||||
|
@ -47,19 +47,13 @@ void print_tag(const char *str, unsigned int tag, int size)
|
|||||||
|
|
||||||
int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||||
{
|
{
|
||||||
AVIContext *avi;
|
AVIContext *avi = s->priv_data;
|
||||||
ByteIOContext *pb = &s->pb;
|
ByteIOContext *pb = &s->pb;
|
||||||
UINT32 tag, tag1;
|
UINT32 tag, tag1;
|
||||||
int codec_type, stream_index, size, frame_period, bit_rate;
|
int codec_type, stream_index, size, frame_period, bit_rate;
|
||||||
int i, bps;
|
int i, bps;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
|
|
||||||
avi = av_malloc(sizeof(AVIContext));
|
|
||||||
if (!avi)
|
|
||||||
return -1;
|
|
||||||
memset(avi, 0, sizeof(AVIContext));
|
|
||||||
s->priv_data = avi;
|
|
||||||
|
|
||||||
/* check RIFF header */
|
/* check RIFF header */
|
||||||
tag = get_le32(pb);
|
tag = get_le32(pb);
|
||||||
|
|
||||||
@ -246,7 +240,35 @@ int avi_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
|
|
||||||
int avi_read_close(AVFormatContext *s)
|
int avi_read_close(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
AVIContext *avi = s->priv_data;
|
return 0;
|
||||||
av_free(avi);
|
}
|
||||||
|
|
||||||
|
static int avi_probe(AVProbeData *p)
|
||||||
|
{
|
||||||
|
/* check file header */
|
||||||
|
if (p->buf_size <= 32)
|
||||||
|
return 0;
|
||||||
|
if (p->buf[0] == 'R' && p->buf[1] == 'I' &&
|
||||||
|
p->buf[2] == 'F' && p->buf[3] == 'F' &&
|
||||||
|
p->buf[8] == 'A' && p->buf[9] == 'V' &&
|
||||||
|
p->buf[10] == 'I' && p->buf[11] == ' ')
|
||||||
|
return AVPROBE_SCORE_MAX;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static AVInputFormat avi_iformat = {
|
||||||
|
"avi",
|
||||||
|
"avi format",
|
||||||
|
sizeof(AVIContext),
|
||||||
|
avi_probe,
|
||||||
|
avi_read_header,
|
||||||
|
avi_read_packet,
|
||||||
|
avi_read_close,
|
||||||
|
};
|
||||||
|
|
||||||
|
int avidec_init(void)
|
||||||
|
{
|
||||||
|
av_register_input_format(&avi_iformat);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -143,18 +143,12 @@ void parse_specific_params(AVCodecContext *stream, int *au_byterate, int *au_ssi
|
|||||||
|
|
||||||
static int avi_write_header(AVFormatContext *s)
|
static int avi_write_header(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
AVIContext *avi;
|
AVIContext *avi = s->priv_data;
|
||||||
ByteIOContext *pb = &s->pb;
|
ByteIOContext *pb = &s->pb;
|
||||||
int bitrate, n, i, nb_frames, au_byterate, au_ssize, au_scale;
|
int bitrate, n, i, nb_frames, au_byterate, au_ssize, au_scale;
|
||||||
AVCodecContext *stream, *video_enc;
|
AVCodecContext *stream, *video_enc;
|
||||||
offset_t list1, list2, strh, strf;
|
offset_t list1, list2, strh, strf;
|
||||||
|
|
||||||
avi = av_malloc(sizeof(AVIContext));
|
|
||||||
if (!avi)
|
|
||||||
return -1;
|
|
||||||
memset(avi, 0, sizeof(AVIContext));
|
|
||||||
s->priv_data = avi;
|
|
||||||
|
|
||||||
put_tag(pb, "RIFF");
|
put_tag(pb, "RIFF");
|
||||||
put_le32(pb, 0); /* file length */
|
put_le32(pb, 0); /* file length */
|
||||||
put_tag(pb, "AVI ");
|
put_tag(pb, "AVI ");
|
||||||
@ -388,23 +382,24 @@ static int avi_write_trailer(AVFormatContext *s)
|
|||||||
url_fseek(pb, file_size, SEEK_SET);
|
url_fseek(pb, file_size, SEEK_SET);
|
||||||
}
|
}
|
||||||
put_flush_packet(pb);
|
put_flush_packet(pb);
|
||||||
|
|
||||||
av_free(avi);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat avi_format = {
|
static AVOutputFormat avi_oformat = {
|
||||||
"avi",
|
"avi",
|
||||||
"avi format",
|
"avi format",
|
||||||
"video/x-msvideo",
|
"video/x-msvideo",
|
||||||
"avi",
|
"avi",
|
||||||
|
sizeof(AVIContext),
|
||||||
CODEC_ID_MP2,
|
CODEC_ID_MP2,
|
||||||
CODEC_ID_MSMPEG4,
|
CODEC_ID_MSMPEG4,
|
||||||
avi_write_header,
|
avi_write_header,
|
||||||
avi_write_packet,
|
avi_write_packet,
|
||||||
avi_write_trailer,
|
avi_write_trailer,
|
||||||
|
|
||||||
avi_read_header,
|
|
||||||
avi_read_packet,
|
|
||||||
avi_read_close,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int avienc_init(void)
|
||||||
|
{
|
||||||
|
av_register_output_format(&avi_oformat);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -105,14 +105,6 @@ offset_t url_seek(URLContext *h, offset_t pos, int whence)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int url_getformat(URLContext *h, URLFormat *f)
|
|
||||||
{
|
|
||||||
memset(f, 0, sizeof(*f));
|
|
||||||
if (!h->prot->url_getformat)
|
|
||||||
return -ENODATA;
|
|
||||||
return h->prot->url_getformat(h, f);
|
|
||||||
}
|
|
||||||
|
|
||||||
int url_close(URLContext *h)
|
int url_close(URLContext *h)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
14
libav/avio.h
14
libav/avio.h
@ -12,16 +12,6 @@ struct URLContext {
|
|||||||
void *priv_data;
|
void *priv_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct URLFormat {
|
|
||||||
char format_name[32];
|
|
||||||
int sample_rate;
|
|
||||||
int frame_rate;
|
|
||||||
int channels;
|
|
||||||
int height;
|
|
||||||
int width;
|
|
||||||
enum PixelFormat pix_fmt;
|
|
||||||
} URLFormat;
|
|
||||||
|
|
||||||
typedef struct URLContext URLContext;
|
typedef struct URLContext URLContext;
|
||||||
|
|
||||||
typedef struct URLPollEntry {
|
typedef struct URLPollEntry {
|
||||||
@ -36,7 +26,6 @@ int url_open(URLContext **h, const char *filename, int flags);
|
|||||||
int url_read(URLContext *h, unsigned char *buf, int size);
|
int url_read(URLContext *h, unsigned char *buf, int size);
|
||||||
int url_write(URLContext *h, unsigned char *buf, int size);
|
int url_write(URLContext *h, unsigned char *buf, int size);
|
||||||
offset_t url_seek(URLContext *h, offset_t pos, int whence);
|
offset_t url_seek(URLContext *h, offset_t pos, int whence);
|
||||||
int url_getformat(URLContext *h, URLFormat *f);
|
|
||||||
int url_close(URLContext *h);
|
int url_close(URLContext *h);
|
||||||
int url_exist(const char *filename);
|
int url_exist(const char *filename);
|
||||||
offset_t url_filesize(URLContext *h);
|
offset_t url_filesize(URLContext *h);
|
||||||
@ -50,9 +39,6 @@ typedef struct URLProtocol {
|
|||||||
int (*url_write)(URLContext *h, unsigned char *buf, int size);
|
int (*url_write)(URLContext *h, unsigned char *buf, int size);
|
||||||
offset_t (*url_seek)(URLContext *h, offset_t pos, int whence);
|
offset_t (*url_seek)(URLContext *h, offset_t pos, int whence);
|
||||||
int (*url_close)(URLContext *h);
|
int (*url_close)(URLContext *h);
|
||||||
/* get precise information about the format, if available. return
|
|
||||||
-ENODATA if not available */
|
|
||||||
int (*url_getformat)(URLContext *h, URLFormat *f);
|
|
||||||
struct URLProtocol *next;
|
struct URLProtocol *next;
|
||||||
} URLProtocol;
|
} URLProtocol;
|
||||||
|
|
||||||
|
19
libav/crc.c
19
libav/crc.c
@ -61,15 +61,10 @@ typedef struct CRCState {
|
|||||||
UINT32 crcval;
|
UINT32 crcval;
|
||||||
} CRCState;
|
} CRCState;
|
||||||
|
|
||||||
/* simple formats */
|
|
||||||
static int crc_write_header(struct AVFormatContext *s)
|
static int crc_write_header(struct AVFormatContext *s)
|
||||||
{
|
{
|
||||||
CRCState *crc;
|
CRCState *crc = s->priv_data;
|
||||||
crc = av_malloc(sizeof(CRCState));
|
|
||||||
if (!crc)
|
|
||||||
return -1;
|
|
||||||
s->priv_data = crc;
|
|
||||||
|
|
||||||
/* init CRC */
|
/* init CRC */
|
||||||
crc->crcval = adler32(0, NULL, 0);
|
crc->crcval = adler32(0, NULL, 0);
|
||||||
|
|
||||||
@ -93,18 +88,24 @@ static int crc_write_trailer(struct AVFormatContext *s)
|
|||||||
snprintf(buf, sizeof(buf), "CRC=%08x\n", crc->crcval);
|
snprintf(buf, sizeof(buf), "CRC=%08x\n", crc->crcval);
|
||||||
put_buffer(&s->pb, buf, strlen(buf));
|
put_buffer(&s->pb, buf, strlen(buf));
|
||||||
put_flush_packet(&s->pb);
|
put_flush_packet(&s->pb);
|
||||||
av_free(crc);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat crc_format = {
|
AVOutputFormat crc_format = {
|
||||||
"crc",
|
"crc",
|
||||||
"crc testing format",
|
"crc testing format",
|
||||||
NULL,
|
NULL,
|
||||||
"",
|
"",
|
||||||
|
sizeof(CRCState),
|
||||||
CODEC_ID_PCM_S16LE,
|
CODEC_ID_PCM_S16LE,
|
||||||
CODEC_ID_RAWVIDEO,
|
CODEC_ID_RAWVIDEO,
|
||||||
crc_write_header,
|
crc_write_header,
|
||||||
crc_write_packet,
|
crc_write_packet,
|
||||||
crc_write_trailer,
|
crc_write_trailer,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int crc_init(void)
|
||||||
|
{
|
||||||
|
av_register_output_format(&crc_format);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
53
libav/ffm.c
53
libav/ffm.c
@ -51,6 +51,9 @@ typedef struct FFMContext {
|
|||||||
UINT8 packet[1]; /* must be last */
|
UINT8 packet[1]; /* must be last */
|
||||||
} FFMContext;
|
} FFMContext;
|
||||||
|
|
||||||
|
/* disable pts hack for testing */
|
||||||
|
int ffm_nopts = 0;
|
||||||
|
|
||||||
static void flush_packet(AVFormatContext *s)
|
static void flush_packet(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
FFMContext *ffm = s->priv_data;
|
FFMContext *ffm = s->priv_data;
|
||||||
@ -112,18 +115,13 @@ static void ffm_write_data(AVFormatContext *s,
|
|||||||
|
|
||||||
static int ffm_write_header(AVFormatContext *s)
|
static int ffm_write_header(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
|
FFMContext *ffm = s->priv_data;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
FFMStream *fst;
|
FFMStream *fst;
|
||||||
FFMContext *ffm;
|
|
||||||
ByteIOContext *pb = &s->pb;
|
ByteIOContext *pb = &s->pb;
|
||||||
AVCodecContext *codec;
|
AVCodecContext *codec;
|
||||||
int bit_rate, i;
|
int bit_rate, i;
|
||||||
|
|
||||||
ffm = av_mallocz(sizeof(FFMContext) + FFM_PACKET_SIZE);
|
|
||||||
if (!ffm)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
s->priv_data = ffm;
|
|
||||||
ffm->packet_size = FFM_PACKET_SIZE;
|
ffm->packet_size = FFM_PACKET_SIZE;
|
||||||
|
|
||||||
/* header */
|
/* header */
|
||||||
@ -177,7 +175,10 @@ static int ffm_write_header(AVFormatContext *s)
|
|||||||
abort();
|
abort();
|
||||||
}
|
}
|
||||||
/* hack to have real time */
|
/* hack to have real time */
|
||||||
fst->pts = gettime();
|
if (ffm_nopts)
|
||||||
|
fst->pts = 0;
|
||||||
|
else
|
||||||
|
fst->pts = gettime();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* flush until end of block reached */
|
/* flush until end of block reached */
|
||||||
@ -200,7 +201,6 @@ static int ffm_write_header(AVFormatContext *s)
|
|||||||
fst = st->priv_data;
|
fst = st->priv_data;
|
||||||
av_free(fst);
|
av_free(fst);
|
||||||
}
|
}
|
||||||
av_free(ffm);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -252,7 +252,6 @@ static int ffm_write_trailer(AVFormatContext *s)
|
|||||||
|
|
||||||
for(i=0;i<s->nb_streams;i++)
|
for(i=0;i<s->nb_streams;i++)
|
||||||
av_free(s->streams[i]->priv_data);
|
av_free(s->streams[i]->priv_data);
|
||||||
av_free(ffm);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -342,20 +341,14 @@ static int ffm_read_data(AVFormatContext *s,
|
|||||||
|
|
||||||
static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||||
{
|
{
|
||||||
|
FFMContext *ffm = s->priv_data;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
FFMStream *fst;
|
FFMStream *fst;
|
||||||
FFMContext *ffm;
|
|
||||||
ByteIOContext *pb = &s->pb;
|
ByteIOContext *pb = &s->pb;
|
||||||
AVCodecContext *codec;
|
AVCodecContext *codec;
|
||||||
int i;
|
int i;
|
||||||
UINT32 tag;
|
UINT32 tag;
|
||||||
|
|
||||||
ffm = av_mallocz(sizeof(FFMContext) + FFM_PACKET_SIZE);
|
|
||||||
if (!ffm)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
s->priv_data = ffm;
|
|
||||||
|
|
||||||
/* header */
|
/* header */
|
||||||
tag = get_le32(pb);
|
tag = get_le32(pb);
|
||||||
if (tag != MKTAG('F', 'F', 'M', '1'))
|
if (tag != MKTAG('F', 'F', 'M', '1'))
|
||||||
@ -436,8 +429,6 @@ static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
av_free(st);
|
av_free(st);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ffm)
|
|
||||||
av_free(ffm);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -619,19 +610,35 @@ static int ffm_read_close(AVFormatContext *s)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat ffm_format = {
|
AVInputFormat ffm_iformat = {
|
||||||
|
"ffm",
|
||||||
|
"ffm format",
|
||||||
|
sizeof(FFMContext),
|
||||||
|
NULL,
|
||||||
|
ffm_read_header,
|
||||||
|
ffm_read_packet,
|
||||||
|
ffm_read_close,
|
||||||
|
ffm_seek,
|
||||||
|
extensions: "ffm",
|
||||||
|
};
|
||||||
|
|
||||||
|
AVOutputFormat ffm_oformat = {
|
||||||
"ffm",
|
"ffm",
|
||||||
"ffm format",
|
"ffm format",
|
||||||
"",
|
"",
|
||||||
"ffm",
|
"ffm",
|
||||||
|
sizeof(FFMContext) + FFM_PACKET_SIZE,
|
||||||
/* not really used */
|
/* not really used */
|
||||||
CODEC_ID_MP2,
|
CODEC_ID_MP2,
|
||||||
CODEC_ID_MPEG1VIDEO,
|
CODEC_ID_MPEG1VIDEO,
|
||||||
ffm_write_header,
|
ffm_write_header,
|
||||||
ffm_write_packet,
|
ffm_write_packet,
|
||||||
ffm_write_trailer,
|
ffm_write_trailer,
|
||||||
ffm_read_header,
|
|
||||||
ffm_read_packet,
|
|
||||||
ffm_read_close,
|
|
||||||
ffm_seek,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int ffm_init(void)
|
||||||
|
{
|
||||||
|
av_register_input_format(&ffm_iformat);
|
||||||
|
av_register_output_format(&ffm_oformat);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
24
libav/gif.c
24
libav/gif.c
@ -192,7 +192,7 @@ typedef struct {
|
|||||||
|
|
||||||
static int gif_write_header(AVFormatContext *s)
|
static int gif_write_header(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
GIFContext *gif;
|
GIFContext *gif = s->priv_data;
|
||||||
ByteIOContext *pb = &s->pb;
|
ByteIOContext *pb = &s->pb;
|
||||||
AVCodecContext *enc, *video_enc;
|
AVCodecContext *enc, *video_enc;
|
||||||
int i, width, height, rate;
|
int i, width, height, rate;
|
||||||
@ -201,12 +201,6 @@ static int gif_write_header(AVFormatContext *s)
|
|||||||
if(s->nb_streams > 1)
|
if(s->nb_streams > 1)
|
||||||
return -1;
|
return -1;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
gif = av_malloc(sizeof(GIFContext));
|
|
||||||
if (!gif)
|
|
||||||
return -1;
|
|
||||||
s->priv_data = gif;
|
|
||||||
|
|
||||||
gif->time = 0;
|
gif->time = 0;
|
||||||
gif->file_time = 0;
|
gif->file_time = 0;
|
||||||
|
|
||||||
@ -376,28 +370,28 @@ static int gif_write_packet(AVFormatContext *s, int stream_index,
|
|||||||
|
|
||||||
static int gif_write_trailer(AVFormatContext *s)
|
static int gif_write_trailer(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
GIFContext *gif = s->priv_data;
|
|
||||||
ByteIOContext *pb = &s->pb;
|
ByteIOContext *pb = &s->pb;
|
||||||
|
|
||||||
put_byte(pb, 0x3b);
|
put_byte(pb, 0x3b);
|
||||||
put_flush_packet(&s->pb);
|
put_flush_packet(&s->pb);
|
||||||
|
|
||||||
av_free(gif);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat gif_format = {
|
static AVOutputFormat gif_oformat = {
|
||||||
"gif",
|
"gif",
|
||||||
"GIF Animation",
|
"GIF Animation",
|
||||||
"image/gif",
|
"image/gif",
|
||||||
"gif",
|
"gif",
|
||||||
|
sizeof(GIFContext),
|
||||||
CODEC_ID_NONE,
|
CODEC_ID_NONE,
|
||||||
CODEC_ID_RAWVIDEO,
|
CODEC_ID_RAWVIDEO,
|
||||||
gif_write_header,
|
gif_write_header,
|
||||||
gif_write_packet,
|
gif_write_packet,
|
||||||
gif_write_trailer,
|
gif_write_trailer,
|
||||||
|
|
||||||
NULL, /* read_header */
|
|
||||||
NULL, /* read_packet */
|
|
||||||
NULL, /* read_close */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int gif_init(void)
|
||||||
|
{
|
||||||
|
av_register_output_format(&gif_oformat);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
35
libav/grab.c
35
libav/grab.c
@ -48,7 +48,7 @@ static int gb_frame = 0;
|
|||||||
|
|
||||||
static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
||||||
{
|
{
|
||||||
VideoData *s;
|
VideoData *s = s1->priv_data;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
int width, height;
|
int width, height;
|
||||||
int video_fd, frame_size;
|
int video_fd, frame_size;
|
||||||
@ -62,17 +62,9 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
|||||||
height = ap->height;
|
height = ap->height;
|
||||||
frame_rate = ap->frame_rate;
|
frame_rate = ap->frame_rate;
|
||||||
|
|
||||||
s = av_mallocz(sizeof(VideoData));
|
st = av_new_stream(s1, 0);
|
||||||
if (!s)
|
if (!st)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
st = av_mallocz(sizeof(AVStream));
|
|
||||||
if (!st) {
|
|
||||||
av_free(s);
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
s1->priv_data = s;
|
|
||||||
s1->nb_streams = 1;
|
|
||||||
s1->streams[0] = st;
|
|
||||||
|
|
||||||
s->width = width;
|
s->width = width;
|
||||||
s->height = height;
|
s->height = height;
|
||||||
@ -232,7 +224,6 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
|||||||
if (video_fd >= 0)
|
if (video_fd >= 0)
|
||||||
close(video_fd);
|
close(video_fd);
|
||||||
av_free(st);
|
av_free(st);
|
||||||
av_free(s);
|
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -327,24 +318,22 @@ static int grab_read_close(AVFormatContext *s1)
|
|||||||
ioctl(s->fd, VIDIOCSAUDIO, &audio_saved);
|
ioctl(s->fd, VIDIOCSAUDIO, &audio_saved);
|
||||||
|
|
||||||
close(s->fd);
|
close(s->fd);
|
||||||
av_free(s);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat video_grab_device_format = {
|
AVInputFormat video_grab_device_format = {
|
||||||
"video_grab_device",
|
"video_grab_device",
|
||||||
"video grab",
|
"video grab",
|
||||||
"",
|
sizeof(VideoData),
|
||||||
"",
|
|
||||||
CODEC_ID_NONE,
|
|
||||||
CODEC_ID_NONE,
|
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
|
|
||||||
grab_read_header,
|
grab_read_header,
|
||||||
grab_read_packet,
|
grab_read_packet,
|
||||||
grab_read_close,
|
grab_read_close,
|
||||||
NULL,
|
flags: AVFMT_NOFILE,
|
||||||
AVFMT_NOFILE,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int video_grab_init(void)
|
||||||
|
{
|
||||||
|
av_register_input_format(&video_grab_device_format);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
185
libav/img.c
185
libav/img.c
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Image format
|
* Image format
|
||||||
* Copyright (c) 2000, 2001 Gerard Lantau.
|
* Copyright (c) 2000, 2001, 2002 Gerard Lantau.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -18,6 +18,21 @@
|
|||||||
*/
|
*/
|
||||||
#include "avformat.h"
|
#include "avformat.h"
|
||||||
|
|
||||||
|
extern AVInputFormat pgm_iformat;
|
||||||
|
extern AVOutputFormat pgm_oformat;
|
||||||
|
extern AVInputFormat pgmyuv_iformat;
|
||||||
|
extern AVOutputFormat pgmyuv_oformat;
|
||||||
|
extern AVInputFormat ppm_iformat;
|
||||||
|
extern AVOutputFormat ppm_oformat;
|
||||||
|
extern AVInputFormat imgyuv_iformat;
|
||||||
|
extern AVOutputFormat imgyuv_oformat;
|
||||||
|
extern AVInputFormat pgmpipe_iformat;
|
||||||
|
extern AVOutputFormat pgmpipe_oformat;
|
||||||
|
extern AVInputFormat pgmyuvpipe_iformat;
|
||||||
|
extern AVOutputFormat pgmyuvpipe_oformat;
|
||||||
|
extern AVInputFormat ppmpipe_iformat;
|
||||||
|
extern AVOutputFormat ppmpipe_oformat;
|
||||||
|
|
||||||
#define IMGFMT_YUV 1
|
#define IMGFMT_YUV 1
|
||||||
#define IMGFMT_PGMYUV 2
|
#define IMGFMT_PGMYUV 2
|
||||||
#define IMGFMT_PGM 3
|
#define IMGFMT_PGM 3
|
||||||
@ -248,46 +263,38 @@ static int infer_size(int *width_ptr, int *height_ptr, int size)
|
|||||||
|
|
||||||
static int img_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
static int img_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
||||||
{
|
{
|
||||||
VideoData *s;
|
VideoData *s = s1->priv_data;
|
||||||
int i, h;
|
int i, h;
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
char buf1[32];
|
char buf1[32];
|
||||||
ByteIOContext pb1, *f = &pb1;
|
ByteIOContext pb1, *f = &pb1;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
|
|
||||||
s = av_malloc(sizeof(VideoData));
|
st = av_new_stream(s1, 0);
|
||||||
if (!s)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
s1->priv_data = s;
|
|
||||||
|
|
||||||
s1->nb_streams = 1;
|
|
||||||
st = av_mallocz(sizeof(AVStream));
|
|
||||||
if (!st) {
|
if (!st) {
|
||||||
av_free(s);
|
av_free(s);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
s1->streams[0] = st;
|
|
||||||
|
|
||||||
strcpy(s->path, s1->filename);
|
strcpy(s->path, s1->filename);
|
||||||
s->img_number = 0;
|
s->img_number = 0;
|
||||||
|
|
||||||
/* find format */
|
/* find format */
|
||||||
if (s1->format->flags & AVFMT_NOFILE)
|
if (s1->iformat->flags & AVFMT_NOFILE)
|
||||||
s->is_pipe = 0;
|
s->is_pipe = 0;
|
||||||
else
|
else
|
||||||
s->is_pipe = 1;
|
s->is_pipe = 1;
|
||||||
|
|
||||||
if (s1->format == &pgmyuvpipe_format ||
|
if (s1->iformat == &pgmyuvpipe_iformat ||
|
||||||
s1->format == &pgmyuv_format)
|
s1->iformat == &pgmyuv_iformat)
|
||||||
s->img_fmt = IMGFMT_PGMYUV;
|
s->img_fmt = IMGFMT_PGMYUV;
|
||||||
else if (s1->format == &pgmpipe_format ||
|
else if (s1->iformat == &pgmpipe_iformat ||
|
||||||
s1->format == &pgm_format)
|
s1->iformat == &pgm_iformat)
|
||||||
s->img_fmt = IMGFMT_PGM;
|
s->img_fmt = IMGFMT_PGM;
|
||||||
else if (s1->format == &imgyuv_format)
|
else if (s1->iformat == &imgyuv_iformat)
|
||||||
s->img_fmt = IMGFMT_YUV;
|
s->img_fmt = IMGFMT_YUV;
|
||||||
else if (s1->format == &ppmpipe_format ||
|
else if (s1->iformat == &ppmpipe_iformat ||
|
||||||
s1->format == &ppm_format)
|
s1->iformat == &ppm_iformat)
|
||||||
s->img_fmt = IMGFMT_PPM;
|
s->img_fmt = IMGFMT_PPM;
|
||||||
else
|
else
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -378,8 +385,6 @@ static int img_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
|||||||
|
|
||||||
static int img_read_close(AVFormatContext *s1)
|
static int img_read_close(AVFormatContext *s1)
|
||||||
{
|
{
|
||||||
VideoData *s = s1->priv_data;
|
|
||||||
av_free(s);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -479,31 +484,27 @@ static int yuv_save(AVPicture *picture, int width, int height, const char *filen
|
|||||||
|
|
||||||
static int img_write_header(AVFormatContext *s)
|
static int img_write_header(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
VideoData *img;
|
VideoData *img = s->priv_data;
|
||||||
|
|
||||||
img = av_mallocz(sizeof(VideoData));
|
|
||||||
if (!img)
|
|
||||||
return -1;
|
|
||||||
s->priv_data = img;
|
|
||||||
img->img_number = 1;
|
img->img_number = 1;
|
||||||
strcpy(img->path, s->filename);
|
strcpy(img->path, s->filename);
|
||||||
|
|
||||||
/* find format */
|
/* find format */
|
||||||
if (s->format->flags & AVFMT_NOFILE)
|
if (s->oformat->flags & AVFMT_NOFILE)
|
||||||
img->is_pipe = 0;
|
img->is_pipe = 0;
|
||||||
else
|
else
|
||||||
img->is_pipe = 1;
|
img->is_pipe = 1;
|
||||||
|
|
||||||
if (s->format == &pgmyuvpipe_format ||
|
if (s->oformat == &pgmyuvpipe_oformat ||
|
||||||
s->format == &pgmyuv_format) {
|
s->oformat == &pgmyuv_oformat) {
|
||||||
img->img_fmt = IMGFMT_PGMYUV;
|
img->img_fmt = IMGFMT_PGMYUV;
|
||||||
} else if (s->format == &pgmpipe_format ||
|
} else if (s->oformat == &pgmpipe_oformat ||
|
||||||
s->format == &pgm_format) {
|
s->oformat == &pgm_oformat) {
|
||||||
img->img_fmt = IMGFMT_PGM;
|
img->img_fmt = IMGFMT_PGM;
|
||||||
} else if (s->format == &imgyuv_format) {
|
} else if (s->oformat == &imgyuv_oformat) {
|
||||||
img->img_fmt = IMGFMT_YUV;
|
img->img_fmt = IMGFMT_YUV;
|
||||||
} else if (s->format == &ppmpipe_format ||
|
} else if (s->oformat == &ppmpipe_oformat ||
|
||||||
s->format == &ppm_format) {
|
s->oformat == &ppm_oformat) {
|
||||||
img->img_fmt = IMGFMT_PPM;
|
img->img_fmt = IMGFMT_PPM;
|
||||||
} else {
|
} else {
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -590,22 +591,41 @@ static int img_write_packet(AVFormatContext *s, int stream_index,
|
|||||||
|
|
||||||
static int img_write_trailer(AVFormatContext *s)
|
static int img_write_trailer(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
VideoData *img = s->priv_data;
|
|
||||||
av_free(img);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat pgm_format = {
|
AVInputFormat pgm_iformat = {
|
||||||
|
"pgm",
|
||||||
|
"pgm image format",
|
||||||
|
sizeof(VideoData),
|
||||||
|
NULL,
|
||||||
|
img_read_header,
|
||||||
|
img_read_packet,
|
||||||
|
img_read_close,
|
||||||
|
NULL,
|
||||||
|
AVFMT_NOFILE | AVFMT_NEEDNUMBER,
|
||||||
|
extensions: "pgm",
|
||||||
|
};
|
||||||
|
|
||||||
|
AVOutputFormat pgm_oformat = {
|
||||||
"pgm",
|
"pgm",
|
||||||
"pgm image format",
|
"pgm image format",
|
||||||
"",
|
"",
|
||||||
"pgm",
|
"pgm",
|
||||||
|
sizeof(VideoData),
|
||||||
CODEC_ID_NONE,
|
CODEC_ID_NONE,
|
||||||
CODEC_ID_RAWVIDEO,
|
CODEC_ID_RAWVIDEO,
|
||||||
img_write_header,
|
img_write_header,
|
||||||
img_write_packet,
|
img_write_packet,
|
||||||
img_write_trailer,
|
img_write_trailer,
|
||||||
|
AVFMT_NOFILE | AVFMT_NEEDNUMBER,
|
||||||
|
};
|
||||||
|
|
||||||
|
AVInputFormat pgmyuv_iformat = {
|
||||||
|
"pgmyuv",
|
||||||
|
"pgm with YUV content image format",
|
||||||
|
sizeof(VideoData),
|
||||||
|
NULL, /* no probe */
|
||||||
img_read_header,
|
img_read_header,
|
||||||
img_read_packet,
|
img_read_packet,
|
||||||
img_read_close,
|
img_read_close,
|
||||||
@ -613,107 +633,170 @@ AVFormat pgm_format = {
|
|||||||
AVFMT_NOFILE | AVFMT_NEEDNUMBER,
|
AVFMT_NOFILE | AVFMT_NEEDNUMBER,
|
||||||
};
|
};
|
||||||
|
|
||||||
AVFormat pgmyuv_format = {
|
AVOutputFormat pgmyuv_oformat = {
|
||||||
"pgmyuv",
|
"pgmyuv",
|
||||||
"pgm with YUV content image format",
|
"pgm with YUV content image format",
|
||||||
"",
|
"",
|
||||||
"pgm",
|
"pgm",
|
||||||
|
sizeof(VideoData),
|
||||||
CODEC_ID_NONE,
|
CODEC_ID_NONE,
|
||||||
CODEC_ID_RAWVIDEO,
|
CODEC_ID_RAWVIDEO,
|
||||||
img_write_header,
|
img_write_header,
|
||||||
img_write_packet,
|
img_write_packet,
|
||||||
img_write_trailer,
|
img_write_trailer,
|
||||||
|
AVFMT_NOFILE | AVFMT_NEEDNUMBER,
|
||||||
|
};
|
||||||
|
|
||||||
|
AVInputFormat ppm_iformat = {
|
||||||
|
"ppm",
|
||||||
|
"ppm image format",
|
||||||
|
sizeof(VideoData),
|
||||||
|
NULL,
|
||||||
img_read_header,
|
img_read_header,
|
||||||
img_read_packet,
|
img_read_packet,
|
||||||
img_read_close,
|
img_read_close,
|
||||||
NULL,
|
NULL,
|
||||||
AVFMT_NOFILE | AVFMT_NEEDNUMBER,
|
AVFMT_NOFILE | AVFMT_NEEDNUMBER | AVFMT_RGB24,
|
||||||
|
extensions: "ppm",
|
||||||
};
|
};
|
||||||
|
|
||||||
AVFormat ppm_format = {
|
AVOutputFormat ppm_oformat = {
|
||||||
"ppm",
|
"ppm",
|
||||||
"ppm image format",
|
"ppm image format",
|
||||||
"",
|
"",
|
||||||
"ppm",
|
"ppm",
|
||||||
|
sizeof(VideoData),
|
||||||
CODEC_ID_NONE,
|
CODEC_ID_NONE,
|
||||||
CODEC_ID_RAWVIDEO,
|
CODEC_ID_RAWVIDEO,
|
||||||
img_write_header,
|
img_write_header,
|
||||||
img_write_packet,
|
img_write_packet,
|
||||||
img_write_trailer,
|
img_write_trailer,
|
||||||
|
AVFMT_NOFILE | AVFMT_NEEDNUMBER | AVFMT_RGB24,
|
||||||
|
};
|
||||||
|
|
||||||
|
AVInputFormat imgyuv_iformat = {
|
||||||
|
".Y.U.V",
|
||||||
|
".Y.U.V format",
|
||||||
|
sizeof(VideoData),
|
||||||
|
NULL,
|
||||||
img_read_header,
|
img_read_header,
|
||||||
img_read_packet,
|
img_read_packet,
|
||||||
img_read_close,
|
img_read_close,
|
||||||
NULL,
|
NULL,
|
||||||
AVFMT_NOFILE | AVFMT_NEEDNUMBER,
|
AVFMT_NOFILE | AVFMT_NEEDNUMBER,
|
||||||
|
extensions: "Y",
|
||||||
};
|
};
|
||||||
|
|
||||||
AVFormat imgyuv_format = {
|
AVOutputFormat imgyuv_oformat = {
|
||||||
".Y.U.V",
|
".Y.U.V",
|
||||||
".Y.U.V format",
|
".Y.U.V format",
|
||||||
"",
|
"",
|
||||||
"Y",
|
"Y",
|
||||||
|
sizeof(VideoData),
|
||||||
CODEC_ID_NONE,
|
CODEC_ID_NONE,
|
||||||
CODEC_ID_RAWVIDEO,
|
CODEC_ID_RAWVIDEO,
|
||||||
img_write_header,
|
img_write_header,
|
||||||
img_write_packet,
|
img_write_packet,
|
||||||
img_write_trailer,
|
img_write_trailer,
|
||||||
|
AVFMT_NOFILE | AVFMT_NEEDNUMBER,
|
||||||
|
};
|
||||||
|
|
||||||
|
AVInputFormat pgmpipe_iformat = {
|
||||||
|
"pgmpipe",
|
||||||
|
"PGM pipe format",
|
||||||
|
sizeof(VideoData),
|
||||||
|
NULL, /* no probe */
|
||||||
img_read_header,
|
img_read_header,
|
||||||
img_read_packet,
|
img_read_packet,
|
||||||
img_read_close,
|
img_read_close,
|
||||||
NULL,
|
NULL,
|
||||||
AVFMT_NOFILE | AVFMT_NEEDNUMBER,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
AVFormat pgmpipe_format = {
|
AVOutputFormat pgmpipe_oformat = {
|
||||||
"pgmpipe",
|
"pgmpipe",
|
||||||
"PGM pipe format",
|
"PGM pipe format",
|
||||||
"",
|
"",
|
||||||
"pgm",
|
"pgm",
|
||||||
|
sizeof(VideoData),
|
||||||
CODEC_ID_NONE,
|
CODEC_ID_NONE,
|
||||||
CODEC_ID_RAWVIDEO,
|
CODEC_ID_RAWVIDEO,
|
||||||
img_write_header,
|
img_write_header,
|
||||||
img_write_packet,
|
img_write_packet,
|
||||||
img_write_trailer,
|
img_write_trailer,
|
||||||
|
};
|
||||||
|
|
||||||
|
AVInputFormat pgmyuvpipe_iformat = {
|
||||||
|
"pgmyuvpipe",
|
||||||
|
"PGM YUV pipe format",
|
||||||
|
sizeof(VideoData),
|
||||||
|
NULL, /* no probe */
|
||||||
img_read_header,
|
img_read_header,
|
||||||
img_read_packet,
|
img_read_packet,
|
||||||
img_read_close,
|
img_read_close,
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
AVFormat pgmyuvpipe_format = {
|
AVOutputFormat pgmyuvpipe_oformat = {
|
||||||
"pgmyuvpipe",
|
"pgmyuvpipe",
|
||||||
"PGM YUV pipe format",
|
"PGM YUV pipe format",
|
||||||
"",
|
"",
|
||||||
"pgm",
|
"pgm",
|
||||||
|
sizeof(VideoData),
|
||||||
CODEC_ID_NONE,
|
CODEC_ID_NONE,
|
||||||
CODEC_ID_RAWVIDEO,
|
CODEC_ID_RAWVIDEO,
|
||||||
img_write_header,
|
img_write_header,
|
||||||
img_write_packet,
|
img_write_packet,
|
||||||
img_write_trailer,
|
img_write_trailer,
|
||||||
|
};
|
||||||
|
|
||||||
|
AVInputFormat ppmpipe_iformat = {
|
||||||
|
"ppmpipe",
|
||||||
|
"PPM pipe format",
|
||||||
|
sizeof(VideoData),
|
||||||
|
NULL, /* no probe */
|
||||||
img_read_header,
|
img_read_header,
|
||||||
img_read_packet,
|
img_read_packet,
|
||||||
img_read_close,
|
img_read_close,
|
||||||
NULL,
|
NULL,
|
||||||
|
flags: AVFMT_RGB24,
|
||||||
};
|
};
|
||||||
|
|
||||||
AVFormat ppmpipe_format = {
|
AVOutputFormat ppmpipe_oformat = {
|
||||||
"ppmpipe",
|
"ppmpipe",
|
||||||
"PPM pipe format",
|
"PPM pipe format",
|
||||||
"",
|
"",
|
||||||
"ppm",
|
"ppm",
|
||||||
|
sizeof(VideoData),
|
||||||
CODEC_ID_NONE,
|
CODEC_ID_NONE,
|
||||||
CODEC_ID_RAWVIDEO,
|
CODEC_ID_RAWVIDEO,
|
||||||
img_write_header,
|
img_write_header,
|
||||||
img_write_packet,
|
img_write_packet,
|
||||||
img_write_trailer,
|
img_write_trailer,
|
||||||
|
flags: AVFMT_RGB24,
|
||||||
img_read_header,
|
|
||||||
img_read_packet,
|
|
||||||
img_read_close,
|
|
||||||
NULL,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
int img_init(void)
|
||||||
|
{
|
||||||
|
av_register_input_format(&pgm_iformat);
|
||||||
|
av_register_output_format(&pgm_oformat);
|
||||||
|
|
||||||
|
av_register_input_format(&pgmyuv_iformat);
|
||||||
|
av_register_output_format(&pgmyuv_oformat);
|
||||||
|
|
||||||
|
av_register_input_format(&ppm_iformat);
|
||||||
|
av_register_output_format(&ppm_oformat);
|
||||||
|
|
||||||
|
av_register_input_format(&imgyuv_iformat);
|
||||||
|
av_register_output_format(&imgyuv_oformat);
|
||||||
|
|
||||||
|
av_register_input_format(&pgmpipe_iformat);
|
||||||
|
av_register_output_format(&pgmpipe_oformat);
|
||||||
|
|
||||||
|
av_register_input_format(&pgmyuvpipe_iformat);
|
||||||
|
av_register_output_format(&pgmyuvpipe_oformat);
|
||||||
|
|
||||||
|
av_register_input_format(&ppmpipe_iformat);
|
||||||
|
av_register_output_format(&ppmpipe_oformat);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
42
libav/jpeg.c
42
libav/jpeg.c
@ -52,11 +52,12 @@ static int mpjpeg_write_trailer(AVFormatContext *s)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat mpjpeg_format = {
|
static AVOutputFormat mpjpeg_format = {
|
||||||
"mpjpeg",
|
"mpjpeg",
|
||||||
"Mime multipart JPEG format",
|
"Mime multipart JPEG format",
|
||||||
"multipart/x-mixed-replace;boundary=" BOUNDARY_TAG,
|
"multipart/x-mixed-replace;boundary=" BOUNDARY_TAG,
|
||||||
"mjpg",
|
"mjpg",
|
||||||
|
0,
|
||||||
CODEC_ID_NONE,
|
CODEC_ID_NONE,
|
||||||
CODEC_ID_MJPEG,
|
CODEC_ID_MJPEG,
|
||||||
mpjpeg_write_header,
|
mpjpeg_write_header,
|
||||||
@ -86,11 +87,12 @@ static int single_jpeg_write_trailer(AVFormatContext *s)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat single_jpeg_format = {
|
static AVOutputFormat single_jpeg_format = {
|
||||||
"singlejpeg",
|
"singlejpeg",
|
||||||
"single JPEG image",
|
"single JPEG image",
|
||||||
"image/jpeg",
|
"image/jpeg",
|
||||||
"jpg,jpeg",
|
"jpg,jpeg",
|
||||||
|
0,
|
||||||
CODEC_ID_NONE,
|
CODEC_ID_NONE,
|
||||||
CODEC_ID_MJPEG,
|
CODEC_ID_MJPEG,
|
||||||
single_jpeg_write_header,
|
single_jpeg_write_header,
|
||||||
@ -114,7 +116,7 @@ static int jpeg_write_header(AVFormatContext *s1)
|
|||||||
if (!s)
|
if (!s)
|
||||||
return -1;
|
return -1;
|
||||||
s1->priv_data = s;
|
s1->priv_data = s;
|
||||||
nstrcpy(s->path, sizeof(s->path), s1->filename);
|
pstrcpy(s->path, sizeof(s->path), s1->filename);
|
||||||
s->img_number = 1;
|
s->img_number = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -162,7 +164,7 @@ static int jpeg_read_header(AVFormatContext *s1, AVFormatParameters *ap)
|
|||||||
if (!s)
|
if (!s)
|
||||||
return -1;
|
return -1;
|
||||||
s1->priv_data = s;
|
s1->priv_data = s;
|
||||||
nstrcpy(s->path, sizeof(s->path), s1->filename);
|
pstrcpy(s->path, sizeof(s->path), s1->filename);
|
||||||
|
|
||||||
s1->nb_streams = 1;
|
s1->nb_streams = 1;
|
||||||
st = av_mallocz(sizeof(AVStream));
|
st = av_mallocz(sizeof(AVStream));
|
||||||
@ -231,20 +233,38 @@ static int jpeg_read_close(AVFormatContext *s1)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat jpeg_format = {
|
static AVInputFormat jpeg_iformat = {
|
||||||
|
"jpeg",
|
||||||
|
"JPEG image",
|
||||||
|
sizeof(JpegContext),
|
||||||
|
NULL,
|
||||||
|
jpeg_read_header,
|
||||||
|
jpeg_read_packet,
|
||||||
|
jpeg_read_close,
|
||||||
|
NULL,
|
||||||
|
flags: AVFMT_NOFILE | AVFMT_NEEDNUMBER,
|
||||||
|
extensions: "jpg,jpeg",
|
||||||
|
};
|
||||||
|
|
||||||
|
static AVOutputFormat jpeg_oformat = {
|
||||||
"jpeg",
|
"jpeg",
|
||||||
"JPEG image",
|
"JPEG image",
|
||||||
"image/jpeg",
|
"image/jpeg",
|
||||||
"jpg,jpeg",
|
"jpg,jpeg",
|
||||||
|
sizeof(JpegContext),
|
||||||
CODEC_ID_NONE,
|
CODEC_ID_NONE,
|
||||||
CODEC_ID_MJPEG,
|
CODEC_ID_MJPEG,
|
||||||
jpeg_write_header,
|
jpeg_write_header,
|
||||||
jpeg_write_packet,
|
jpeg_write_packet,
|
||||||
jpeg_write_trailer,
|
jpeg_write_trailer,
|
||||||
|
flags: AVFMT_NOFILE | AVFMT_NEEDNUMBER,
|
||||||
jpeg_read_header,
|
|
||||||
jpeg_read_packet,
|
|
||||||
jpeg_read_close,
|
|
||||||
NULL,
|
|
||||||
AVFMT_NOFILE | AVFMT_NEEDNUMBER,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int jpeg_init(void)
|
||||||
|
{
|
||||||
|
av_register_output_format(&mpjpeg_format);
|
||||||
|
av_register_output_format(&single_jpeg_format);
|
||||||
|
av_register_input_format(&jpeg_iformat);
|
||||||
|
av_register_output_format(&jpeg_oformat);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
92
libav/mov.c
92
libav/mov.c
@ -44,7 +44,7 @@
|
|||||||
* QuickTime is a trademark of Apple (AFAIK :))
|
* QuickTime is a trademark of Apple (AFAIK :))
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define DEBUG
|
//#define DEBUG
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
/*
|
/*
|
||||||
@ -394,7 +394,7 @@ static int parse_hdlr(const MOVParseTableEntry *parse_table, ByteIOContext *pb,
|
|||||||
{
|
{
|
||||||
MOVContext *c;
|
MOVContext *c;
|
||||||
int len;
|
int len;
|
||||||
char *buf, ch;
|
char *buf;
|
||||||
UINT32 type;
|
UINT32 type;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
UINT32 ctype;
|
UINT32 ctype;
|
||||||
@ -453,21 +453,23 @@ static int parse_hdlr(const MOVParseTableEntry *parse_table, ByteIOContext *pb,
|
|||||||
return 0; /* nothing left to read */
|
return 0; /* nothing left to read */
|
||||||
/* XXX: MP4 uses a C string, not a pascal one */
|
/* XXX: MP4 uses a C string, not a pascal one */
|
||||||
/* component name */
|
/* component name */
|
||||||
if(c->mp4) {
|
len = get_byte(pb);
|
||||||
|
/* XXX: use a better heuristic */
|
||||||
|
if(len < 32) {
|
||||||
|
/* assume that it is a Pascal like string */
|
||||||
|
buf = av_malloc(len+1);
|
||||||
|
get_buffer(pb, buf, len);
|
||||||
|
buf[len] = '\0';
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
puts("MP4!!!");
|
printf("**buf='%s'\n", buf);
|
||||||
#endif
|
#endif
|
||||||
while ((ch = get_byte(pb)));
|
av_free(buf);
|
||||||
} else {
|
} else {
|
||||||
len = get_byte(pb);
|
/* MP4 string */
|
||||||
if(len) {
|
for(;;) {
|
||||||
buf = av_malloc(len+1);
|
if (len == 0)
|
||||||
get_buffer(pb, buf, len);
|
break;
|
||||||
buf[len] = '\0';
|
len = get_byte(pb);
|
||||||
#ifdef DEBUG
|
|
||||||
puts(buf);
|
|
||||||
#endif
|
|
||||||
av_free(buf);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -763,21 +765,34 @@ static void mov_free_stream_context(MOVStreamContext *sc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* XXX: is it suffisant ? */
|
||||||
|
static int mov_probe(AVProbeData *p)
|
||||||
|
{
|
||||||
|
/* check file header */
|
||||||
|
if (p->buf_size <= 12)
|
||||||
|
return 0;
|
||||||
|
if ((p->buf[4] == 'm' && p->buf[5] == 'o' &&
|
||||||
|
p->buf[6] == 'o' && p->buf[7] == 'v') ||
|
||||||
|
(p->buf[4] == 'm' && p->buf[5] == 'd' &&
|
||||||
|
p->buf[6] == 'a' && p->buf[7] == 't'))
|
||||||
|
return AVPROBE_SCORE_MAX;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int mov_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
static int mov_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||||
{
|
{
|
||||||
MOVContext *mov;
|
MOVContext *mov = s->priv_data;
|
||||||
ByteIOContext *pb = &s->pb;
|
ByteIOContext *pb = &s->pb;
|
||||||
int i, j, nb, err;
|
int i, j, nb, err;
|
||||||
INT64 size;
|
INT64 size;
|
||||||
|
|
||||||
mov = av_mallocz(sizeof(MOVContext));
|
|
||||||
if (!mov)
|
|
||||||
return -1;
|
|
||||||
s->priv_data = mov;
|
|
||||||
|
|
||||||
mov->fc = s;
|
mov->fc = s;
|
||||||
if(s->format->name[1] == 'p')
|
#if 0
|
||||||
|
/* XXX: I think we should auto detect */
|
||||||
|
if(s->iformat->name[1] == 'p')
|
||||||
mov->mp4 = 1;
|
mov->mp4 = 1;
|
||||||
|
#endif
|
||||||
if(!url_is_streamed(pb)) /* .mov and .mp4 aren't streamable anyway (only progressive download if moov is before mdat) */
|
if(!url_is_streamed(pb)) /* .mov and .mp4 aren't streamable anyway (only progressive download if moov is before mdat) */
|
||||||
size = url_filesize(url_fileno(pb));
|
size = url_filesize(url_fileno(pb));
|
||||||
else
|
else
|
||||||
@ -916,38 +931,21 @@ static int mov_read_close(AVFormatContext *s)
|
|||||||
mov_free_stream_context(mov->streams[i]);
|
mov_free_stream_context(mov->streams[i]);
|
||||||
for(i=0; i<s->nb_streams; i++)
|
for(i=0; i<s->nb_streams; i++)
|
||||||
av_free(s->streams[i]);
|
av_free(s->streams[i]);
|
||||||
av_free(mov);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat mov_format = {
|
static AVInputFormat mov_iformat = {
|
||||||
"mov",
|
"mov",
|
||||||
"QuickTime format",
|
"QuickTime/MPEG4 format",
|
||||||
"video/quicktime",
|
sizeof(MOVContext),
|
||||||
"mov",
|
mov_probe,
|
||||||
CODEC_ID_MP2,
|
|
||||||
CODEC_ID_MJPEG,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
|
|
||||||
mov_read_header,
|
mov_read_header,
|
||||||
mov_read_packet,
|
mov_read_packet,
|
||||||
mov_read_close,
|
mov_read_close,
|
||||||
};
|
};
|
||||||
|
|
||||||
AVFormat mp4_format = {
|
int mov_init(void)
|
||||||
"mp4",
|
{
|
||||||
"MPEG4 file format",
|
av_register_input_format(&mov_iformat);
|
||||||
"video/mpeg4",
|
return 0;
|
||||||
"mp4",
|
}
|
||||||
CODEC_ID_MP2,
|
|
||||||
CODEC_ID_MJPEG,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
|
|
||||||
mov_read_header,
|
|
||||||
mov_read_packet,
|
|
||||||
mov_read_close,
|
|
||||||
};
|
|
||||||
|
371
libav/raw.c
371
libav/raw.c
@ -43,27 +43,20 @@ static int raw_read_header(AVFormatContext *s,
|
|||||||
AVFormatParameters *ap)
|
AVFormatParameters *ap)
|
||||||
{
|
{
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
|
int id;
|
||||||
|
|
||||||
st = av_malloc(sizeof(AVStream));
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return -1;
|
return AVERROR_NOMEM;
|
||||||
s->nb_streams = 1;
|
|
||||||
s->streams[0] = st;
|
|
||||||
|
|
||||||
st->id = 0;
|
|
||||||
|
|
||||||
if (ap) {
|
if (ap) {
|
||||||
if (s->format->audio_codec != CODEC_ID_NONE) {
|
id = s->iformat->value;
|
||||||
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
if (id == CODEC_ID_RAWVIDEO) {
|
||||||
st->codec.codec_id = s->format->audio_codec;
|
|
||||||
} else if (s->format->video_codec != CODEC_ID_NONE) {
|
|
||||||
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
||||||
st->codec.codec_id = s->format->video_codec;
|
|
||||||
} else {
|
} else {
|
||||||
av_free(st);
|
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
st->codec.codec_id = id;
|
||||||
|
|
||||||
switch(st->codec.codec_type) {
|
switch(st->codec.codec_type) {
|
||||||
case CODEC_TYPE_AUDIO:
|
case CODEC_TYPE_AUDIO:
|
||||||
st->codec.sample_rate = ap->sample_rate;
|
st->codec.sample_rate = ap->sample_rate;
|
||||||
@ -116,13 +109,9 @@ static int mp3_read_header(AVFormatContext *s,
|
|||||||
{
|
{
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
|
|
||||||
st = av_malloc(sizeof(AVStream));
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return -1;
|
return AVERROR_NOMEM;
|
||||||
s->nb_streams = 1;
|
|
||||||
s->streams[0] = st;
|
|
||||||
|
|
||||||
st->id = 0;
|
|
||||||
|
|
||||||
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
||||||
st->codec.codec_id = CODEC_ID_MP2;
|
st->codec.codec_id = CODEC_ID_MP2;
|
||||||
@ -136,14 +125,12 @@ static int video_read_header(AVFormatContext *s,
|
|||||||
{
|
{
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
|
|
||||||
st = av_mallocz(sizeof(AVStream));
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return -1;
|
return AVERROR_NOMEM;
|
||||||
s->nb_streams = 1;
|
|
||||||
s->streams[0] = st;
|
|
||||||
|
|
||||||
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
st->codec.codec_type = CODEC_TYPE_VIDEO;
|
||||||
st->codec.codec_id = s->format->video_codec;
|
st->codec.codec_id = s->iformat->value;
|
||||||
/* for mjpeg, specify frame rate */
|
/* for mjpeg, specify frame rate */
|
||||||
if (st->codec.codec_id == CODEC_ID_MJPEG) {
|
if (st->codec.codec_id == CODEC_ID_MJPEG) {
|
||||||
if (ap) {
|
if (ap) {
|
||||||
@ -155,227 +142,206 @@ static int video_read_header(AVFormatContext *s,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat mp2_format = {
|
#define SEQ_START_CODE 0x000001b3
|
||||||
"mp2",
|
#define GOP_START_CODE 0x000001b8
|
||||||
|
#define PICTURE_START_CODE 0x00000100
|
||||||
|
|
||||||
|
/* XXX: improve that by looking at several start codes */
|
||||||
|
static int mpegvideo_probe(AVProbeData *p)
|
||||||
|
{
|
||||||
|
int code, c, i;
|
||||||
|
code = 0xff;
|
||||||
|
|
||||||
|
/* we search the first start code. If it is a sequence, gop or
|
||||||
|
picture start code then we decide it is an mpeg video
|
||||||
|
stream. We do not send highest value to give a chance to mpegts */
|
||||||
|
for(i=0;i<p->buf_size;i++) {
|
||||||
|
c = p->buf[i];
|
||||||
|
code = (code << 8) | c;
|
||||||
|
if ((code & 0xffffff00) == 0x100) {
|
||||||
|
if (code == SEQ_START_CODE ||
|
||||||
|
code == GOP_START_CODE ||
|
||||||
|
code == PICTURE_START_CODE)
|
||||||
|
return AVPROBE_SCORE_MAX - 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
AVInputFormat mp3_iformat = {
|
||||||
|
"mp3",
|
||||||
"MPEG audio",
|
"MPEG audio",
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
mp3_read_header,
|
||||||
|
raw_read_packet,
|
||||||
|
raw_read_close,
|
||||||
|
extensions: "mp2,mp3", /* XXX: use probe */
|
||||||
|
};
|
||||||
|
|
||||||
|
AVOutputFormat mp2_oformat = {
|
||||||
|
"mp2",
|
||||||
|
"MPEG audio layer 2",
|
||||||
"audio/x-mpeg",
|
"audio/x-mpeg",
|
||||||
"mp2,mp3",
|
"mp2,mp3",
|
||||||
|
0,
|
||||||
CODEC_ID_MP2,
|
CODEC_ID_MP2,
|
||||||
0,
|
0,
|
||||||
raw_write_header,
|
raw_write_header,
|
||||||
raw_write_packet,
|
raw_write_packet,
|
||||||
raw_write_trailer,
|
raw_write_trailer,
|
||||||
|
|
||||||
mp3_read_header,
|
|
||||||
raw_read_packet,
|
|
||||||
raw_read_close,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
AVFormat ac3_format = {
|
|
||||||
|
AVInputFormat ac3_iformat = {
|
||||||
|
"ac3",
|
||||||
|
"raw ac3",
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
raw_read_header,
|
||||||
|
raw_read_packet,
|
||||||
|
raw_read_close,
|
||||||
|
extensions: "ac3",
|
||||||
|
value: CODEC_ID_AC3,
|
||||||
|
};
|
||||||
|
|
||||||
|
AVOutputFormat ac3_oformat = {
|
||||||
"ac3",
|
"ac3",
|
||||||
"raw ac3",
|
"raw ac3",
|
||||||
"audio/x-ac3",
|
"audio/x-ac3",
|
||||||
"ac3",
|
"ac3",
|
||||||
|
0,
|
||||||
CODEC_ID_AC3,
|
CODEC_ID_AC3,
|
||||||
0,
|
0,
|
||||||
raw_write_header,
|
raw_write_header,
|
||||||
raw_write_packet,
|
raw_write_packet,
|
||||||
raw_write_trailer,
|
raw_write_trailer,
|
||||||
raw_read_header,
|
|
||||||
raw_read_packet,
|
|
||||||
raw_read_close,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
AVFormat h263_format = {
|
AVOutputFormat h263_oformat = {
|
||||||
"h263",
|
"h263",
|
||||||
"raw h263",
|
"raw h263",
|
||||||
"video/x-h263",
|
"video/x-h263",
|
||||||
"h263",
|
"h263",
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
CODEC_ID_H263,
|
CODEC_ID_H263,
|
||||||
raw_write_header,
|
raw_write_header,
|
||||||
raw_write_packet,
|
raw_write_packet,
|
||||||
raw_write_trailer,
|
raw_write_trailer,
|
||||||
|
};
|
||||||
|
|
||||||
|
AVInputFormat mpegvideo_iformat = {
|
||||||
|
"mpegvideo",
|
||||||
|
"MPEG video",
|
||||||
|
0,
|
||||||
|
mpegvideo_probe,
|
||||||
video_read_header,
|
video_read_header,
|
||||||
raw_read_packet,
|
raw_read_packet,
|
||||||
raw_read_close,
|
raw_read_close,
|
||||||
|
value: CODEC_ID_MPEG1VIDEO,
|
||||||
};
|
};
|
||||||
|
|
||||||
AVFormat mpeg1video_format = {
|
AVOutputFormat mpeg1video_oformat = {
|
||||||
"mpegvideo",
|
"mpeg1video",
|
||||||
"MPEG video",
|
"MPEG video",
|
||||||
"video/x-mpeg",
|
"video/x-mpeg",
|
||||||
"mpg,mpeg",
|
"mpg,mpeg",
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
CODEC_ID_MPEG1VIDEO,
|
CODEC_ID_MPEG1VIDEO,
|
||||||
raw_write_header,
|
raw_write_header,
|
||||||
raw_write_packet,
|
raw_write_packet,
|
||||||
raw_write_trailer,
|
raw_write_trailer,
|
||||||
|
};
|
||||||
|
|
||||||
|
AVInputFormat mjpeg_iformat = {
|
||||||
|
"mjpeg",
|
||||||
|
"MJPEG video",
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
video_read_header,
|
video_read_header,
|
||||||
raw_read_packet,
|
raw_read_packet,
|
||||||
raw_read_close,
|
raw_read_close,
|
||||||
|
extensions: "mjpg,mjpeg",
|
||||||
|
value: CODEC_ID_MJPEG,
|
||||||
};
|
};
|
||||||
|
|
||||||
AVFormat mjpeg_format = {
|
AVOutputFormat mjpeg_oformat = {
|
||||||
"mjpeg",
|
"mjpeg",
|
||||||
"MJPEG video",
|
"MJPEG video",
|
||||||
"video/x-mjpeg",
|
"video/x-mjpeg",
|
||||||
"mjpg,mjpeg",
|
"mjpg,mjpeg",
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
CODEC_ID_MJPEG,
|
CODEC_ID_MJPEG,
|
||||||
raw_write_header,
|
raw_write_header,
|
||||||
raw_write_packet,
|
raw_write_packet,
|
||||||
raw_write_trailer,
|
raw_write_trailer,
|
||||||
video_read_header,
|
|
||||||
raw_read_packet,
|
|
||||||
raw_read_close,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* pcm formats */
|
/* pcm formats */
|
||||||
|
|
||||||
AVFormat pcm_s16le_format = {
|
#define PCMDEF(name, long_name, ext, codec) \
|
||||||
"s16le",
|
AVInputFormat pcm_ ## name ## _iformat = {\
|
||||||
"pcm signed 16 bit little endian format",
|
#name,\
|
||||||
NULL,
|
long_name,\
|
||||||
|
0,\
|
||||||
|
NULL,\
|
||||||
|
raw_read_header,\
|
||||||
|
raw_read_packet,\
|
||||||
|
raw_read_close,\
|
||||||
|
extensions: ext,\
|
||||||
|
value: codec,\
|
||||||
|
};\
|
||||||
|
\
|
||||||
|
AVOutputFormat pcm_ ## name ## _oformat = {\
|
||||||
|
#name,\
|
||||||
|
long_name,\
|
||||||
|
NULL,\
|
||||||
|
ext,\
|
||||||
|
0,\
|
||||||
|
codec,\
|
||||||
|
0,\
|
||||||
|
raw_write_header,\
|
||||||
|
raw_write_packet,\
|
||||||
|
raw_write_trailer,\
|
||||||
|
};
|
||||||
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
#ifdef WORDS_BIGENDIAN
|
||||||
"",
|
#define BE_DEF(s) s
|
||||||
|
#define LE_DEF(s) NULL
|
||||||
#else
|
#else
|
||||||
"sw",
|
#define BE_DEF(s) NULL
|
||||||
|
#define LE_DEF(s) s
|
||||||
#endif
|
#endif
|
||||||
CODEC_ID_PCM_S16LE,
|
|
||||||
0,
|
|
||||||
raw_write_header,
|
|
||||||
raw_write_packet,
|
|
||||||
raw_write_trailer,
|
|
||||||
|
|
||||||
raw_read_header,
|
|
||||||
raw_read_packet,
|
|
||||||
raw_read_close,
|
|
||||||
};
|
|
||||||
|
|
||||||
AVFormat pcm_s16be_format = {
|
PCMDEF(s16le, "pcm signed 16 bit little endian format",
|
||||||
"s16be",
|
LE_DEF("sw"), CODEC_ID_PCM_S16LE)
|
||||||
"pcm signed 16 bit big endian format",
|
|
||||||
NULL,
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
"sw",
|
|
||||||
#else
|
|
||||||
"",
|
|
||||||
#endif
|
|
||||||
CODEC_ID_PCM_S16BE,
|
|
||||||
0,
|
|
||||||
raw_write_header,
|
|
||||||
raw_write_packet,
|
|
||||||
raw_write_trailer,
|
|
||||||
|
|
||||||
raw_read_header,
|
PCMDEF(s16be, "pcm signed 16 bit big endian format",
|
||||||
raw_read_packet,
|
BE_DEF("sw"), CODEC_ID_PCM_S16BE)
|
||||||
raw_read_close,
|
|
||||||
};
|
|
||||||
|
|
||||||
AVFormat pcm_u16le_format = {
|
PCMDEF(u16le, "pcm unsigned 16 bit little endian format",
|
||||||
"u16le",
|
LE_DEF("uw"), CODEC_ID_PCM_U16LE)
|
||||||
"pcm unsigned 16 bit little endian format",
|
|
||||||
NULL,
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
"",
|
|
||||||
#else
|
|
||||||
"uw",
|
|
||||||
#endif
|
|
||||||
CODEC_ID_PCM_U16LE,
|
|
||||||
0,
|
|
||||||
raw_write_header,
|
|
||||||
raw_write_packet,
|
|
||||||
raw_write_trailer,
|
|
||||||
|
|
||||||
raw_read_header,
|
PCMDEF(u16be, "pcm unsigned 16 bit big endian format",
|
||||||
raw_read_packet,
|
BE_DEF("uw"), CODEC_ID_PCM_U16BE)
|
||||||
raw_read_close,
|
|
||||||
};
|
|
||||||
|
|
||||||
AVFormat pcm_u16be_format = {
|
PCMDEF(s8, "pcm signed 8 bit format",
|
||||||
"u16be",
|
"sb", CODEC_ID_PCM_S8)
|
||||||
"pcm unsigned 16 bit big endian format",
|
|
||||||
NULL,
|
|
||||||
#ifdef WORDS_BIGENDIAN
|
|
||||||
"uw",
|
|
||||||
#else
|
|
||||||
"",
|
|
||||||
#endif
|
|
||||||
CODEC_ID_PCM_U16BE,
|
|
||||||
0,
|
|
||||||
raw_write_header,
|
|
||||||
raw_write_packet,
|
|
||||||
raw_write_trailer,
|
|
||||||
|
|
||||||
raw_read_header,
|
PCMDEF(u8, "pcm unsigned 8 bit format",
|
||||||
raw_read_packet,
|
"ub", CODEC_ID_PCM_U8)
|
||||||
raw_read_close,
|
|
||||||
};
|
|
||||||
|
|
||||||
AVFormat pcm_s8_format = {
|
PCMDEF(mulaw, "pcm mu law format",
|
||||||
"s8",
|
"ul", CODEC_ID_PCM_MULAW)
|
||||||
"pcm signed 8 bit format",
|
|
||||||
NULL,
|
|
||||||
"sb",
|
|
||||||
CODEC_ID_PCM_S8,
|
|
||||||
0,
|
|
||||||
raw_write_header,
|
|
||||||
raw_write_packet,
|
|
||||||
raw_write_trailer,
|
|
||||||
|
|
||||||
raw_read_header,
|
PCMDEF(alaw, "pcm A law format",
|
||||||
raw_read_packet,
|
"al", CODEC_ID_PCM_ALAW)
|
||||||
raw_read_close,
|
|
||||||
};
|
|
||||||
|
|
||||||
AVFormat pcm_u8_format = {
|
|
||||||
"u8",
|
|
||||||
"pcm unsigned 8 bit format",
|
|
||||||
NULL,
|
|
||||||
"ub",
|
|
||||||
CODEC_ID_PCM_U8,
|
|
||||||
0,
|
|
||||||
raw_write_header,
|
|
||||||
raw_write_packet,
|
|
||||||
raw_write_trailer,
|
|
||||||
|
|
||||||
raw_read_header,
|
|
||||||
raw_read_packet,
|
|
||||||
raw_read_close,
|
|
||||||
};
|
|
||||||
|
|
||||||
AVFormat pcm_mulaw_format = {
|
|
||||||
"mulaw",
|
|
||||||
"pcm mu law format",
|
|
||||||
NULL,
|
|
||||||
"ul",
|
|
||||||
CODEC_ID_PCM_MULAW,
|
|
||||||
0,
|
|
||||||
raw_write_header,
|
|
||||||
raw_write_packet,
|
|
||||||
raw_write_trailer,
|
|
||||||
|
|
||||||
raw_read_header,
|
|
||||||
raw_read_packet,
|
|
||||||
raw_read_close,
|
|
||||||
};
|
|
||||||
|
|
||||||
AVFormat pcm_alaw_format = {
|
|
||||||
"alaw",
|
|
||||||
"pcm A law format",
|
|
||||||
NULL,
|
|
||||||
"al",
|
|
||||||
CODEC_ID_PCM_ALAW,
|
|
||||||
0,
|
|
||||||
raw_write_header,
|
|
||||||
raw_write_packet,
|
|
||||||
raw_write_trailer,
|
|
||||||
|
|
||||||
raw_read_header,
|
|
||||||
raw_read_packet,
|
|
||||||
raw_read_close,
|
|
||||||
};
|
|
||||||
|
|
||||||
int rawvideo_read_packet(AVFormatContext *s,
|
int rawvideo_read_packet(AVFormatContext *s,
|
||||||
AVPacket *pkt)
|
AVPacket *pkt)
|
||||||
@ -416,18 +382,65 @@ int rawvideo_read_packet(AVFormatContext *s,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat rawvideo_format = {
|
AVInputFormat rawvideo_iformat = {
|
||||||
|
"rawvideo",
|
||||||
|
"raw video format",
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
raw_read_header,
|
||||||
|
rawvideo_read_packet,
|
||||||
|
raw_read_close,
|
||||||
|
extensions: "yuv",
|
||||||
|
value: CODEC_ID_RAWVIDEO,
|
||||||
|
};
|
||||||
|
|
||||||
|
AVOutputFormat rawvideo_oformat = {
|
||||||
"rawvideo",
|
"rawvideo",
|
||||||
"raw video format",
|
"raw video format",
|
||||||
NULL,
|
NULL,
|
||||||
"yuv",
|
"yuv",
|
||||||
|
0,
|
||||||
CODEC_ID_NONE,
|
CODEC_ID_NONE,
|
||||||
CODEC_ID_RAWVIDEO,
|
CODEC_ID_RAWVIDEO,
|
||||||
raw_write_header,
|
raw_write_header,
|
||||||
raw_write_packet,
|
raw_write_packet,
|
||||||
raw_write_trailer,
|
raw_write_trailer,
|
||||||
|
|
||||||
raw_read_header,
|
|
||||||
rawvideo_read_packet,
|
|
||||||
raw_read_close,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int raw_init(void)
|
||||||
|
{
|
||||||
|
av_register_input_format(&mp3_iformat);
|
||||||
|
av_register_output_format(&mp2_oformat);
|
||||||
|
|
||||||
|
av_register_input_format(&ac3_iformat);
|
||||||
|
av_register_output_format(&ac3_oformat);
|
||||||
|
|
||||||
|
av_register_output_format(&h263_oformat);
|
||||||
|
|
||||||
|
av_register_input_format(&mpegvideo_iformat);
|
||||||
|
av_register_output_format(&mpeg1video_oformat);
|
||||||
|
|
||||||
|
av_register_input_format(&mjpeg_iformat);
|
||||||
|
av_register_output_format(&mjpeg_oformat);
|
||||||
|
|
||||||
|
av_register_input_format(&pcm_s16le_iformat);
|
||||||
|
av_register_output_format(&pcm_s16le_oformat);
|
||||||
|
av_register_input_format(&pcm_s16be_iformat);
|
||||||
|
av_register_output_format(&pcm_s16be_oformat);
|
||||||
|
av_register_input_format(&pcm_u16le_iformat);
|
||||||
|
av_register_output_format(&pcm_u16le_oformat);
|
||||||
|
av_register_input_format(&pcm_u16be_iformat);
|
||||||
|
av_register_output_format(&pcm_u16be_oformat);
|
||||||
|
av_register_input_format(&pcm_s8_iformat);
|
||||||
|
av_register_output_format(&pcm_s8_oformat);
|
||||||
|
av_register_input_format(&pcm_u8_iformat);
|
||||||
|
av_register_output_format(&pcm_u8_oformat);
|
||||||
|
av_register_input_format(&pcm_mulaw_iformat);
|
||||||
|
av_register_output_format(&pcm_mulaw_oformat);
|
||||||
|
av_register_input_format(&pcm_alaw_iformat);
|
||||||
|
av_register_output_format(&pcm_alaw_oformat);
|
||||||
|
|
||||||
|
av_register_input_format(&rawvideo_iformat);
|
||||||
|
av_register_output_format(&rawvideo_oformat);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
57
libav/rm.c
57
libav/rm.c
@ -281,17 +281,11 @@ static void write_packet_header(AVFormatContext *ctx, StreamInfo *stream,
|
|||||||
|
|
||||||
static int rm_write_header(AVFormatContext *s)
|
static int rm_write_header(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
|
RMContext *rm = s->priv_data;
|
||||||
StreamInfo *stream;
|
StreamInfo *stream;
|
||||||
RMContext *rm;
|
|
||||||
int n;
|
int n;
|
||||||
AVCodecContext *codec;
|
AVCodecContext *codec;
|
||||||
|
|
||||||
rm = av_malloc(sizeof(RMContext));
|
|
||||||
if (!rm)
|
|
||||||
return -1;
|
|
||||||
memset(rm, 0, sizeof(RMContext));
|
|
||||||
s->priv_data = rm;
|
|
||||||
|
|
||||||
for(n=0;n<s->nb_streams;n++) {
|
for(n=0;n<s->nb_streams;n++) {
|
||||||
s->streams[n]->id = n;
|
s->streams[n]->id = n;
|
||||||
codec = &s->streams[n]->codec;
|
codec = &s->streams[n]->codec;
|
||||||
@ -438,8 +432,6 @@ static int rm_write_trailer(AVFormatContext *s)
|
|||||||
put_be32(pb, 0);
|
put_be32(pb, 0);
|
||||||
}
|
}
|
||||||
put_flush_packet(pb);
|
put_flush_packet(pb);
|
||||||
|
|
||||||
av_free(rm);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -475,7 +467,7 @@ static void get_str8(ByteIOContext *pb, char *buf, int buf_size)
|
|||||||
|
|
||||||
static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||||
{
|
{
|
||||||
RMContext *rm;
|
RMContext *rm = s->priv_data;
|
||||||
AVStream *st;
|
AVStream *st;
|
||||||
ByteIOContext *pb = &s->pb;
|
ByteIOContext *pb = &s->pb;
|
||||||
unsigned int tag, v;
|
unsigned int tag, v;
|
||||||
@ -487,10 +479,6 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
|
|
||||||
if (get_le32(pb) != MKTAG('.', 'R', 'M', 'F'))
|
if (get_le32(pb) != MKTAG('.', 'R', 'M', 'F'))
|
||||||
return -EIO;
|
return -EIO;
|
||||||
rm = av_mallocz(sizeof(RMContext));
|
|
||||||
if (!rm)
|
|
||||||
return -ENOMEM;
|
|
||||||
s->priv_data = rm;
|
|
||||||
|
|
||||||
get_be32(pb); /* header size */
|
get_be32(pb); /* header size */
|
||||||
get_be16(pb);
|
get_be16(pb);
|
||||||
@ -579,7 +567,7 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
st->codec.codec_id = CODEC_ID_AC3;
|
st->codec.codec_id = CODEC_ID_AC3;
|
||||||
} else {
|
} else {
|
||||||
st->codec.codec_id = CODEC_ID_NONE;
|
st->codec.codec_id = CODEC_ID_NONE;
|
||||||
nstrcpy(st->codec.codec_name, sizeof(st->codec.codec_name),
|
pstrcpy(st->codec.codec_name, sizeof(st->codec.codec_name),
|
||||||
buf);
|
buf);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -706,23 +694,48 @@ static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
|
|||||||
|
|
||||||
static int rm_read_close(AVFormatContext *s)
|
static int rm_read_close(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
RMContext *rm = s->priv_data;
|
|
||||||
av_free(rm);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat rm_format = {
|
static int rm_probe(AVProbeData *p)
|
||||||
|
{
|
||||||
|
/* check file header */
|
||||||
|
if (p->buf_size <= 32)
|
||||||
|
return 0;
|
||||||
|
if (p->buf[0] == '.' && p->buf[1] == 'R' &&
|
||||||
|
p->buf[2] == 'M' && p->buf[3] == 'F' &&
|
||||||
|
p->buf[4] == 0 && p->buf[5] == 0)
|
||||||
|
return AVPROBE_SCORE_MAX;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
AVInputFormat rm_iformat = {
|
||||||
|
"rm",
|
||||||
|
"rm format",
|
||||||
|
sizeof(RMContext),
|
||||||
|
rm_probe,
|
||||||
|
rm_read_header,
|
||||||
|
rm_read_packet,
|
||||||
|
rm_read_close,
|
||||||
|
};
|
||||||
|
|
||||||
|
AVOutputFormat rm_oformat = {
|
||||||
"rm",
|
"rm",
|
||||||
"rm format",
|
"rm format",
|
||||||
"audio/x-pn-realaudio",
|
"audio/x-pn-realaudio",
|
||||||
"rm,ra",
|
"rm,ra",
|
||||||
|
sizeof(RMContext),
|
||||||
CODEC_ID_AC3,
|
CODEC_ID_AC3,
|
||||||
CODEC_ID_RV10,
|
CODEC_ID_RV10,
|
||||||
rm_write_header,
|
rm_write_header,
|
||||||
rm_write_packet,
|
rm_write_packet,
|
||||||
rm_write_trailer,
|
rm_write_trailer,
|
||||||
|
|
||||||
rm_read_header,
|
|
||||||
rm_read_packet,
|
|
||||||
rm_read_close,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int rm_init(void)
|
||||||
|
{
|
||||||
|
av_register_input_format(&rm_iformat);
|
||||||
|
av_register_output_format(&rm_oformat);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
37
libav/swf.c
37
libav/swf.c
@ -438,6 +438,19 @@ static int get_swf_tag(ByteIOContext *pb, int *len_ptr)
|
|||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int swf_probe(AVProbeData *p)
|
||||||
|
{
|
||||||
|
/* check file header */
|
||||||
|
if (p->buf_size <= 16)
|
||||||
|
return 0;
|
||||||
|
if (p->buf[0] == 'F' && p->buf[1] == 'W' &&
|
||||||
|
p->buf[2] == 'S' && p->buf[3] == '\0')
|
||||||
|
return AVPROBE_SCORE_MAX;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
static int swf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
||||||
{
|
{
|
||||||
ByteIOContext *pb = &s->pb;
|
ByteIOContext *pb = &s->pb;
|
||||||
@ -528,18 +541,32 @@ static int swf_read_close(AVFormatContext *s)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat swf_format = {
|
static AVInputFormat swf_iformat = {
|
||||||
|
"swf",
|
||||||
|
"Flash format",
|
||||||
|
0,
|
||||||
|
swf_probe,
|
||||||
|
swf_read_header,
|
||||||
|
swf_read_packet,
|
||||||
|
swf_read_close,
|
||||||
|
};
|
||||||
|
|
||||||
|
static AVOutputFormat swf_oformat = {
|
||||||
"swf",
|
"swf",
|
||||||
"Flash format",
|
"Flash format",
|
||||||
"application/x-shockwave-flash",
|
"application/x-shockwave-flash",
|
||||||
"swf",
|
"swf",
|
||||||
|
sizeof(SWFContext),
|
||||||
CODEC_ID_MP2,
|
CODEC_ID_MP2,
|
||||||
CODEC_ID_MJPEG,
|
CODEC_ID_MJPEG,
|
||||||
swf_write_header,
|
swf_write_header,
|
||||||
swf_write_packet,
|
swf_write_packet,
|
||||||
swf_write_trailer,
|
swf_write_trailer,
|
||||||
|
|
||||||
swf_read_header,
|
|
||||||
swf_read_packet,
|
|
||||||
swf_read_close,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int swf_init(void)
|
||||||
|
{
|
||||||
|
av_register_input_format(&swf_iformat);
|
||||||
|
av_register_output_format(&swf_oformat);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
56
libav/wav.c
56
libav/wav.c
@ -110,16 +110,10 @@ typedef struct {
|
|||||||
|
|
||||||
static int wav_write_header(AVFormatContext *s)
|
static int wav_write_header(AVFormatContext *s)
|
||||||
{
|
{
|
||||||
WAVContext *wav;
|
WAVContext *wav = s->priv_data;
|
||||||
ByteIOContext *pb = &s->pb;
|
ByteIOContext *pb = &s->pb;
|
||||||
offset_t fmt;
|
offset_t fmt;
|
||||||
|
|
||||||
wav = av_malloc(sizeof(WAVContext));
|
|
||||||
if (!wav)
|
|
||||||
return -1;
|
|
||||||
memset(wav, 0, sizeof(WAVContext));
|
|
||||||
s->priv_data = wav;
|
|
||||||
|
|
||||||
put_tag(pb, "RIFF");
|
put_tag(pb, "RIFF");
|
||||||
put_le32(pb, 0); /* file length */
|
put_le32(pb, 0); /* file length */
|
||||||
put_tag(pb, "WAVE");
|
put_tag(pb, "WAVE");
|
||||||
@ -165,8 +159,6 @@ static int wav_write_trailer(AVFormatContext *s)
|
|||||||
|
|
||||||
put_flush_packet(pb);
|
put_flush_packet(pb);
|
||||||
}
|
}
|
||||||
|
|
||||||
av_free(wav);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,6 +183,20 @@ static int find_tag(ByteIOContext *pb, UINT32 tag1)
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int wav_probe(AVProbeData *p)
|
||||||
|
{
|
||||||
|
/* check file header */
|
||||||
|
if (p->buf_size <= 32)
|
||||||
|
return 0;
|
||||||
|
if (p->buf[0] == 'R' && p->buf[1] == 'I' &&
|
||||||
|
p->buf[2] == 'F' && p->buf[3] == 'F' &&
|
||||||
|
p->buf[8] == 'W' && p->buf[9] == 'A' &&
|
||||||
|
p->buf[10] == 'V' && p->buf[11] == 'E')
|
||||||
|
return AVPROBE_SCORE_MAX;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* wav input */
|
/* wav input */
|
||||||
static int wav_read_header(AVFormatContext *s,
|
static int wav_read_header(AVFormatContext *s,
|
||||||
AVFormatParameters *ap)
|
AVFormatParameters *ap)
|
||||||
@ -233,14 +239,10 @@ static int wav_read_header(AVFormatContext *s,
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* now we are ready: build format streams */
|
/* now we are ready: build format streams */
|
||||||
st = av_malloc(sizeof(AVStream));
|
st = av_new_stream(s, 0);
|
||||||
if (!st)
|
if (!st)
|
||||||
return -1;
|
return AVERROR_NOMEM;
|
||||||
s->nb_streams = 1;
|
|
||||||
s->streams[0] = st;
|
|
||||||
|
|
||||||
st->id = 0;
|
|
||||||
|
|
||||||
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
st->codec.codec_type = CODEC_TYPE_AUDIO;
|
||||||
st->codec.codec_tag = id;
|
st->codec.codec_tag = id;
|
||||||
st->codec.codec_id = wav_codec_get_id(id, bps);
|
st->codec.codec_id = wav_codec_get_id(id, bps);
|
||||||
@ -280,18 +282,32 @@ static int wav_read_close(AVFormatContext *s)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
AVFormat wav_format = {
|
static AVInputFormat wav_iformat = {
|
||||||
|
"wav",
|
||||||
|
"wav format",
|
||||||
|
0,
|
||||||
|
wav_probe,
|
||||||
|
wav_read_header,
|
||||||
|
wav_read_packet,
|
||||||
|
wav_read_close,
|
||||||
|
};
|
||||||
|
|
||||||
|
static AVOutputFormat wav_oformat = {
|
||||||
"wav",
|
"wav",
|
||||||
"wav format",
|
"wav format",
|
||||||
"audio/x-wav",
|
"audio/x-wav",
|
||||||
"wav",
|
"wav",
|
||||||
|
sizeof(WAVContext),
|
||||||
CODEC_ID_PCM_S16LE,
|
CODEC_ID_PCM_S16LE,
|
||||||
CODEC_ID_NONE,
|
CODEC_ID_NONE,
|
||||||
wav_write_header,
|
wav_write_header,
|
||||||
wav_write_packet,
|
wav_write_packet,
|
||||||
wav_write_trailer,
|
wav_write_trailer,
|
||||||
|
|
||||||
wav_read_header,
|
|
||||||
wav_read_packet,
|
|
||||||
wav_read_close,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int wav_init(void)
|
||||||
|
{
|
||||||
|
av_register_input_format(&wav_iformat);
|
||||||
|
av_register_output_format(&wav_oformat);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user