Annotation of /trunk/xine-lib/patches/xine-lib-1.1.1-matroskademux.patch
Parent Directory | Revision Log
Revision 153 -
(hide annotations)
(download)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File size: 1977 byte(s)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File size: 1977 byte(s)
-import
1 | niro | 153 | Index: xine-lib-1.1.1/src/demuxers/demux_matroska.c |
2 | =================================================================== | ||
3 | --- xine-lib-1.1.1.orig/src/demuxers/demux_matroska.c | ||
4 | +++ xine-lib-1.1.1/src/demuxers/demux_matroska.c | ||
5 | @@ -1750,12 +1750,13 @@ static int parse_block (demux_matroska_t | ||
6 | /* size of each frame */ | ||
7 | for (i = 0; i < lace_num; i++) { | ||
8 | int size = 0; | ||
9 | - while (*data == 255) { | ||
10 | - size += *data; | ||
11 | + int partial_size; | ||
12 | + do | ||
13 | + { | ||
14 | + partial_size = *data; | ||
15 | + size += partial_size; | ||
16 | data++; block_size_left--; | ||
17 | - } | ||
18 | - size += *data; | ||
19 | - data++; block_size_left--; | ||
20 | + } while (partial_size == 255); | ||
21 | frame[i] = size; | ||
22 | block_size_left -= size; | ||
23 | } | ||
24 | @@ -1765,14 +1766,19 @@ static int parse_block (demux_matroska_t | ||
25 | } | ||
26 | break; | ||
27 | |||
28 | - case MATROSKA_FIXED_SIZE_LACING: | ||
29 | + case MATROSKA_FIXED_SIZE_LACING: { | ||
30 | + int frame_size; | ||
31 | + | ||
32 | lprintf("fixed size lacing\n"); | ||
33 | + | ||
34 | + frame_size = block_size_left / (lace_num + 1); | ||
35 | for (i = 0; i < lace_num; i++) { | ||
36 | - frame[i] = block_size / (lace_num + 1); | ||
37 | - block_size_left -= frame[i]; | ||
38 | + frame[i] = frame_size; | ||
39 | } | ||
40 | - frame[lace_num] = block_size_left; | ||
41 | - break; | ||
42 | + frame[lace_num] = block_size_left - (lace_num * frame_size); | ||
43 | + block_size_left = 0; | ||
44 | + } | ||
45 | + break; | ||
46 | |||
47 | case MATROSKA_EBML_LACING: { | ||
48 | int64_t tmp; | ||
49 | Index: xine-lib-1.1.1/src/xine-engine/demux.c | ||
50 | =================================================================== | ||
51 | --- xine-lib-1.1.1.orig/src/xine-engine/demux.c | ||
52 | +++ xine-lib-1.1.1/src/xine-engine/demux.c | ||
53 | @@ -525,7 +525,8 @@ void _x_demux_send_data(fifo_buffer_t *f | ||
54 | |||
55 | decoder_flags |= BUF_FLAG_FRAME_START; | ||
56 | |||
57 | - while (fifo && size) { | ||
58 | + _x_assert(size > 0); | ||
59 | + while (fifo && size > 0) { | ||
60 | |||
61 | buf = fifo->buffer_pool_alloc (fifo); | ||
62 |