Statistics
| Branch: | Revision:

ffmpeg / libavformat / ingenientdec.c @ e63a3628

History | View | Annotate | Download (2.05 KB)

1
/*
2
 * RAW Ingenient MJPEG demuxer
3
 * Copyright (c) 2005 Alex Beregszaszi
4
 *
5
 * This file is part of FFmpeg.
6
 *
7
 * FFmpeg 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
 * FFmpeg 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 FFmpeg; 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
26
static 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
    url_fskip(s->pb, 8); // zero + size (padded?)
39
    url_fskip(s->pb, 2);
40
    unk1 = avio_rl16(s->pb);
41
    unk2 = avio_rl16(s->pb);
42
    url_fskip(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 = url_ftell(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

    
61
AVInputFormat ff_ingenient_demuxer = {
62
    "ingenient",
63
    NULL_IF_CONFIG_SMALL("raw Ingenient MJPEG"),
64
    0,
65
    NULL,
66
    ff_raw_video_read_header,
67
    ingenient_read_packet,
68
    .flags= AVFMT_GENERIC_INDEX,
69
    .extensions = "cgi", // FIXME
70
    .value = CODEC_ID_MJPEG,
71
};