Magellan Linux

Annotation of /trunk/xine-lib/patches/xine-lib-1.1.1-matroskademux.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 153 - (hide annotations) (download)
Tue May 8 20:52:56 2007 UTC (17 years, 1 month 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