comparison xsubdec.c @ 5490:12d77ed34985 libavcodec

Deinterlace xsub subtitles
author reimar
date Sun, 05 Aug 2007 12:11:26 +0000
parents dc54869af30b
children d847cbc8756b
comparison
equal deleted inserted replaced
5489:dc54869af30b 5490:12d77ed34985
81 // process RLE-compressed data 81 // process RLE-compressed data
82 rlelen = FFMIN(rlelen, buf_end - buf); 82 rlelen = FFMIN(rlelen, buf_end - buf);
83 init_get_bits(&gb, buf, rlelen * 8); 83 init_get_bits(&gb, buf, rlelen * 8);
84 bitmap = sub->rects[0].bitmap; 84 bitmap = sub->rects[0].bitmap;
85 for (y = 0; y < h; y++) { 85 for (y = 0; y < h; y++) {
86 // interlaced: do odd lines
87 if (y == h / 2) bitmap = sub->rects[0].bitmap + w;
86 for (x = 0; x < w; ) { 88 for (x = 0; x < w; ) {
87 int log2 = ff_log2_tab[show_bits(&gb, 8)]; 89 int log2 = ff_log2_tab[show_bits(&gb, 8)];
88 int run = get_bits(&gb, 14 - 4 * (log2 >> 1)); 90 int run = get_bits(&gb, 14 - 4 * (log2 >> 1));
89 int colour = get_bits(&gb, 2); 91 int colour = get_bits(&gb, 2);
90 run = FFMIN(run, w - x); 92 run = FFMIN(run, w - x);
92 if (!run) run = w - x; 94 if (!run) run = w - x;
93 memset(bitmap, colour, run); 95 memset(bitmap, colour, run);
94 bitmap += run; 96 bitmap += run;
95 x += run; 97 x += run;
96 } 98 }
99 // interlaced, skip every second line
100 bitmap += w;
97 align_get_bits(&gb); 101 align_get_bits(&gb);
98 } 102 }
99 *data_size = 1; 103 *data_size = 1;
100 return buf_size; 104 return buf_size;
101 } 105 }