/*
* Copyright ( C ) 2007 The FFmpeg Project
*
* This file is part of FFmpeg .
*
* FFmpeg is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ; either
* version 2 . 1 of the License , or ( at your option ) any later version .
*
* FFmpeg is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
*/
#include <limits.h>
#include "libavutil/error.h"
#include "libavutil/intreadwrite.h"
#include "xiph.h"
int avpriv_split_xiph_headers(const uint8_t *extradata, int extradata_size,
int first_header_size, const uint8_t *header_start[3 ],
int header_len[3 ])
{
int i;
if (extradata_size >= 6 && AV_RB16(extradata) == first_header_size) {
int overall_len = 6 ;
for (i=0 ; i<3 ; i++) {
header_len[i] = AV_RB16(extradata);
extradata += 2 ;
header_start[i] = extradata;
extradata += header_len[i];
if (overall_len > extradata_size - header_len[i])
return AVERROR_INVALIDDATA;
overall_len += header_len[i];
}
} else if (extradata_size >= 3 && extradata_size < INT_MAX - 0 x1ff && extradata[0 ] == 2 ) {
int overall_len = 3 ;
extradata++;
for (i=0 ; i<2 ; i++, extradata++) {
header_len[i] = 0 ;
for (; overall_len < extradata_size && *extradata==0 xff; extradata++) {
header_len[i] += 0 xff;
overall_len += 0 xff + 1 ;
}
header_len[i] += *extradata;
overall_len += *extradata;
if (overall_len > extradata_size)
return AVERROR_INVALIDDATA;
}
header_len[2 ] = extradata_size - overall_len;
header_start[0 ] = extradata;
header_start[1 ] = header_start[0 ] + header_len[0 ];
header_start[2 ] = header_start[1 ] + header_len[1 ];
} else {
return -1 ;
}
return 0 ;
}
Messung V0.5 in Prozent C=89 H=98 G=93
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-09-29)
¤
*© Formatika GbR, Deutschland