comparison xiph.c @ 6657:2574def95b50 libavcodec

Simplify ff_split_xiph_headers
author reimar
date Sun, 20 Apr 2008 23:54:40 +0000
parents b1049dd41dd4
children 2acf0ae7b041
comparison
equal deleted inserted replaced
6656:b1049dd41dd4 6657:2574def95b50
22 22
23 int ff_split_xiph_headers(uint8_t *extradata, int extradata_size, 23 int ff_split_xiph_headers(uint8_t *extradata, int extradata_size,
24 int first_header_size, uint8_t *header_start[3], 24 int first_header_size, uint8_t *header_start[3],
25 int header_len[3]) 25 int header_len[3])
26 { 26 {
27 int i, j; 27 int i;
28 28
29 if (extradata_size >= 6 && AV_RB16(extradata) == first_header_size) { 29 if (extradata_size >= 6 && AV_RB16(extradata) == first_header_size) {
30 int overall_len = 6; 30 int overall_len = 6;
31 for (i=0; i<3; i++) { 31 for (i=0; i<3; i++) {
32 header_len[i] = AV_RB16(extradata); 32 header_len[i] = AV_RB16(extradata);
37 return -1; 37 return -1;
38 overall_len += header_len[i]; 38 overall_len += header_len[i];
39 } 39 }
40 } else if (extradata_size >= 3 && extradata_size < INT_MAX - 0x1ff && extradata[0] == 2) { 40 } else if (extradata_size >= 3 && extradata_size < INT_MAX - 0x1ff && extradata[0] == 2) {
41 int overall_len = 3; 41 int overall_len = 3;
42 for (i=0,j=1; i<2; i++,j++) { 42 extradata++;
43 for (i=0; i<2; i++, extradata++) {
43 header_len[i] = 0; 44 header_len[i] = 0;
44 for (; overall_len < extradata_size && extradata[j]==0xff; j++) { 45 for (; overall_len < extradata_size && *extradata==0xff; extradata++) {
45 header_len[i] += 0xff; 46 header_len[i] += 0xff;
46 overall_len += 0xff + 1; 47 overall_len += 0xff + 1;
47 } 48 }
48 overall_len += extradata[j]; 49 header_len[i] += *extradata;
50 overall_len += *extradata;
49 if (overall_len > extradata_size) 51 if (overall_len > extradata_size)
50 return -1; 52 return -1;
51
52 header_len[i] += extradata[j];
53 } 53 }
54 header_len[2] = extradata_size - header_len[0] - header_len[1] - j; 54 header_len[2] = extradata_size - overall_len;
55 extradata += j;
56 header_start[0] = extradata; 55 header_start[0] = extradata;
57 header_start[1] = header_start[0] + header_len[0]; 56 header_start[1] = header_start[0] + header_len[0];
58 header_start[2] = header_start[1] + header_len[1]; 57 header_start[2] = header_start[1] + header_len[1];
59 } else { 58 } else {
60 return -1; 59 return -1;