*/
#include "avformat.h"
+#ifdef CONFIG_ENCODERS
/* simple formats */
static int raw_write_header(struct AVFormatContext *s)
{
}
static int raw_write_packet(struct AVFormatContext *s, int stream_index,
- unsigned char *buf, int size, int force_pts)
+ const uint8_t *buf, int size, int64_t pts)
{
put_buffer(&s->pb, buf, size);
put_flush_packet(&s->pb);
{
return 0;
}
+#endif //CONFIG_ENCODERS
/* raw input */
static int raw_read_header(AVFormatContext *s, AVFormatParameters *ap)
st->codec.frame_rate_base = ap->frame_rate_base;
st->codec.width = ap->width;
st->codec.height = ap->height;
+ st->codec.pix_fmt = ap->pix_fmt;
break;
default:
return -1;
return 0;
}
-/* mp3 read */
-static int mp3_read_header(AVFormatContext *s,
- AVFormatParameters *ap)
-{
- AVStream *st;
- int pos;
-
- st = av_new_stream(s, 0);
- if (!st)
- return AVERROR_NOMEM;
-
- st->codec.codec_type = CODEC_TYPE_AUDIO;
- st->codec.codec_id = CODEC_ID_MP2;
-
- /* looking for 11111111 111MMLLC - MPEG synchronization tag
- MM: 00 - MPEG-2.5, 10 - MPEG-2, 11 - MPEG-1
- LL: 11 - Layer I, 10 - Layer II, 01 - Layer III
- XXX: this code does not read more bytes from file
- so if ID3 (or other stuff) length > IO_BUFFER_SIZE it fails back to CODEC_ID_MP2 */
- for(pos=0; pos < s->pb.buffer_size-1; pos++)
- if( s->pb.buffer[pos] == 0xFF && (s->pb.buffer[pos] & 0xE0) == 0xE0 )
- break;
-
- if( pos < s->pb.buffer_size-1 && (s->pb.buffer[pos+1] & 6) == 2 )
- st->codec.codec_id = CODEC_ID_MP3LAME;
-
- /* the parameters will be extracted from the compressed bitstream */
- return 0;
-}
-
/* ac3 read */
static int ac3_read_header(AVFormatContext *s,
AVFormatParameters *ap)
return 0;
}
-AVInputFormat mp3_iformat = {
- "mp3",
- "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",
-#ifdef CONFIG_MP3LAME
- "mp2",
-#else
- "mp2,mp3",
-#endif
- 0,
- CODEC_ID_MP2,
- 0,
- raw_write_header,
- raw_write_packet,
- raw_write_trailer,
-};
+static int h263_probe(AVProbeData *p)
+{
+ int code;
+ const uint8_t *d;
-#ifdef CONFIG_MP3LAME
-AVOutputFormat mp3_oformat = {
- "mp3",
- "MPEG audio layer 3",
- "audio/x-mpeg",
- "mp3",
- 0,
- CODEC_ID_MP3LAME,
- 0,
- raw_write_header,
- raw_write_packet,
- raw_write_trailer,
-};
-#endif
+ if (p->buf_size < 6)
+ return 0;
+ d = p->buf;
+ code = (d[0] << 14) | (d[1] << 6) | (d[2] >> 2);
+ if (code == 0x20) {
+ return 50;
+ }
+ return 0;
+}
AVInputFormat ac3_iformat = {
"ac3",
.extensions = "ac3",
};
+#ifdef CONFIG_ENCODERS
AVOutputFormat ac3_oformat = {
"ac3",
"raw ac3",
raw_write_packet,
raw_write_trailer,
};
+#endif //CONFIG_ENCODERS
+
+AVInputFormat h263_iformat = {
+ "h263",
+ "raw h263",
+ 0,
+ h263_probe,
+ video_read_header,
+ raw_read_packet,
+ raw_read_close,
+// .extensions = "h263", //FIXME remove after writing mpeg4_probe
+ .value = CODEC_ID_H263,
+};
+#ifdef CONFIG_ENCODERS
AVOutputFormat h263_oformat = {
"h263",
"raw h263",
raw_write_packet,
raw_write_trailer,
};
+#endif //CONFIG_ENCODERS
AVInputFormat m4v_iformat = {
"m4v",
.value = CODEC_ID_MPEG4,
};
+#ifdef CONFIG_ENCODERS
AVOutputFormat m4v_oformat = {
"m4v",
"raw MPEG4 video format",
raw_write_packet,
raw_write_trailer,
};
+#endif //CONFIG_ENCODERS
AVInputFormat h264_iformat = {
"h264",
.value = CODEC_ID_H264,
};
+#ifdef CONFIG_ENCODERS
AVOutputFormat h264_oformat = {
"h264",
"raw H264 video format",
raw_write_packet,
raw_write_trailer,
};
+#endif //CONFIG_ENCODERS
AVInputFormat mpegvideo_iformat = {
"mpegvideo",
.value = CODEC_ID_MPEG1VIDEO,
};
+#ifdef CONFIG_ENCODERS
AVOutputFormat mpeg1video_oformat = {
"mpeg1video",
"MPEG video",
raw_write_packet,
raw_write_trailer,
};
+#endif //CONFIG_ENCODERS
AVInputFormat mjpeg_iformat = {
"mjpeg",
.value = CODEC_ID_MJPEG,
};
+#ifdef CONFIG_ENCODERS
AVOutputFormat mjpeg_oformat = {
"mjpeg",
"MJPEG video",
raw_write_packet,
raw_write_trailer,
};
+#endif //CONFIG_ENCODERS
/* pcm formats */
+#if !defined(CONFIG_ENCODERS) && defined(CONFIG_DECODERS)
+
+#define PCMDEF(name, long_name, ext, codec) \
+AVInputFormat pcm_ ## name ## _iformat = {\
+ #name,\
+ long_name,\
+ 0,\
+ NULL,\
+ raw_read_header,\
+ raw_read_packet,\
+ raw_read_close,\
+ .extensions = ext,\
+ .value = codec,\
+};
+
+#else
#define PCMDEF(name, long_name, ext, codec) \
AVInputFormat pcm_ ## name ## _iformat = {\
raw_write_packet,\
raw_write_trailer,\
};
+#endif //CONFIG_ENCODERS
#ifdef WORDS_BIGENDIAN
#define BE_DEF(s) s
width = st->codec.width;
height = st->codec.height;
- switch(st->codec.pix_fmt) {
- case PIX_FMT_YUV420P:
- packet_size = (width * height * 3) / 2;
- break;
- case PIX_FMT_YUV422:
- packet_size = (width * height * 2);
- break;
- case PIX_FMT_BGR24:
- case PIX_FMT_RGB24:
- packet_size = (width * height * 3);
- break;
- default:
+ packet_size = avpicture_get_size(st->codec.pix_fmt, width, height);
+ if (packet_size < 0)
av_abort();
- break;
- }
if (av_new_packet(pkt, packet_size) < 0)
return -EIO;
.value = CODEC_ID_RAWVIDEO,
};
+#ifdef CONFIG_ENCODERS
AVOutputFormat rawvideo_oformat = {
"rawvideo",
"raw video format",
raw_write_packet,
raw_write_trailer,
};
+#endif //CONFIG_ENCODERS
+#ifdef CONFIG_ENCODERS
static int null_write_packet(struct AVFormatContext *s,
int stream_index,
- unsigned char *buf, int size, int force_pts)
+ const uint8_t *buf, int size, int64_t pts)
{
return 0;
}
raw_write_trailer,
.flags = AVFMT_NOFILE | AVFMT_RAWPICTURE,
};
+#endif //CONFIG_ENCODERS
+
+#ifndef CONFIG_ENCODERS
+#define av_register_output_format(format)
+#endif
+#ifndef CONFIG_DECODERS
+#define av_register_input_format(format)
+#endif
int raw_init(void)
{
- av_register_input_format(&mp3_iformat);
- av_register_output_format(&mp2_oformat);
-#ifdef CONFIG_MP3LAME
- av_register_output_format(&mp3_oformat);
-#endif
av_register_input_format(&ac3_iformat);
av_register_output_format(&ac3_oformat);
+ av_register_input_format(&h263_iformat);
av_register_output_format(&h263_oformat);
av_register_input_format(&m4v_iformat);