1/* 2 * RAW Ingenient MJPEG demuxer 3 * Copyright (c) 2005 Alex Beregszaszi 4 * 5 * This file is part of Libav. 6 * 7 * Libav is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public 9 * License as published by the Free Software Foundation; either 10 * version 2.1 of the License, or (at your option) any later version. 11 * 12 * Libav is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with Libav; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 22#include "avformat.h" 23#include "rawdec.h" 24 25// http://www.artificis.hu/files/texts/ingenient.txt 26static int ingenient_read_packet(AVFormatContext *s, AVPacket *pkt) 27{ 28 int ret, size, w, h, unk1, unk2; 29 30 if (avio_rl32(s->pb) != MKTAG('M', 'J', 'P', 'G')) 31 return AVERROR(EIO); // FIXME 32 33 size = avio_rl32(s->pb); 34 35 w = avio_rl16(s->pb); 36 h = avio_rl16(s->pb); 37 38 avio_skip(s->pb, 8); // zero + size (padded?) 39 avio_skip(s->pb, 2); 40 unk1 = avio_rl16(s->pb); 41 unk2 = avio_rl16(s->pb); 42 avio_skip(s->pb, 22); // ASCII timestamp 43 44 av_log(s, AV_LOG_DEBUG, "Ingenient packet: size=%d, width=%d, height=%d, unk1=%d unk2=%d\n", 45 size, w, h, unk1, unk2); 46 47 if (av_new_packet(pkt, size) < 0) 48 return AVERROR(ENOMEM); 49 50 pkt->pos = avio_tell(s->pb); 51 pkt->stream_index = 0; 52 ret = avio_read(s->pb, pkt->data, size); 53 if (ret < 0) { 54 av_free_packet(pkt); 55 return ret; 56 } 57 pkt->size = ret; 58 return ret; 59} 60 61FF_RAWVIDEO_DEMUXER_CLASS(ingenient) 62 63AVInputFormat ff_ingenient_demuxer = { 64 .name = "ingenient", 65 .long_name = NULL_IF_CONFIG_SMALL("raw Ingenient MJPEG"), 66 .priv_data_size = sizeof(FFRawVideoDemuxerContext), 67 .read_header = ff_raw_video_read_header, 68 .read_packet = ingenient_read_packet, 69 .flags= AVFMT_GENERIC_INDEX, 70 .extensions = "cgi", // FIXME 71 .value = CODEC_ID_MJPEG, 72 .priv_class = &ingenient_demuxer_class, 73}; 74