Mercurial > libavcodec.hg
annotate bmp.c @ 8991:ca768cb2bfb6 libavcodec
Use last decoded SPS as current SPS in order to parse picture timing SEI
correctly. This works around an apparent H.264 standard deficiency.
Patch by Ivan Schreter, schreter gmx net
author | cehoyos |
---|---|
date | Fri, 20 Feb 2009 16:20:01 +0000 |
parents | 3ce78c919959 |
children | 931bb51f060e |
rev | line source |
---|---|
2949 | 1 /* |
4415
f792b146869b
Segregate code common to BMP decoder and future encoder
diego
parents:
4394
diff
changeset
|
2 * BMP image format decoder |
2949 | 3 * Copyright (c) 2005 Mans Rullgard |
4 * | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
5 * This file is part of FFmpeg. |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
6 * |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
2949 | 8 * modify it under the terms of the GNU Lesser General Public |
9 * License as published by the Free Software Foundation; either | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
2949 | 11 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
2949 | 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 | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
3036
0b546eab515d
Update licensing information: The FSF changed postal address.
diego
parents:
2967
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
2949 | 20 */ |
21 | |
22 #include "avcodec.h" | |
4439
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
23 #include "bytestream.h" |
4415
f792b146869b
Segregate code common to BMP decoder and future encoder
diego
parents:
4394
diff
changeset
|
24 #include "bmp.h" |
7910 | 25 #include "msrledec.h" |
2949 | 26 |
6517
48759bfbd073
Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents:
6265
diff
changeset
|
27 static av_cold int bmp_decode_init(AVCodecContext *avctx){ |
2949 | 28 BMPContext *s = avctx->priv_data; |
29 | |
30 avcodec_get_frame_defaults((AVFrame*)&s->picture); | |
31 avctx->coded_frame = (AVFrame*)&s->picture; | |
32 | |
33 return 0; | |
34 } | |
35 | |
2967 | 36 static int bmp_decode_frame(AVCodecContext *avctx, |
2949 | 37 void *data, int *data_size, |
6265 | 38 const uint8_t *buf, int buf_size) |
2949 | 39 { |
40 BMPContext *s = avctx->priv_data; | |
41 AVFrame *picture = data; | |
42 AVFrame *p = &s->picture; | |
43 unsigned int fsize, hsize; | |
44 int width, height; | |
45 unsigned int depth; | |
4393 | 46 BiCompression comp; |
2949 | 47 unsigned int ihsize; |
48 int i, j, n, linesize; | |
49 uint32_t rgb[3]; | |
50 uint8_t *ptr; | |
51 int dsize; | |
6265 | 52 const uint8_t *buf0 = buf; |
2949 | 53 |
54 if(buf_size < 14){ | |
55 av_log(avctx, AV_LOG_ERROR, "buf size too small (%d)\n", buf_size); | |
56 return -1; | |
57 } | |
58 | |
4439
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
59 if(bytestream_get_byte(&buf) != 'B' || |
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
60 bytestream_get_byte(&buf) != 'M') { |
2949 | 61 av_log(avctx, AV_LOG_ERROR, "bad magic number\n"); |
62 return -1; | |
63 } | |
64 | |
4439
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
65 fsize = bytestream_get_le32(&buf); |
2949 | 66 if(buf_size < fsize){ |
8945
3ce78c919959
Make BMP decoder try to decode files with incorrect filesize field value
kostya
parents:
8720
diff
changeset
|
67 av_log(avctx, AV_LOG_ERROR, "not enough data (%d < %d), trying to decode anyway\n", |
2949 | 68 buf_size, fsize); |
8945
3ce78c919959
Make BMP decoder try to decode files with incorrect filesize field value
kostya
parents:
8720
diff
changeset
|
69 fsize = buf_size; |
2949 | 70 } |
71 | |
4439
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
72 buf += 2; /* reserved1 */ |
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
73 buf += 2; /* reserved2 */ |
2949 | 74 |
4439
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
75 hsize = bytestream_get_le32(&buf); /* header size */ |
8204
507854688c43
Some BMP files have file size declared in the header equal to headers size
kostya
parents:
8203
diff
changeset
|
76 ihsize = bytestream_get_le32(&buf); /* more header size */ |
507854688c43
Some BMP files have file size declared in the header equal to headers size
kostya
parents:
8203
diff
changeset
|
77 if(ihsize + 14 > hsize){ |
507854688c43
Some BMP files have file size declared in the header equal to headers size
kostya
parents:
8203
diff
changeset
|
78 av_log(avctx, AV_LOG_ERROR, "invalid header size %d\n", hsize); |
507854688c43
Some BMP files have file size declared in the header equal to headers size
kostya
parents:
8203
diff
changeset
|
79 return -1; |
507854688c43
Some BMP files have file size declared in the header equal to headers size
kostya
parents:
8203
diff
changeset
|
80 } |
507854688c43
Some BMP files have file size declared in the header equal to headers size
kostya
parents:
8203
diff
changeset
|
81 |
507854688c43
Some BMP files have file size declared in the header equal to headers size
kostya
parents:
8203
diff
changeset
|
82 /* sometimes file size is set to some headers size, set a real size in that case */ |
507854688c43
Some BMP files have file size declared in the header equal to headers size
kostya
parents:
8203
diff
changeset
|
83 if(fsize == 14 || fsize == ihsize + 14) |
507854688c43
Some BMP files have file size declared in the header equal to headers size
kostya
parents:
8203
diff
changeset
|
84 fsize = buf_size - 2; |
507854688c43
Some BMP files have file size declared in the header equal to headers size
kostya
parents:
8203
diff
changeset
|
85 |
2949 | 86 if(fsize <= hsize){ |
8203
3b90f93d97a6
Give more meaningful message on BMP header parsing error
kostya
parents:
8202
diff
changeset
|
87 av_log(avctx, AV_LOG_ERROR, "declared file size is less than header size (%d < %d)\n", |
2949 | 88 fsize, hsize); |
89 return -1; | |
90 } | |
91 | |
8202 | 92 switch(ihsize){ |
93 case 40: // windib v3 | |
94 case 64: // OS/2 v2 | |
95 case 108: // windib v4 | |
96 case 124: // windib v5 | |
6595 | 97 width = bytestream_get_le32(&buf); |
98 height = bytestream_get_le32(&buf); | |
8202 | 99 break; |
100 case 12: // OS/2 v1 | |
6594 | 101 width = bytestream_get_le16(&buf); |
102 height = bytestream_get_le16(&buf); | |
8202 | 103 break; |
104 default: | |
7887 | 105 av_log(avctx, AV_LOG_ERROR, "unsupported BMP file, patch welcome\n"); |
6594 | 106 return -1; |
107 } | |
2949 | 108 |
4439
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
109 if(bytestream_get_le16(&buf) != 1){ /* planes */ |
2949 | 110 av_log(avctx, AV_LOG_ERROR, "invalid BMP header\n"); |
111 return -1; | |
112 } | |
113 | |
4439
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
114 depth = bytestream_get_le16(&buf); |
2949 | 115 |
6594 | 116 if(ihsize == 40) |
4439
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
117 comp = bytestream_get_le32(&buf); |
2949 | 118 else |
119 comp = BMP_RGB; | |
120 | |
7910 | 121 if(comp != BMP_RGB && comp != BMP_BITFIELDS && comp != BMP_RLE4 && comp != BMP_RLE8){ |
2949 | 122 av_log(avctx, AV_LOG_ERROR, "BMP coding %d not supported\n", comp); |
123 return -1; | |
124 } | |
125 | |
126 if(comp == BMP_BITFIELDS){ | |
4439
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
127 buf += 20; |
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
128 rgb[0] = bytestream_get_le32(&buf); |
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
129 rgb[1] = bytestream_get_le32(&buf); |
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
130 rgb[2] = bytestream_get_le32(&buf); |
2949 | 131 } |
132 | |
133 avctx->width = width; | |
134 avctx->height = height > 0? height: -height; | |
135 | |
136 avctx->pix_fmt = PIX_FMT_NONE; | |
137 | |
138 switch(depth){ | |
139 case 32: | |
140 if(comp == BMP_BITFIELDS){ | |
141 rgb[0] = (rgb[0] >> 15) & 3; | |
142 rgb[1] = (rgb[1] >> 15) & 3; | |
143 rgb[2] = (rgb[2] >> 15) & 3; | |
144 | |
145 if(rgb[0] + rgb[1] + rgb[2] != 3 || | |
146 rgb[0] == rgb[1] || rgb[0] == rgb[2] || rgb[1] == rgb[2]){ | |
147 break; | |
148 } | |
149 } else { | |
150 rgb[0] = 2; | |
151 rgb[1] = 1; | |
152 rgb[2] = 0; | |
153 } | |
154 | |
155 avctx->pix_fmt = PIX_FMT_BGR24; | |
156 break; | |
157 case 24: | |
158 avctx->pix_fmt = PIX_FMT_BGR24; | |
159 break; | |
160 case 16: | |
161 if(comp == BMP_RGB) | |
162 avctx->pix_fmt = PIX_FMT_RGB555; | |
7909
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
163 if(comp == BMP_BITFIELDS) |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
164 avctx->pix_fmt = rgb[1] == 0x07E0 ? PIX_FMT_RGB565 : PIX_FMT_RGB555; |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
165 break; |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
166 case 8: |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
167 if(hsize - ihsize - 14 > 0) |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
168 avctx->pix_fmt = PIX_FMT_PAL8; |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
169 else |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
170 avctx->pix_fmt = PIX_FMT_GRAY8; |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
171 break; |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
172 case 4: |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
173 if(hsize - ihsize - 14 > 0){ |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
174 avctx->pix_fmt = PIX_FMT_PAL8; |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
175 }else{ |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
176 av_log(avctx, AV_LOG_ERROR, "Unknown palette for 16-colour BMP\n"); |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
177 return -1; |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
178 } |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
179 break; |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
180 case 1: |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
181 avctx->pix_fmt = PIX_FMT_MONOBLACK; |
2949 | 182 break; |
183 default: | |
184 av_log(avctx, AV_LOG_ERROR, "depth %d not supported\n", depth); | |
185 return -1; | |
186 } | |
187 | |
188 if(avctx->pix_fmt == PIX_FMT_NONE){ | |
189 av_log(avctx, AV_LOG_ERROR, "unsupported pixel format\n"); | |
190 return -1; | |
191 } | |
192 | |
4432
a848b652f0ac
Fix segfault in bmp decoder. Patch by Michel Bardiaux mbardiaux mediaxim dot be.
takis
parents:
4415
diff
changeset
|
193 if(p->data[0]) |
a848b652f0ac
Fix segfault in bmp decoder. Patch by Michel Bardiaux mbardiaux mediaxim dot be.
takis
parents:
4415
diff
changeset
|
194 avctx->release_buffer(avctx, p); |
a848b652f0ac
Fix segfault in bmp decoder. Patch by Michel Bardiaux mbardiaux mediaxim dot be.
takis
parents:
4415
diff
changeset
|
195 |
2949 | 196 p->reference = 0; |
197 if(avctx->get_buffer(avctx, p) < 0){ | |
198 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); | |
199 return -1; | |
200 } | |
201 p->pict_type = FF_I_TYPE; | |
202 p->key_frame = 1; | |
203 | |
4439
3af19e140d67
Make BMP decoder use bytestream. Patch by Michel Bardiaux
takis
parents:
4432
diff
changeset
|
204 buf = buf0 + hsize; |
2949 | 205 dsize = buf_size - hsize; |
206 | |
4109 | 207 /* Line size in file multiple of 4 */ |
7908 | 208 n = ((avctx->width * depth) / 8 + 3) & ~3; |
2949 | 209 |
7910 | 210 if(n * avctx->height > dsize && comp != BMP_RLE4 && comp != BMP_RLE8){ |
2949 | 211 av_log(avctx, AV_LOG_ERROR, "not enough data (%d < %d)\n", |
212 dsize, n * avctx->height); | |
213 return -1; | |
214 } | |
215 | |
7910 | 216 // RLE may skip decoding some picture areas, so blank picture before decoding |
217 if(comp == BMP_RLE4 || comp == BMP_RLE8) | |
218 memset(p->data[0], 0, avctx->height * p->linesize[0]); | |
219 | |
7909
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
220 if(depth == 4 || depth == 8) |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
221 memset(p->data[1], 0, 1024); |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
222 |
2949 | 223 if(height > 0){ |
224 ptr = p->data[0] + (avctx->height - 1) * p->linesize[0]; | |
225 linesize = -p->linesize[0]; | |
226 } else { | |
227 ptr = p->data[0]; | |
228 linesize = p->linesize[0]; | |
229 } | |
230 | |
7909
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
231 if(avctx->pix_fmt == PIX_FMT_PAL8){ |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
232 buf = buf0 + 14 + ihsize; //palette location |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
233 if((hsize-ihsize-14)>>depth < 4){ // OS/2 bitmap, 3 bytes per palette entry |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
234 for(i = 0; i < (1 << depth); i++) |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
235 ((uint32_t*)p->data[1])[i] = bytestream_get_le24(&buf); |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
236 }else{ |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
237 for(i = 0; i < (1 << depth); i++) |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
238 ((uint32_t*)p->data[1])[i] = bytestream_get_le32(&buf); |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
239 } |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
240 buf = buf0 + hsize; |
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
241 } |
7910 | 242 if(comp == BMP_RLE4 || comp == BMP_RLE8){ |
8720
052c676c433b
Silence useless compiler warning when passing AVFrame* instead of AVPicture*
kostya
parents:
8204
diff
changeset
|
243 ff_msrle_decode(avctx, (AVPicture*)p, depth, buf, dsize); |
7910 | 244 }else{ |
7911 | 245 switch(depth){ |
246 case 1: | |
247 for(i = 0; i < avctx->height; i++){ | |
248 memcpy(ptr, buf, n); | |
249 buf += n; | |
250 ptr += linesize; | |
251 } | |
252 break; | |
253 case 4: | |
254 for(i = 0; i < avctx->height; i++){ | |
255 int j; | |
256 for(j = 0; j < n; j++){ | |
257 ptr[j*2+0] = (buf[j] >> 4) & 0xF; | |
258 ptr[j*2+1] = buf[j] & 0xF; | |
259 } | |
260 buf += n; | |
261 ptr += linesize; | |
262 } | |
263 break; | |
264 case 8: | |
265 for(i = 0; i < avctx->height; i++){ | |
266 memcpy(ptr, buf, avctx->width); | |
267 buf += n; | |
268 ptr += linesize; | |
269 } | |
270 break; | |
271 case 24: | |
272 for(i = 0; i < avctx->height; i++){ | |
273 memcpy(ptr, buf, avctx->width*(depth>>3)); | |
274 buf += n; | |
275 ptr += linesize; | |
7909
9fd3f57e4c16
Add support for 1-bit, 4-bit, 8-bit and some 16-bit raw BMP
kostya
parents:
7908
diff
changeset
|
276 } |
7911 | 277 break; |
278 case 16: | |
279 for(i = 0; i < avctx->height; i++){ | |
280 const uint16_t *src = (const uint16_t *) buf; | |
281 uint16_t *dst = (uint16_t *) ptr; | |
282 | |
283 for(j = 0; j < avctx->width; j++) | |
284 *dst++ = le2me_16(*src++); | |
285 | |
286 buf += n; | |
287 ptr += linesize; | |
288 } | |
289 break; | |
290 case 32: | |
291 for(i = 0; i < avctx->height; i++){ | |
292 const uint8_t *src = buf; | |
293 uint8_t *dst = ptr; | |
294 | |
295 for(j = 0; j < avctx->width; j++){ | |
296 dst[0] = src[rgb[2]]; | |
297 dst[1] = src[rgb[1]]; | |
298 dst[2] = src[rgb[0]]; | |
299 dst += 3; | |
300 src += 4; | |
301 } | |
302 | |
303 buf += n; | |
304 ptr += linesize; | |
305 } | |
306 break; | |
307 default: | |
308 av_log(avctx, AV_LOG_ERROR, "BMP decoder is broken\n"); | |
309 return -1; | |
2949 | 310 } |
7910 | 311 } |
2949 | 312 |
313 *picture = s->picture; | |
314 *data_size = sizeof(AVPicture); | |
315 | |
316 return buf_size; | |
317 } | |
318 | |
6517
48759bfbd073
Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents:
6265
diff
changeset
|
319 static av_cold int bmp_decode_end(AVCodecContext *avctx) |
4455
8ecfb7ecbb53
Add decode_end method to bmp decoder. Patch by Michel Bardiaux,
takis
parents:
4445
diff
changeset
|
320 { |
8ecfb7ecbb53
Add decode_end method to bmp decoder. Patch by Michel Bardiaux,
takis
parents:
4445
diff
changeset
|
321 BMPContext* c = avctx->priv_data; |
8ecfb7ecbb53
Add decode_end method to bmp decoder. Patch by Michel Bardiaux,
takis
parents:
4445
diff
changeset
|
322 |
8ecfb7ecbb53
Add decode_end method to bmp decoder. Patch by Michel Bardiaux,
takis
parents:
4445
diff
changeset
|
323 if (c->picture.data[0]) |
8ecfb7ecbb53
Add decode_end method to bmp decoder. Patch by Michel Bardiaux,
takis
parents:
4445
diff
changeset
|
324 avctx->release_buffer(avctx, &c->picture); |
8ecfb7ecbb53
Add decode_end method to bmp decoder. Patch by Michel Bardiaux,
takis
parents:
4445
diff
changeset
|
325 |
8ecfb7ecbb53
Add decode_end method to bmp decoder. Patch by Michel Bardiaux,
takis
parents:
4445
diff
changeset
|
326 return 0; |
8ecfb7ecbb53
Add decode_end method to bmp decoder. Patch by Michel Bardiaux,
takis
parents:
4445
diff
changeset
|
327 } |
8ecfb7ecbb53
Add decode_end method to bmp decoder. Patch by Michel Bardiaux,
takis
parents:
4445
diff
changeset
|
328 |
2949 | 329 AVCodec bmp_decoder = { |
330 "bmp", | |
331 CODEC_TYPE_VIDEO, | |
332 CODEC_ID_BMP, | |
333 sizeof(BMPContext), | |
334 bmp_decode_init, | |
335 NULL, | |
4455
8ecfb7ecbb53
Add decode_end method to bmp decoder. Patch by Michel Bardiaux,
takis
parents:
4445
diff
changeset
|
336 bmp_decode_end, |
6722 | 337 bmp_decode_frame, |
7040
e943e1409077
Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents:
6722
diff
changeset
|
338 .long_name = NULL_IF_CONFIG_SMALL("BMP image"), |
2949 | 339 }; |