annotate lcldec.c @ 8520:a0164882aa38 libavcodec

Generic metadata API. avi is updated as example. No version bump, the API still might change slightly ... No update to ffmpeg.c as requested by aurel.
author michael
date Sun, 04 Jan 2009 18:48:37 +0000
parents e943e1409077
children 7a463923ecd1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
1 /*
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
2 * LCL (LossLess Codec Library) Codec
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
3 * Copyright (c) 2002-2004 Roberto Togni
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3777
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3777
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3777
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
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: 3777
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3777
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
15 * Lesser General Public License for more details.
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
16 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
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: 3777
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: 2979
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
20 */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
21
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
22 /**
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
23 * @file lcl.c
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
24 * LCL (LossLess Codec Library) Video Codec
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
25 * Decoder for MSZH and ZLIB codecs
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
26 * Experimental encoder for ZLIB RGB24
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
27 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
28 * Fourcc: MSZH, ZLIB
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
29 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
30 * Original Win32 dll:
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
31 * Ver2.23 By Kenji Oshima 2000.09.20
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
32 * avimszh.dll, avizlib.dll
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
33 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
34 * A description of the decoding algorithm can be found here:
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
35 * http://www.pcisys.net/~melanson/codecs
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
36 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
37 * Supports: BGR24 (RGB 24bpp)
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
38 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
39 */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
40
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
41 #include <stdio.h>
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
42 #include <stdlib.h>
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
43
4962
f99e40a7155b Remove redundant #inclusion of common.h, avcodec.h already #includes it.
diego
parents: 4827
diff changeset
44 #include "avcodec.h"
2398
582e635cfa08 common.c -> bitstream.c (and the single non bitstream func -> utils.c)
michael
parents: 2250
diff changeset
45 #include "bitstream.h"
5294
e21873a1c00b split lcl.c into lcldec.c, lclenc.c, lcl.h
mru
parents: 5215
diff changeset
46 #include "lcl.h"
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
47
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
48 #ifdef CONFIG_ZLIB
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
49 #include <zlib.h>
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
50 #endif
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
51
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
52 /*
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
53 * Decoder context
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
54 */
5294
e21873a1c00b split lcl.c into lcldec.c, lclenc.c, lcl.h
mru
parents: 5215
diff changeset
55 typedef struct LclDecContext {
5297
mru
parents: 5296
diff changeset
56 AVFrame pic;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
57
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
58 // Image type
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
59 int imgtype;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
60 // Compression type
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
61 int compression;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
62 // Flags
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
63 int flags;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
64 // Decompressed data size
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
65 unsigned int decomp_size;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
66 // Decompression buffer
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
67 unsigned char* decomp_buf;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
68 #ifdef CONFIG_ZLIB
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
69 z_stream zstream;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
70 #endif
5294
e21873a1c00b split lcl.c into lcldec.c, lclenc.c, lcl.h
mru
parents: 5215
diff changeset
71 } LclDecContext;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
72
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
73
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
74 /*
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
75 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
76 * Helper functions
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
77 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
78 */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
79 static inline unsigned char fix (int pix14)
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
80 {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
81 int tmp;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
82
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
83 tmp = (pix14 + 0x80000) >> 20;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
84 if (tmp < 0)
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
85 return 0;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
86 if (tmp > 255)
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
87 return 255;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
88 return tmp;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
89 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
90
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
91
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
92
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
93 static inline unsigned char get_b (unsigned char yq, signed char bq)
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
94 {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
95 return fix((yq << 20) + bq * 1858076);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
96 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
97
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
98
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
99
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
100 static inline unsigned char get_g (unsigned char yq, signed char bq, signed char rq)
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
101 {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
102 return fix((yq << 20) - bq * 360857 - rq * 748830);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
103 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
104
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
105
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
106
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
107 static inline unsigned char get_r (unsigned char yq, signed char rq)
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
108 {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
109 return fix((yq << 20) + rq * 1470103);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
110 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
111
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
112
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
113
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
114 static unsigned int mszh_decomp(unsigned char * srcptr, int srclen, unsigned char * destptr, unsigned int destsize)
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
115 {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
116 unsigned char *destptr_bak = destptr;
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
117 unsigned char *destptr_end = destptr + destsize;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
118 unsigned char mask = 0;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
119 unsigned char maskbit = 0;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
120 unsigned int ofs, cnt;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2628
diff changeset
121
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
122 while ((srclen > 0) && (destptr < destptr_end)) {
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
123 if (maskbit == 0) {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
124 mask = *(srcptr++);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
125 maskbit = 8;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
126 srclen--;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
127 continue;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
128 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
129 if ((mask & (1 << (--maskbit))) == 0) {
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
130 if (destptr + 4 > destptr_end)
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
131 break;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
132 *(int*)destptr = *(int*)srcptr;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
133 srclen -= 4;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
134 destptr += 4;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
135 srcptr += 4;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
136 } else {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
137 ofs = *(srcptr++);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
138 cnt = *(srcptr++);
6375
551232d0fa74 Remove duplicate ;
reimar
parents: 6218
diff changeset
139 ofs += cnt * 256;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
140 cnt = ((cnt >> 3) & 0x1f) + 1;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
141 ofs &= 0x7ff;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
142 srclen -= 2;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
143 cnt *= 4;
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
144 if (destptr + cnt > destptr_end) {
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
145 cnt = destptr_end - destptr;
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
146 }
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
147 for (; cnt > 0; cnt--) {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
148 *(destptr) = *(destptr - ofs);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
149 destptr++;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
150 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
151 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
152 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
153
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
154 return (destptr - destptr_bak);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
155 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
156
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
157
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
158
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
159 /*
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
160 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
161 * Decode a frame
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
162 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
163 */
6218
michael
parents: 5297
diff changeset
164 static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, const uint8_t *buf, int buf_size)
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
165 {
5297
mru
parents: 5296
diff changeset
166 LclDecContext * const c = avctx->priv_data;
mru
parents: 5296
diff changeset
167 unsigned char *encoded = (unsigned char *)buf;
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
168 unsigned int pixel_ptr;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
169 int row, col;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
170 unsigned char *outptr;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
171 unsigned int width = avctx->width; // Real image width
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
172 unsigned int height = avctx->height; // Real image height
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
173 unsigned int mszh_dlen;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
174 unsigned char yq, y1q, uq, vq;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
175 int uqvq;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
176 unsigned int mthread_inlen, mthread_outlen;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
177 #ifdef CONFIG_ZLIB
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
178 int zret; // Zlib return code
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
179 #endif
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
180 unsigned int len = buf_size;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
181
5297
mru
parents: 5296
diff changeset
182 if(c->pic.data[0])
mru
parents: 5296
diff changeset
183 avctx->release_buffer(avctx, &c->pic);
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
184
5297
mru
parents: 5296
diff changeset
185 c->pic.reference = 0;
mru
parents: 5296
diff changeset
186 c->pic.buffer_hints = FF_BUFFER_HINTS_VALID;
mru
parents: 5296
diff changeset
187 if(avctx->get_buffer(avctx, &c->pic) < 0){
mru
parents: 5296
diff changeset
188 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
mru
parents: 5296
diff changeset
189 return -1;
mru
parents: 5296
diff changeset
190 }
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
191
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
192 outptr = c->pic.data[0]; // Output image pointer
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
193
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
194 /* Decompress frame */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
195 switch (avctx->codec_id) {
5297
mru
parents: 5296
diff changeset
196 case CODEC_ID_MSZH:
mru
parents: 5296
diff changeset
197 switch (c->compression) {
mru
parents: 5296
diff changeset
198 case COMP_MSZH:
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
199 if (c->flags & FLAG_MULTITHREAD) {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
200 mthread_inlen = *((unsigned int*)encoded);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
201 mthread_outlen = *((unsigned int*)(encoded+4));
5297
mru
parents: 5296
diff changeset
202 if (mthread_outlen > c->decomp_size) // this should not happen
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
203 mthread_outlen = c->decomp_size;
5297
mru
parents: 5296
diff changeset
204 mszh_dlen = mszh_decomp(encoded + 8, mthread_inlen, c->decomp_buf, c->decomp_size);
mru
parents: 5296
diff changeset
205 if (mthread_outlen != mszh_dlen) {
mru
parents: 5296
diff changeset
206 av_log(avctx, AV_LOG_ERROR, "Mthread1 decoded size differs (%d != %d)\n",
mru
parents: 5296
diff changeset
207 mthread_outlen, mszh_dlen);
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
208 return -1;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
209 }
5297
mru
parents: 5296
diff changeset
210 mszh_dlen = mszh_decomp(encoded + 8 + mthread_inlen, len - mthread_inlen,
mru
parents: 5296
diff changeset
211 c->decomp_buf + mthread_outlen, c->decomp_size - mthread_outlen);
mru
parents: 5296
diff changeset
212 if (mthread_outlen != mszh_dlen) {
mru
parents: 5296
diff changeset
213 av_log(avctx, AV_LOG_ERROR, "Mthread2 decoded size differs (%d != %d)\n",
mru
parents: 5296
diff changeset
214 mthread_outlen, mszh_dlen);
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
215 return -1;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
216 }
5297
mru
parents: 5296
diff changeset
217 encoded = c->decomp_buf;
mru
parents: 5296
diff changeset
218 len = c->decomp_size;
mru
parents: 5296
diff changeset
219 } else {
mru
parents: 5296
diff changeset
220 mszh_dlen = mszh_decomp(encoded, len, c->decomp_buf, c->decomp_size);
mru
parents: 5296
diff changeset
221 if (c->decomp_size != mszh_dlen) {
mru
parents: 5296
diff changeset
222 av_log(avctx, AV_LOG_ERROR, "Decoded size differs (%d != %d)\n",
mru
parents: 5296
diff changeset
223 c->decomp_size, mszh_dlen);
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
224 return -1;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
225 }
5297
mru
parents: 5296
diff changeset
226 encoded = c->decomp_buf;
mru
parents: 5296
diff changeset
227 len = mszh_dlen;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
228 }
5297
mru
parents: 5296
diff changeset
229 break;
mru
parents: 5296
diff changeset
230 case COMP_MSZH_NOCOMP:
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
231 break;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
232 default:
5297
mru
parents: 5296
diff changeset
233 av_log(avctx, AV_LOG_ERROR, "BUG! Unknown MSZH compression in frame decoder.\n");
mru
parents: 5296
diff changeset
234 return -1;
mru
parents: 5296
diff changeset
235 }
mru
parents: 5296
diff changeset
236 break;
mru
parents: 5296
diff changeset
237 case CODEC_ID_ZLIB:
mru
parents: 5296
diff changeset
238 #ifdef CONFIG_ZLIB
mru
parents: 5296
diff changeset
239 /* Using the original dll with normal compression (-1) and RGB format
mru
parents: 5296
diff changeset
240 * gives a file with ZLIB fourcc, but frame is really uncompressed.
mru
parents: 5296
diff changeset
241 * To be sure that's true check also frame size */
mru
parents: 5296
diff changeset
242 if ((c->compression == COMP_ZLIB_NORMAL) && (c->imgtype == IMGTYPE_RGB24) &&
mru
parents: 5296
diff changeset
243 (len == width * height * 3))
mru
parents: 5296
diff changeset
244 break;
mru
parents: 5296
diff changeset
245 zret = inflateReset(&(c->zstream));
mru
parents: 5296
diff changeset
246 if (zret != Z_OK) {
mru
parents: 5296
diff changeset
247 av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", zret);
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
248 return -1;
5297
mru
parents: 5296
diff changeset
249 }
mru
parents: 5296
diff changeset
250 if (c->flags & FLAG_MULTITHREAD) {
mru
parents: 5296
diff changeset
251 mthread_inlen = *((unsigned int*)encoded);
mru
parents: 5296
diff changeset
252 mthread_outlen = *((unsigned int*)(encoded+4));
mru
parents: 5296
diff changeset
253 if (mthread_outlen > c->decomp_size)
mru
parents: 5296
diff changeset
254 mthread_outlen = c->decomp_size;
mru
parents: 5296
diff changeset
255 c->zstream.next_in = encoded + 8;
mru
parents: 5296
diff changeset
256 c->zstream.avail_in = mthread_inlen;
mru
parents: 5296
diff changeset
257 c->zstream.next_out = c->decomp_buf;
mru
parents: 5296
diff changeset
258 c->zstream.avail_out = c->decomp_size;
mru
parents: 5296
diff changeset
259 zret = inflate(&(c->zstream), Z_FINISH);
mru
parents: 5296
diff changeset
260 if ((zret != Z_OK) && (zret != Z_STREAM_END)) {
mru
parents: 5296
diff changeset
261 av_log(avctx, AV_LOG_ERROR, "Mthread1 inflate error: %d\n", zret);
mru
parents: 5296
diff changeset
262 return -1;
mru
parents: 5296
diff changeset
263 }
mru
parents: 5296
diff changeset
264 if (mthread_outlen != (unsigned int)(c->zstream.total_out)) {
mru
parents: 5296
diff changeset
265 av_log(avctx, AV_LOG_ERROR, "Mthread1 decoded size differs (%u != %lu)\n",
mru
parents: 5296
diff changeset
266 mthread_outlen, c->zstream.total_out);
mru
parents: 5296
diff changeset
267 return -1;
mru
parents: 5296
diff changeset
268 }
mru
parents: 5296
diff changeset
269 zret = inflateReset(&(c->zstream));
mru
parents: 5296
diff changeset
270 if (zret != Z_OK) {
mru
parents: 5296
diff changeset
271 av_log(avctx, AV_LOG_ERROR, "Mthread2 inflate reset error: %d\n", zret);
mru
parents: 5296
diff changeset
272 return -1;
mru
parents: 5296
diff changeset
273 }
mru
parents: 5296
diff changeset
274 c->zstream.next_in = encoded + 8 + mthread_inlen;
mru
parents: 5296
diff changeset
275 c->zstream.avail_in = len - mthread_inlen;
mru
parents: 5296
diff changeset
276 c->zstream.next_out = c->decomp_buf + mthread_outlen;
mru
parents: 5296
diff changeset
277 c->zstream.avail_out = c->decomp_size - mthread_outlen;
mru
parents: 5296
diff changeset
278 zret = inflate(&(c->zstream), Z_FINISH);
mru
parents: 5296
diff changeset
279 if ((zret != Z_OK) && (zret != Z_STREAM_END)) {
mru
parents: 5296
diff changeset
280 av_log(avctx, AV_LOG_ERROR, "Mthread2 inflate error: %d\n", zret);
mru
parents: 5296
diff changeset
281 return -1;
mru
parents: 5296
diff changeset
282 }
mru
parents: 5296
diff changeset
283 if (mthread_outlen != (unsigned int)(c->zstream.total_out)) {
mru
parents: 5296
diff changeset
284 av_log(avctx, AV_LOG_ERROR, "Mthread2 decoded size differs (%d != %lu)\n",
mru
parents: 5296
diff changeset
285 mthread_outlen, c->zstream.total_out);
mru
parents: 5296
diff changeset
286 return -1;
mru
parents: 5296
diff changeset
287 }
mru
parents: 5296
diff changeset
288 } else {
mru
parents: 5296
diff changeset
289 c->zstream.next_in = encoded;
mru
parents: 5296
diff changeset
290 c->zstream.avail_in = len;
mru
parents: 5296
diff changeset
291 c->zstream.next_out = c->decomp_buf;
mru
parents: 5296
diff changeset
292 c->zstream.avail_out = c->decomp_size;
mru
parents: 5296
diff changeset
293 zret = inflate(&(c->zstream), Z_FINISH);
mru
parents: 5296
diff changeset
294 if ((zret != Z_OK) && (zret != Z_STREAM_END)) {
mru
parents: 5296
diff changeset
295 av_log(avctx, AV_LOG_ERROR, "Inflate error: %d\n", zret);
mru
parents: 5296
diff changeset
296 return -1;
mru
parents: 5296
diff changeset
297 }
mru
parents: 5296
diff changeset
298 if (c->decomp_size != (unsigned int)(c->zstream.total_out)) {
mru
parents: 5296
diff changeset
299 av_log(avctx, AV_LOG_ERROR, "Decoded size differs (%d != %lu)\n",
mru
parents: 5296
diff changeset
300 c->decomp_size, c->zstream.total_out);
mru
parents: 5296
diff changeset
301 return -1;
mru
parents: 5296
diff changeset
302 }
mru
parents: 5296
diff changeset
303 }
mru
parents: 5296
diff changeset
304 encoded = c->decomp_buf;
6375
551232d0fa74 Remove duplicate ;
reimar
parents: 6218
diff changeset
305 len = c->decomp_size;
5297
mru
parents: 5296
diff changeset
306 #else
mru
parents: 5296
diff changeset
307 av_log(avctx, AV_LOG_ERROR, "BUG! Zlib support not compiled in frame decoder.\n");
mru
parents: 5296
diff changeset
308 return -1;
mru
parents: 5296
diff changeset
309 #endif
mru
parents: 5296
diff changeset
310 break;
mru
parents: 5296
diff changeset
311 default:
mru
parents: 5296
diff changeset
312 av_log(avctx, AV_LOG_ERROR, "BUG! Unknown codec in frame decoder compression switch.\n");
mru
parents: 5296
diff changeset
313 return -1;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
314 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
315
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
316
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
317 /* Apply PNG filter */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
318 if ((avctx->codec_id == CODEC_ID_ZLIB) && (c->flags & FLAG_PNGFILTER)) {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
319 switch (c->imgtype) {
5297
mru
parents: 5296
diff changeset
320 case IMGTYPE_YUV111:
mru
parents: 5296
diff changeset
321 case IMGTYPE_RGB24:
mru
parents: 5296
diff changeset
322 for (row = 0; row < height; row++) {
mru
parents: 5296
diff changeset
323 pixel_ptr = row * width * 3;
mru
parents: 5296
diff changeset
324 yq = encoded[pixel_ptr++];
mru
parents: 5296
diff changeset
325 uqvq = AV_RL16(encoded+pixel_ptr);
mru
parents: 5296
diff changeset
326 pixel_ptr += 2;
mru
parents: 5296
diff changeset
327 for (col = 1; col < width; col++) {
mru
parents: 5296
diff changeset
328 encoded[pixel_ptr] = yq -= encoded[pixel_ptr];
mru
parents: 5296
diff changeset
329 uqvq -= AV_RL16(encoded+pixel_ptr+1);
mru
parents: 5296
diff changeset
330 AV_WL16(encoded+pixel_ptr+1, uqvq);
mru
parents: 5296
diff changeset
331 pixel_ptr += 3;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
332 }
5297
mru
parents: 5296
diff changeset
333 }
mru
parents: 5296
diff changeset
334 break;
mru
parents: 5296
diff changeset
335 case IMGTYPE_YUV422:
mru
parents: 5296
diff changeset
336 for (row = 0; row < height; row++) {
mru
parents: 5296
diff changeset
337 pixel_ptr = row * width * 2;
mru
parents: 5296
diff changeset
338 yq = uq = vq =0;
mru
parents: 5296
diff changeset
339 for (col = 0; col < width/4; col++) {
mru
parents: 5296
diff changeset
340 encoded[pixel_ptr] = yq -= encoded[pixel_ptr];
mru
parents: 5296
diff changeset
341 encoded[pixel_ptr+1] = yq -= encoded[pixel_ptr+1];
mru
parents: 5296
diff changeset
342 encoded[pixel_ptr+2] = yq -= encoded[pixel_ptr+2];
mru
parents: 5296
diff changeset
343 encoded[pixel_ptr+3] = yq -= encoded[pixel_ptr+3];
mru
parents: 5296
diff changeset
344 encoded[pixel_ptr+4] = uq -= encoded[pixel_ptr+4];
mru
parents: 5296
diff changeset
345 encoded[pixel_ptr+5] = uq -= encoded[pixel_ptr+5];
mru
parents: 5296
diff changeset
346 encoded[pixel_ptr+6] = vq -= encoded[pixel_ptr+6];
mru
parents: 5296
diff changeset
347 encoded[pixel_ptr+7] = vq -= encoded[pixel_ptr+7];
mru
parents: 5296
diff changeset
348 pixel_ptr += 8;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
349 }
5297
mru
parents: 5296
diff changeset
350 }
mru
parents: 5296
diff changeset
351 break;
mru
parents: 5296
diff changeset
352 case IMGTYPE_YUV411:
mru
parents: 5296
diff changeset
353 for (row = 0; row < height; row++) {
mru
parents: 5296
diff changeset
354 pixel_ptr = row * width / 2 * 3;
mru
parents: 5296
diff changeset
355 yq = uq = vq =0;
mru
parents: 5296
diff changeset
356 for (col = 0; col < width/4; col++) {
mru
parents: 5296
diff changeset
357 encoded[pixel_ptr] = yq -= encoded[pixel_ptr];
mru
parents: 5296
diff changeset
358 encoded[pixel_ptr+1] = yq -= encoded[pixel_ptr+1];
mru
parents: 5296
diff changeset
359 encoded[pixel_ptr+2] = yq -= encoded[pixel_ptr+2];
mru
parents: 5296
diff changeset
360 encoded[pixel_ptr+3] = yq -= encoded[pixel_ptr+3];
mru
parents: 5296
diff changeset
361 encoded[pixel_ptr+4] = uq -= encoded[pixel_ptr+4];
mru
parents: 5296
diff changeset
362 encoded[pixel_ptr+5] = vq -= encoded[pixel_ptr+5];
mru
parents: 5296
diff changeset
363 pixel_ptr += 6;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
364 }
5297
mru
parents: 5296
diff changeset
365 }
mru
parents: 5296
diff changeset
366 break;
mru
parents: 5296
diff changeset
367 case IMGTYPE_YUV211:
mru
parents: 5296
diff changeset
368 for (row = 0; row < height; row++) {
mru
parents: 5296
diff changeset
369 pixel_ptr = row * width * 2;
mru
parents: 5296
diff changeset
370 yq = uq = vq =0;
mru
parents: 5296
diff changeset
371 for (col = 0; col < width/2; col++) {
mru
parents: 5296
diff changeset
372 encoded[pixel_ptr] = yq -= encoded[pixel_ptr];
mru
parents: 5296
diff changeset
373 encoded[pixel_ptr+1] = yq -= encoded[pixel_ptr+1];
mru
parents: 5296
diff changeset
374 encoded[pixel_ptr+2] = uq -= encoded[pixel_ptr+2];
mru
parents: 5296
diff changeset
375 encoded[pixel_ptr+3] = vq -= encoded[pixel_ptr+3];
mru
parents: 5296
diff changeset
376 pixel_ptr += 4;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
377 }
5297
mru
parents: 5296
diff changeset
378 }
mru
parents: 5296
diff changeset
379 break;
mru
parents: 5296
diff changeset
380 case IMGTYPE_YUV420:
mru
parents: 5296
diff changeset
381 for (row = 0; row < height/2; row++) {
mru
parents: 5296
diff changeset
382 pixel_ptr = row * width * 3;
mru
parents: 5296
diff changeset
383 yq = y1q = uq = vq =0;
mru
parents: 5296
diff changeset
384 for (col = 0; col < width/2; col++) {
mru
parents: 5296
diff changeset
385 encoded[pixel_ptr] = yq -= encoded[pixel_ptr];
mru
parents: 5296
diff changeset
386 encoded[pixel_ptr+1] = yq -= encoded[pixel_ptr+1];
mru
parents: 5296
diff changeset
387 encoded[pixel_ptr+2] = y1q -= encoded[pixel_ptr+2];
mru
parents: 5296
diff changeset
388 encoded[pixel_ptr+3] = y1q -= encoded[pixel_ptr+3];
mru
parents: 5296
diff changeset
389 encoded[pixel_ptr+4] = uq -= encoded[pixel_ptr+4];
mru
parents: 5296
diff changeset
390 encoded[pixel_ptr+5] = vq -= encoded[pixel_ptr+5];
mru
parents: 5296
diff changeset
391 pixel_ptr += 6;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
392 }
5297
mru
parents: 5296
diff changeset
393 }
mru
parents: 5296
diff changeset
394 break;
mru
parents: 5296
diff changeset
395 default:
mru
parents: 5296
diff changeset
396 av_log(avctx, AV_LOG_ERROR, "BUG! Unknown imagetype in pngfilter switch.\n");
mru
parents: 5296
diff changeset
397 return -1;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
398 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
399 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
400
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
401 /* Convert colorspace */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
402 switch (c->imgtype) {
5297
mru
parents: 5296
diff changeset
403 case IMGTYPE_YUV111:
mru
parents: 5296
diff changeset
404 for (row = height - 1; row >= 0; row--) {
mru
parents: 5296
diff changeset
405 pixel_ptr = row * c->pic.linesize[0];
mru
parents: 5296
diff changeset
406 for (col = 0; col < width; col++) {
mru
parents: 5296
diff changeset
407 outptr[pixel_ptr++] = get_b(encoded[0], encoded[1]);
mru
parents: 5296
diff changeset
408 outptr[pixel_ptr++] = get_g(encoded[0], encoded[1], encoded[2]);
mru
parents: 5296
diff changeset
409 outptr[pixel_ptr++] = get_r(encoded[0], encoded[2]);
mru
parents: 5296
diff changeset
410 encoded += 3;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
411 }
5297
mru
parents: 5296
diff changeset
412 }
mru
parents: 5296
diff changeset
413 break;
mru
parents: 5296
diff changeset
414 case IMGTYPE_YUV422:
mru
parents: 5296
diff changeset
415 for (row = height - 1; row >= 0; row--) {
mru
parents: 5296
diff changeset
416 pixel_ptr = row * c->pic.linesize[0];
mru
parents: 5296
diff changeset
417 for (col = 0; col < width/4; col++) {
mru
parents: 5296
diff changeset
418 outptr[pixel_ptr++] = get_b(encoded[0], encoded[4]);
mru
parents: 5296
diff changeset
419 outptr[pixel_ptr++] = get_g(encoded[0], encoded[4], encoded[6]);
mru
parents: 5296
diff changeset
420 outptr[pixel_ptr++] = get_r(encoded[0], encoded[6]);
mru
parents: 5296
diff changeset
421 outptr[pixel_ptr++] = get_b(encoded[1], encoded[4]);
mru
parents: 5296
diff changeset
422 outptr[pixel_ptr++] = get_g(encoded[1], encoded[4], encoded[6]);
mru
parents: 5296
diff changeset
423 outptr[pixel_ptr++] = get_r(encoded[1], encoded[6]);
mru
parents: 5296
diff changeset
424 outptr[pixel_ptr++] = get_b(encoded[2], encoded[5]);
mru
parents: 5296
diff changeset
425 outptr[pixel_ptr++] = get_g(encoded[2], encoded[5], encoded[7]);
mru
parents: 5296
diff changeset
426 outptr[pixel_ptr++] = get_r(encoded[2], encoded[7]);
mru
parents: 5296
diff changeset
427 outptr[pixel_ptr++] = get_b(encoded[3], encoded[5]);
mru
parents: 5296
diff changeset
428 outptr[pixel_ptr++] = get_g(encoded[3], encoded[5], encoded[7]);
mru
parents: 5296
diff changeset
429 outptr[pixel_ptr++] = get_r(encoded[3], encoded[7]);
mru
parents: 5296
diff changeset
430 encoded += 8;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
431 }
5297
mru
parents: 5296
diff changeset
432 }
mru
parents: 5296
diff changeset
433 break;
mru
parents: 5296
diff changeset
434 case IMGTYPE_RGB24:
mru
parents: 5296
diff changeset
435 for (row = height - 1; row >= 0; row--) {
mru
parents: 5296
diff changeset
436 pixel_ptr = row * c->pic.linesize[0];
mru
parents: 5296
diff changeset
437 for (col = 0; col < width; col++) {
mru
parents: 5296
diff changeset
438 outptr[pixel_ptr++] = encoded[0];
mru
parents: 5296
diff changeset
439 outptr[pixel_ptr++] = encoded[1];
mru
parents: 5296
diff changeset
440 outptr[pixel_ptr++] = encoded[2];
mru
parents: 5296
diff changeset
441 encoded += 3;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
442 }
5297
mru
parents: 5296
diff changeset
443 }
mru
parents: 5296
diff changeset
444 break;
mru
parents: 5296
diff changeset
445 case IMGTYPE_YUV411:
mru
parents: 5296
diff changeset
446 for (row = height - 1; row >= 0; row--) {
mru
parents: 5296
diff changeset
447 pixel_ptr = row * c->pic.linesize[0];
mru
parents: 5296
diff changeset
448 for (col = 0; col < width/4; col++) {
mru
parents: 5296
diff changeset
449 outptr[pixel_ptr++] = get_b(encoded[0], encoded[4]);
mru
parents: 5296
diff changeset
450 outptr[pixel_ptr++] = get_g(encoded[0], encoded[4], encoded[5]);
mru
parents: 5296
diff changeset
451 outptr[pixel_ptr++] = get_r(encoded[0], encoded[5]);
mru
parents: 5296
diff changeset
452 outptr[pixel_ptr++] = get_b(encoded[1], encoded[4]);
mru
parents: 5296
diff changeset
453 outptr[pixel_ptr++] = get_g(encoded[1], encoded[4], encoded[5]);
mru
parents: 5296
diff changeset
454 outptr[pixel_ptr++] = get_r(encoded[1], encoded[5]);
mru
parents: 5296
diff changeset
455 outptr[pixel_ptr++] = get_b(encoded[2], encoded[4]);
mru
parents: 5296
diff changeset
456 outptr[pixel_ptr++] = get_g(encoded[2], encoded[4], encoded[5]);
mru
parents: 5296
diff changeset
457 outptr[pixel_ptr++] = get_r(encoded[2], encoded[5]);
mru
parents: 5296
diff changeset
458 outptr[pixel_ptr++] = get_b(encoded[3], encoded[4]);
mru
parents: 5296
diff changeset
459 outptr[pixel_ptr++] = get_g(encoded[3], encoded[4], encoded[5]);
mru
parents: 5296
diff changeset
460 outptr[pixel_ptr++] = get_r(encoded[3], encoded[5]);
mru
parents: 5296
diff changeset
461 encoded += 6;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
462 }
5297
mru
parents: 5296
diff changeset
463 }
mru
parents: 5296
diff changeset
464 break;
mru
parents: 5296
diff changeset
465 case IMGTYPE_YUV211:
mru
parents: 5296
diff changeset
466 for (row = height - 1; row >= 0; row--) {
mru
parents: 5296
diff changeset
467 pixel_ptr = row * c->pic.linesize[0];
mru
parents: 5296
diff changeset
468 for (col = 0; col < width/2; col++) {
mru
parents: 5296
diff changeset
469 outptr[pixel_ptr++] = get_b(encoded[0], encoded[2]);
mru
parents: 5296
diff changeset
470 outptr[pixel_ptr++] = get_g(encoded[0], encoded[2], encoded[3]);
mru
parents: 5296
diff changeset
471 outptr[pixel_ptr++] = get_r(encoded[0], encoded[3]);
mru
parents: 5296
diff changeset
472 outptr[pixel_ptr++] = get_b(encoded[1], encoded[2]);
mru
parents: 5296
diff changeset
473 outptr[pixel_ptr++] = get_g(encoded[1], encoded[2], encoded[3]);
mru
parents: 5296
diff changeset
474 outptr[pixel_ptr++] = get_r(encoded[1], encoded[3]);
mru
parents: 5296
diff changeset
475 encoded += 4;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
476 }
5297
mru
parents: 5296
diff changeset
477 }
mru
parents: 5296
diff changeset
478 break;
mru
parents: 5296
diff changeset
479 case IMGTYPE_YUV420:
mru
parents: 5296
diff changeset
480 for (row = height / 2 - 1; row >= 0; row--) {
mru
parents: 5296
diff changeset
481 pixel_ptr = 2 * row * c->pic.linesize[0];
mru
parents: 5296
diff changeset
482 for (col = 0; col < width/2; col++) {
mru
parents: 5296
diff changeset
483 outptr[pixel_ptr] = get_b(encoded[0], encoded[4]);
mru
parents: 5296
diff changeset
484 outptr[pixel_ptr+1] = get_g(encoded[0], encoded[4], encoded[5]);
mru
parents: 5296
diff changeset
485 outptr[pixel_ptr+2] = get_r(encoded[0], encoded[5]);
mru
parents: 5296
diff changeset
486 outptr[pixel_ptr+3] = get_b(encoded[1], encoded[4]);
mru
parents: 5296
diff changeset
487 outptr[pixel_ptr+4] = get_g(encoded[1], encoded[4], encoded[5]);
mru
parents: 5296
diff changeset
488 outptr[pixel_ptr+5] = get_r(encoded[1], encoded[5]);
mru
parents: 5296
diff changeset
489 outptr[pixel_ptr-c->pic.linesize[0]] = get_b(encoded[2], encoded[4]);
mru
parents: 5296
diff changeset
490 outptr[pixel_ptr-c->pic.linesize[0]+1] = get_g(encoded[2], encoded[4], encoded[5]);
mru
parents: 5296
diff changeset
491 outptr[pixel_ptr-c->pic.linesize[0]+2] = get_r(encoded[2], encoded[5]);
mru
parents: 5296
diff changeset
492 outptr[pixel_ptr-c->pic.linesize[0]+3] = get_b(encoded[3], encoded[4]);
mru
parents: 5296
diff changeset
493 outptr[pixel_ptr-c->pic.linesize[0]+4] = get_g(encoded[3], encoded[4], encoded[5]);
mru
parents: 5296
diff changeset
494 outptr[pixel_ptr-c->pic.linesize[0]+5] = get_r(encoded[3], encoded[5]);
mru
parents: 5296
diff changeset
495 pixel_ptr += 6;
mru
parents: 5296
diff changeset
496 encoded += 6;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
497 }
5297
mru
parents: 5296
diff changeset
498 }
mru
parents: 5296
diff changeset
499 break;
mru
parents: 5296
diff changeset
500 default:
mru
parents: 5296
diff changeset
501 av_log(avctx, AV_LOG_ERROR, "BUG! Unknown imagetype in image decoder.\n");
mru
parents: 5296
diff changeset
502 return -1;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
503 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
504
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
505 *data_size = sizeof(AVFrame);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
506 *(AVFrame*)data = c->pic;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
507
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
508 /* always report that the buffer was completely consumed */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
509 return buf_size;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
510 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
511
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
512 /*
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
513 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
514 * Init lcl decoder
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
515 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
516 */
6517
48759bfbd073 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 6375
diff changeset
517 static av_cold int decode_init(AVCodecContext *avctx)
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
518 {
5294
e21873a1c00b split lcl.c into lcldec.c, lclenc.c, lcl.h
mru
parents: 5215
diff changeset
519 LclDecContext * const c = avctx->priv_data;
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
520 unsigned int basesize = avctx->width * avctx->height;
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
521 unsigned int max_basesize = ((avctx->width + 3) & ~3) * ((avctx->height + 3) & ~3);
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
522 unsigned int max_decomp_size;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
523 int zret; // Zlib return code
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
524
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
525 c->pic.data[0] = NULL;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
526
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
527 #ifdef CONFIG_ZLIB
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
528 // Needed if zlib unused or init aborted before inflateInit
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2628
diff changeset
529 memset(&(c->zstream), 0, sizeof(z_stream));
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
530 #endif
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
531
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
532 if (avctx->extradata_size < 8) {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
533 av_log(avctx, AV_LOG_ERROR, "Extradata size too small.\n");
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
534 return 1;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
535 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
536
2429
4b350cc506a7 Use avcodec_check_dimensions instead of custom hack
rtognimp
parents: 2418
diff changeset
537 if (avcodec_check_dimensions(avctx, avctx->width, avctx->height) < 0) {
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
538 return 1;
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
539 }
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
540
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2628
diff changeset
541 /* Check codec type */
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
542 if (((avctx->codec_id == CODEC_ID_MSZH) && (*((char *)avctx->extradata + 7) != CODEC_MSZH)) ||
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
543 ((avctx->codec_id == CODEC_ID_ZLIB) && (*((char *)avctx->extradata + 7) != CODEC_ZLIB))) {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
544 av_log(avctx, AV_LOG_ERROR, "Codec id and codec type mismatch. This should not happen.\n");
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
545 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
546
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
547 /* Detect image type */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
548 switch (c->imgtype = *((char *)avctx->extradata + 4)) {
5297
mru
parents: 5296
diff changeset
549 case IMGTYPE_YUV111:
mru
parents: 5296
diff changeset
550 c->decomp_size = basesize * 3;
mru
parents: 5296
diff changeset
551 max_decomp_size = max_basesize * 3;
mru
parents: 5296
diff changeset
552 av_log(avctx, AV_LOG_INFO, "Image type is YUV 1:1:1.\n");
mru
parents: 5296
diff changeset
553 break;
mru
parents: 5296
diff changeset
554 case IMGTYPE_YUV422:
mru
parents: 5296
diff changeset
555 c->decomp_size = basesize * 2;
mru
parents: 5296
diff changeset
556 max_decomp_size = max_basesize * 2;
mru
parents: 5296
diff changeset
557 av_log(avctx, AV_LOG_INFO, "Image type is YUV 4:2:2.\n");
mru
parents: 5296
diff changeset
558 break;
mru
parents: 5296
diff changeset
559 case IMGTYPE_RGB24:
mru
parents: 5296
diff changeset
560 c->decomp_size = basesize * 3;
mru
parents: 5296
diff changeset
561 max_decomp_size = max_basesize * 3;
mru
parents: 5296
diff changeset
562 av_log(avctx, AV_LOG_INFO, "Image type is RGB 24.\n");
mru
parents: 5296
diff changeset
563 break;
mru
parents: 5296
diff changeset
564 case IMGTYPE_YUV411:
mru
parents: 5296
diff changeset
565 c->decomp_size = basesize / 2 * 3;
mru
parents: 5296
diff changeset
566 max_decomp_size = max_basesize / 2 * 3;
mru
parents: 5296
diff changeset
567 av_log(avctx, AV_LOG_INFO, "Image type is YUV 4:1:1.\n");
mru
parents: 5296
diff changeset
568 break;
mru
parents: 5296
diff changeset
569 case IMGTYPE_YUV211:
mru
parents: 5296
diff changeset
570 c->decomp_size = basesize * 2;
mru
parents: 5296
diff changeset
571 max_decomp_size = max_basesize * 2;
mru
parents: 5296
diff changeset
572 av_log(avctx, AV_LOG_INFO, "Image type is YUV 2:1:1.\n");
mru
parents: 5296
diff changeset
573 break;
mru
parents: 5296
diff changeset
574 case IMGTYPE_YUV420:
mru
parents: 5296
diff changeset
575 c->decomp_size = basesize / 2 * 3;
mru
parents: 5296
diff changeset
576 max_decomp_size = max_basesize / 2 * 3;
mru
parents: 5296
diff changeset
577 av_log(avctx, AV_LOG_INFO, "Image type is YUV 4:2:0.\n");
mru
parents: 5296
diff changeset
578 break;
mru
parents: 5296
diff changeset
579 default:
mru
parents: 5296
diff changeset
580 av_log(avctx, AV_LOG_ERROR, "Unsupported image format %d.\n", c->imgtype);
mru
parents: 5296
diff changeset
581 return 1;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
582 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
583
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
584 /* Detect compression method */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
585 c->compression = *((char *)avctx->extradata + 5);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
586 switch (avctx->codec_id) {
5297
mru
parents: 5296
diff changeset
587 case CODEC_ID_MSZH:
mru
parents: 5296
diff changeset
588 switch (c->compression) {
mru
parents: 5296
diff changeset
589 case COMP_MSZH:
mru
parents: 5296
diff changeset
590 av_log(avctx, AV_LOG_INFO, "Compression enabled.\n");
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
591 break;
5297
mru
parents: 5296
diff changeset
592 case COMP_MSZH_NOCOMP:
mru
parents: 5296
diff changeset
593 c->decomp_size = 0;
mru
parents: 5296
diff changeset
594 av_log(avctx, AV_LOG_INFO, "No compression.\n");
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
595 break;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
596 default:
5297
mru
parents: 5296
diff changeset
597 av_log(avctx, AV_LOG_ERROR, "Unsupported compression format for MSZH (%d).\n", c->compression);
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
598 return 1;
5297
mru
parents: 5296
diff changeset
599 }
mru
parents: 5296
diff changeset
600 break;
mru
parents: 5296
diff changeset
601 case CODEC_ID_ZLIB:
mru
parents: 5296
diff changeset
602 #ifdef CONFIG_ZLIB
mru
parents: 5296
diff changeset
603 switch (c->compression) {
mru
parents: 5296
diff changeset
604 case COMP_ZLIB_HISPEED:
mru
parents: 5296
diff changeset
605 av_log(avctx, AV_LOG_INFO, "High speed compression.\n");
mru
parents: 5296
diff changeset
606 break;
mru
parents: 5296
diff changeset
607 case COMP_ZLIB_HICOMP:
mru
parents: 5296
diff changeset
608 av_log(avctx, AV_LOG_INFO, "High compression.\n");
mru
parents: 5296
diff changeset
609 break;
mru
parents: 5296
diff changeset
610 case COMP_ZLIB_NORMAL:
mru
parents: 5296
diff changeset
611 av_log(avctx, AV_LOG_INFO, "Normal compression.\n");
mru
parents: 5296
diff changeset
612 break;
mru
parents: 5296
diff changeset
613 default:
mru
parents: 5296
diff changeset
614 if ((c->compression < Z_NO_COMPRESSION) || (c->compression > Z_BEST_COMPRESSION)) {
mru
parents: 5296
diff changeset
615 av_log(avctx, AV_LOG_ERROR, "Unsupported compression level for ZLIB: (%d).\n", c->compression);
mru
parents: 5296
diff changeset
616 return 1;
mru
parents: 5296
diff changeset
617 }
mru
parents: 5296
diff changeset
618 av_log(avctx, AV_LOG_INFO, "Compression level for ZLIB: (%d).\n", c->compression);
mru
parents: 5296
diff changeset
619 }
mru
parents: 5296
diff changeset
620 #else
mru
parents: 5296
diff changeset
621 av_log(avctx, AV_LOG_ERROR, "Zlib support not compiled.\n");
mru
parents: 5296
diff changeset
622 return 1;
mru
parents: 5296
diff changeset
623 #endif
mru
parents: 5296
diff changeset
624 break;
mru
parents: 5296
diff changeset
625 default:
mru
parents: 5296
diff changeset
626 av_log(avctx, AV_LOG_ERROR, "BUG! Unknown codec in compression switch.\n");
mru
parents: 5296
diff changeset
627 return 1;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
628 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
629
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
630 /* Allocate decompression buffer */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
631 if (c->decomp_size) {
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
632 if ((c->decomp_buf = av_malloc(max_decomp_size)) == NULL) {
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
633 av_log(avctx, AV_LOG_ERROR, "Can't allocate decompression buffer.\n");
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
634 return 1;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
635 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
636 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2628
diff changeset
637
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2628
diff changeset
638 /* Detect flags */
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
639 c->flags = *((char *)avctx->extradata + 6);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
640 if (c->flags & FLAG_MULTITHREAD)
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
641 av_log(avctx, AV_LOG_INFO, "Multithread encoder flag set.\n");
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
642 if (c->flags & FLAG_NULLFRAME)
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
643 av_log(avctx, AV_LOG_INFO, "Nullframe insertion flag set.\n");
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
644 if ((avctx->codec_id == CODEC_ID_ZLIB) && (c->flags & FLAG_PNGFILTER))
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
645 av_log(avctx, AV_LOG_INFO, "PNG filter flag set.\n");
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
646 if (c->flags & FLAGMASK_UNUSED)
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
647 av_log(avctx, AV_LOG_ERROR, "Unknown flag set (%d).\n", c->flags);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
648
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
649 /* If needed init zlib */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
650 if (avctx->codec_id == CODEC_ID_ZLIB) {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
651 #ifdef CONFIG_ZLIB
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
652 c->zstream.zalloc = Z_NULL;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
653 c->zstream.zfree = Z_NULL;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
654 c->zstream.opaque = Z_NULL;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
655 zret = inflateInit(&(c->zstream));
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
656 if (zret != Z_OK) {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
657 av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
658 return 1;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
659 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
660 #else
5297
mru
parents: 5296
diff changeset
661 av_log(avctx, AV_LOG_ERROR, "Zlib support not compiled.\n");
mru
parents: 5296
diff changeset
662 return 1;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
663 #endif
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
664 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
665
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
666 avctx->pix_fmt = PIX_FMT_BGR24;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
667
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
668 return 0;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
669 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
670
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
671 /*
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
672 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
673 * Uninit lcl decoder
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
674 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
675 */
6517
48759bfbd073 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 6375
diff changeset
676 static av_cold int decode_end(AVCodecContext *avctx)
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
677 {
5297
mru
parents: 5296
diff changeset
678 LclDecContext * const c = avctx->priv_data;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
679
5297
mru
parents: 5296
diff changeset
680 if (c->pic.data[0])
mru
parents: 5296
diff changeset
681 avctx->release_buffer(avctx, &c->pic);
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
682 #ifdef CONFIG_ZLIB
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
683 inflateEnd(&(c->zstream));
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
684 #endif
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
685
5297
mru
parents: 5296
diff changeset
686 return 0;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
687 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
688
3777
20545fbb6f7c add some #ifdef CONFIG_ENCODERS/DECODERS
mru
parents: 3036
diff changeset
689 #ifdef CONFIG_MSZH_DECODER
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
690 AVCodec mszh_decoder = {
5297
mru
parents: 5296
diff changeset
691 "mszh",
mru
parents: 5296
diff changeset
692 CODEC_TYPE_VIDEO,
mru
parents: 5296
diff changeset
693 CODEC_ID_MSZH,
mru
parents: 5296
diff changeset
694 sizeof(LclDecContext),
mru
parents: 5296
diff changeset
695 decode_init,
mru
parents: 5296
diff changeset
696 NULL,
mru
parents: 5296
diff changeset
697 decode_end,
mru
parents: 5296
diff changeset
698 decode_frame,
mru
parents: 5296
diff changeset
699 CODEC_CAP_DR1,
7040
e943e1409077 Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents: 6712
diff changeset
700 .long_name = NULL_IF_CONFIG_SMALL("LCL (LossLess Codec Library) MSZH"),
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
701 };
3777
20545fbb6f7c add some #ifdef CONFIG_ENCODERS/DECODERS
mru
parents: 3036
diff changeset
702 #endif
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
703
3777
20545fbb6f7c add some #ifdef CONFIG_ENCODERS/DECODERS
mru
parents: 3036
diff changeset
704 #ifdef CONFIG_ZLIB_DECODER
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
705 AVCodec zlib_decoder = {
5297
mru
parents: 5296
diff changeset
706 "zlib",
mru
parents: 5296
diff changeset
707 CODEC_TYPE_VIDEO,
mru
parents: 5296
diff changeset
708 CODEC_ID_ZLIB,
mru
parents: 5296
diff changeset
709 sizeof(LclDecContext),
mru
parents: 5296
diff changeset
710 decode_init,
mru
parents: 5296
diff changeset
711 NULL,
mru
parents: 5296
diff changeset
712 decode_end,
mru
parents: 5296
diff changeset
713 decode_frame,
mru
parents: 5296
diff changeset
714 CODEC_CAP_DR1,
7040
e943e1409077 Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents: 6712
diff changeset
715 .long_name = NULL_IF_CONFIG_SMALL("LCL (LossLess Codec Library) ZLIB"),
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
716 };
3777
20545fbb6f7c add some #ifdef CONFIG_ENCODERS/DECODERS
mru
parents: 3036
diff changeset
717 #endif