00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "xiph.h"
00022
00023 int ff_split_xiph_headers(uint8_t *extradata, int extradata_size,
00024 int first_header_size, uint8_t *header_start[3],
00025 int header_len[3])
00026 {
00027 int i, j;
00028
00029 if (AV_RB16(extradata) == first_header_size) {
00030 for (i=0; i<3; i++) {
00031 header_len[i] = AV_RB16(extradata);
00032 extradata += 2;
00033 header_start[i] = extradata;
00034 extradata += header_len[i];
00035 }
00036 } else if (extradata[0] == 2) {
00037 for (i=0,j=1; i<2; i++,j++) {
00038 header_len[i] = 0;
00039 for (; j<extradata_size && extradata[j]==0xff; j++) {
00040 header_len[i] += 0xff;
00041 }
00042 if (j >= extradata_size)
00043 return -1;
00044
00045 header_len[i] += extradata[j];
00046 }
00047 header_len[2] = extradata_size - header_len[0] - header_len[1] - j;
00048 extradata += j;
00049 header_start[0] = extradata;
00050 header_start[1] = header_start[0] + header_len[0];
00051 header_start[2] = header_start[1] + header_len[1];
00052 } else {
00053 return -1;
00054 }
00055 return 0;
00056 }