annotate pnm.c @ 594:89a09ede50ad libavformat

First implementation of nsv demuxer. Get libavformat linked with lavc and lmp3lame is required. BeOS requires no undefined syms on link! (besides it's bad to leave undef syms)
author mmu_man
date Sat, 20 Nov 2004 23:10:07 +0000
parents 4b01f2d7a90c
children da1d5db0ce5c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
1 /*
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
2 * PNM image format
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
3 * Copyright (c) 2002, 2003 Fabrice Bellard.
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
4 *
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
8 * version 2 of the License, or (at your option) any later version.
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
9 *
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
13 * Lesser General Public License for more details.
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
14 *
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
16 * License along with this library; if not, write to the Free Software
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
18 */
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
19 #include "avformat.h"
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
20
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
21 static inline int pnm_space(int c)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
22 {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
23 return (c == ' ' || c == '\n' || c == '\r' || c == '\t');
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
24 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
25
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
26 static void pnm_get(ByteIOContext *f, char *str, int buf_size)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
27 {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
28 char *s;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
29 int c;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
30
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
31 /* skip spaces and comments */
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
32 for(;;) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
33 c = url_fgetc(f);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
34 if (c == '#') {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
35 do {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
36 c = url_fgetc(f);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
37 } while (c != '\n' && c != URL_EOF);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
38 } else if (!pnm_space(c)) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
39 break;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
40 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
41 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
42
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
43 s = str;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
44 while (c != URL_EOF && !pnm_space(c)) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
45 if ((s - str) < buf_size - 1)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
46 *s++ = c;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
47 c = url_fgetc(f);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
48 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
49 *s = '\0';
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
50 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
51
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
52 static int pnm_read1(ByteIOContext *f,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
53 int (*alloc_cb)(void *opaque, AVImageInfo *info), void *opaque,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
54 int allow_yuv)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
55 {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
56 int i, n, linesize, h;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
57 char buf1[32];
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
58 unsigned char *ptr;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
59 AVImageInfo info1, *info = &info1;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
60 int ret;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
61
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
62 pnm_get(f, buf1, sizeof(buf1));
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
63 if (!strcmp(buf1, "P4")) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
64 info->pix_fmt = PIX_FMT_MONOWHITE;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
65 } else if (!strcmp(buf1, "P5")) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
66 if (allow_yuv)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
67 info->pix_fmt = PIX_FMT_YUV420P;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
68 else
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
69 info->pix_fmt = PIX_FMT_GRAY8;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
70 } else if (!strcmp(buf1, "P6")) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
71 info->pix_fmt = PIX_FMT_RGB24;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
72 } else {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
73 return AVERROR_INVALIDDATA;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
74 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
75 pnm_get(f, buf1, sizeof(buf1));
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
76 info->width = atoi(buf1);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
77 if (info->width <= 0)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
78 return AVERROR_INVALIDDATA;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
79 pnm_get(f, buf1, sizeof(buf1));
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
80 info->height = atoi(buf1);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
81 if (info->height <= 0)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
82 return AVERROR_INVALIDDATA;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
83 if (info->pix_fmt != PIX_FMT_MONOWHITE) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
84 pnm_get(f, buf1, sizeof(buf1));
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
85 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
86
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
87 /* more check if YUV420 */
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
88 if (info->pix_fmt == PIX_FMT_YUV420P) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
89 if ((info->width & 1) != 0)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
90 return AVERROR_INVALIDDATA;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
91 h = (info->height * 2);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
92 if ((h % 3) != 0)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
93 return AVERROR_INVALIDDATA;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
94 h /= 3;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
95 info->height = h;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
96 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
97
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
98 ret = alloc_cb(opaque, info);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
99 if (ret)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
100 return ret;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
101
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
102 switch(info->pix_fmt) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
103 default:
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
104 return AVERROR_INVALIDDATA;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
105 case PIX_FMT_RGB24:
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
106 n = info->width * 3;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
107 goto do_read;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
108 case PIX_FMT_GRAY8:
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
109 n = info->width;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
110 goto do_read;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
111 case PIX_FMT_MONOWHITE:
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
112 n = (info->width + 7) >> 3;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
113 do_read:
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
114 ptr = info->pict.data[0];
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
115 linesize = info->pict.linesize[0];
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
116 for(i = 0; i < info->height; i++) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
117 get_buffer(f, ptr, n);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
118 ptr += linesize;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
119 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
120 break;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
121 case PIX_FMT_YUV420P:
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
122 {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
123 unsigned char *ptr1, *ptr2;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
124
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
125 n = info->width;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
126 ptr = info->pict.data[0];
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
127 linesize = info->pict.linesize[0];
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
128 for(i = 0; i < info->height; i++) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
129 get_buffer(f, ptr, n);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
130 ptr += linesize;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
131 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
132 ptr1 = info->pict.data[1];
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
133 ptr2 = info->pict.data[2];
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
134 n >>= 1;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
135 h = info->height >> 1;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
136 for(i = 0; i < h; i++) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
137 get_buffer(f, ptr1, n);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
138 get_buffer(f, ptr2, n);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
139 ptr1 += info->pict.linesize[1];
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
140 ptr2 += info->pict.linesize[2];
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
141 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
142 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
143 break;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
144 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
145 return 0;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
146 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
147
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
148 static int pnm_read(ByteIOContext *f,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
149 int (*alloc_cb)(void *opaque, AVImageInfo *info), void *opaque)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
150 {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
151 return pnm_read1(f, alloc_cb, opaque, 0);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
152 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
153
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
154 static int pgmyuv_read(ByteIOContext *f,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
155 int (*alloc_cb)(void *opaque, AVImageInfo *info), void *opaque)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
156 {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
157 return pnm_read1(f, alloc_cb, opaque, 1);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
158 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
159
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
160 static int pnm_write(ByteIOContext *pb, AVImageInfo *info)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
161 {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
162 int i, h, h1, c, n, linesize;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
163 char buf[100];
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 20
diff changeset
164 uint8_t *ptr, *ptr1, *ptr2;
20
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
165
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
166 h = info->height;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
167 h1 = h;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
168 switch(info->pix_fmt) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
169 case PIX_FMT_MONOWHITE:
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
170 c = '4';
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
171 n = (info->width + 7) >> 3;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
172 break;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
173 case PIX_FMT_GRAY8:
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
174 c = '5';
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
175 n = info->width;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
176 break;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
177 case PIX_FMT_RGB24:
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
178 c = '6';
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
179 n = info->width * 3;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
180 break;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
181 case PIX_FMT_YUV420P:
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
182 c = '5';
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
183 n = info->width;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
184 h1 = (h * 3) / 2;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
185 break;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
186 default:
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
187 return AVERROR_INVALIDDATA;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
188 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
189 snprintf(buf, sizeof(buf),
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
190 "P%c\n%d %d\n",
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
191 c, info->width, h1);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
192 put_buffer(pb, buf, strlen(buf));
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
193 if (info->pix_fmt != PIX_FMT_MONOWHITE) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
194 snprintf(buf, sizeof(buf),
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
195 "%d\n", 255);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
196 put_buffer(pb, buf, strlen(buf));
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
197 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
198
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
199 ptr = info->pict.data[0];
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
200 linesize = info->pict.linesize[0];
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
201 for(i=0;i<h;i++) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
202 put_buffer(pb, ptr, n);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
203 ptr += linesize;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
204 }
109
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
205
20
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
206 if (info->pix_fmt == PIX_FMT_YUV420P) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
207 h >>= 1;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
208 n >>= 1;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
209 ptr1 = info->pict.data[1];
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
210 ptr2 = info->pict.data[2];
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
211 for(i=0;i<h;i++) {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
212 put_buffer(pb, ptr1, n);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
213 put_buffer(pb, ptr2, n);
109
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
214 ptr1 += info->pict.linesize[1];
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
215 ptr2 += info->pict.linesize[2];
20
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
216 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
217 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
218 put_flush_packet(pb);
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
219 return 0;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
220 }
109
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
221
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
222 static int pam_read(ByteIOContext *f,
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
223 int (*alloc_cb)(void *opaque, AVImageInfo *info), void *opaque)
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
224 {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
225 int i, n, linesize, h, w, depth, maxval;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
226 char buf1[32], tuple_type[32];
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
227 unsigned char *ptr;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
228 AVImageInfo info1, *info = &info1;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
229 int ret;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
230
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
231 pnm_get(f, buf1, sizeof(buf1));
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
232 if (strcmp(buf1, "P7") != 0)
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
233 return AVERROR_INVALIDDATA;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
234 w = -1;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
235 h = -1;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
236 maxval = -1;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
237 depth = -1;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
238 tuple_type[0] = '\0';
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
239 for(;;) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
240 pnm_get(f, buf1, sizeof(buf1));
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
241 if (!strcmp(buf1, "WIDTH")) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
242 pnm_get(f, buf1, sizeof(buf1));
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
243 w = strtol(buf1, NULL, 10);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
244 } else if (!strcmp(buf1, "HEIGHT")) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
245 pnm_get(f, buf1, sizeof(buf1));
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
246 h = strtol(buf1, NULL, 10);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
247 } else if (!strcmp(buf1, "DEPTH")) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
248 pnm_get(f, buf1, sizeof(buf1));
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
249 depth = strtol(buf1, NULL, 10);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
250 } else if (!strcmp(buf1, "MAXVAL")) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
251 pnm_get(f, buf1, sizeof(buf1));
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
252 maxval = strtol(buf1, NULL, 10);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
253 } else if (!strcmp(buf1, "TUPLETYPE")) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
254 pnm_get(f, buf1, sizeof(buf1));
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
255 pstrcpy(tuple_type, sizeof(tuple_type), buf1);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
256 } else if (!strcmp(buf1, "ENDHDR")) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
257 break;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
258 } else {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
259 return AVERROR_INVALIDDATA;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
260 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
261 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
262 /* check that all tags are present */
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
263 if (w <= 0 || h <= 0 || maxval <= 0 || depth <= 0 || tuple_type[0] == '\0')
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
264 return AVERROR_INVALIDDATA;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
265 info->width = w;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
266 info->height = h;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
267 if (depth == 1) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
268 if (maxval == 1)
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
269 info->pix_fmt = PIX_FMT_MONOWHITE;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
270 else
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
271 info->pix_fmt = PIX_FMT_GRAY8;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
272 } else if (depth == 3) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
273 info->pix_fmt = PIX_FMT_RGB24;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
274 } else if (depth == 4) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
275 info->pix_fmt = PIX_FMT_RGBA32;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
276 } else {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
277 return AVERROR_INVALIDDATA;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
278 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
279 ret = alloc_cb(opaque, info);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
280 if (ret)
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
281 return ret;
20
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
282
109
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
283 switch(info->pix_fmt) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
284 default:
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
285 return AVERROR_INVALIDDATA;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
286 case PIX_FMT_RGB24:
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
287 n = info->width * 3;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
288 goto do_read;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
289 case PIX_FMT_GRAY8:
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
290 n = info->width;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
291 goto do_read;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
292 case PIX_FMT_MONOWHITE:
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
293 n = (info->width + 7) >> 3;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
294 do_read:
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
295 ptr = info->pict.data[0];
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
296 linesize = info->pict.linesize[0];
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
297 for(i = 0; i < info->height; i++) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
298 get_buffer(f, ptr, n);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
299 ptr += linesize;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
300 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
301 break;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
302 case PIX_FMT_RGBA32:
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
303 ptr = info->pict.data[0];
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
304 linesize = info->pict.linesize[0];
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
305 for(i = 0; i < info->height; i++) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
306 int j, r, g, b, a;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
307
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
308 for(j = 0;j < w; j++) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
309 r = get_byte(f);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
310 g = get_byte(f);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
311 b = get_byte(f);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
312 a = get_byte(f);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
313 ((uint32_t *)ptr)[j] = (a << 24) | (r << 16) | (g << 8) | b;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
314 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
315 ptr += linesize;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
316 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
317 break;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
318 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
319 return 0;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
320 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
321
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
322 static int pam_write(ByteIOContext *pb, AVImageInfo *info)
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
323 {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
324 int i, h, w, n, linesize, depth, maxval;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
325 const char *tuple_type;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
326 char buf[100];
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
327 uint8_t *ptr;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
328
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
329 h = info->height;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
330 w = info->width;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
331 switch(info->pix_fmt) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
332 case PIX_FMT_MONOWHITE:
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
333 n = (info->width + 7) >> 3;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
334 depth = 1;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
335 maxval = 1;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
336 tuple_type = "BLACKANDWHITE";
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
337 break;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
338 case PIX_FMT_GRAY8:
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
339 n = info->width;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
340 depth = 1;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
341 maxval = 255;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
342 tuple_type = "GRAYSCALE";
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
343 break;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
344 case PIX_FMT_RGB24:
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
345 n = info->width * 3;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
346 depth = 3;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
347 maxval = 255;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
348 tuple_type = "RGB";
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
349 break;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
350 case PIX_FMT_RGBA32:
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
351 n = info->width * 4;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
352 depth = 4;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
353 maxval = 255;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
354 tuple_type = "RGB_ALPHA";
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
355 break;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
356 default:
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
357 return AVERROR_INVALIDDATA;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
358 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
359 snprintf(buf, sizeof(buf),
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
360 "P7\nWIDTH %d\nHEIGHT %d\nDEPTH %d\nMAXVAL %d\nTUPLETYPE %s\nENDHDR\n",
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
361 w, h, depth, maxval, tuple_type);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
362 put_buffer(pb, buf, strlen(buf));
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
363
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
364 ptr = info->pict.data[0];
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
365 linesize = info->pict.linesize[0];
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
366
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
367 if (info->pix_fmt == PIX_FMT_RGBA32) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
368 int j;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
369 unsigned int v;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
370
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
371 for(i=0;i<h;i++) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
372 for(j=0;j<w;j++) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
373 v = ((uint32_t *)ptr)[j];
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
374 put_byte(pb, (v >> 16) & 0xff);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
375 put_byte(pb, (v >> 8) & 0xff);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
376 put_byte(pb, (v) & 0xff);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
377 put_byte(pb, (v >> 24) & 0xff);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
378 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
379 ptr += linesize;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
380 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
381 } else {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
382 for(i=0;i<h;i++) {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
383 put_buffer(pb, ptr, n);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
384 ptr += linesize;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
385 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
386 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
387 put_flush_packet(pb);
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
388 return 0;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
389 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
390
20
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
391 static int pnm_probe(AVProbeData *pd)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
392 {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
393 const char *p = pd->buf;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
394 if (pd->buf_size >= 8 &&
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
395 p[0] == 'P' &&
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
396 p[1] >= '4' && p[1] <= '6' &&
320
4b01f2d7a90c Patch for PPM probing by (Rob Joyce <rjoyce at twcny dot rr dot com>)
michael
parents: 200
diff changeset
397 pnm_space(p[2]) )
200
c0d49b5d246c accepts pgmyuv extension
bellard
parents: 109
diff changeset
398 return AVPROBE_SCORE_MAX - 1; /* to permit pgmyuv probe */
20
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
399 else
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
400 return 0;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
401 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
402
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
403 static int pgmyuv_probe(AVProbeData *pd)
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
404 {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
405 if (match_ext(pd->filename, "pgmyuv"))
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
406 return AVPROBE_SCORE_MAX;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
407 else
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
408 return 0;
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
409 }
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
410
109
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
411 static int pam_probe(AVProbeData *pd)
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
412 {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
413 const char *p = pd->buf;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
414 if (pd->buf_size >= 8 &&
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
415 p[0] == 'P' &&
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
416 p[1] == '7' &&
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
417 p[2] == '\n')
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
418 return AVPROBE_SCORE_MAX;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
419 else
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
420 return 0;
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
421 }
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
422
20
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
423 AVImageFormat pnm_image_format = {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
424 "pnm",
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
425 NULL,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
426 pnm_probe,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
427 pnm_read,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
428 0,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
429 NULL,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
430 };
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
431
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
432 AVImageFormat pbm_image_format = {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
433 "pbm",
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
434 "pbm",
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
435 NULL,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
436 NULL,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
437 (1 << PIX_FMT_MONOWHITE),
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
438 pnm_write,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
439 };
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
440
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
441 AVImageFormat pgm_image_format = {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
442 "pgm",
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
443 "pgm",
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
444 NULL,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
445 NULL,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
446 (1 << PIX_FMT_GRAY8),
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
447 pnm_write,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
448 };
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
449
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
450 AVImageFormat ppm_image_format = {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
451 "ppm",
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
452 "ppm",
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
453 NULL,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
454 NULL,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
455 (1 << PIX_FMT_RGB24),
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
456 pnm_write,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
457 };
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
458
109
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
459 AVImageFormat pam_image_format = {
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
460 "pam",
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
461 "pam",
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
462 pam_probe,
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
463 pam_read,
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
464 (1 << PIX_FMT_MONOWHITE) | (1 << PIX_FMT_GRAY8) | (1 << PIX_FMT_RGB24) |
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
465 (1 << PIX_FMT_RGBA32),
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
466 pam_write,
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
467 };
c82a6062485e added new netpbm pam format support (needed for alpha plane support)
bellard
parents: 65
diff changeset
468
20
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
469 AVImageFormat pgmyuv_image_format = {
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
470 "pgmyuv",
200
c0d49b5d246c accepts pgmyuv extension
bellard
parents: 109
diff changeset
471 "pgmyuv",
20
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
472 pgmyuv_probe,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
473 pgmyuv_read,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
474 (1 << PIX_FMT_YUV420P),
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
475 pnm_write,
3d52de18ecc3 added still image support
bellard
parents:
diff changeset
476 };