OLD | NEW |
(Empty) | |
| 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 #include <stdlib.h> |
| 12 |
| 13 #include "vp9/common/vp9_textblit.h" |
| 14 |
| 15 void vp9_blit_text(const char *msg, unsigned char *address, const int pitch) { |
| 16 int letter_bitmap; |
| 17 unsigned char *output_pos = address; |
| 18 int colpos; |
| 19 const int font[] = { |
| 20 0x0, 0x5C00, 0x8020, 0xAFABEA, 0xD7EC0, 0x1111111, 0x1855740, 0x18000, |
| 21 0x45C0, 0x74400, 0x51140, 0x23880, 0xC4000, 0x21080, 0x80000, 0x111110, |
| 22 0xE9D72E, 0x87E40, 0x12AD732, 0xAAD62A, 0x4F94C4, 0x4D6B7, 0x456AA, |
| 23 0x3E8423, 0xAAD6AA, 0xAAD6A2, 0x2800, 0x2A00, 0x8A880, 0x52940, 0x22A20, |
| 24 0x15422, 0x6AD62E, 0x1E4A53E, 0xAAD6BF, 0x8C62E, 0xE8C63F, 0x118D6BF, |
| 25 0x1094BF, 0xCAC62E, 0x1F2109F, 0x118FE31, 0xF8C628, 0x8A89F, 0x108421F, |
| 26 0x1F1105F, 0x1F4105F, 0xE8C62E, 0x2294BF, 0x164C62E, 0x12694BF, 0x8AD6A2, |
| 27 0x10FC21, 0x1F8421F, 0x744107, 0xF8220F, 0x1151151, 0x117041, 0x119D731, |
| 28 0x47E0, 0x1041041, 0xFC400, 0x10440, 0x1084210, 0x820 |
| 29 }; |
| 30 colpos = 0; |
| 31 |
| 32 while (msg[colpos] != 0) { |
| 33 char letter = msg[colpos]; |
| 34 int fontcol, fontrow; |
| 35 |
| 36 if (letter <= 'Z' && letter >= ' ') |
| 37 letter_bitmap = font[letter - ' ']; |
| 38 else if (letter <= 'z' && letter >= 'a') |
| 39 letter_bitmap = font[letter - 'a' + 'A' - ' ']; |
| 40 else |
| 41 letter_bitmap = font[0]; |
| 42 |
| 43 for (fontcol = 6; fontcol >= 0; fontcol--) |
| 44 for (fontrow = 0; fontrow < 5; fontrow++) |
| 45 output_pos[fontrow * pitch + fontcol] = |
| 46 ((letter_bitmap >> (fontcol * 5)) & (1 << fontrow) ? 255 : 0); |
| 47 |
| 48 output_pos += 7; |
| 49 colpos++; |
| 50 } |
| 51 } |
| 52 |
| 53 static void plot(const int x, const int y, unsigned char *image, const int pitch
) { |
| 54 image [x + y * pitch] ^= 255; |
| 55 } |
| 56 |
| 57 /* Bresenham line algorithm */ |
| 58 void vp9_blit_line(int x0, int x1, int y0, int y1, unsigned char *image, const i
nt pitch) { |
| 59 int steep = abs(y1 - y0) > abs(x1 - x0); |
| 60 int deltax, deltay; |
| 61 int error, ystep, y, x; |
| 62 |
| 63 if (steep) { |
| 64 int t; |
| 65 t = x0; |
| 66 x0 = y0; |
| 67 y0 = t; |
| 68 |
| 69 t = x1; |
| 70 x1 = y1; |
| 71 y1 = t; |
| 72 } |
| 73 |
| 74 if (x0 > x1) { |
| 75 int t; |
| 76 t = x0; |
| 77 x0 = x1; |
| 78 x1 = t; |
| 79 |
| 80 t = y0; |
| 81 y0 = y1; |
| 82 y1 = t; |
| 83 } |
| 84 |
| 85 deltax = x1 - x0; |
| 86 deltay = abs(y1 - y0); |
| 87 error = deltax / 2; |
| 88 |
| 89 y = y0; |
| 90 |
| 91 if (y0 < y1) |
| 92 ystep = 1; |
| 93 else |
| 94 ystep = -1; |
| 95 |
| 96 if (steep) { |
| 97 for (x = x0; x <= x1; x++) { |
| 98 plot(y, x, image, pitch); |
| 99 |
| 100 error = error - deltay; |
| 101 if (error < 0) { |
| 102 y = y + ystep; |
| 103 error = error + deltax; |
| 104 } |
| 105 } |
| 106 } else { |
| 107 for (x = x0; x <= x1; x++) { |
| 108 plot(x, y, image, pitch); |
| 109 |
| 110 error = error - deltay; |
| 111 if (error < 0) { |
| 112 y = y + ystep; |
| 113 error = error + deltax; |
| 114 } |
| 115 } |
| 116 } |
| 117 } |
OLD | NEW |