Mercurial > libavcodec.hg
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 } |