annotate gui/util/bitmap.c @ 33191:32238139a2ff

Hacks to allow compilation to go further.
author reimar
date Fri, 22 Apr 2011 06:19:14 +0000
parents fd90a10d81a1
children 22c3241467b3
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)
33132
6ac1b560e209 Revise Convert24to32().
ib
parents: 33131
diff changeset
159 *(uint32_t *)&bf->Image[c] = 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 void Normalize(txSample *bf)
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
168 {
33131
aa753565a901 Revise Normalize().
ib
parents: 33130
diff changeset
169 unsigned long i;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
170
33131
aa753565a901 Revise Normalize().
ib
parents: 33130
diff changeset
171 for (i = 0; i < bf->ImageSize; i += 4)
aa753565a901 Revise Normalize().
ib
parents: 33130
diff changeset
172 #if HAVE_BIGENDIAN
aa753565a901 Revise Normalize().
ib
parents: 33130
diff changeset
173 bf->Image[i] = 0;
aa753565a901 Revise Normalize().
ib
parents: 33130
diff changeset
174 #else
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
175 bf->Image[i + 3] = 0;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
176 #endif
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
177 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
178
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
179 static unsigned char *fExist(unsigned char *fname)
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
180 {
33141
fd90a10d81a1 Define ext array more skillfully.
ib
parents: 33139
diff changeset
181 static const char ext[][4] = { "png", "PNG" };
33130
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
182 static unsigned char buf[512];
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
183 unsigned int i;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
184
33130
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
185 if (access(fname, R_OK) == 0)
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
186 return fname;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
187
33130
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
188 for (i = 0; i < FF_ARRAY_ELEMS(ext); i++) {
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
189 snprintf(buf, sizeof(buf), "%s.%s", fname, ext[i]);
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
190
33130
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
191 if (access(buf, R_OK) == 0)
4f60cd16ac04 Clean up and simplify fExist().
ib
parents: 33129
diff changeset
192 return buf;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
193 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
194
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
195 return NULL;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
196 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
197
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
198 int bpRead(char *fname, txSample *bf)
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
199 {
33137
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
200 int r;
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
201
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
202 fname = fExist(fname);
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
203
33122
1d81476c0d1e Cosmetic: Rephrase some conditions and rename some variables.
ib
parents: 33121
diff changeset
204 if (!fname)
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
205 return -2;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
206
33137
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
207 r = pngRead(fname, bf);
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
208
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
209 if (r != 0) {
f884fb919ac5 Remove various pngRead() debug messages.
ib
parents: 33136
diff changeset
210 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
211 return -5;
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
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
214 if (bf->BPP < 24) {
33112
654dfdf176ac Revise debug messages.
ib
parents: 33053
diff changeset
215 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
216 return -1;
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
33121
7623be6c1f0e Rename conv24to32() Convert24to32().
ib
parents: 33120
diff changeset
219 if (!Convert24to32(bf))
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
220 return -8;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
221
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
222 Normalize(bf);
33053
f64d41dac10b Cosmetic: Separate return statement with newline.
ib
parents: 33046
diff changeset
223
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
224 return 0;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
225 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
226
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
227 void bpFree(txSample *bf)
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
228 {
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
229 free(bf->Image);
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
230 memset(bf, 0, sizeof(*bf));
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
231 }
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
232
33129
5f3171d4d7a4 Define the transparent color as a macro.
ib
parents: 33128
diff changeset
233 int Convert32to1(txSample *in, txSample *out)
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
234 {
33118
ae464a957cd0 Move variable definitions at top of function.
ib
parents: 33117
diff changeset
235 uint32_t *buf;
ae464a957cd0 Move variable definitions at top of function.
ib
parents: 33117
diff changeset
236 unsigned long i;
ae464a957cd0 Move variable definitions at top of function.
ib
parents: 33117
diff changeset
237 int b = 0, c = 0;
ae464a957cd0 Move variable definitions at top of function.
ib
parents: 33117
diff changeset
238 unsigned char tmp = 0;
ae464a957cd0 Move variable definitions at top of function.
ib
parents: 33117
diff changeset
239 int shaped = 0;
ae464a957cd0 Move variable definitions at top of function.
ib
parents: 33117
diff changeset
240
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
241 out->Width = in->Width;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
242 out->Height = in->Height;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
243 out->BPP = 1;
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
244 out->ImageSize = (out->Width * out->Height + 7) / 8;
33118
ae464a957cd0 Move variable definitions at top of function.
ib
parents: 33117
diff changeset
245 out->Image = calloc(1, out->ImageSize);
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
246
33122
1d81476c0d1e Cosmetic: Rephrase some conditions and rename some variables.
ib
parents: 33121
diff changeset
247 if (!out->Image) {
33114
5ad451a5ebec Remove useless warning message.
ib
parents: 33113
diff changeset
248 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[bitmap] not enough memory: %lu\n", out->ImageSize);
5ad451a5ebec Remove useless warning message.
ib
parents: 33113
diff changeset
249 return 0;
33125
9c178cf14a61 Get rid of else-block to improve readability.
ib
parents: 33122
diff changeset
250 }
9c178cf14a61 Get rid of else-block to improve readability.
ib
parents: 33122
diff changeset
251
33126
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
252 buf = (uint32_t *)in->Image;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
253
33126
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
254 for (i = 0; i < out->Width * out->Height; i++) {
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
255 tmp >>= 1;
33119
8835e684a41d Move common pixel shifting statement
ib
parents: 33118
diff changeset
256
33129
5f3171d4d7a4 Define the transparent color as a macro.
ib
parents: 33128
diff changeset
257 if (buf[i] != TRANSPARENT)
33126
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
258 tmp |= 0x80;
33128
64d19aaf624a Revert r33214.
ib
parents: 33127
diff changeset
259 else {
64d19aaf624a Revert r33214.
ib
parents: 33127
diff changeset
260 buf[i] = 0;
33126
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
261 shaped = 1;
33128
64d19aaf624a Revert r33214.
ib
parents: 33127
diff changeset
262 }
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
263
33126
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
264 if (++b == 8) {
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
265 out->Image[c++] = tmp;
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
266 tmp = b = 0;
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
267 }
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
268 }
33112
654dfdf176ac Revise debug messages.
ib
parents: 33053
diff changeset
269
33126
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
270 if (b)
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
271 out->Image[c] = tmp;
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
272
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
273 if (!shaped)
a5dc70e2cda3 Cosmetic: Adjust indent.
ib
parents: 33125
diff changeset
274 bpFree(out);
33114
5ad451a5ebec Remove useless warning message.
ib
parents: 33113
diff changeset
275
33133
41485430b18a Move debug message.
ib
parents: 33132
diff changeset
276 mp_dbg(MSGT_GPLAYER, MSGL_DBG2, "[bitmap] 1 bpp conversion size: %lu\n", out->ImageSize);
41485430b18a Move debug message.
ib
parents: 33132
diff changeset
277
33114
5ad451a5ebec Remove useless warning message.
ib
parents: 33113
diff changeset
278 return 1;
33046
9684ad0e1291 Move files with auxiliary functions to own directory.
ib
parents:
diff changeset
279 }