diff --git a/libavformat/Makefile b/libavformat/Makefile index f6d1f2c309..0034f84dd9 100644 --- a/libavformat/Makefile +++ b/libavformat/Makefile @@ -97,7 +97,7 @@ OBJS-$(CONFIG_IMAGE2_DEMUXER) += img2.o OBJS-$(CONFIG_IMAGE2_MUXER) += img2.o OBJS-$(CONFIG_IMAGE2PIPE_DEMUXER) += img2.o OBJS-$(CONFIG_IMAGE2PIPE_MUXER) += img2.o -OBJS-$(CONFIG_INGENIENT_DEMUXER) += raw.o +OBJS-$(CONFIG_INGENIENT_DEMUXER) += ingenientdec.o raw.o OBJS-$(CONFIG_IPMOVIE_DEMUXER) += ipmovie.o OBJS-$(CONFIG_ISS_DEMUXER) += iss.o OBJS-$(CONFIG_IV8_DEMUXER) += iv8.o diff --git a/libavformat/ingenientdec.c b/libavformat/ingenientdec.c new file mode 100644 index 0000000000..48f82ed333 --- /dev/null +++ b/libavformat/ingenientdec.c @@ -0,0 +1,71 @@ +/* + * RAW Ingenient MJPEG demuxer + * Copyright (c) 2005 Alex Beregszaszi + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "avformat.h" +#include "raw.h" + +// http://www.artificis.hu/files/texts/ingenient.txt +static int ingenient_read_packet(AVFormatContext *s, AVPacket *pkt) +{ + int ret, size, w, h, unk1, unk2; + + if (get_le32(s->pb) != MKTAG('M', 'J', 'P', 'G')) + return AVERROR(EIO); // FIXME + + size = get_le32(s->pb); + + w = get_le16(s->pb); + h = get_le16(s->pb); + + url_fskip(s->pb, 8); // zero + size (padded?) + url_fskip(s->pb, 2); + unk1 = get_le16(s->pb); + unk2 = get_le16(s->pb); + url_fskip(s->pb, 22); // ASCII timestamp + + av_log(s, AV_LOG_DEBUG, "Ingenient packet: size=%d, width=%d, height=%d, unk1=%d unk2=%d\n", + size, w, h, unk1, unk2); + + if (av_new_packet(pkt, size) < 0) + return AVERROR(ENOMEM); + + pkt->pos = url_ftell(s->pb); + pkt->stream_index = 0; + ret = get_buffer(s->pb, pkt->data, size); + if (ret < 0) { + av_free_packet(pkt); + return ret; + } + pkt->size = ret; + return ret; +} + +AVInputFormat ingenient_demuxer = { + "ingenient", + NULL_IF_CONFIG_SMALL("raw Ingenient MJPEG"), + 0, + NULL, + ff_raw_video_read_header, + ingenient_read_packet, + .flags= AVFMT_GENERIC_INDEX, + .extensions = "cgi", // FIXME + .value = CODEC_ID_MJPEG, +}; diff --git a/libavformat/raw.c b/libavformat/raw.c index 55457bd4e0..9b77169c0e 100644 --- a/libavformat/raw.c +++ b/libavformat/raw.c @@ -162,44 +162,6 @@ static int rawvideo_read_packet(AVFormatContext *s, AVPacket *pkt) } #endif -#if CONFIG_INGENIENT_DEMUXER -// http://www.artificis.hu/files/texts/ingenient.txt -static int ingenient_read_packet(AVFormatContext *s, AVPacket *pkt) -{ - int ret, size, w, h, unk1, unk2; - - if (get_le32(s->pb) != MKTAG('M', 'J', 'P', 'G')) - return AVERROR(EIO); // FIXME - - size = get_le32(s->pb); - - w = get_le16(s->pb); - h = get_le16(s->pb); - - url_fskip(s->pb, 8); // zero + size (padded?) - url_fskip(s->pb, 2); - unk1 = get_le16(s->pb); - unk2 = get_le16(s->pb); - url_fskip(s->pb, 22); // ASCII timestamp - - av_log(s, AV_LOG_DEBUG, "Ingenient packet: size=%d, width=%d, height=%d, unk1=%d unk2=%d\n", - size, w, h, unk1, unk2); - - if (av_new_packet(pkt, size) < 0) - return AVERROR(ENOMEM); - - pkt->pos = url_ftell(s->pb); - pkt->stream_index = 0; - ret = get_buffer(s->pb, pkt->data, size); - if (ret < 0) { - av_free_packet(pkt); - return ret; - } - pkt->size = ret; - return ret; -} -#endif - #if CONFIG_DEMUXERS int pcm_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags) @@ -248,7 +210,7 @@ int ff_raw_audio_read_header(AVFormatContext *s, } /* MPEG-1/H.263 input */ -static int video_read_header(AVFormatContext *s, +int ff_raw_video_read_header(AVFormatContext *s, AVFormatParameters *ap) { AVStream *st; @@ -642,7 +604,7 @@ AVInputFormat dirac_demuxer = { NULL_IF_CONFIG_SMALL("raw Dirac"), 0, dirac_probe, - video_read_header, + ff_raw_video_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, .value = CODEC_ID_DIRAC, @@ -670,7 +632,7 @@ AVInputFormat dnxhd_demuxer = { NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"), 0, dnxhd_probe, - video_read_header, + ff_raw_video_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, .value = CODEC_ID_DNXHD, @@ -756,7 +718,7 @@ AVInputFormat h261_demuxer = { NULL_IF_CONFIG_SMALL("raw H.261"), 0, h261_probe, - video_read_header, + ff_raw_video_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, .extensions = "h261", @@ -785,7 +747,7 @@ AVInputFormat h263_demuxer = { NULL_IF_CONFIG_SMALL("raw H.263"), 0, h263_probe, - video_read_header, + ff_raw_video_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, // .extensions = "h263", //FIXME remove after writing mpeg4_probe @@ -814,7 +776,7 @@ AVInputFormat h264_demuxer = { NULL_IF_CONFIG_SMALL("raw H.264 video format"), 0, h264_probe, - video_read_header, + ff_raw_video_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, .extensions = "h26l,h264,264", //FIXME remove after writing mpeg4_probe @@ -852,27 +814,13 @@ AVOutputFormat cavsvideo_muxer = { }; #endif -#if CONFIG_INGENIENT_DEMUXER -AVInputFormat ingenient_demuxer = { - "ingenient", - NULL_IF_CONFIG_SMALL("raw Ingenient MJPEG"), - 0, - NULL, - video_read_header, - ingenient_read_packet, - .flags= AVFMT_GENERIC_INDEX, - .extensions = "cgi", // FIXME - .value = CODEC_ID_MJPEG, -}; -#endif - #if CONFIG_M4V_DEMUXER AVInputFormat m4v_demuxer = { "m4v", NULL_IF_CONFIG_SMALL("raw MPEG-4 video format"), 0, mpeg4video_probe, /** probing for MPEG-4 data */ - video_read_header, + ff_raw_video_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, .extensions = "m4v", @@ -901,7 +849,7 @@ AVInputFormat mjpeg_demuxer = { NULL_IF_CONFIG_SMALL("raw MJPEG video"), 0, NULL, - video_read_header, + ff_raw_video_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, .extensions = "mjpg,mjpeg", @@ -1030,7 +978,7 @@ AVInputFormat mpegvideo_demuxer = { NULL_IF_CONFIG_SMALL("raw MPEG video"), 0, mpegvideo_probe, - video_read_header, + ff_raw_video_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, .value = CODEC_ID_MPEG1VIDEO, @@ -1043,7 +991,7 @@ AVInputFormat cavsvideo_demuxer = { NULL_IF_CONFIG_SMALL("raw Chinese AVS video"), 0, cavsvideo_probe, - video_read_header, + ff_raw_video_read_header, ff_raw_read_partial_packet, .flags= AVFMT_GENERIC_INDEX, .value = CODEC_ID_CAVS, @@ -1114,7 +1062,7 @@ AVInputFormat vc1_demuxer = { NULL_IF_CONFIG_SMALL("raw VC-1"), 0, NULL /* vc1_probe */, - video_read_header, + ff_raw_video_read_header, ff_raw_read_partial_packet, .extensions = "vc1", .value = CODEC_ID_VC1, diff --git a/libavformat/raw.h b/libavformat/raw.h index b59efa75a7..73d1d5d069 100644 --- a/libavformat/raw.h +++ b/libavformat/raw.h @@ -33,4 +33,6 @@ int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt); int ff_raw_audio_read_header(AVFormatContext *s, AVFormatParameters *ap); +int ff_raw_video_read_header(AVFormatContext *s, AVFormatParameters *ap); + #endif /* AVFORMAT_RAW_H */