]> granicus.if.org Git - libvpx/blob - vp8/common/textblit.c
safety check to avoid divide by 0s
[libvpx] / vp8 / common / textblit.c
1 /*
2  *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10
11
12
13
14 void vp8_blit_text(const char *msg, unsigned char *address, const int pitch)
15 {
16     int letter_bitmap;
17     unsigned char *output_pos = address;
18     int colpos;
19     const int font[] =
20     {
21         0x0, 0x5C00, 0x8020, 0xAFABEA, 0xD7EC0, 0x1111111, 0x1855740, 0x18000,
22         0x45C0, 0x74400, 0x51140, 0x23880, 0xC4000, 0x21080, 0x80000, 0x111110,
23         0xE9D72E, 0x87E40, 0x12AD732, 0xAAD62A, 0x4F94C4, 0x4D6B7, 0x456AA,
24         0x3E8423, 0xAAD6AA, 0xAAD6A2, 0x2800, 0x2A00, 0x8A880, 0x52940, 0x22A20,
25         0x15422, 0x6AD62E, 0x1E4A53E, 0xAAD6BF, 0x8C62E, 0xE8C63F, 0x118D6BF,
26         0x1094BF, 0xCAC62E, 0x1F2109F, 0x118FE31, 0xF8C628, 0x8A89F, 0x108421F,
27         0x1F1105F, 0x1F4105F, 0xE8C62E, 0x2294BF, 0x164C62E, 0x12694BF, 0x8AD6A2,
28         0x10FC21, 0x1F8421F, 0x744107, 0xF8220F, 0x1151151, 0x117041, 0x119D731,
29         0x47E0, 0x1041041, 0xFC400, 0x10440, 0x1084210, 0x820
30     };
31     colpos = 0;
32
33     while (msg[colpos] != 0)
34     {
35         char letter = msg[colpos];
36         int fontcol, fontrow;
37
38         if (letter <= 'Z' && letter >= ' ')
39             letter_bitmap = font[letter-' '];
40         else if (letter <= 'z' && letter >= 'a')
41             letter_bitmap = font[letter-'a'+'A' - ' '];
42         else
43             letter_bitmap = font[0];
44
45         for (fontcol = 6; fontcol >= 0 ; fontcol--)
46             for (fontrow = 0; fontrow < 5; fontrow++)
47                 output_pos[fontrow *pitch + fontcol] =
48                     ((letter_bitmap >> (fontcol * 5)) & (1 << fontrow) ? 255 : 0);
49
50         output_pos += 7;
51         colpos++;
52     }
53 }