/src/ffmpeg/libavformat/img2_alias_pix.c
Line | Count | Source |
1 | | /* |
2 | | * Alias PIX image demuxer |
3 | | * Copyright (c) 2014 Michael Niedermayer |
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 "demux.h" |
23 | | #include "img2.h" |
24 | | #include "libavcodec/bytestream.h" |
25 | | |
26 | | static int alias_pix_read_probe(const AVProbeData *p) |
27 | 976k | { |
28 | 976k | const uint8_t *b = p->buf; |
29 | 976k | const uint8_t *end = b + p->buf_size; |
30 | 976k | int width = bytestream_get_be16(&b); |
31 | 976k | int height = bytestream_get_be16(&b); |
32 | 976k | av_unused int ox = bytestream_get_be16(&b); |
33 | 976k | av_unused int oy = bytestream_get_be16(&b); |
34 | 976k | int bpp = bytestream_get_be16(&b); |
35 | 976k | int x, y; |
36 | | |
37 | 976k | if (!width || !height) |
38 | 187k | return 0; |
39 | | |
40 | 788k | if (bpp != 24 && bpp != 8) |
41 | 785k | return 0; |
42 | | |
43 | 3.67k | for (y=0; y<2 && y<height; y++) { |
44 | 20.1k | for (x=0; x<width; ) { |
45 | 19.3k | int count = *b++; |
46 | 19.3k | if (count == 0 || x + count > width) |
47 | 2.58k | return 0; |
48 | 16.7k | if (b > end) |
49 | 0 | return AVPROBE_SCORE_MAX / 8; |
50 | 16.7k | b += bpp / 8; |
51 | 16.7k | x += count; |
52 | 16.7k | } |
53 | 3.32k | } |
54 | | |
55 | 346 | return AVPROBE_SCORE_EXTENSION + 1; |
56 | 2.92k | } |
57 | | |
58 | | static const AVClass image2_alias_pix_class = { |
59 | | .class_name = "alias_pix demuxer", |
60 | | .item_name = av_default_item_name, |
61 | | .option = ff_img_options, |
62 | | .version = LIBAVUTIL_VERSION_INT, |
63 | | }; |
64 | | |
65 | | const FFInputFormat ff_image2_alias_pix_demuxer = { |
66 | | .p.name = "alias_pix", |
67 | | .p.long_name = NULL_IF_CONFIG_SMALL("Alias/Wavefront PIX image"), |
68 | | .p.priv_class = &image2_alias_pix_class, |
69 | | .priv_data_size = sizeof(VideoDemuxData), |
70 | | .read_probe = alias_pix_read_probe, |
71 | | .read_header = ff_img_read_header, |
72 | | .read_packet = ff_img_read_packet, |
73 | | .raw_codec_id = AV_CODEC_ID_ALIAS_PIX, |
74 | | }; |