comparison tmv.c @ 12184:9dda7c2700ad libavcodec

8088flex TMV video decoder now uses ff_draw_pc_font()
author pross
date Sun, 18 Jul 2010 07:46:29 +0000
parents 7dd2a45249a9
children
comparison
equal deleted inserted replaced
12183:4fccdee316ea 12184:9dda7c2700ad
37 static int tmv_decode_frame(AVCodecContext *avctx, void *data, 37 static int tmv_decode_frame(AVCodecContext *avctx, void *data,
38 int *data_size, AVPacket *avpkt) 38 int *data_size, AVPacket *avpkt)
39 { 39 {
40 TMVContext *tmv = avctx->priv_data; 40 TMVContext *tmv = avctx->priv_data;
41 const uint8_t *src = avpkt->data; 41 const uint8_t *src = avpkt->data;
42 uint8_t *dst, *dst_char; 42 uint8_t *dst;
43 unsigned char_cols = avctx->width >> 3; 43 unsigned char_cols = avctx->width >> 3;
44 unsigned char_rows = avctx->height >> 3; 44 unsigned char_rows = avctx->height >> 3;
45 unsigned x, y, mask, char_y, fg, bg, c; 45 unsigned x, y, fg, bg, c;
46 46
47 if (tmv->pic.data[0]) 47 if (tmv->pic.data[0])
48 avctx->release_buffer(avctx, &tmv->pic); 48 avctx->release_buffer(avctx, &tmv->pic);
49 49
50 if (avctx->get_buffer(avctx, &tmv->pic) < 0) { 50 if (avctx->get_buffer(avctx, &tmv->pic) < 0) {
66 tmv->pic.palette_has_changed = 1; 66 tmv->pic.palette_has_changed = 1;
67 memcpy(tmv->pic.data[1], ff_cga_palette, 16 * 4); 67 memcpy(tmv->pic.data[1], ff_cga_palette, 16 * 4);
68 68
69 for (y = 0; y < char_rows; y++) { 69 for (y = 0; y < char_rows; y++) {
70 for (x = 0; x < char_cols; x++) { 70 for (x = 0; x < char_cols; x++) {
71 c = *src++ * 8; 71 c = *src++;
72 bg = *src >> 4; 72 bg = *src >> 4;
73 fg = *src++ & 0xF; 73 fg = *src++ & 0xF;
74 74 ff_draw_pc_font(dst + x * 8, tmv->pic.linesize[0],
75 dst_char = dst + x * 8; 75 ff_cga_font, 8, c, fg, bg);
76 for (char_y = 0; char_y < 8; char_y++) {
77 for (mask = 0x80; mask; mask >>= 1) {
78 *dst_char++ = ff_cga_font[c + char_y] & mask ? fg : bg;
79 }
80 dst_char += tmv->pic.linesize[0] - 8;
81 }
82 } 76 }
83 dst += tmv->pic.linesize[0] * 8; 77 dst += tmv->pic.linesize[0] * 8;
84 } 78 }
85 79
86 *data_size = sizeof(AVFrame); 80 *data_size = sizeof(AVFrame);