annotate gui/util/bitmap.c @ 33534:22c3241467b3

Remove function Normalize(). This function changed ARGB data as if it had been RGB24 data (not quite correctly) converted to ARGB with all colors transparent. Instead now, set the alpha channel for RGB24 data and leave ARGB data untouched. For X11, the alpha channel is disregarded, so both approaches are equal, but the new one is more intelligible as we get correct ARGB PNG data. For legacy reasons, all kind of fuchsia/magenta must be treated as transparent, because some skins are using at least both full opaque and full transparent fuchsia/magenta for transparency.
author ib
date Thu, 16 Jun 2011 11:19:15 +0000
parents fd90a10d81a1
children c5a19bbeac2b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
1 /*
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
2 * This file is part of MPlayer.
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
3 *
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
7 * (at your option) any later version.
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
8 *
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
12 * GNU General Public License for more details.
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
13 *
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
14 * You should have received a copy of the GNU General Public License along
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
17 */
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
18
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
19 #include <stdio.h>
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
20 #include <stdlib.h>
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
21 #include <string.h>
33130
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
22 #include <unistd.h>
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
23
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
24 #include "bitmap.h"
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
25
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
26 #include "help_mp.h"
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
27 #include "libavcodec/avcodec.h"
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
28 #include "libavutil/intreadwrite.h"
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
29 #include "libvo/fastmemcpy.h"
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
30 #include "mp_msg.h"
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
31
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
32 static int pngRead(unsigned char *fname, txSample *bf)
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
33 {
33122
1d81476c0d1e Cosmetic: Rephrase some conditions and rename some variables.
ib
parents: 33121
diff changeset
34 FILE *file;
33134
ffe524b8b8f3 Make len match ftell() return value type.
ib
parents: 33133
diff changeset
35 long len;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
36 void *data;
33135
36fdc061b4a8 Prevent segmentation faults.
ib
parents: 33134
diff changeset
37 int decode_ok, bpl;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
38 AVCodecContext *avctx;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
39 AVFrame *frame;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
40 AVPacket pkt;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
41
33122
1d81476c0d1e Cosmetic: Rephrase some conditions and rename some variables.
ib
parents: 33121
diff changeset
42 file = fopen(fname, "rb");
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
43
33137
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
44 if (!file)
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
45 return 2;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
46
33122
1d81476c0d1e Cosmetic: Rephrase some conditions and rename some variables.
ib
parents: 33121
diff changeset
47 fseek(file, 0, SEEK_END);
1d81476c0d1e Cosmetic: Rephrase some conditions and rename some variables.
ib
parents: 33121
diff changeset
48 len = ftell(file);
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
49
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
50 if (len > 50 * 1024 * 1024) {
33122
1d81476c0d1e Cosmetic: Rephrase some conditions and rename some variables.
ib
parents: 33121
diff changeset
51 fclose(file);
33137
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
52 return 3;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
53 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
54
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
55 data = av_malloc(len + FF_INPUT_BUFFER_PADDING_SIZE);
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
56
33135
36fdc061b4a8 Prevent segmentation faults.
ib
parents: 33134
diff changeset
57 if (!data) {
36fdc061b4a8 Prevent segmentation faults.
ib
parents: 33134
diff changeset
58 fclose(file);
33137
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
59 return 4;
33135
36fdc061b4a8 Prevent segmentation faults.
ib
parents: 33134
diff changeset
60 }
36fdc061b4a8 Prevent segmentation faults.
ib
parents: 33134
diff changeset
61
33122
1d81476c0d1e Cosmetic: Rephrase some conditions and rename some variables.
ib
parents: 33121
diff changeset
62 fseek(file, 0, SEEK_SET);
1d81476c0d1e Cosmetic: Rephrase some conditions and rename some variables.
ib
parents: 33121
diff changeset
63 fread(data, len, 1, file);
1d81476c0d1e Cosmetic: Rephrase some conditions and rename some variables.
ib
parents: 33121
diff changeset
64 fclose(file);
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
65
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
66 avctx = avcodec_alloc_context();
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
67 frame = avcodec_alloc_frame();
33139
64f29d5dfea2 Prevent segmentation faults.
ib
parents: 33138
diff changeset
68
64f29d5dfea2 Prevent segmentation faults.
ib
parents: 33138
diff changeset
69 if (!(avctx && frame)) {
64f29d5dfea2 Prevent segmentation faults.
ib
parents: 33138
diff changeset
70 av_free(frame);
64f29d5dfea2 Prevent segmentation faults.
ib
parents: 33138
diff changeset
71 av_free(avctx);
64f29d5dfea2 Prevent segmentation faults.
ib
parents: 33138
diff changeset
72 av_free(data);
64f29d5dfea2 Prevent segmentation faults.
ib
parents: 33138
diff changeset
73 return 5;
64f29d5dfea2 Prevent segmentation faults.
ib
parents: 33138
diff changeset
74 }
64f29d5dfea2 Prevent segmentation faults.
ib
parents: 33138
diff changeset
75
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
76 avcodec_register_all();
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
77 avcodec_open(avctx, avcodec_find_decoder(CODEC_ID_PNG));
33139
64f29d5dfea2 Prevent segmentation faults.
ib
parents: 33138
diff changeset
78
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
79 av_init_packet(&pkt);
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
80 pkt.data = data;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
81 pkt.size = len;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
82 // HACK: make PNGs decode normally instead of as CorePNG delta frames
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
83 pkt.flags = AV_PKT_FLAG_KEY;
33139
64f29d5dfea2 Prevent segmentation faults.
ib
parents: 33138
diff changeset
84
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
85 avcodec_decode_video2(avctx, frame, &decode_ok, &pkt);
33134
ffe524b8b8f3 Make len match ftell() return value type.
ib
parents: 33133
diff changeset
86
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
87 memset(bf, 0, sizeof(*bf));
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
88
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
89 switch (avctx->pix_fmt) {
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
90 case PIX_FMT_GRAY8:
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
91 bf->BPP = 8;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
92 break;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
93
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
94 case PIX_FMT_GRAY16BE:
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
95 bf->BPP = 16;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
96 break;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
97
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
98 case PIX_FMT_RGB24:
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
99 bf->BPP = 24;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
100 break;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
101
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
102 case PIX_FMT_BGRA:
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
103 case PIX_FMT_ARGB:
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
104 bf->BPP = 32;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
105 break;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
106
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
107 default:
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
108 bf->BPP = 0;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
109 break;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
110 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
111
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
112 if (decode_ok && bf->BPP) {
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
113 bf->Width = avctx->width;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
114 bf->Height = avctx->height;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
115 bpl = bf->Width * (bf->BPP / 8);
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
116 bf->ImageSize = bpl * bf->Height;
33136
07be88814256 Move debug messages.
ib
parents: 33135
diff changeset
117
07be88814256 Move debug messages.
ib
parents: 33135
diff changeset
118 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[bitmap] file: %s\n", fname);
07be88814256 Move debug messages.
ib
parents: 33135
diff changeset
119 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[bitmap] size: %lux%lu, color depth: %u\n", bf->Width, bf->Height, bf->BPP);
07be88814256 Move debug messages.
ib
parents: 33135
diff changeset
120 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[bitmap] image size: %lu\n", bf->ImageSize);
07be88814256 Move debug messages.
ib
parents: 33135
diff changeset
121
07be88814256 Move debug messages.
ib
parents: 33135
diff changeset
122 bf->Image = malloc(bf->ImageSize);
33135
36fdc061b4a8 Prevent segmentation faults.
ib
parents: 33134
diff changeset
123
36fdc061b4a8 Prevent segmentation faults.
ib
parents: 33134
diff changeset
124 if (bf->Image)
36fdc061b4a8 Prevent segmentation faults.
ib
parents: 33134
diff changeset
125 memcpy_pic(bf->Image, frame->data[0], bpl, bf->Height, bpl, frame->linesize[0]);
33137
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
126 else
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
127 decode_ok = 0;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
128 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
129
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
130 avcodec_close(avctx);
33138
3335d117f6e6 Replace av_freep by av_free
ib
parents: 33137
diff changeset
131 av_free(frame);
3335d117f6e6 Replace av_freep by av_free
ib
parents: 33137
diff changeset
132 av_free(avctx);
3335d117f6e6 Replace av_freep by av_free
ib
parents: 33137
diff changeset
133 av_free(data);
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
134
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
135 return !(decode_ok && bf->BPP);
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
136 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
137
33121
7623be6c1f0e Rename conv24to32() Convert24to32().
ib
parents: 33120
diff changeset
138 static int Convert24to32(txSample *bf)
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
139 {
33132
6ac1b560e209 Revise Convert24to32().
ib
parents: 33131
diff changeset
140 char *orgImage;
6ac1b560e209 Revise Convert24to32().
ib
parents: 33131
diff changeset
141 unsigned long i, c;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
142
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
143 if (bf->BPP == 24) {
33132
6ac1b560e209 Revise Convert24to32().
ib
parents: 33131
diff changeset
144 orgImage = bf->Image;
6ac1b560e209 Revise Convert24to32().
ib
parents: 33131
diff changeset
145
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
146 bf->BPP = 32;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
147 bf->ImageSize = bf->Width * bf->Height * 4;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
148 bf->Image = calloc(1, bf->ImageSize);
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
149
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
150 if (!bf->Image) {
33132
6ac1b560e209 Revise Convert24to32().
ib
parents: 33131
diff changeset
151 free(orgImage);
33112
654dfdf176ac Revise debug messages.
ib
parents: 33053
diff changeset
152 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[bitmap] not enough memory: %lu\n", bf->ImageSize);
33121
7623be6c1f0e Rename conv24to32() Convert24to32().
ib
parents: 33120
diff changeset
153 return 0;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
154 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
155
33112
654dfdf176ac Revise debug messages.
ib
parents: 33053
diff changeset
156 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[bitmap] 32 bpp conversion size: %lu\n", bf->ImageSize);
654dfdf176ac Revise debug messages.
ib
parents: 33053
diff changeset
157
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
158 for (c = 0, i = 0; c < bf->ImageSize; c += 4, i += 3)
33534
22c3241467b3 Remove function Normalize().
ib
parents: 33141
diff changeset
159 *(uint32_t *)&bf->Image[c] = ALPHA_OPAQUE | AV_RB24(&orgImage[i]);
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
160
33132
6ac1b560e209 Revise Convert24to32().
ib
parents: 33131
diff changeset
161 free(orgImage);
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
162 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
163
33121
7623be6c1f0e Rename conv24to32() Convert24to32().
ib
parents: 33120
diff changeset
164 return 1;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
165 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
166
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
167 static unsigned char *fExist(unsigned char *fname)
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
168 {
33141
fd90a10d81a1 Define ext array more skillfully.
ib
parents: 33139
diff changeset
169 static const char ext[][4] = { "png", "PNG" };
33130
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
170 static unsigned char buf[512];
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
171 unsigned int i;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
172
33130
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
173 if (access(fname, R_OK) == 0)
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
174 return fname;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
175
33130
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
176 for (i = 0; i < FF_ARRAY_ELEMS(ext); i++) {
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
177 snprintf(buf, sizeof(buf), "%s.%s", fname, ext[i]);
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
178
33130
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
179 if (access(buf, R_OK) == 0)
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
180 return buf;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
181 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
182
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
183 return NULL;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
184 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
185
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
186 int bpRead(char *fname, txSample *bf)
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
187 {
33137
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
188 int r;
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
189
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
190 fname = fExist(fname);
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
191
33122
1d81476c0d1e Cosmetic: Rephrase some conditions and rename some variables.
ib
parents: 33121
diff changeset
192 if (!fname)
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
193 return -2;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
194
33137
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
195 r = pngRead(fname, bf);
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
196
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
197 if (r != 0) {
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
198 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[bitmap] read error #%d: %s\n", r, fname);
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
199 return -5;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
200 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
201
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
202 if (bf->BPP < 24) {
33112
654dfdf176ac Revise debug messages.
ib
parents: 33053
diff changeset
203 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[bitmap] bpp too low: %u\n", bf->BPP);
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
204 return -1;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
205 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
206
33121
7623be6c1f0e Rename conv24to32() Convert24to32().
ib
parents: 33120
diff changeset
207 if (!Convert24to32(bf))
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
208 return -8;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
209
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
210 return 0;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
211 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
212
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
213 void bpFree(txSample *bf)
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
214 {
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
215 free(bf->Image);
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
216 memset(bf, 0, sizeof(*bf));
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
217 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
218
33129
5f3171d4d7a4 Define the transparent color as a macro.
ib
parents: 33128
diff changeset
219 int Convert32to1(txSample *in, txSample *out)
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
220 {
33118
ae464a957cd0 Move variable definitions at top of function.
ib
parents: 33117
diff changeset
221 uint32_t *buf;
ae464a957cd0 Move variable definitions at top of function.
ib
parents: 33117
diff changeset
222 unsigned long i;
ae464a957cd0 Move variable definitions at top of function.
ib
parents: 33117
diff changeset
223 int b = 0, c = 0;
ae464a957cd0 Move variable definitions at top of function.
ib
parents: 33117
diff changeset
224 unsigned char tmp = 0;
ae464a957cd0 Move variable definitions at top of function.
ib
parents: 33117
diff changeset
225 int shaped = 0;
ae464a957cd0 Move variable definitions at top of function.
ib
parents: 33117
diff changeset
226
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
227 out->Width = in->Width;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
228 out->Height = in->Height;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
229 out->BPP = 1;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
230 out->ImageSize = (out->Width * out->Height + 7) / 8;
33118
ae464a957cd0 Move variable definitions at top of function.
ib
parents: 33117
diff changeset
231 out->Image = calloc(1, out->ImageSize);
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
232
33122
1d81476c0d1e Cosmetic: Rephrase some conditions and rename some variables.
ib
parents: 33121
diff changeset
233 if (!out->Image) {
33114
5ad451a5ebec Remove useless warning message.
ib
parents: 33113
diff changeset
234 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[bitmap] not enough memory: %lu\n", out->ImageSize);
5ad451a5ebec Remove useless warning message.
ib
parents: 33113
diff changeset
235 return 0;
33125
9c178cf14a61 Get rid of else-block to improve readability.
ib
parents: 33122
diff changeset
236 }
9c178cf14a61 Get rid of else-block to improve readability.
ib
parents: 33122
diff changeset
237
33126
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
238 buf = (uint32_t *)in->Image;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
239
33126
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
240 for (i = 0; i < out->Width * out->Height; i++) {
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
241 tmp >>= 1;
33119
8835e684a41d Move common pixel shifting statement
ib
parents: 33118
diff changeset
242
33534
22c3241467b3 Remove function Normalize().
ib
parents: 33141
diff changeset
243 if (!IS_TRANSPARENT(buf[i]))
33126
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
244 tmp |= 0x80;
33128
64d19aaf624a Revert r33214.
ib
parents: 33127
diff changeset
245 else {
64d19aaf624a Revert r33214.
ib
parents: 33127
diff changeset
246 buf[i] = 0;
33126
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
247 shaped = 1;
33128
64d19aaf624a Revert r33214.
ib
parents: 33127
diff changeset
248 }
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
249
33126
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
250 if (++b == 8) {
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
251 out->Image[c++] = tmp;
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
252 tmp = b = 0;
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
253 }
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
254 }
33112
654dfdf176ac Revise debug messages.
ib
parents: 33053
diff changeset
255
33126
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
256 if (b)
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
257 out->Image[c] = tmp;
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
258
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
259 if (!shaped)
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
260 bpFree(out);
33114
5ad451a5ebec Remove useless warning message.
ib
parents: 33113
diff changeset
261
33133
41485430b18a Move debug message.
ib
parents: 33132
diff changeset
262 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[bitmap] 1 bpp conversion size: %lu\n", out->ImageSize);
41485430b18a Move debug message.
ib
parents: 33132
diff changeset
263
33114
5ad451a5ebec Remove useless warning message.
ib
parents: 33113
diff changeset
264 return 1;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
265 }