Mercurial > libavformat.hg
changeset 868:c6b1dde68f3a libavformat
Ingenient MJPEG support, more at http://www.artificis.hu/files/texts/ingenient.txt
author | alex |
---|---|
date | Sat, 29 Oct 2005 00:52:02 +0000 |
parents | 5b4853b0298e |
children | 8ff4e8ef8124 |
files | raw.c |
diffstat | 1 files changed, 52 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/raw.c Wed Oct 26 12:15:09 2005 +0000 +++ b/raw.c Sat Oct 29 00:52:02 2005 +0000 @@ -1,6 +1,7 @@ /* * RAW encoder and decoder * Copyright (c) 2001 Fabrice Bellard. + * Copyright (c) 2005 Alex Beregszaszi * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -120,6 +121,42 @@ return ret; } +// 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_IO; // 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(NULL, 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_IO; + + 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 AVERROR_IO; + } + pkt->size = ret; + return ret; +} + static int raw_read_close(AVFormatContext *s) { return 0; @@ -309,7 +346,7 @@ AVInputFormat shorten_iformat = { "shn", - "raw shn", + "raw shorten", 0, NULL, shorten_read_header, @@ -516,6 +553,18 @@ .value = CODEC_ID_MJPEG, }; +AVInputFormat ingenient_iformat = { + "ingenient", + "Ingenient MJPEG", + 0, + NULL, + video_read_header, + ingenient_read_packet, + raw_read_close, + .extensions = "cgi", // FIXME + .value = CODEC_ID_MJPEG, +}; + #ifdef CONFIG_MUXERS AVOutputFormat mjpeg_oformat = { "mjpeg", @@ -714,6 +763,8 @@ av_register_input_format(&mjpeg_iformat); av_register_output_format(&mjpeg_oformat); + + av_register_input_format(&ingenient_iformat); av_register_input_format(&pcm_s16le_iformat); av_register_output_format(&pcm_s16le_oformat);