annotate lcldec.c @ 9751:705efd6ddaab libavcodec

lcldec.c: change #if CONFIG_ZLIB to #if CONFIG_ZLIB_DECODER. The zlib related code should not be compiled in when the decoder is disabled and it thus will never be used, even if we have zlib available.
author reimar
date Sun, 31 May 2009 09:16:06 +0000
parents a87706453840
children f52c5d54ede5
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 /**
8718
e9d9d946f213 Use full internal pathname in doxygen @file directives.
diego
parents: 8673
diff changeset
23 * @file libavcodec/lcldec.c
1743
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"
9428
0dce4fe6e6f3 Rename bitstream.h to get_bits.h.
stefano
parents: 9355
diff changeset
45 #include "get_bits.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
9751
705efd6ddaab lcldec.c: change #if CONFIG_ZLIB to #if CONFIG_ZLIB_DECODER.
reimar
parents: 9750
diff changeset
48 #if CONFIG_ZLIB_DECODER
1743
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;
9751
705efd6ddaab lcldec.c: change #if CONFIG_ZLIB to #if CONFIG_ZLIB_DECODER.
reimar
parents: 9750
diff changeset
68 #if CONFIG_ZLIB_DECODER
1743
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
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
74 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
75 {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
76 unsigned char *destptr_bak = destptr;
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
77 unsigned char *destptr_end = destptr + destsize;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
78 unsigned char mask = 0;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
79 unsigned char maskbit = 0;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
80 unsigned int ofs, cnt;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2628
diff changeset
81
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
82 while (srclen > 0 && destptr < destptr_end) {
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
83 if (maskbit == 0) {
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
84 mask = *srcptr++;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
85 maskbit = 8;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
86 srclen--;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
87 continue;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
88 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
89 if ((mask & (1 << (--maskbit))) == 0) {
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
90 if (destptr + 4 > destptr_end)
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
91 break;
9720
d6a35d7be925 Use AV_R/WN32 instead of direct integer copying.
heydowns
parents: 9428
diff changeset
92 AV_WN32(destptr, AV_RN32(srcptr));
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
93 srclen -= 4;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
94 destptr += 4;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
95 srcptr += 4;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
96 } else {
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
97 ofs = *srcptr++;
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
98 cnt = *srcptr++;
6375
551232d0fa74 Remove duplicate ;
reimar
parents: 6218
diff changeset
99 ofs += cnt * 256;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
100 cnt = ((cnt >> 3) & 0x1f) + 1;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
101 ofs &= 0x7ff;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
102 srclen -= 2;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
103 cnt *= 4;
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
104 if (destptr + cnt > destptr_end) {
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
105 cnt = destptr_end - destptr;
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
106 }
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
107 for (; cnt > 0; cnt--) {
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
108 *destptr = *(destptr - ofs);
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
109 destptr++;
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
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
114 return destptr - destptr_bak;
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
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
117
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
118
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
119 /*
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
120 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
121 * Decode a frame
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
122 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
123 */
9355
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 8718
diff changeset
124 static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt)
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
125 {
9355
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 8718
diff changeset
126 const uint8_t *buf = avpkt->data;
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 8718
diff changeset
127 int buf_size = avpkt->size;
5297
mru
parents: 5296
diff changeset
128 LclDecContext * const c = avctx->priv_data;
mru
parents: 5296
diff changeset
129 unsigned char *encoded = (unsigned char *)buf;
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
130 unsigned int pixel_ptr;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
131 int row, col;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
132 unsigned char *outptr;
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
133 uint8_t *y_out, *u_out, *v_out;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
134 unsigned int width = avctx->width; // Real image width
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
135 unsigned int height = avctx->height; // Real image height
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
136 unsigned int mszh_dlen;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
137 unsigned char yq, y1q, uq, vq;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
138 int uqvq;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
139 unsigned int mthread_inlen, mthread_outlen;
9751
705efd6ddaab lcldec.c: change #if CONFIG_ZLIB to #if CONFIG_ZLIB_DECODER.
reimar
parents: 9750
diff changeset
140 #if CONFIG_ZLIB_DECODER
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
141 int zret; // Zlib return code
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
142 #endif
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
143 unsigned int len = buf_size;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
144
5297
mru
parents: 5296
diff changeset
145 if(c->pic.data[0])
mru
parents: 5296
diff changeset
146 avctx->release_buffer(avctx, &c->pic);
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
147
5297
mru
parents: 5296
diff changeset
148 c->pic.reference = 0;
mru
parents: 5296
diff changeset
149 c->pic.buffer_hints = FF_BUFFER_HINTS_VALID;
mru
parents: 5296
diff changeset
150 if(avctx->get_buffer(avctx, &c->pic) < 0){
mru
parents: 5296
diff changeset
151 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
mru
parents: 5296
diff changeset
152 return -1;
mru
parents: 5296
diff changeset
153 }
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
154
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
155 outptr = c->pic.data[0]; // Output image pointer
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
156
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
157 /* Decompress frame */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
158 switch (avctx->codec_id) {
5297
mru
parents: 5296
diff changeset
159 case CODEC_ID_MSZH:
mru
parents: 5296
diff changeset
160 switch (c->compression) {
mru
parents: 5296
diff changeset
161 case COMP_MSZH:
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
162 if (c->flags & FLAG_MULTITHREAD) {
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
163 mthread_inlen = *(unsigned int*)encoded;
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
164 mthread_outlen = *(unsigned int*)(encoded+4);
5297
mru
parents: 5296
diff changeset
165 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
166 mthread_outlen = c->decomp_size;
5297
mru
parents: 5296
diff changeset
167 mszh_dlen = mszh_decomp(encoded + 8, mthread_inlen, c->decomp_buf, c->decomp_size);
mru
parents: 5296
diff changeset
168 if (mthread_outlen != mszh_dlen) {
mru
parents: 5296
diff changeset
169 av_log(avctx, AV_LOG_ERROR, "Mthread1 decoded size differs (%d != %d)\n",
mru
parents: 5296
diff changeset
170 mthread_outlen, mszh_dlen);
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
171 return -1;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
172 }
5297
mru
parents: 5296
diff changeset
173 mszh_dlen = mszh_decomp(encoded + 8 + mthread_inlen, len - mthread_inlen,
mru
parents: 5296
diff changeset
174 c->decomp_buf + mthread_outlen, c->decomp_size - mthread_outlen);
mru
parents: 5296
diff changeset
175 if (mthread_outlen != mszh_dlen) {
mru
parents: 5296
diff changeset
176 av_log(avctx, AV_LOG_ERROR, "Mthread2 decoded size differs (%d != %d)\n",
mru
parents: 5296
diff changeset
177 mthread_outlen, mszh_dlen);
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
178 return -1;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
179 }
5297
mru
parents: 5296
diff changeset
180 encoded = c->decomp_buf;
mru
parents: 5296
diff changeset
181 len = c->decomp_size;
mru
parents: 5296
diff changeset
182 } else {
mru
parents: 5296
diff changeset
183 mszh_dlen = mszh_decomp(encoded, len, c->decomp_buf, c->decomp_size);
mru
parents: 5296
diff changeset
184 if (c->decomp_size != mszh_dlen) {
mru
parents: 5296
diff changeset
185 av_log(avctx, AV_LOG_ERROR, "Decoded size differs (%d != %d)\n",
mru
parents: 5296
diff changeset
186 c->decomp_size, mszh_dlen);
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
187 return -1;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
188 }
5297
mru
parents: 5296
diff changeset
189 encoded = c->decomp_buf;
mru
parents: 5296
diff changeset
190 len = mszh_dlen;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
191 }
5297
mru
parents: 5296
diff changeset
192 break;
mru
parents: 5296
diff changeset
193 case COMP_MSZH_NOCOMP:
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
194 break;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
195 default:
5297
mru
parents: 5296
diff changeset
196 av_log(avctx, AV_LOG_ERROR, "BUG! Unknown MSZH compression in frame decoder.\n");
mru
parents: 5296
diff changeset
197 return -1;
mru
parents: 5296
diff changeset
198 }
mru
parents: 5296
diff changeset
199 break;
mru
parents: 5296
diff changeset
200 case CODEC_ID_ZLIB:
9751
705efd6ddaab lcldec.c: change #if CONFIG_ZLIB to #if CONFIG_ZLIB_DECODER.
reimar
parents: 9750
diff changeset
201 #if CONFIG_ZLIB_DECODER
5297
mru
parents: 5296
diff changeset
202 /* Using the original dll with normal compression (-1) and RGB format
mru
parents: 5296
diff changeset
203 * gives a file with ZLIB fourcc, but frame is really uncompressed.
mru
parents: 5296
diff changeset
204 * To be sure that's true check also frame size */
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
205 if (c->compression == COMP_ZLIB_NORMAL && c->imgtype == IMGTYPE_RGB24 &&
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
206 len == width * height * 3)
5297
mru
parents: 5296
diff changeset
207 break;
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
208 zret = inflateReset(&c->zstream);
5297
mru
parents: 5296
diff changeset
209 if (zret != Z_OK) {
mru
parents: 5296
diff changeset
210 av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", zret);
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
211 return -1;
5297
mru
parents: 5296
diff changeset
212 }
mru
parents: 5296
diff changeset
213 if (c->flags & FLAG_MULTITHREAD) {
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
214 mthread_inlen = *(unsigned int*)encoded;
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
215 mthread_outlen = *(unsigned int*)(encoded+4);
5297
mru
parents: 5296
diff changeset
216 if (mthread_outlen > c->decomp_size)
mru
parents: 5296
diff changeset
217 mthread_outlen = c->decomp_size;
mru
parents: 5296
diff changeset
218 c->zstream.next_in = encoded + 8;
mru
parents: 5296
diff changeset
219 c->zstream.avail_in = mthread_inlen;
mru
parents: 5296
diff changeset
220 c->zstream.next_out = c->decomp_buf;
mru
parents: 5296
diff changeset
221 c->zstream.avail_out = c->decomp_size;
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
222 zret = inflate(&c->zstream, Z_FINISH);
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
223 if (zret != Z_OK && zret != Z_STREAM_END) {
5297
mru
parents: 5296
diff changeset
224 av_log(avctx, AV_LOG_ERROR, "Mthread1 inflate error: %d\n", zret);
mru
parents: 5296
diff changeset
225 return -1;
mru
parents: 5296
diff changeset
226 }
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
227 if (mthread_outlen != (unsigned int)c->zstream.total_out) {
5297
mru
parents: 5296
diff changeset
228 av_log(avctx, AV_LOG_ERROR, "Mthread1 decoded size differs (%u != %lu)\n",
mru
parents: 5296
diff changeset
229 mthread_outlen, c->zstream.total_out);
mru
parents: 5296
diff changeset
230 return -1;
mru
parents: 5296
diff changeset
231 }
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
232 zret = inflateReset(&c->zstream);
5297
mru
parents: 5296
diff changeset
233 if (zret != Z_OK) {
mru
parents: 5296
diff changeset
234 av_log(avctx, AV_LOG_ERROR, "Mthread2 inflate reset error: %d\n", zret);
mru
parents: 5296
diff changeset
235 return -1;
mru
parents: 5296
diff changeset
236 }
mru
parents: 5296
diff changeset
237 c->zstream.next_in = encoded + 8 + mthread_inlen;
mru
parents: 5296
diff changeset
238 c->zstream.avail_in = len - mthread_inlen;
mru
parents: 5296
diff changeset
239 c->zstream.next_out = c->decomp_buf + mthread_outlen;
mru
parents: 5296
diff changeset
240 c->zstream.avail_out = c->decomp_size - mthread_outlen;
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
241 zret = inflate(&c->zstream, Z_FINISH);
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
242 if (zret != Z_OK && zret != Z_STREAM_END) {
5297
mru
parents: 5296
diff changeset
243 av_log(avctx, AV_LOG_ERROR, "Mthread2 inflate error: %d\n", zret);
mru
parents: 5296
diff changeset
244 return -1;
mru
parents: 5296
diff changeset
245 }
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
246 if (mthread_outlen != (unsigned int)c->zstream.total_out) {
5297
mru
parents: 5296
diff changeset
247 av_log(avctx, AV_LOG_ERROR, "Mthread2 decoded size differs (%d != %lu)\n",
mru
parents: 5296
diff changeset
248 mthread_outlen, c->zstream.total_out);
mru
parents: 5296
diff changeset
249 return -1;
mru
parents: 5296
diff changeset
250 }
mru
parents: 5296
diff changeset
251 } else {
mru
parents: 5296
diff changeset
252 c->zstream.next_in = encoded;
mru
parents: 5296
diff changeset
253 c->zstream.avail_in = len;
mru
parents: 5296
diff changeset
254 c->zstream.next_out = c->decomp_buf;
mru
parents: 5296
diff changeset
255 c->zstream.avail_out = c->decomp_size;
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
256 zret = inflate(&c->zstream, Z_FINISH);
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
257 if (zret != Z_OK && zret != Z_STREAM_END) {
5297
mru
parents: 5296
diff changeset
258 av_log(avctx, AV_LOG_ERROR, "Inflate error: %d\n", zret);
mru
parents: 5296
diff changeset
259 return -1;
mru
parents: 5296
diff changeset
260 }
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
261 if (c->decomp_size != (unsigned int)c->zstream.total_out) {
5297
mru
parents: 5296
diff changeset
262 av_log(avctx, AV_LOG_ERROR, "Decoded size differs (%d != %lu)\n",
mru
parents: 5296
diff changeset
263 c->decomp_size, c->zstream.total_out);
mru
parents: 5296
diff changeset
264 return -1;
mru
parents: 5296
diff changeset
265 }
mru
parents: 5296
diff changeset
266 }
mru
parents: 5296
diff changeset
267 encoded = c->decomp_buf;
6375
551232d0fa74 Remove duplicate ;
reimar
parents: 6218
diff changeset
268 len = c->decomp_size;
5297
mru
parents: 5296
diff changeset
269 #else
mru
parents: 5296
diff changeset
270 av_log(avctx, AV_LOG_ERROR, "BUG! Zlib support not compiled in frame decoder.\n");
mru
parents: 5296
diff changeset
271 return -1;
mru
parents: 5296
diff changeset
272 #endif
mru
parents: 5296
diff changeset
273 break;
mru
parents: 5296
diff changeset
274 default:
mru
parents: 5296
diff changeset
275 av_log(avctx, AV_LOG_ERROR, "BUG! Unknown codec in frame decoder compression switch.\n");
mru
parents: 5296
diff changeset
276 return -1;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
277 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
278
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
279
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
280 /* Apply PNG filter */
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
281 if (avctx->codec_id == CODEC_ID_ZLIB && (c->flags & FLAG_PNGFILTER)) {
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
282 switch (c->imgtype) {
5297
mru
parents: 5296
diff changeset
283 case IMGTYPE_YUV111:
mru
parents: 5296
diff changeset
284 case IMGTYPE_RGB24:
mru
parents: 5296
diff changeset
285 for (row = 0; row < height; row++) {
mru
parents: 5296
diff changeset
286 pixel_ptr = row * width * 3;
mru
parents: 5296
diff changeset
287 yq = encoded[pixel_ptr++];
mru
parents: 5296
diff changeset
288 uqvq = AV_RL16(encoded+pixel_ptr);
mru
parents: 5296
diff changeset
289 pixel_ptr += 2;
mru
parents: 5296
diff changeset
290 for (col = 1; col < width; col++) {
mru
parents: 5296
diff changeset
291 encoded[pixel_ptr] = yq -= encoded[pixel_ptr];
mru
parents: 5296
diff changeset
292 uqvq -= AV_RL16(encoded+pixel_ptr+1);
mru
parents: 5296
diff changeset
293 AV_WL16(encoded+pixel_ptr+1, uqvq);
mru
parents: 5296
diff changeset
294 pixel_ptr += 3;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
295 }
5297
mru
parents: 5296
diff changeset
296 }
mru
parents: 5296
diff changeset
297 break;
mru
parents: 5296
diff changeset
298 case IMGTYPE_YUV422:
mru
parents: 5296
diff changeset
299 for (row = 0; row < height; row++) {
mru
parents: 5296
diff changeset
300 pixel_ptr = row * width * 2;
mru
parents: 5296
diff changeset
301 yq = uq = vq =0;
mru
parents: 5296
diff changeset
302 for (col = 0; col < width/4; col++) {
mru
parents: 5296
diff changeset
303 encoded[pixel_ptr] = yq -= encoded[pixel_ptr];
mru
parents: 5296
diff changeset
304 encoded[pixel_ptr+1] = yq -= encoded[pixel_ptr+1];
mru
parents: 5296
diff changeset
305 encoded[pixel_ptr+2] = yq -= encoded[pixel_ptr+2];
mru
parents: 5296
diff changeset
306 encoded[pixel_ptr+3] = yq -= encoded[pixel_ptr+3];
mru
parents: 5296
diff changeset
307 encoded[pixel_ptr+4] = uq -= encoded[pixel_ptr+4];
mru
parents: 5296
diff changeset
308 encoded[pixel_ptr+5] = uq -= encoded[pixel_ptr+5];
mru
parents: 5296
diff changeset
309 encoded[pixel_ptr+6] = vq -= encoded[pixel_ptr+6];
mru
parents: 5296
diff changeset
310 encoded[pixel_ptr+7] = vq -= encoded[pixel_ptr+7];
mru
parents: 5296
diff changeset
311 pixel_ptr += 8;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
312 }
5297
mru
parents: 5296
diff changeset
313 }
mru
parents: 5296
diff changeset
314 break;
mru
parents: 5296
diff changeset
315 case IMGTYPE_YUV411:
mru
parents: 5296
diff changeset
316 for (row = 0; row < height; row++) {
mru
parents: 5296
diff changeset
317 pixel_ptr = row * width / 2 * 3;
mru
parents: 5296
diff changeset
318 yq = uq = vq =0;
mru
parents: 5296
diff changeset
319 for (col = 0; col < width/4; col++) {
mru
parents: 5296
diff changeset
320 encoded[pixel_ptr] = yq -= encoded[pixel_ptr];
mru
parents: 5296
diff changeset
321 encoded[pixel_ptr+1] = yq -= encoded[pixel_ptr+1];
mru
parents: 5296
diff changeset
322 encoded[pixel_ptr+2] = yq -= encoded[pixel_ptr+2];
mru
parents: 5296
diff changeset
323 encoded[pixel_ptr+3] = yq -= encoded[pixel_ptr+3];
mru
parents: 5296
diff changeset
324 encoded[pixel_ptr+4] = uq -= encoded[pixel_ptr+4];
mru
parents: 5296
diff changeset
325 encoded[pixel_ptr+5] = vq -= encoded[pixel_ptr+5];
mru
parents: 5296
diff changeset
326 pixel_ptr += 6;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
327 }
5297
mru
parents: 5296
diff changeset
328 }
mru
parents: 5296
diff changeset
329 break;
mru
parents: 5296
diff changeset
330 case IMGTYPE_YUV211:
mru
parents: 5296
diff changeset
331 for (row = 0; row < height; row++) {
mru
parents: 5296
diff changeset
332 pixel_ptr = row * width * 2;
mru
parents: 5296
diff changeset
333 yq = uq = vq =0;
mru
parents: 5296
diff changeset
334 for (col = 0; col < width/2; col++) {
mru
parents: 5296
diff changeset
335 encoded[pixel_ptr] = yq -= encoded[pixel_ptr];
mru
parents: 5296
diff changeset
336 encoded[pixel_ptr+1] = yq -= encoded[pixel_ptr+1];
mru
parents: 5296
diff changeset
337 encoded[pixel_ptr+2] = uq -= encoded[pixel_ptr+2];
mru
parents: 5296
diff changeset
338 encoded[pixel_ptr+3] = vq -= encoded[pixel_ptr+3];
mru
parents: 5296
diff changeset
339 pixel_ptr += 4;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
340 }
5297
mru
parents: 5296
diff changeset
341 }
mru
parents: 5296
diff changeset
342 break;
mru
parents: 5296
diff changeset
343 case IMGTYPE_YUV420:
mru
parents: 5296
diff changeset
344 for (row = 0; row < height/2; row++) {
mru
parents: 5296
diff changeset
345 pixel_ptr = row * width * 3;
mru
parents: 5296
diff changeset
346 yq = y1q = uq = vq =0;
mru
parents: 5296
diff changeset
347 for (col = 0; col < width/2; col++) {
mru
parents: 5296
diff changeset
348 encoded[pixel_ptr] = yq -= encoded[pixel_ptr];
mru
parents: 5296
diff changeset
349 encoded[pixel_ptr+1] = yq -= encoded[pixel_ptr+1];
mru
parents: 5296
diff changeset
350 encoded[pixel_ptr+2] = y1q -= encoded[pixel_ptr+2];
mru
parents: 5296
diff changeset
351 encoded[pixel_ptr+3] = y1q -= encoded[pixel_ptr+3];
mru
parents: 5296
diff changeset
352 encoded[pixel_ptr+4] = uq -= encoded[pixel_ptr+4];
mru
parents: 5296
diff changeset
353 encoded[pixel_ptr+5] = vq -= encoded[pixel_ptr+5];
mru
parents: 5296
diff changeset
354 pixel_ptr += 6;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
355 }
5297
mru
parents: 5296
diff changeset
356 }
mru
parents: 5296
diff changeset
357 break;
mru
parents: 5296
diff changeset
358 default:
mru
parents: 5296
diff changeset
359 av_log(avctx, AV_LOG_ERROR, "BUG! Unknown imagetype in pngfilter switch.\n");
mru
parents: 5296
diff changeset
360 return -1;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
361 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
362 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
363
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
364 /* Convert colorspace */
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
365 y_out = c->pic.data[0] + (height - 1) * c->pic.linesize[0];
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
366 u_out = c->pic.data[1] + (height - 1) * c->pic.linesize[1];
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
367 v_out = c->pic.data[2] + (height - 1) * c->pic.linesize[2];
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
368 switch (c->imgtype) {
5297
mru
parents: 5296
diff changeset
369 case IMGTYPE_YUV111:
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
370 for (row = 0; row < height; row++) {
5297
mru
parents: 5296
diff changeset
371 for (col = 0; col < width; col++) {
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
372 y_out[col] = *encoded++;
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
373 u_out[col] = *encoded++ + 128;
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
374 v_out[col] = *encoded++ + 128;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
375 }
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
376 y_out -= c->pic.linesize[0];
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
377 u_out -= c->pic.linesize[1];
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
378 v_out -= c->pic.linesize[2];
5297
mru
parents: 5296
diff changeset
379 }
mru
parents: 5296
diff changeset
380 break;
mru
parents: 5296
diff changeset
381 case IMGTYPE_YUV422:
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
382 for (row = 0; row < height; row++) {
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
383 for (col = 0; col < width - 3; col += 4) {
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
384 memcpy(y_out + col, encoded, 4);
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
385 encoded += 4;
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
386 u_out[ col >> 1 ] = *encoded++ + 128;
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
387 u_out[(col >> 1) + 1] = *encoded++ + 128;
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
388 v_out[ col >> 1 ] = *encoded++ + 128;
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
389 v_out[(col >> 1) + 1] = *encoded++ + 128;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
390 }
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
391 y_out -= c->pic.linesize[0];
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
392 u_out -= c->pic.linesize[1];
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
393 v_out -= c->pic.linesize[2];
5297
mru
parents: 5296
diff changeset
394 }
mru
parents: 5296
diff changeset
395 break;
mru
parents: 5296
diff changeset
396 case IMGTYPE_RGB24:
mru
parents: 5296
diff changeset
397 for (row = height - 1; row >= 0; row--) {
mru
parents: 5296
diff changeset
398 pixel_ptr = row * c->pic.linesize[0];
9738
d5929e456b07 Use memcpy instead of per-pixel copy loop for rgb lcl format
reimar
parents: 9736
diff changeset
399 memcpy(outptr + pixel_ptr, encoded, 3 * width);
d5929e456b07 Use memcpy instead of per-pixel copy loop for rgb lcl format
reimar
parents: 9736
diff changeset
400 encoded += 3 * width;
5297
mru
parents: 5296
diff changeset
401 }
mru
parents: 5296
diff changeset
402 break;
mru
parents: 5296
diff changeset
403 case IMGTYPE_YUV411:
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
404 for (row = 0; row < height; row++) {
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
405 for (col = 0; col < width - 3; col += 4) {
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
406 memcpy(y_out + col, encoded, 4);
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
407 encoded += 4;
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
408 u_out[col >> 2] = *encoded++ + 128;
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
409 v_out[col >> 2] = *encoded++ + 128;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
410 }
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
411 y_out -= c->pic.linesize[0];
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
412 u_out -= c->pic.linesize[1];
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
413 v_out -= c->pic.linesize[2];
5297
mru
parents: 5296
diff changeset
414 }
mru
parents: 5296
diff changeset
415 break;
mru
parents: 5296
diff changeset
416 case IMGTYPE_YUV211:
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
417 for (row = 0; row < height; row++) {
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
418 for (col = 0; col < width - 1; col += 2) {
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
419 memcpy(y_out + col, encoded, 2);
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
420 encoded += 2;
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
421 u_out[col >> 1] = *encoded++ + 128;
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
422 v_out[col >> 1] = *encoded++ + 128;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
423 }
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
424 y_out -= c->pic.linesize[0];
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
425 u_out -= c->pic.linesize[1];
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
426 v_out -= c->pic.linesize[2];
5297
mru
parents: 5296
diff changeset
427 }
mru
parents: 5296
diff changeset
428 break;
mru
parents: 5296
diff changeset
429 case IMGTYPE_YUV420:
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
430 u_out = c->pic.data[1] + ((height >> 1) - 1) * c->pic.linesize[1];
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
431 v_out = c->pic.data[2] + ((height >> 1) - 1) * c->pic.linesize[2];
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
432 for (row = 0; row < height - 1; row += 2) {
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
433 for (col = 0; col < width - 1; col += 2) {
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
434 memcpy(y_out + col, encoded, 2);
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
435 encoded += 2;
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
436 memcpy(y_out + col - c->pic.linesize[0], encoded, 2);
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
437 encoded += 2;
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
438 u_out[col >> 1] = *encoded++ + 128;
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
439 v_out[col >> 1] = *encoded++ + 128;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
440 }
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
441 y_out -= c->pic.linesize[0] << 1;
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
442 u_out -= c->pic.linesize[1];
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
443 v_out -= c->pic.linesize[2];
5297
mru
parents: 5296
diff changeset
444 }
mru
parents: 5296
diff changeset
445 break;
mru
parents: 5296
diff changeset
446 default:
mru
parents: 5296
diff changeset
447 av_log(avctx, AV_LOG_ERROR, "BUG! Unknown imagetype in image decoder.\n");
mru
parents: 5296
diff changeset
448 return -1;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
449 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
450
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
451 *data_size = sizeof(AVFrame);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
452 *(AVFrame*)data = c->pic;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
453
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
454 /* always report that the buffer was completely consumed */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
455 return buf_size;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
456 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
457
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
458 /*
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
459 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
460 * Init lcl decoder
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
461 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
462 */
6517
48759bfbd073 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 6375
diff changeset
463 static av_cold int decode_init(AVCodecContext *avctx)
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
464 {
5294
e21873a1c00b split lcl.c into lcldec.c, lclenc.c, lcl.h
mru
parents: 5215
diff changeset
465 LclDecContext * const c = avctx->priv_data;
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
466 unsigned int basesize = avctx->width * avctx->height;
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
467 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
468 unsigned int max_decomp_size;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
469 int zret; // Zlib return code
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
470
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
471 c->pic.data[0] = NULL;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
472
9751
705efd6ddaab lcldec.c: change #if CONFIG_ZLIB to #if CONFIG_ZLIB_DECODER.
reimar
parents: 9750
diff changeset
473 #if CONFIG_ZLIB_DECODER
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
474 // Needed if zlib unused or init aborted before inflateInit
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
475 memset(&c->zstream, 0, sizeof(z_stream));
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
476 #endif
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
477
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
478 if (avctx->extradata_size < 8) {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
479 av_log(avctx, AV_LOG_ERROR, "Extradata size too small.\n");
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
480 return 1;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
481 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
482
2429
4b350cc506a7 Use avcodec_check_dimensions instead of custom hack
rtognimp
parents: 2418
diff changeset
483 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
484 return 1;
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
485 }
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
486
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2628
diff changeset
487 /* Check codec type */
9750
a87706453840 Get rid of extradata casts, it already has the right uint8_t * type
reimar
parents: 9749
diff changeset
488 if ((avctx->codec_id == CODEC_ID_MSZH && avctx->extradata[7] != CODEC_MSZH) ||
a87706453840 Get rid of extradata casts, it already has the right uint8_t * type
reimar
parents: 9749
diff changeset
489 (avctx->codec_id == CODEC_ID_ZLIB && avctx->extradata[7] != CODEC_ZLIB)) {
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
490 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
491 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
492
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
493 /* Detect image type */
9750
a87706453840 Get rid of extradata casts, it already has the right uint8_t * type
reimar
parents: 9749
diff changeset
494 switch (c->imgtype = avctx->extradata[4]) {
5297
mru
parents: 5296
diff changeset
495 case IMGTYPE_YUV111:
mru
parents: 5296
diff changeset
496 c->decomp_size = basesize * 3;
mru
parents: 5296
diff changeset
497 max_decomp_size = max_basesize * 3;
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
498 avctx->pix_fmt = PIX_FMT_YUV444P;
5297
mru
parents: 5296
diff changeset
499 av_log(avctx, AV_LOG_INFO, "Image type is YUV 1:1:1.\n");
mru
parents: 5296
diff changeset
500 break;
mru
parents: 5296
diff changeset
501 case IMGTYPE_YUV422:
mru
parents: 5296
diff changeset
502 c->decomp_size = basesize * 2;
mru
parents: 5296
diff changeset
503 max_decomp_size = max_basesize * 2;
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
504 avctx->pix_fmt = PIX_FMT_YUV422P;
5297
mru
parents: 5296
diff changeset
505 av_log(avctx, AV_LOG_INFO, "Image type is YUV 4:2:2.\n");
mru
parents: 5296
diff changeset
506 break;
mru
parents: 5296
diff changeset
507 case IMGTYPE_RGB24:
mru
parents: 5296
diff changeset
508 c->decomp_size = basesize * 3;
mru
parents: 5296
diff changeset
509 max_decomp_size = max_basesize * 3;
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
510 avctx->pix_fmt = PIX_FMT_BGR24;
5297
mru
parents: 5296
diff changeset
511 av_log(avctx, AV_LOG_INFO, "Image type is RGB 24.\n");
mru
parents: 5296
diff changeset
512 break;
mru
parents: 5296
diff changeset
513 case IMGTYPE_YUV411:
mru
parents: 5296
diff changeset
514 c->decomp_size = basesize / 2 * 3;
mru
parents: 5296
diff changeset
515 max_decomp_size = max_basesize / 2 * 3;
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
516 avctx->pix_fmt = PIX_FMT_YUV411P;
5297
mru
parents: 5296
diff changeset
517 av_log(avctx, AV_LOG_INFO, "Image type is YUV 4:1:1.\n");
mru
parents: 5296
diff changeset
518 break;
mru
parents: 5296
diff changeset
519 case IMGTYPE_YUV211:
mru
parents: 5296
diff changeset
520 c->decomp_size = basesize * 2;
mru
parents: 5296
diff changeset
521 max_decomp_size = max_basesize * 2;
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
522 avctx->pix_fmt = PIX_FMT_YUV422P;
5297
mru
parents: 5296
diff changeset
523 av_log(avctx, AV_LOG_INFO, "Image type is YUV 2:1:1.\n");
mru
parents: 5296
diff changeset
524 break;
mru
parents: 5296
diff changeset
525 case IMGTYPE_YUV420:
mru
parents: 5296
diff changeset
526 c->decomp_size = basesize / 2 * 3;
mru
parents: 5296
diff changeset
527 max_decomp_size = max_basesize / 2 * 3;
9749
4a4192578b60 Make lcldec produce YUV output when the input file is coded like that, instead
reimar
parents: 9738
diff changeset
528 avctx->pix_fmt = PIX_FMT_YUV420P;
5297
mru
parents: 5296
diff changeset
529 av_log(avctx, AV_LOG_INFO, "Image type is YUV 4:2:0.\n");
mru
parents: 5296
diff changeset
530 break;
mru
parents: 5296
diff changeset
531 default:
mru
parents: 5296
diff changeset
532 av_log(avctx, AV_LOG_ERROR, "Unsupported image format %d.\n", c->imgtype);
mru
parents: 5296
diff changeset
533 return 1;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
534 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
535
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
536 /* Detect compression method */
9750
a87706453840 Get rid of extradata casts, it already has the right uint8_t * type
reimar
parents: 9749
diff changeset
537 c->compression = avctx->extradata[5];
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
538 switch (avctx->codec_id) {
5297
mru
parents: 5296
diff changeset
539 case CODEC_ID_MSZH:
mru
parents: 5296
diff changeset
540 switch (c->compression) {
mru
parents: 5296
diff changeset
541 case COMP_MSZH:
mru
parents: 5296
diff changeset
542 av_log(avctx, AV_LOG_INFO, "Compression enabled.\n");
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
543 break;
5297
mru
parents: 5296
diff changeset
544 case COMP_MSZH_NOCOMP:
mru
parents: 5296
diff changeset
545 c->decomp_size = 0;
mru
parents: 5296
diff changeset
546 av_log(avctx, AV_LOG_INFO, "No compression.\n");
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
547 break;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
548 default:
5297
mru
parents: 5296
diff changeset
549 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
550 return 1;
5297
mru
parents: 5296
diff changeset
551 }
mru
parents: 5296
diff changeset
552 break;
mru
parents: 5296
diff changeset
553 case CODEC_ID_ZLIB:
9751
705efd6ddaab lcldec.c: change #if CONFIG_ZLIB to #if CONFIG_ZLIB_DECODER.
reimar
parents: 9750
diff changeset
554 #if CONFIG_ZLIB_DECODER
5297
mru
parents: 5296
diff changeset
555 switch (c->compression) {
mru
parents: 5296
diff changeset
556 case COMP_ZLIB_HISPEED:
mru
parents: 5296
diff changeset
557 av_log(avctx, AV_LOG_INFO, "High speed compression.\n");
mru
parents: 5296
diff changeset
558 break;
mru
parents: 5296
diff changeset
559 case COMP_ZLIB_HICOMP:
mru
parents: 5296
diff changeset
560 av_log(avctx, AV_LOG_INFO, "High compression.\n");
mru
parents: 5296
diff changeset
561 break;
mru
parents: 5296
diff changeset
562 case COMP_ZLIB_NORMAL:
mru
parents: 5296
diff changeset
563 av_log(avctx, AV_LOG_INFO, "Normal compression.\n");
mru
parents: 5296
diff changeset
564 break;
mru
parents: 5296
diff changeset
565 default:
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
566 if (c->compression < Z_NO_COMPRESSION || c->compression > Z_BEST_COMPRESSION) {
5297
mru
parents: 5296
diff changeset
567 av_log(avctx, AV_LOG_ERROR, "Unsupported compression level for ZLIB: (%d).\n", c->compression);
mru
parents: 5296
diff changeset
568 return 1;
mru
parents: 5296
diff changeset
569 }
mru
parents: 5296
diff changeset
570 av_log(avctx, AV_LOG_INFO, "Compression level for ZLIB: (%d).\n", c->compression);
mru
parents: 5296
diff changeset
571 }
mru
parents: 5296
diff changeset
572 #else
mru
parents: 5296
diff changeset
573 av_log(avctx, AV_LOG_ERROR, "Zlib support not compiled.\n");
mru
parents: 5296
diff changeset
574 return 1;
mru
parents: 5296
diff changeset
575 #endif
mru
parents: 5296
diff changeset
576 break;
mru
parents: 5296
diff changeset
577 default:
mru
parents: 5296
diff changeset
578 av_log(avctx, AV_LOG_ERROR, "BUG! Unknown codec in compression switch.\n");
mru
parents: 5296
diff changeset
579 return 1;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
580 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
581
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
582 /* Allocate decompression buffer */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
583 if (c->decomp_size) {
2418
82af834636c2 Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents: 2398
diff changeset
584 if ((c->decomp_buf = av_malloc(max_decomp_size)) == NULL) {
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
585 av_log(avctx, AV_LOG_ERROR, "Can't allocate decompression buffer.\n");
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
586 return 1;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
587 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
588 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2628
diff changeset
589
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2628
diff changeset
590 /* Detect flags */
9750
a87706453840 Get rid of extradata casts, it already has the right uint8_t * type
reimar
parents: 9749
diff changeset
591 c->flags = avctx->extradata[6];
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
592 if (c->flags & FLAG_MULTITHREAD)
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
593 av_log(avctx, AV_LOG_INFO, "Multithread encoder flag set.\n");
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
594 if (c->flags & FLAG_NULLFRAME)
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
595 av_log(avctx, AV_LOG_INFO, "Nullframe insertion flag set.\n");
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
596 if ((avctx->codec_id == CODEC_ID_ZLIB) && (c->flags & FLAG_PNGFILTER))
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
597 av_log(avctx, AV_LOG_INFO, "PNG filter flag set.\n");
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
598 if (c->flags & FLAGMASK_UNUSED)
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
599 av_log(avctx, AV_LOG_ERROR, "Unknown flag set (%d).\n", c->flags);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
600
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
601 /* If needed init zlib */
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
602 if (avctx->codec_id == CODEC_ID_ZLIB) {
9751
705efd6ddaab lcldec.c: change #if CONFIG_ZLIB to #if CONFIG_ZLIB_DECODER.
reimar
parents: 9750
diff changeset
603 #if CONFIG_ZLIB_DECODER
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
604 c->zstream.zalloc = Z_NULL;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
605 c->zstream.zfree = Z_NULL;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
606 c->zstream.opaque = Z_NULL;
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
607 zret = inflateInit(&c->zstream);
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
608 if (zret != Z_OK) {
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
609 av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret);
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
610 return 1;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
611 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
612 #else
5297
mru
parents: 5296
diff changeset
613 av_log(avctx, AV_LOG_ERROR, "Zlib support not compiled.\n");
mru
parents: 5296
diff changeset
614 return 1;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
615 #endif
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
616 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
617
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
618 return 0;
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
619 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
620
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
621 /*
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
622 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
623 * Uninit lcl decoder
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
624 *
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
625 */
6517
48759bfbd073 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 6375
diff changeset
626 static av_cold int decode_end(AVCodecContext *avctx)
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
627 {
5297
mru
parents: 5296
diff changeset
628 LclDecContext * const c = avctx->priv_data;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
629
5297
mru
parents: 5296
diff changeset
630 if (c->pic.data[0])
mru
parents: 5296
diff changeset
631 avctx->release_buffer(avctx, &c->pic);
9751
705efd6ddaab lcldec.c: change #if CONFIG_ZLIB to #if CONFIG_ZLIB_DECODER.
reimar
parents: 9750
diff changeset
632 #if CONFIG_ZLIB_DECODER
9736
405cbc435997 Remove useless () from lcldec for more consistency with "normal" FFmpeg coding style.
reimar
parents: 9730
diff changeset
633 inflateEnd(&c->zstream);
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
634 #endif
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
635
5297
mru
parents: 5296
diff changeset
636 return 0;
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
637 }
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
638
8590
7a463923ecd1 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 7040
diff changeset
639 #if CONFIG_MSZH_DECODER
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
640 AVCodec mszh_decoder = {
5297
mru
parents: 5296
diff changeset
641 "mszh",
mru
parents: 5296
diff changeset
642 CODEC_TYPE_VIDEO,
mru
parents: 5296
diff changeset
643 CODEC_ID_MSZH,
mru
parents: 5296
diff changeset
644 sizeof(LclDecContext),
mru
parents: 5296
diff changeset
645 decode_init,
mru
parents: 5296
diff changeset
646 NULL,
mru
parents: 5296
diff changeset
647 decode_end,
mru
parents: 5296
diff changeset
648 decode_frame,
mru
parents: 5296
diff changeset
649 CODEC_CAP_DR1,
7040
e943e1409077 Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents: 6712
diff changeset
650 .long_name = NULL_IF_CONFIG_SMALL("LCL (LossLess Codec Library) MSZH"),
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
651 };
3777
20545fbb6f7c add some #ifdef CONFIG_ENCODERS/DECODERS
mru
parents: 3036
diff changeset
652 #endif
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
653
8590
7a463923ecd1 Change semantic of CONFIG_*, HAVE_* and ARCH_*.
aurel
parents: 7040
diff changeset
654 #if CONFIG_ZLIB_DECODER
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
655 AVCodec zlib_decoder = {
5297
mru
parents: 5296
diff changeset
656 "zlib",
mru
parents: 5296
diff changeset
657 CODEC_TYPE_VIDEO,
mru
parents: 5296
diff changeset
658 CODEC_ID_ZLIB,
mru
parents: 5296
diff changeset
659 sizeof(LclDecContext),
mru
parents: 5296
diff changeset
660 decode_init,
mru
parents: 5296
diff changeset
661 NULL,
mru
parents: 5296
diff changeset
662 decode_end,
mru
parents: 5296
diff changeset
663 decode_frame,
mru
parents: 5296
diff changeset
664 CODEC_CAP_DR1,
7040
e943e1409077 Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents: 6712
diff changeset
665 .long_name = NULL_IF_CONFIG_SMALL("LCL (LossLess Codec Library) ZLIB"),
1743
fa06a4a448f7 Fix for older version of zlib
rtognimp
parents:
diff changeset
666 };
3777
20545fbb6f7c add some #ifdef CONFIG_ENCODERS/DECODERS
mru
parents: 3036
diff changeset
667 #endif