annotate tscc.c @ 6323:e6da66f378c7 libavcodec

mpegvideo.h has two function declarations with the 'inline' specifier but no definition for those functions. The C standard requires a definition to appear in the same translation unit for any function declared with 'inline'. Most of the files including mpegvideo.h do not define those functions. Fix this by removing the 'inline' specifiers from the header. patch by Uoti Urpala
author diego
date Sun, 03 Feb 2008 17:54:30 +0000
parents 07eeefc2825f
children 48759bfbd073
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
1 /*
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
2 * TechSmith Camtasia decoder
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
3 * Copyright (c) 2004 Konstantin Shishkov
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
4 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3800
diff changeset
5 * This file is part of FFmpeg.
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3800
diff changeset
6 *
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3800
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
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: 3800
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
11 *
3947
c8c591fe26f8 Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 3800
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
15 * Lesser General Public License for more details.
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
16 *
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
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: 3800
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
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
20 */
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
21
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
22 /**
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
23 * @file tscc.c
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
24 * TechSmith Camtasia decoder
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
25 *
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
26 * Fourcc: TSCC
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
27 *
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
28 * Codec is very simple:
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
29 * it codes picture (picture difference, really)
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
30 * with algorithm almost identical to Windows RLE8,
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
31 * only without padding and with greater pixel sizes,
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
32 * then this coded picture is packed with ZLib
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
33 *
2196
3eae46c131a3 8-bit mode corrections
melanson
parents: 2170
diff changeset
34 * Supports: BGR8,BGR555,BGR24 - only BGR8 and BGR555 tested
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
35 *
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
36 */
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
37
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
38 #include <stdio.h>
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
39 #include <stdlib.h>
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
40
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
41 #include "avcodec.h"
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
42
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
43 #ifdef CONFIG_ZLIB
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
44 #include <zlib.h>
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
45 #endif
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
46
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
47
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
48 /*
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
49 * Decoder context
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
50 */
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
51 typedef struct TsccContext {
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
52
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
53 AVCodecContext *avctx;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
54 AVFrame pic;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
55
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
56 // Bits per pixel
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
57 int bpp;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
58 // Decompressed data size
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
59 unsigned int decomp_size;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
60 // Decompression buffer
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
61 unsigned char* decomp_buf;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
62 int height;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
63 #ifdef CONFIG_ZLIB
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
64 z_stream zstream;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
65 #endif
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
66 } CamtasiaContext;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
67
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
68 /*
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
69 *
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
70 * Decode RLE - almost identical to Windows BMP RLE8
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
71 * and enhanced to bigger color depths
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
72 *
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
73 */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2510
diff changeset
74
2455
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
75 static int decode_rle(CamtasiaContext *c, unsigned int srcsize)
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
76 {
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
77 unsigned char *src = c->decomp_buf;
2455
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
78 unsigned char *output, *output_end;
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
79 int p1, p2, line=c->height, pos=0, i;
3121
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
80 uint16_t pix16;
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
81 uint32_t pix32;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2510
diff changeset
82
2196
3eae46c131a3 8-bit mode corrections
melanson
parents: 2170
diff changeset
83 output = c->pic.data[0] + (c->height - 1) * c->pic.linesize[0];
2455
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
84 output_end = c->pic.data[0] + (c->height) * c->pic.linesize[0];
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
85 while(src < c->decomp_buf + srcsize) {
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
86 p1 = *src++;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
87 if(p1 == 0) { //Escape code
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
88 p2 = *src++;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
89 if(p2 == 0) { //End-of-line
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
90 output = c->pic.data[0] + (--line) * c->pic.linesize[0];
2455
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
91 if (line < 0)
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
92 return -1;
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
93 pos = 0;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
94 continue;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
95 } else if(p2 == 1) { //End-of-picture
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
96 return 0;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
97 } else if(p2 == 2) { //Skip
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
98 p1 = *src++;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
99 p2 = *src++;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
100 line -= p2;
2455
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
101 if (line < 0)
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
102 return -1;
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
103 pos += p1;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
104 output = c->pic.data[0] + line * c->pic.linesize[0] + pos * (c->bpp / 8);
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
105 continue;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
106 }
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
107 // Copy data
2455
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
108 if (output + p2 * (c->bpp / 8) > output_end) {
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
109 src += p2 * (c->bpp / 8);
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
110 continue;
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
111 }
3121
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
112 if ((c->bpp == 8) || (c->bpp == 24)) {
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
113 for(i = 0; i < p2 * (c->bpp / 8); i++) {
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
114 *output++ = *src++;
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
115 }
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
116 // RLE8 copy is actually padded - and runs are not!
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
117 if(c->bpp == 8 && (p2 & 1)) {
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
118 src++;
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
119 }
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
120 } else if (c->bpp == 16) {
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
121 for(i = 0; i < p2; i++) {
4364
05e932ddaaa9 rename BE/LE_8/16/32 to AV_RL/B_8/16/32
alex
parents: 3947
diff changeset
122 pix16 = AV_RL16(src);
3121
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
123 src += 2;
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
124 *(uint16_t*)output = pix16;
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
125 output += 2;
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
126 }
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
127 } else if (c->bpp == 32) {
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
128 for(i = 0; i < p2; i++) {
4364
05e932ddaaa9 rename BE/LE_8/16/32 to AV_RL/B_8/16/32
alex
parents: 3947
diff changeset
129 pix32 = AV_RL32(src);
3121
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
130 src += 4;
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
131 *(uint32_t*)output = pix32;
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
132 output += 4;
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
133 }
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
134 }
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
135 pos += p2;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
136 } else { //Run of pixels
2481
0803adcb3ec3 Add 32bit RGB support
rtognimp
parents: 2455
diff changeset
137 int pix[4]; //original pixel
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
138 switch(c->bpp){
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
139 case 8: pix[0] = *src++;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
140 break;
4364
05e932ddaaa9 rename BE/LE_8/16/32 to AV_RL/B_8/16/32
alex
parents: 3947
diff changeset
141 case 16: pix16 = AV_RL16(src);
3121
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
142 src += 2;
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
143 *(uint16_t*)pix = pix16;
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
144 break;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
145 case 24: pix[0] = *src++;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
146 pix[1] = *src++;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
147 pix[2] = *src++;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
148 break;
4364
05e932ddaaa9 rename BE/LE_8/16/32 to AV_RL/B_8/16/32
alex
parents: 3947
diff changeset
149 case 32: pix32 = AV_RL32(src);
3121
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
150 src += 4;
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
151 *(uint32_t*)pix = pix32;
2481
0803adcb3ec3 Add 32bit RGB support
rtognimp
parents: 2455
diff changeset
152 break;
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
153 }
2455
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
154 if (output + p1 * (c->bpp / 8) > output_end)
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
155 continue;
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
156 for(i = 0; i < p1; i++) {
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
157 switch(c->bpp){
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
158 case 8: *output++ = pix[0];
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
159 break;
3121
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
160 case 16: *(uint16_t*)output = pix16;
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
161 output += 2;
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
162 break;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
163 case 24: *output++ = pix[0];
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
164 *output++ = pix[1];
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
165 *output++ = pix[2];
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
166 break;
3121
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
167 case 32: *(uint32_t*)output = pix32;
99cbff5f8038 make TSCC endian-safe, PPC testing courtesy of Diego B.
melanson
parents: 3036
diff changeset
168 output += 4;
2481
0803adcb3ec3 Add 32bit RGB support
rtognimp
parents: 2455
diff changeset
169 break;
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
170 }
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
171 }
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
172 pos += p1;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
173 }
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
174 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2510
diff changeset
175
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2510
diff changeset
176 av_log(c->avctx, AV_LOG_ERROR, "Camtasia warning: no End-of-picture code\n");
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
177 return 1;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
178 }
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
179
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
180 /*
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
181 *
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
182 * Decode a frame
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
183 *
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
184 */
6286
michael
parents: 5215
diff changeset
185 static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, const uint8_t *buf, int buf_size)
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
186 {
4827
b3ee9a1526b0 Get rid of unnecessary pointer casts.
diego
parents: 4740
diff changeset
187 CamtasiaContext * const c = avctx->priv_data;
6286
michael
parents: 5215
diff changeset
188 const unsigned char *encoded = buf;
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
189 unsigned char *outptr;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
190 #ifdef CONFIG_ZLIB
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
191 int zret; // Zlib return code
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
192 #endif
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
193 int len = buf_size;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
194
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
195 if(c->pic.data[0])
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
196 avctx->release_buffer(avctx, &c->pic);
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
197
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
198 c->pic.reference = 1;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
199 c->pic.buffer_hints = FF_BUFFER_HINTS_VALID;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
200 if(avctx->get_buffer(avctx, &c->pic) < 0){
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
201 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
202 return -1;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
203 }
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
204
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
205 outptr = c->pic.data[0]; // Output image pointer
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
206
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
207 #ifdef CONFIG_ZLIB
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
208 zret = inflateReset(&(c->zstream));
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
209 if (zret != Z_OK) {
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
210 av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", zret);
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
211 return -1;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
212 }
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
213 c->zstream.next_in = encoded;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
214 c->zstream.avail_in = len;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
215 c->zstream.next_out = c->decomp_buf;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
216 c->zstream.avail_out = c->decomp_size;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
217 zret = inflate(&(c->zstream), Z_FINISH);
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
218 // Z_DATA_ERROR means empty picture
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
219 if ((zret != Z_OK) && (zret != Z_STREAM_END) && (zret != Z_DATA_ERROR)) {
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
220 av_log(avctx, AV_LOG_ERROR, "Inflate error: %d\n", zret);
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
221 return -1;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
222 }
2455
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
223
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
224
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
225 if(zret != Z_DATA_ERROR)
2455
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
226 decode_rle(c, c->zstream.avail_out);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2510
diff changeset
227
2196
3eae46c131a3 8-bit mode corrections
melanson
parents: 2170
diff changeset
228 /* make the palette available on the way out */
3eae46c131a3 8-bit mode corrections
melanson
parents: 2170
diff changeset
229 if (c->avctx->pix_fmt == PIX_FMT_PAL8) {
3eae46c131a3 8-bit mode corrections
melanson
parents: 2170
diff changeset
230 memcpy(c->pic.data[1], c->avctx->palctrl->palette, AVPALETTE_SIZE);
3eae46c131a3 8-bit mode corrections
melanson
parents: 2170
diff changeset
231 if (c->avctx->palctrl->palette_changed) {
3eae46c131a3 8-bit mode corrections
melanson
parents: 2170
diff changeset
232 c->pic.palette_has_changed = 1;
3eae46c131a3 8-bit mode corrections
melanson
parents: 2170
diff changeset
233 c->avctx->palctrl->palette_changed = 0;
3eae46c131a3 8-bit mode corrections
melanson
parents: 2170
diff changeset
234 }
3eae46c131a3 8-bit mode corrections
melanson
parents: 2170
diff changeset
235 }
3eae46c131a3 8-bit mode corrections
melanson
parents: 2170
diff changeset
236
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
237 #else
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
238 av_log(avctx, AV_LOG_ERROR, "BUG! Zlib support not compiled in frame decoder.\n");
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
239 return -1;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
240 #endif
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
241
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
242 *data_size = sizeof(AVFrame);
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
243 *(AVFrame*)data = c->pic;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
244
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
245 /* always report that the buffer was completely consumed */
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
246 return buf_size;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
247 }
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
248
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
249
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
250
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
251 /*
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
252 *
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
253 * Init tscc decoder
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
254 *
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
255 */
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
256 static int decode_init(AVCodecContext *avctx)
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
257 {
4827
b3ee9a1526b0 Get rid of unnecessary pointer casts.
diego
parents: 4740
diff changeset
258 CamtasiaContext * const c = avctx->priv_data;
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
259 int zret; // Zlib return code
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
260
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
261 c->avctx = avctx;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
262
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
263 c->pic.data[0] = NULL;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
264 c->height = avctx->height;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
265
3800
9b75ab171fa9 1l: correct argument order in avcodec_check_dimensions
kostya
parents: 3121
diff changeset
266 if (avcodec_check_dimensions(avctx, avctx->width, avctx->height) < 0) {
2455
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
267 return 1;
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
268 }
d74d342cabb9 Check pointers before writing to memory
rtognimp
parents: 2453
diff changeset
269
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
270 #ifdef CONFIG_ZLIB
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
271 // Needed if zlib unused or init aborted before inflateInit
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2510
diff changeset
272 memset(&(c->zstream), 0, sizeof(z_stream));
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
273 #else
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
274 av_log(avctx, AV_LOG_ERROR, "Zlib support not compiled.\n");
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
275 return 1;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
276 #endif
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
277 switch(avctx->bits_per_sample){
2196
3eae46c131a3 8-bit mode corrections
melanson
parents: 2170
diff changeset
278 case 8: avctx->pix_fmt = PIX_FMT_PAL8; break;
3eae46c131a3 8-bit mode corrections
melanson
parents: 2170
diff changeset
279 case 16: avctx->pix_fmt = PIX_FMT_RGB555; break;
2481
0803adcb3ec3 Add 32bit RGB support
rtognimp
parents: 2455
diff changeset
280 case 24:
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
281 avctx->pix_fmt = PIX_FMT_BGR24;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
282 break;
4494
ce643a22f049 Replace deprecated PIX_FMT names by the newer variants.
diego
parents: 4364
diff changeset
283 case 32: avctx->pix_fmt = PIX_FMT_RGB32; break;
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
284 default: av_log(avctx, AV_LOG_ERROR, "Camtasia error: unknown depth %i bpp\n", avctx->bits_per_sample);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2510
diff changeset
285 return -1;
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
286 }
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
287 c->bpp = avctx->bits_per_sample;
2196
3eae46c131a3 8-bit mode corrections
melanson
parents: 2170
diff changeset
288 c->decomp_size = (avctx->width * c->bpp + (avctx->width + 254) / 255 + 2) * avctx->height + 2;//RLE in the 'best' case
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
289
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
290 /* Allocate decompression buffer */
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
291 if (c->decomp_size) {
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
292 if ((c->decomp_buf = av_malloc(c->decomp_size)) == NULL) {
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
293 av_log(avctx, AV_LOG_ERROR, "Can't allocate decompression buffer.\n");
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
294 return 1;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
295 }
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
296 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2510
diff changeset
297
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
298 #ifdef CONFIG_ZLIB
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
299 c->zstream.zalloc = Z_NULL;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
300 c->zstream.zfree = Z_NULL;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
301 c->zstream.opaque = Z_NULL;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
302 zret = inflateInit(&(c->zstream));
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
303 if (zret != Z_OK) {
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
304 av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret);
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
305 return 1;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
306 }
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
307 #endif
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
308
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
309 return 0;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
310 }
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
311
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
312
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
313
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
314 /*
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
315 *
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
316 * Uninit tscc decoder
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
317 *
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
318 */
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
319 static int decode_end(AVCodecContext *avctx)
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
320 {
4827
b3ee9a1526b0 Get rid of unnecessary pointer casts.
diego
parents: 4740
diff changeset
321 CamtasiaContext * const c = avctx->priv_data;
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
322
2510
5e9f8eef19b9 memleak fix
michael
parents: 2481
diff changeset
323 av_freep(&c->decomp_buf);
5e9f8eef19b9 memleak fix
michael
parents: 2481
diff changeset
324
2170
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
325 if (c->pic.data[0])
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
326 avctx->release_buffer(avctx, &c->pic);
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
327 #ifdef CONFIG_ZLIB
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
328 inflateEnd(&(c->zstream));
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
329 #endif
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
330
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
331 return 0;
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
332 }
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
333
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
334 AVCodec tscc_decoder = {
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
335 "camtasia",
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
336 CODEC_TYPE_VIDEO,
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
337 CODEC_ID_TSCC,
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
338 sizeof(CamtasiaContext),
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
339 decode_init,
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
340 NULL,
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
341 decode_end,
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
342 decode_frame,
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
343 CODEC_CAP_DR1,
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
344 };
51da590b31a3 TechSmith Camtasia (TSCC) video decoder, courtesy of Konstantin Shishkov
melanson
parents:
diff changeset
345